BotFramework WebChat 未接收消息。

BotFramework WebChat not receiving messages.

我有一个机器人在使用模拟器时可以在本地运行,但如果我尝试使用 WebChat 或 Skype。它只会以一种方式工作(意思是,请求来自 webchat 和 skype,但不会返回给它们的响应)。我的代码比较复杂,但是当我使用下面的代码时得到了相同的响应。

   var restify = require('restify');
var builder = require('botbuilder');

//=========================================================
// Bot Setup
//=========================================================

// Setup Restify Server
var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () {
   console.log('%s listening to %s', server.name, server.url); 
});

// Create chat bot
var connector = new builder.ChatConnector({
    appId: process.env.MICROSOFT_APP_ID,
    appPassword: process.env.MICROSOFT_APP_PASSWORD
});
var bot = new builder.UniversalBot(connector);
server.post('/api/messages', connector.listen());

server.get('/', restify.serveStatic({
 directory: __dirname,
 default: '/index.html'
}));

//=========================================================
// Bots Dialogs
//=========================================================

bot.dialog('/', function (session) {
    session.send("Hello World");
}); 

我正在使用 NGrok 指向我的本地机器,并使用 Ngrok url 作为消息传递端点。如您所见,测试机器人返回时被接受。

我在调试模式下使用 VSCode 并附加以便我可以单步执行。如果我从模拟器中 运行,它被捕获,我可以调试并接收回从

发送的 "Hello World"
session.send("Hello World");

如果我从 Skype 或网络聊天频道尝试。它像模拟器一样通过代码到达终点,运行s。但是 session.send 对 Skype 或网络聊天没有 return 任何东西(至少没有显示)

如果我看看流量。两者(模拟器 vs 其他)的区别在于

1) 我得到 202 接受和 100 继续(没有 100 从 Skype 或网络聊天继续) 2)Authorization Bearer里面有一个token。如果我将它加载到 azure 并从那里加载 运行,也会发生同样的事情。

如有任何帮助,我们将不胜感激。

首先,我强烈建议在机器人注册时为你的机器人连接 Azure App Insights。我们在那里记录了很多,而且我相信每月前 500 万个数据点是免费的。

在我们的日志中,我看到从 bot 到 Skype 的调用被 403 拒绝。可能是你的 MSAAppID 和 MSAAppPassword 设置不正确,因此你对服务的请求没有被正确签名.

如果您在调查中没有发现任何问题,请告诉我们。

the BotBuilder Gitter Channel 解决了这个问题后,我们解决了这个问题。原来 MICROSOFT_APP_ID 和 MICROSOFT_APP_PASSWORD 环境变量没有正确设置。

我想我会 post 在这里,因为这对于遇到同样问题的其他人来说可能是有用的信息。

BotBuilder SDK 没有通知您这个缺失的配置是一个错误,我正在为此编写错误报告。