【问题标题】:How to move to last formfield in order to end formflow and start new intent如何移动到最后一个表单域以结束表单流并开始新的意图
【发布时间】:2018-06-18 18:12:38
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# botframework formflow


    【解决方案1】:

    要停止填写表格,您可以使用 FormFlow 的退出功能。你可以找到详情here

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

    【讨论】:

    • 我已将我的问题更新为更具体。你现在能帮帮我吗?
    • 什么是 UserWantToComplete ?您能否提供表单流程的代码。
    • 假设我在表单字段中询问我的用户,“还有什么我可以提供帮助的,说是或否”。如果用户说是,我必须重新开始我的新意图。表单流可以吗?
    • 如果用户输入是,那么您需要重新填写表格还是需要填写表格的其余部分?
    • 说用户询问邮件室在哪里,机器人回答并询问我还有什么可以帮助的,说是或否?。然后用户说是。在这种情况下,机器人必须再次以问候对话重新启动。
    猜你喜欢
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2022-01-09
    • 2019-06-24
    • 2015-06-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多