【问题标题】:How to make branching dialogs in Microsoft Bot Framework如何在 Microsoft Bot Framework 中制作分支对话框
【发布时间】:2016-08-31 08:21:25
【问题描述】:

我正在使用 MS 机器人框架,并且我正在尝试构建一个机器人来处理可以分支的对话框,而不仅仅是一个平面场景。

例如,在第一条消息中,机器人问用户一个问题,并根据答案启动三个子对话框中的一个,而这三个子对话框又可以根据用户输入启动自己的子对话框。

所以我正在寻找这样的东西:

if (userAnswer == "option 1") {
    LaunchSupportDialog();
}
else {
    LaunchNewOrderDialog();
}

Microsoft 提供的示例要么是平面的(例如,一个机器人可以处理三明治订单,没有分支,连续执行每个步骤),要么是由 LUIS 根据用户意图自动完成的分支。

我正在寻找一些不太聪明的东西,所以看起来我只是缺少某种能够做到这一点的方法或类。

文档状态:

可以通过以下方式显式管理活动对话框堆栈 IDialogStack.Call 和 IDialogStack.Done,显式组合 对话成更大的对话。也可以隐式 通过流利的 Chain 方法管理活动对话框的堆栈。

但我没有找到任何关于如何创建新的 IDialogStack 对象、如何显式调用 .Call() 或 .Done() 或为此使用 Chain 类方法的示例。

【问题讨论】:

    标签: c# botframework


    【解决方案1】:

    一种选择是使用提供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&lt;string&gt;)启动对话,转换对话结果并将其发送回用户。

    有关更多详细信息,请参阅文档的this 部分(尽管很遗憾,它没有太多示例)。

    【讨论】:

      猜你喜欢
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 2017-07-27
      • 1970-01-01
      • 2020-02-25
      • 2016-11-08
      • 2018-02-26
      相关资源
      最近更新 更多