我有一个在使用模拟器时在本地工作的机器人,但是如果我尝试使用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网址作为消息传递端点。正如您所看到的,测试机器人会被接受。
我在调试模式下使用VSCode并附加,以便我可以单步执行。如果我从模拟器运行,它被捕获,我可以通过调试并接收" Hello World"从
发送session.send("Hello World");
如果我尝试使用Skype或网络聊天频道。它命中端点,像模拟器一样运行代码。但session.send不会向Skype或网络聊天返回任何内容(至少没有显示任何内容)
如果我看一下流量。两者(模拟器与其他人)之间的区别在于
1)我得到202接受和100继续(从Skype或网聊继续100) 2)授权承载有一个令牌。如果我将它加载到azure并从那里运行它也会发生同样的事情。
任何帮助将不胜感激。
答案 0 :(得分:3)
在the BotBuilder Gitter Channel处理完问题后,我们解决了这个问题。事实证明MICROSOFT_APP_ID和MICROSOFT_APP_PASSWORD环境变量未正确设置。
我想我会在这里发帖,因为这对于遇到同样问题的其他人来说可能是有用的信息。
BotBuilder SDK没有告知您这个丢失的配置这一事实是一个错误,我正在为它编写一个错误报告。
答案 1 :(得分:1)
首先,我强烈建议在机器人注册中为您的Bot挂钩Azure App Insights。我们在那里记录了很多,而且它是免费的,我相信每月前500万个数据点。
在我们的日志中,我看到从机器人到Skype的呼叫被403拒绝。可能您的MSAAppID和MSAAppPassword没有正确设置,因此您对服务的请求不会被拒绝。正确签署。
如果您在调查中找不到任何内容,请告诉我们。