我正在使用MS框架,并且我正在尝试构建一个能够处理可以分支的对话框的bot,而不仅仅是一个平面场景。
例如,在第一条消息中,bot询问用户一个问题,并根据答案启动三个子对话框中的一个,这三个子对话框可以根据用户输入启动自己的子对话框。
所以我在找这样的东西:
if (userAnswer == "option 1") {
LaunchSupportDialog();
}
else {
LaunchNewOrderDialog();
}Microsoft提供的示例要么是平面的(例如,可以处理三明治订单的机器人,不需要分支,然后依次执行),要么是由LUIS根据用户意图自动完成分支的例子。
我正在寻找一些不那么聪明的东西,所以看起来我只是缺少了某种方法或类,可以做到这一点。
文档声明:
通过IDialogStack.Call和IDialogStack.Done可以显式地管理活动对话框堆栈,显式地将对话框组合成更大的会话。还可以通过fluent链方法隐式地管理活动对话框堆栈。
但是,我没有找到任何示例,说明如何创建新的IDialogStack对象,如何显式调用.Call()或.Done(),或为此使用链式类方法。
发布于 2016-08-11 17:23:09
一种选择是使用为分支提供Switch结构的链。
IDialog<string> MyDialog =
Chain
.PostToChain()
.Switch(
new Case<string, IDialog<string>>(userAnswer => userAnswer == "option 1", (ctx, _) => Option1Dialog),
Chain.Default<string, IDialog<string>>((ctx, _) => DefaultDialog))
.Unwrap()
.Select(dialogResult => $"The result is: {dialogResult}")
.PostToUser();此示例等待来自用户的消息,根据消息启动对话框(Option1Dialog或DefaultDialog,均为IDialog<string>类型),转换对话框结果并将其发回给用户。
有关更多细节,请参阅文档的这部分(但不幸的是,它没有多少示例)。
https://stackoverflow.com/questions/38886404
复制相似问题