在协助用户后的表单流中,假设机器人在表单字段中询问我的用户"还有什么我可以协助的,说是或否"。如果用户说是,我必须重新开始新的意图,即问候对话。表单流可以吗?
在BuildForm
方法中,我想完成表单流,并查找新的 luis 意向,即问候对话,而不是将UserWantToCompleteEndOption
设置为下一个要执行的方法。
.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 对话框中实现相同的操作。