skip to Main Content

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 giving cancel/escape/exit optioin in the list. Is there anything in PromptDialog.Choice which can be overridden since i have not found any cancel option.

here is my code in 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);

Example:

Bot: We have the following software items matching Photoshop. (1), (2), (3). Which one do you want

  • Version 1
  • Version 2
  • Version 3

What I want if user enter none of above or a command or number, cancel, exit, that bypasses the options above, without triggering the retry error message.

How do we do that?

3

Answers


  1. Chosen as BEST ANSWER

    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!.


  2. 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

    Login or Signup to reply.
  3. 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.
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search