2017-03-09 37 views
2

Bot Framework中的PromptDialog.Choice将显示正常运行的选项列表。不过,我希望可以选择取消/退出/退出对话框,并在列表中提供取消/退出/退出选项。 PromptDialog.Choice中有什么可以重写,因为我没有找到任何取消选项。如何取消/退出或从Bot Framework中的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

有两种达到此目的的方法:

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

我已经通过了botloilder中的CancleablePromptChoice,但我认为这不适用于数字输入,当它显示我选择1的列表时,再次n再次显示列表。我尝试了重写ScoreMatch方法,但它不返回列表中的第一项。有什么缺失? – Sandy

+0

我不认为目前的Prompt Choice也是如此。如果您希望允许用户通过编号进行选择,那么您可能需要更新TryParse/ScoreMatch方法来执行自定义逻辑,或者在选项中包含该编号。我不认为CancelablePromptChoice正在使用ScoreMatch。它是在添加该方法之前创建的。您可以重写该方法并从TryParse调用它。 –

+0

是的,你是正确的当前提示选择不以这种方式工作。我已经覆盖了CancleablePromptChoice中的ScoreMatch,如下所示 – Sandy

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再次感谢你!

+0

是否对PromtDialog.String或PromtDialog.Int执行了任何实现? – Sandip

相关问题