0

在协助用户后的表单流程中,假设 Bot 在表单字段中询问我的用户,“还有什么我可以协助的,说是或否”。如果用户说是,我必须重新开始新的意图,即问候对话。表单流可以吗?

BuildForm方法中,我不想设置UserWantToCompleteEndOption为下一个方法来执行,而是要完成表单流程,并寻找新的 luis 意图,即问候对话。

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

1 回答 1

1

要停止填写表格,您可以使用 FormFlow 的功能退出。您可以在此处找到详细信息。

基本上,当您输入“退出”一词时,机器人会抛出异常 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 对话框中实现相同的功能。

于 2018-06-12T05:14:40.547 回答