Как перейти к последнему полю формы, чтобы завершить поток формы и начать новое намерение - PullRequest
0 голосов
/ 12 июня 2018

В потоке формы после оказания помощи пользователю предположим, что Бот спрашивает моего пользователя: «Могу ли я еще чем-нибудь помочь, скажите« да »или« нет »» в поле формы.Если пользователь говорит «да», я должен начать заново новое намерение - диалог приветствия.Возможно ли это с потоком формы?

В методе BuildForm Вместо установки UserWantToCompleteEndOption в качестве следующего метода для выполнения, я хочу завершить поток формы и искать новое намерение Луиса, которое приветствуетдиалог.

.Field(nameof(UserWantToComplete), state => state.ReportRequest.Contains("UserWantToComplete"))
                .Field(new FieldReflector<SoftwareRequestWithName>(nameof(UserWantToComplete))
                            .SetActive(state => state.AskToChooseReport)
                            .SetNext(UserWantToCompleteEndOption))

1 Ответ

0 голосов
/ 12 июня 2018

Для прекращения заполнения формы вы можете использовать функцию выхода из FormFlow.Вы можете найти подробности здесь .

Обычно, когда вы вводите слово 'quit', бот генерирует исключение FormCanceledException, которое может быть перехвачено в вызываемом вами методе после заполнения формы.

Корневой диалог

private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
{
        CustomerDetails form = new CustomerDetails();
        FormDialog<CustomerDetails> customerForm = new FormDialog<CustomerDetails>(form, CustomerDetails.BuildForm, FormOptions.PromptInStart);
        context.Call(customerForm, FormSubmitted);
}
public async Task FormSubmitted(IDialogContext context, IAwaitable<CustomerDetails> result)
{
        try
        {
            var form = await result;

        }
        catch (FormCanceledException<CustomerDetails> e)
        {
            string reply;
            if (e.InnerException == null)
            {
                reply = $"Thanks for filling out the form.";
            }
            else
            {
                reply = $"Sorry, I've had a short circuit.  Please try again.";
            }
            context.Done(true);
            await context.PostAsync(reply);
        }
 }

Если вы хотите, вы можете реализовать то же самое в своем диалоге LUIS.

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