【问题标题】:BotFramework WebChat not receiving messages.BotFramework WebChat 未收到消息。
【发布时间】:2016-12-19 23:55:36
【问题描述】:

我有一个机器人在使用模拟器时可以在本地工作,但如果我尝试使用 WebChat 或 Skype。它只会以一种方式工作(意思是,请求来自网络聊天和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 或网络聊天频道尝试。它到达端点,像模拟器一样运行代码。但是 session.send 不会向 Skype 或网络聊天返回任何内容(至少没有任何显示)

如果我查看交通情况。两者(模拟器与其他)的区别在于

1) 我得到一个 202 Accepted 和一个 100 Continue (没有 100 从 Skype 或网络聊天继续) 2)授权承载中有一个令牌。如果我将它加载到 azure 并从那里运行它,也会发生同样的事情。

任何帮助将不胜感激。

【问题讨论】:

    标签: node.js azure botframework


    【解决方案1】:

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

    我想我会在这里发帖,因为这可能对遇到同样问题的其他人有用。

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

    【讨论】:

    • 为了清楚起见,我正在做一个研讨会,所以不想让研讨会中的每个人都上传到云端。我想在本地“好像”它托管在云中一样运行它。我也想调试。我设置了环境变量,但我在我的计算机上的系统环境变量下设置了它们。在 --debug 模式下运行时,我假设它不会从那里读取它们,因此它们被添加到 launch.json 文件的 Launch 部分的“env”部分。
    • 再次跟进。将它们放在我的系统变量中不起作用的原因是因为我从未重新启动控制台,所以它们没有出现。此外,如果您想暂时在 Mac 上执行此操作,只需执行 export VARNAME="my value" 或 echo "NAME=VALUE; export NAME" >> ~/.profile 保存它们
    【解决方案2】:

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

    在我们的日志中,我看到从机器人到 Skype 的呼叫被 403 拒绝。可能您的 MSAAppID 和 MSAAppPassword 设置不正确,因此您对服务的请求未正确签名。

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

    【讨论】:

    • 谢谢 Jim 它确实提到了这一点。我在我的机器上设置了环境变量,但在 launch.json 文件中没有。一旦我将它们添加到 env 部分,它就起作用了。似乎 SDK 吞下了错误并检查未捕获的异常框有助于找出发生了什么。感谢 jorenl github.com/jorenl 在 gitter 上引导我完成它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    相关资源
    最近更新 更多