0

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

4

2 回答 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 将为您提供极大的灵活性来触发具有意图的特定对话

这是一个例子

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

于 2018-03-17T07:27:20.063 回答