QnAMaker Bot与LUIS Bot合并

时间:2017-05-29 11:04:35

标签: c# botframework luis

好的,所以我让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'失败。

1 个答案:

答案 0 :(得分:4)

我认为问题在于您发送了stringresult.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);
}