如何在简单的机器人中集成FormFlow和QnA对话框。一旦QnA完成,我就无法调用FormFlow上下文。如果有相同的样品,请分享。
答案 0 :(得分: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);
}
}
答案 1 :(得分:-1)
一种方法是从Luis模板开始。 然后创建一个特定的Intent来启动Form。 然后你可以有一个空的Luis意图“”甚至“无”你把你的QnA放在那里。 这样Qna将处于后台LUIS将为您提供极大的灵活性,以触发与意图的特定对话
这是一个例子