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);
}
好的,我让 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);
}