为什么 BotConnector 行为与模拟器不同?

Why BotConnector behavior is different from the emulator?

我正在玩最近发布的 Microsoft Bot Framework。 我做了以下步骤:

  1. 使用 IDialog (Echo Bot sample) 创建了一个简单的机器人,使用模拟器进行了测试,部署到 Azure 应用服务并在 dev.botframework.com 注册了它。一切正常。

  2. 更新了机器人以使用 LuisDialog 与 Luis 一起工作,并添加了 [LuisModel] 和 [LuisIntent] 属性(基于 Alarm Bot sample)并将其部署到云端。

之后我有一个奇怪的行为:

本地和云部署都可以使用模拟器按预期工作,Luis 部分运行良好。

当从 BotConnector 测试连接触发同一个机器人时,它不会绑定 Luis,而是进入 MessageReceivedAsync。

我检查了 bot 路径、app 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 和仿真器中的测试连接是否指向相同的端点,预计总是 return 相同的结果? 或者,我错过了什么吗?

是的,Bot Connector 和模拟器发送相同的消息。

您的代码是否 returns 相同的值取决于您处理消息的方式、调用环境(通过 HTTP 从本地主机调用而不是通过 HTTPS 远程调用)和托管环境(通常是调试位在IIS Express 与 IIS 中的发布位,适用于 C# 应用程序)。

不再适用。较新的 1.1 版本,BTW 引入了重大更改,在同一代码库上工作起来就像一个魅力。