QnAMaker Bot 与 LUIS Bot 合并

QnAMaker Bot with LUIS Bot merge

好的,我让 LUIS 机器人在 Post 方法中开始对话 MessageController.cs

await Conversation.SendAsync(activity, () => new LUISDialog());

当机器人检测到 None 意图时,它将调用 QnA 机器人并将消息转发给它

await context.Forward(new QnABot(), Whatever, result.Query, CancellationToken.None);

这是我的问题: 启动 QnA 机器人时,QnAMakerDialog.cs class 中的方法 MessageReceivedAsync 在参数上引发异常 "IAwaitable<.IMessageActivity> argument"

[Microsoft.Bot.Builder.Internals.Fibers.InvalidTypeException] = {"invalid type: expected Microsoft.Bot.Connector.IMessageActivity, have String"}"

尝试通过 --> var message = await argument 访问它时;

我不明白问题出在哪里,我在 qna bot 中输入一个简单的纯文本,当我在网站上尝试时,我的知识库没有问题返回响应。我不确定在调用 StartAsync 和调用 MessageReceivedAsync 之间发生了什么导致参数 'argument' 失败。

我认为问题在于您发送的是 string (result.Query) 而 QnAMakerDialog.cs 期待的是 IMessageActivity.

尝试将您的 context.Forward 电话更新为:

var msg = context.MakeMessage();
msg.Text = result.Query;

await context.Forward(new QnABot(), Whatever, msg, CancellationToken.None);

或者,您可以更新 None 意图方法的签名以包含原始 IMessageActivity:

[LuistIntent("None"))]
public async Task None(IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult result)
{
   var msg = await activity;

   await context.Forward(new QnABot(), Whatever, msg, CancellationToken.None);
}