我正在玩最近发布的微软Bot框架。 我做了以下步骤:为什么BotConnector的行为与模拟器不同?
创建使用IDialog(Echo Bot sample)一个简单的机器人,有仿真测试,部署到Azure的应用程序服务,并在dev.botframework.com注册它。一切正常。
更新了机器人使用LuisDialog与Luis一起使用,并添加了[LuisModel]和[LuisIntent]属性(基于Alarm Bot sample)并将其部署到云中。
之后,我有一个奇怪的现象:如使用模拟器预计
本地和云部署的工作,和路易斯部分效果很好。
当从BotConnector测试连接触发相同的bot时,它不绑定Luis,而是输入MessageReceivedAsync。
我检查了bot路径,应用程序ID和密钥,重新部署了AppService并重新注册了bot,而且我仍然得到相同的行为。
我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 - 它是_your_ MessageReceivedAsync,还是LuisDialog.MessageReceivedAsync? LuisDialog中的一个总是被调用,因为这是分派给你的Luis方法的东西。如果它是您自己的...您需要将其删除,以便LuisDialog中的人员可以处理和发送。 它应该在模拟器和连接器之间以相同的方式工作,但是在我们知道您所看到的是哪种方法之后,我们可以继续处理这个问题。 –
我更新了帖子的细节。我无法从EchoBot示例中删除此MessageReceivedAsync方法,因为它会中断测试连接。同样,当我稍微修改字符串(“你说过的”,“你说过的”,“你刚才说过的”)时,我重新部署了一次 - 我在测试连接中看到了这些变化,但它仍然没有进入Luis部分。再次,当我从模拟器中触发它时,端点正常工作。如果需要,我可以分享代码/ appid /秘密。 –
我认为问题在于你的Luis对话框以某种方式被破坏。添加您自己的MessageReceivedAsync会在开发计算机上隐藏失败,但是当您部署时,该隐藏功能无法工作(因为您正在部署发布位,或者IIS的工作方式与IIS Express不同或其他)。 –