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

后端 未结 3 754
眼角桃花
眼角桃花 2020-12-21 14:33

The PromptDialog.Choice in the Bot Framework display the choice list which is working well. However, I would like to have an option to cancel/escape/exit the dialog with gi

相关标签:
3条回答
  • 2020-12-21 14:37

    Current Prompt Choice does not work in that way to allows user select by number. I have override the ScoreMatch function in CancleablePromptChoice as below

    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 Once again thank you!.

    0 讨论(0)
  • 2020-12-21 14:43

    There are two ways of achieving this:

    1. Add cancel as an option as suggested. While this would definitely work, long term you will find repeating yourself a lot, plus that you will see the cancel option in the list of choices, what may not be desired.
    2. A better approach would be to extend the current PromptChoice to add your exit/cancelation logic. The good news is that there is something already implemented that you could use as is or as the base to achieve your needs. Take a look to the CancelablePromptChoice included in the BotBuilder-Samples repository. Here is how to use it.
    0 讨论(0)
  • 2020-12-21 14:56

    Just add the option "cancel" on the list and use a switch-case on the method that gets the user input, then call your main manu, or whatever you want to do on cancel

    0 讨论(0)
提交回复
热议问题