如何在单个机器人中集成FormFlow和QnA对话框

时间:2018-03-16 14:40:52

标签: botframework bots formflow qnamaker

如何在简单的机器人中集成FormFlow和QnA对话框。一旦QnA完成,我就无法调用FormFlow上下文。如果有相同的样品,请分享。

2 个答案:

答案 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将为您提供极大的灵活性,以触发与意图的特定对话

这是一个例子

http://www.garypretty.co.uk/2017/03/26/forwarding-activities-messages-to-other-dialogs-in-microsoft-bot-framework/