c # чат бот |RetryPrompt сообщение динамически - PullRequest
0 голосов
/ 04 ноября 2019

c # чат-бот: есть ли способ, которым мы можем динамически контролировать сообщение RetryPrompt из приглашения? Я использую Bot Framework 4.0.

1 Ответ

0 голосов
/ 05 ноября 2019

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

Самое простое - просто добавить отдельный RetryPrompt. Например, если мы хотим сделать это для Multi-Turn-Prompt семпла , мы просто добавим свойство RetryPrompt:

private static async Task<DialogTurnResult> TransportStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            // WaterfallStep always finishes with the end of the Waterfall or with another dialog; here it is a Prompt Dialog.
            // Running a prompt here means the next WaterfallStep will be run when the users response is received.
            return await stepContext.PromptAsync(nameof(ChoicePrompt),
                new PromptOptions
                {
                    Prompt = MessageFactory.Text("Please enter your mode of transport."),
                    Choices = ChoiceFactory.ToChoices(new List<string> { "Car", "Bus", "Bicycle" }),
                    RetryPrompt = MessageFactory.Text("That wasn't a valid option. Try again.")
                }, cancellationToken);
        }

Это приведет к:

enter image description here

Другой альтернативой будет сделать что-то вроде того, что сказал @ pkr2000 (хотя и немного по-другому), и использовать специальный валидатор для динамического добавления RetryPrompt. Что-то вроде:

AddDialog(new ChoicePrompt(nameof(ChoicePrompt), ValidateChoicesAsync));

[...]

private static Task<bool> ValidateChoicesAsync(PromptValidatorContext<FoundChoice> promptContext, CancellationToken cancellationToken)
{
    if (!promptContext.Recognized.Succeeded)
    {
        promptContext.Options.RetryPrompt = MessageFactory.Text($"You said \"{ promptContext.Context.Activity.Text},\" which is invalid. Please try again.");
        return Task.FromResult(false);
    }
    return Task.FromResult(true);
}

Это приводит к:

enter image description here

Вы можете делать все что угодно в валидаторе. Вместо использования MessageFactory.Text() вы можете передать совершенно другой Activity, например, адаптивную карту или что-то в этом роде. Вы также не могли бы установить RetryPrompt, вместо этого изменив Prompt на любой текст / действие, которое вы хотите, вернуть false, и тогда пользователю будет предложено новое приглашение. Это действительно довольно безгранично, что вы можете сделать с помощью специального валидатора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...