如何在 Microsoft Bot Framework 中创建分支对话框
How to make branching dialogs in Microsoft Bot Framework
我正在使用 MS 机器人框架,我正在尝试构建一个机器人来处理可以分支的对话,而不仅仅是一个平面场景。
例如,在第一条消息中,机器人向用户提问,并根据答案启动三个子对话框中的一个,而这些子对话框又可以根据用户输入启动自己的子对话框。
所以我正在寻找这样的东西:
if (userAnswer == "option 1") {
LaunchSupportDialog();
}
else {
LaunchNewOrderDialog();
}
Microsoft 提供的示例要么是平面的(例如,可以处理三明治订单的机器人,没有分支,连续执行每个步骤),要么是 LUIS 根据用户意图自动完成分支。
我正在寻找不太聪明的东西,所以看起来我只是缺少某种方法或 class 能够做到这一点。
文档状态:
Explicit management of the stack of active dialogs is possible through
IDialogStack.Call and IDialogStack.Done, explicitly composing
dialogs into a larger conversation. It is also possible to implicitly
manage the stack of active dialogs through the fluent Chain methods.
但我没有找到任何示例来说明如何创建新的 IDialogStack 对象,或者如何显式调用 .Call() 或 .Done(),或者为此使用 Chain class 方法。
一种选择是使用 Chains,它提供 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 部分以获取更多详细信息(尽管不幸的是,它没有很多示例)。
我正在使用 MS 机器人框架,我正在尝试构建一个机器人来处理可以分支的对话,而不仅仅是一个平面场景。
例如,在第一条消息中,机器人向用户提问,并根据答案启动三个子对话框中的一个,而这些子对话框又可以根据用户输入启动自己的子对话框。
所以我正在寻找这样的东西:
if (userAnswer == "option 1") {
LaunchSupportDialog();
}
else {
LaunchNewOrderDialog();
}
Microsoft 提供的示例要么是平面的(例如,可以处理三明治订单的机器人,没有分支,连续执行每个步骤),要么是 LUIS 根据用户意图自动完成分支。
我正在寻找不太聪明的东西,所以看起来我只是缺少某种方法或 class 能够做到这一点。
文档状态:
Explicit management of the stack of active dialogs is possible through IDialogStack.Call and IDialogStack.Done, explicitly composing dialogs into a larger conversation. It is also possible to implicitly manage the stack of active dialogs through the fluent Chain methods.
但我没有找到任何示例来说明如何创建新的 IDialogStack 对象,或者如何显式调用 .Call() 或 .Done(),或者为此使用 Chain class 方法。
一种选择是使用 Chains,它提供 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 部分以获取更多详细信息(尽管不幸的是,它没有很多示例)。