如何在一个简单的机器人中集成 FormFlow 和 QnA 对话框。QnA 完成后,我无法调用 FormFlow 上下文。如果有相同的样品,请分享。
问问题
651 次
2 回答
3
如果您想使用 QnA 和 FormFlow,请创建一个对话框 QnADialog,您可以先将所有消息发送到根对话框,然后您可以调用您的 QnA 对话框,例如
var qnadialog = new QnADialog();
var messageToForward = await message;
await context.Forward(qnadialog, ResumeAfterQnA, messageToForward, CancellationToken.None);
一旦执行了 QnADilalog,它将调用 ResumeAfterQnA,您可以在那里调用 FormFlow 对话框。
private async Task ResumeAfterQnA(IDialogContext context, IAwaitable<object> results)
{
SampleForm form = new SampleForm();
var sampleForm = new FormDialog<SampleForm>(form, SampleForm.BuildForm, FormOptions.PromptInStart);
context.Call(sampleForm, RootDialog.SampleFormSubmitted);
}
您需要有一个 SampleFormSubmitted 方法,该方法将在您提交表单后调用。
private async Task SampleFormSubmitted(IDialogContext context, IAwaitable<SampleForm> result)
{
try
{
var query = await result;
context.Done(true);
}
catch (FormCanceledException<SampleForm> e)
{
string reply;
if (e.InnerException == null)
{
reply = $"You quit. Maybe you can fill some other time.";
}
else
{
reply = $"Something went wrong. Please try again.";
}
context.Done(true);
await context.PostAsync(reply);
}
}
于 2018-03-23T08:53:53.137 回答
-1
一种方法是从 Luis 模板开始。然后制定一个特定的 Intent 来启动 Form。然后你可以有一个“”甚至“无”的空 Luis Intent,然后将 QnA 放在那里。这样,Qna 将在后台 LUIS 将为您提供极大的灵活性来触发具有意图的特定对话
这是一个例子
于 2018-03-17T07:27:20.063 回答