我如何在 Bot Framework 中 cancel/exit 或逃离 PromptDialog.Choice?

How do I cancel/exit or escape from PromptDialog.Choice in Bot Framework?

Bot Framework 中的 PromptDialog.Choice 显示选项列表效果很好。但是,我希望可以选择 cancel/escape/exit 对话框,并在列表中提供 cancel/escape/exit 选项。 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)。你想要哪一个

如果用户输入上面的 none 或命令或数字,取消,退出,绕过上面的选项,而不会触发重试错误消息,我想要什么。

我们该怎么做?

只需在列表中添加选项 "cancel" 并在获取用户输入的方法上使用 switch-case,然后调用您的主菜单,或任何您想在取消时执行的操作

有两种方法可以实现:

  1. 按照建议添加取消选项。虽然这肯定有效,但从长远来看,您会发现自己经常重复自己,而且您会在选择列表中看到取消选项,这可能不是您想要的。
  2. 更好的方法是扩展当前的 PromptChoice 以添加您的 exit/cancelation 逻辑。好消息是已经实现了一些东西,您可以按原样使用或作为实现您的需求的基础。看看CancelablePromptChoice included in the BotBuilder-Samples repository. Here是怎么用的

当前提示选项不能以允许用户 select 按号码的方式工作。我已经覆盖了 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 再次感谢!