[英]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.