【问题标题】:Bot Framework with QnaMaker and FormFlow带有 QnaMaker 和 FormFlow 的 Bot 框架
【发布时间】:2019-01-07 11:01:13
【问题描述】:

我正在制作一个与 QnaMaker 通信的机器人,根据答案,应该使用 Json 打开通过 FormFlow 的引导式对话。 我的问题正是在这一点上才能打开表格。 我正在使用 garypretty 的 SDK V3 和 QnAMakerDialog

我尝试了几种方法,例如调用 context.Forward 或 context.Call,但不正确,可能我调用的方式错误。

总是返回说明源代码有问题的消息。

public override async Task DefaultMatchHandler(IDialogContext context, 
string originalQueryText, QnAMakerResult result)
{
    QnaAnswer a = result.Answers.First();
    var messageActivity = ProcessResultAndCreateMessageActivity(context, ref result);

    if (a.Answer == "form")
    {
       // OPEN FORM HERE
    }

    await context.PostAsync(messageActivity);
   context.Wait(MessageReceived);
}

【问题讨论】:

  • 您能否更具体地说明源代码中遇到了什么问题?尝试在调试模式下运行它并设置断点。我怀疑问题是您正在调用 context.Forward(),然后是 context.Wait()。你每回合只能调用其中一个,任何额外的调用都会引发“无效需要”异常。
  • 另外,请发布您用来打开表单对话框的代码
  • 嗨,你是对的,我调用的是 context.Forward(),然后是 context.Wait()。我纠正了这个问题,问题就解决了。非常感谢。
  • 您想发布自己的答案还是希望我将其发布为答案?
  • 好的.. @KyleDelaney

标签: c# botframework qnamaker formflow


【解决方案1】:

解决方案:

public static bool IsForm = false;

 public override async Task DefaultMatchHandler(IDialogContext context, 
 string originalQueryText, QnAMakerResult result)
 {
     QnaAnswer a = result.Answers.First();
     var messageActivity = ProcessResultAndCreateMessageActivity(context, ref result);

     if (a.Answer == "form")
     {
         IsForm = true;
         var form = new FormDialog<JObject>(new JObject(), JsonForm.BuildJsonForm, FormOptions.PromptInStart);
         context.Call(form, FormCallback);
     }
     else
     {
          IsForm = false;
          messageActivity.Text = $"{result.Answers.First().Answer}";
     }

     if (IsForm == false)
     {
         await context.PostAsync(messageActivity);
         context.Wait(MessageReceived);
     }
 }

谢谢凯尔。

【讨论】:

    猜你喜欢
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多