繁体   English   中英

如何移动到最后一个表单域以结束表单流并开始新的意图

[英]How to move to last formfield in order to end formflow and start new intent

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

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

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

要停止填写表单,您可以使用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对话框中实现相同的功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM