[BotFrameWork]: Как получить текстовое приглашение и приглашение выбора одновременно в боте C # Webchat, разработанном с использованием V4? - PullRequest
0 голосов
/ 14 мая 2019

Я создаю WebChatBot с использованием C # в SDK V4 с несколькими классами диалогов, имеющих шаги водопада. В одном из dialogClass, который я перенаправил int после успешной аутентификации на

ШАГ1: я даю пользователю набор ChoicePrompt внутри PromptOptions с PromptText, Choices и RetryPrompt. То, что я хочу сделать или добиться, - это если пользователь вводит или вводит что-либо, кроме вариантов, ему нужно взять текст и ответить соответствующим сообщением. Я не говорю о тексте запроса на повторную попытку, а о том, что пыталось объяснить в следующем примере:

1. ШАГ # 1 : пользователю выдаются подсказки PomptOptions типа Choice, например return

await stepContext.PromptAsync(
                    "SchedulechoicePrompt",
                    new PromptOptions
                    {
                        Prompt = stepContext.Context.Activity.CreateReply("Please choose any of the following options: "),
                        Choices = new[] { new Choice { Value = "one" }, new Choice { Value = "Two" }, new Choice { Value = "Three" } }.ToList(),
                        RetryPrompt = stepContext.Context.Activity.CreateReply("Sorry, I did not understand that. Please choose/click on any one of the options displayed in below list to proceed"), 
                    });

Теперь, если пользователь вводит что-то, чего нет выше, скажем, четыре

В настоящее время отображается текст запроса на повторную попытку

Чего я пытаюсь добиться, так это взять 4 и отобразить пользовательское сообщение, это недопустимый вариант ЕСЛИ я ввожу идентификатор входа, который я использовал для аутентификации до того, как я был перенаправлен в это диалоговое окно, я должен сказать специальное сообщение о том, что вы уже вошли в систему, вот ваши варианты, где снова отображаются 1,2,3 Если я ввожу другой идентификатор входа в систему, я должен отобразить собственное сообщение, это не тот идентификатор пользователя, который вы использовали для входа, должен отображаться, и снова должна отображаться опция подсказки

Теперь, если я ввожу что-либо синонимичное отображаемым параметрам, например: 1, то следует перейти к следующему ШАГУ, т.е.

ШАГ # 2 и выполнить соответствующие функции.

Если что-то еще, то текст retryprompt должен отображаться, и снова должна отображаться опция подсказки

ШАГ # 2: Желаемая операция будет выполнена, если выбранный вариант соответствует

Если вы видите, что текстовое приглашение и приглашение выбора (отображаемые с опциями приглашения) кажутся одновременно или оба должны работать параллельно?

Теперь, может кто-нибудь рассказать в подробном пошаговом руководстве или как это сделать, если это можно сделать в V4, используя водопад в C #?

Или Не может быть достигнуто это неверное ожидание?

Язык: C # SDK: V4 Все пакеты Nuget и эмулятор ботов являются последними

Пожалуйста, дайте мне знать шаг за шагом или настолько подробно, насколько это возможно, поскольку я новичок в кодировании, а также в ботах, мне нужно, чтобы он был детализирован для понимания.

Не получил ничего, как добиться этого в V4 C #?

н / д, как я не знаю, как это сделать.

Ожидаемый результат : ChoiceOptions, отображаемые как часть PromptOptions, должны работать вместе с предоставленным вводом текста и основываться на вводе текста предоставил пользовательское сообщение dsiplay и снова отобразил параметры, если оно неверный ввод или если это синоним или заданная опция выбран в шаге № 1, то в шаге № 2 соответствующий процесс будет казнены.

Фактический результат: н / д

1 Ответ

1 голос
/ 14 мая 2019

Я попробовал что-то подобное. Вы можете использовать родительский диалог и позволить вашему текущему диалогу наследовать его. Проверьте наличие прерываний на уровне поворота, обработайте пользовательский ввод и продолжите с того места, где диалоговое окно остановлено.

Внутри родительского диалога реализуйте метод InterruptAsync и обрабатывайте пользовательский ввод.

 private async Task<DialogTurnResult> InterruptAsync(DialogContext innerDc,CancellationToken cancellationToken)
 {
 if (innerDc.Context.Activity.Type == ActivityTypes.Message)
 {
    var text = innerDc.Context.Activity.Text.ToLowerInvariant();

    switch (text)
    {
        case "help":
        case "?":
            await innerDc.Context.SendActivityAsync($"Show Help...", cancellationToken: cancellationToken);
            return new DialogTurnResult(DialogTurnStatus.Waiting);

        case "cancel":
        case "quit":
            await innerDc.Context.SendActivityAsync($"Cancelling", cancellationToken: cancellationToken);
            return await innerDc.CancelAllDialogsAsync();
    }
}

return null;

}

В качестве инструкций вы можете написать разные сценарии ввода данных пользователем.

Я нашел эту документацию полезной: https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-howto-handle-user-interrupt?view=azure-bot-service-4.0&tabs=csharp

...