我正在使用MS bot框架,我正在尝试构建一个可以处理可以分支而不仅仅是平面场景的对话框的机器人。
例如,在第一条消息中,机器人向用户询问一个问题,并根据答案启动三个子对话框中的一个,这三个子对话框可以根据用户输入启动自己的子对话框。
所以我正在寻找类似的东西:
if (userAnswer == "option 1") {
LaunchSupportDialog();
}
else {
LaunchNewOrderDialog();
}
Microsoft提供的示例要么是扁平的(例如,可以处理三明治订单的机器人,没有分支,连续执行每个步骤),或者LUIS根据用户意图自动完成分支。
我正在寻找一些不那么聪明的东西,所以看起来我只是错过了能够做到这一点的某种方法或类。
文档声明:
可以通过显式管理活动对话框堆栈 IDialogStack.Call和IDialogStack.Done,明确编写 对话框进入更大的对话。也可以隐含地 通过流畅的Chain方法管理活动对话框的堆栈。
但是我没有找到任何关于如何创建新的IDialogStack对象的示例,或者如何显式调用.Call()或.Done(),或者使用Chain类方法。
答案 0 :(得分:2)
一种选择是使用提供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>
)启动对话框,转换对话框结果并发送回到用户。
有关详细信息,请参阅文档的this部分(不幸的是,它没有很多示例)。