如何在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(),或使用链类方法。

如何在Microsoft Bot框架中制作分支对话框

一种选择是使用提供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();

此示例等待来自用户的消息,根据消息(Option1DialogDefaultDialog,都是IDialog<string>类型)启动对话框,转换对话框结果并将其发送回用户。

请参考文档的这一部分了解更多细节(虽然,不幸的是,它没有很多例子)。