好的,所以我让LUIS Bot在 MessageController.cs
中的帖子方法启动对话await Conversation.SendAsync(activity, () => new LUISDialog());
当机器人检测到无意图时,它将调用QnA机器人并将消息转发给它
await context.Forward(new QnABot(), Whatever, result.Query, CancellationToken.None);
这是我的问题: 启动QnA bot时, QnAMakerDialog.cs 类中的方法 MessageReceivedAsync 会在参数上引发异常 “IAwaitable< .IMessageActivity>参数”
[Microsoft.Bot.Builder.Internals.Fibers.InvalidTypeException] = {“无效类型:预期Microsoft.Bot.Connector.IMessageActivity,有字符串”}“
尝试访问时 - >> var message = await argument;
我不明白问题是什么,我在qna机器人中键入一个简单的纯文本,当我在网站上尝试回复时,我的知识库没有问题。我不确定在调用StartAsync和调用MessageReceivedAsync之间发生了什么,导致参数'argument'失败。
答案 0 :(得分:4)
我认为问题在于您发送了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);
或者,您可以更新无意图方法的签名以包含原始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);
}