Отмена или выход из PromptDialog. Выбор потока в Microsoft Bot Framework - PullRequest
0 голосов
/ 30 мая 2018

У меня есть подсказка с 4 опциями, последняя опция - пользователь может выйти из подсказки, я хочу реализовать некоторый код, чтобы бот покинул подсказку

Изображение

   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);

на изображении выше, я реализовал опцию quit, на которой, если пользователь выбирает quit, он переходит в Switch case of quit.

Я также пробовал context.quit, но выдает ошибку

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;


            }
        }

1 Ответ

0 голосов
/ 30 мая 2018

Прежде всего, это не поток формы.Это быстро.Теперь вы можете сделать что-то вроде: либо вы выходите из диалога из стека, как это

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;


            }
        }

, либо вы можете что-то сказать, а затем ждать другого сообщения в том же диалоге, как это

 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;
        }
    }

И следующее сообщение будет идти сюда

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