如何在Microsoft Bot框架中制作分支对话框
本文关键字:分支 对话框 框架 Microsoft Bot | 更新日期: 2023-09-27 18:01:54
我正在使用MS bot框架,我正试图建立一个机器人,将处理可以分支的对话框,而不仅仅是一个平面场景。
例如,在第一条消息中,bot向用户询问一个问题,并根据答案启动三个子对话框中的一个,而这些子对话框又可以根据用户输入启动自己的子对话框。
所以我在找这样的东西:
if (userAnswer == "option 1") {
LaunchSupportDialog();
}
else {
LaunchNewOrderDialog();
}
微软提供的例子要么是扁平的(例如,一个机器人可以处理三明治订单,没有分支,连续执行每一步),要么分支是由路易斯根据用户意图自动完成的。
我正在寻找一些不那么聪明的东西,所以看起来我只是错过了某种方法或类,将能够做到这一点。
文档状态:
活动对话框堆栈的显式管理是可能的IDialogStack。调用和IDialogStack。完成,显式组合对话变成了一个更大的对话。也可以隐式地通过fluent Chain方法管理活动对话的堆栈。
,但我没有找到任何例子如何创建一个新的IDialogStack对象,或如何显式调用。call()或。done(),或使用链类方法。
一种选择是使用提供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>
类型)启动对话框,转换对话框结果并将其发送回用户。
请参考文档的这一部分了解更多细节(虽然,不幸的是,它没有很多例子)。