Ronak Shetiya
Ronak Shetiya

Reputation: 980

Cancel Or Exit from PromptDialog.Choice Flow in Microsoft Bot Framework

i have a Prompt with 4 options, the last option is user can quit the Prompt, i want to implement some code so that the bot exit the Prompt

Image

   PromptDialog.Choice(context, this.OnOptionSelected, new List<string>() { FlightsOption, HotelsOption, TrainOption, GobackOption }, "Sure..! Tell me what booking would like to make..?", "Not a valid option", 3);

in above image i had implemented quit option on which if user selects quit it goes to Switch case of quit.

i had also tried context.quit but it throws error

private async Task OnOptionSelected(IDialogContext context, IAwaitable<string> result)
    {
        try
        {
            string optionSelected = await result;

            switch (optionSelected)
            {
                case FlightsOption:
                    context.Call(new FlightDialog(), this.ResumeAfterOptionDialog);
                    break;

                case HotelsOption:
                    context.Call(new HotelsDialog(), this.ResumeAfterOptionDialog);
                    break;
                case TrainOption:
                    context.Call(new TrainDialog(), this.ResumeAfterOptionDialog);
                    break;
                case GobackOption:
                    //want some code here to quit the form
                    break;


            }
        }

Upvotes: 0

Views: 466

Answers (1)

Harsh Raj
Harsh Raj

Reputation: 280

First of all this is not a Form Flow. This is prompt. Now You can do something like, either you exit the dialog from the stack like this

try
        {
            string optionSelected = await result;

            switch (optionSelected)
            {
                case FlightsOption:
                    context.Call(new FlightDialog(), this.ResumeAfterOptionDialog);
                    break;

                case HotelsOption:
                    context.Call(new HotelsDialog(), this.ResumeAfterOptionDialog);
                    break;
                case TrainOption:
                    context.Call(new TrainDialog(), this.ResumeAfterOptionDialog);
                    break;
                case GobackOption:
                    context.Done<object>(null);
                    break;


            }
        }

Or, You can tell something and then wait for other message in the same dialog like this

 try
    {
        string optionSelected = await result;

        switch (optionSelected)
        {
            case FlightsOption:
                context.Call(new FlightDialog(), this.ResumeAfterOptionDialog);
                break;

            case HotelsOption:
                context.Call(new HotelsDialog(), this.ResumeAfterOptionDialog);
                break;
            case TrainOption:
                context.Call(new TrainDialog(), this.ResumeAfterOptionDialog);
                break;
            case GobackOption:
            await context.PostAsync("Ok, you came back. Now tell something new.");
            context.Wait(MessageReceivedAsync);
            break;
        }
    }

And the next message will go here

public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
        {
            var message = await result;
            context.Wait(MessageReceivedAsync);
        }

Upvotes: 1

Related Questions