如何在Bot Framework中取消/退出或退出PromptDialog.Choice?

时间:2017-03-09 18:14:15

标签: c# botframework

Bot Framework中的PromptDialog.Choice显示运行良好的选项列表。但是,我希望有一个选项来取消/退出/退出对话框,并在列表中给出cancel / escape / exit optioin。 PromptDialog.Choice中有什么可以覆盖,因为我没有找到任何取消选项。

这是我在c#中的代码..

PromptDialog.Choice(
                 context: context,
                 resume: ChoiceSelectAsync,
                 options: getSoftwareList(softwareItem),
                 prompt: "We have the following software items matching " + softwareItem + ". (1), (2), (3). Which one do you want?:",
                 retry: "I didn't understand. Please try again.",
                 promptStyle: PromptStyle.PerLine);

示例:

Bot:我们有以下与Photoshop相匹配的软件。 (1),(2),(3)。你想要哪一个

  • 第1版
  • 第2版
  • 第3版

如果用户不输入上述内容或命令或编号,取消,退出,绕过上述选项,而不触发重试错误消息,我想要的是什么。

我们如何做到这一点?

3 个答案:

答案 0 :(得分:3)

有两种方法可以实现这一目标:

  1. 根据建议添加取消选项。虽然这肯定有用,但从长远来看,你会发现自己重复了很多,而且你会在选择列表中看到取消选项,这可能是不可取的。
  2. 更好的方法是扩展当前的PromptChoice以添加退出/取消逻辑。好消息是,已经实施的内容可以按原样使用,也可以作为实现需求的基础。查看CancelablePromptChoice存储库中包含的BotBuilder-SamplesHere是如何使用它。

答案 1 :(得分:2)

只需添加选项"取消"在列表上,并在获取用户输入的方法上使用switch-case,然后调用main manu,或者在取消时执行任何操作

答案 2 :(得分:0)

当前提示选择不能以这种方式工作,以允许用户按编号选择。我已经覆盖了CancleablePromptChoice中的ScoreMatch函数,如下所示

public override Tuple<bool, int> ScoreMatch(T option, string input)
        {
            var trimmed = input.Trim();
            var text = option.ToString();

            // custom logic to allow users to select by number
            int isInt;
            if(int.TryParse(input,out isInt) && isInt <= promptOptions.Options.Count())
            {
                text = promptOptions.Options.ElementAt(isInt - 1).ToString();
                trimmed = option.ToString().Equals(text) ? text :trimmed;
            }           

            bool occurs = text.IndexOf(trimmed, StringComparison.CurrentCultureIgnoreCase) >= 0;
            bool equals = text == trimmed; 
            return occurs ? Tuple.Create(equals, trimmed.Length) : null;
        }

@Ezequiel再次感谢你!