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

Bot框架中的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

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

我们怎么做?

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

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

只需在列表中添加“取消”选项,并在获取用户输入的方法上使用开关案例,然后调用主菜单,或者取消要取消的任何操作

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

 public override Tuple 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再一次谢谢你!