【发布时间】:2016-07-21 07:05:30
【问题描述】:
我正在使用最近发布的 Microsoft Bot Framework。 我做了以下步骤:
使用 IDialog (Echo Bot sample) 创建了一个简单的机器人,使用模拟器进行了测试,部署到 Azure 应用服务并在 dev.botframework.com 上注册。一切正常。
更新了机器人以使用 LuisDialog 与 Luis 一起工作,并添加了 [LuisModel] 和 [LuisIntent] 属性(基于 Alarm Bot sample)并将其部署到云端。
之后我有一个奇怪的行为:
本地和云部署都使用模拟器按预期工作,Luis 部分运行良好。
当从 BotConnector 测试连接触发同一个 bot 时,它不会绑定 Luis,而是进入 MessageReceivedAsync。
我检查了机器人路径、应用程序 ID 和密钥,重新部署了 AppService 并重新注册了机器人,但我仍然得到相同的行为。
我的 ReceiveMessageAsync 如下所示:
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<Message> result)
{
var message = await result;
await context.PostAsync("You have just said: " + message.Text);
context.Wait(MessageReceivedAsync);
}
我不删除它的原因是因为没有它测试连接将停止工作。另一方面,模拟器运行良好。
难道 BotConnector 中的测试连接和指向同一端点的模拟器不会总是返回相同的结果吗? 或者,我错过了什么?
【问题讨论】:
-
你提到的MessageReceivedAsync -- 是你的 MessageReceivedAsync,还是LuisDialog.MessageReceivedAsync? LuisDialog 中的那个总是被调用,因为这是发送给你的 Luis 方法的东西。如果它是您自己的……您需要将其删除,以便 LuisDialog 中的那个可以处理和调度。它应该在模拟器和连接器之间以相同的方式工作,但我们可以在知道您所看到的调用哪个方法后进行处理。
-
我更新了帖子的详细信息。我无法从 EchoBot 示例中删除此 MessageReceivedAsync 方法,因为它会中断测试连接。同样,当我稍微修改字符串重新部署时(“你说”、“你说”、“你刚刚说”) - 我在测试连接中看到了这些变化,但它仍然没有进入 Luis 部分。同样,当我从模拟器触发端点时,端点可以正常工作。如果需要,我可以分享代码/appid/秘密。
-
我认为问题在于你的 Luis 对话框在某种程度上被破坏了。添加您自己的 MessageReceivedAsync 会隐藏您的开发机器上的故障,但是当您部署时,该隐藏不起作用(因为您正在部署 Release 位,或者因为 IIS 与 IIS Express 的工作方式不同,或其他原因)。
标签: c# azure bots botframework botconnector