我一直在机器人模拟器本地处理我的机器人。一切似乎都很好。现在是时候与Messenger集成了,我也在尝试在本地运行它。
从信使到我的本地机器人通过ngrok。
我基本上是在这里尝试点击此链接。
当我从我的信使发送消息时,似乎需要一段时间才能到达我的端点(和断点),但是当它到达时,我收到以下错误:
/api/messages - POST
index.ts:72
BotFrameworkAdapter.processActivity(): 400 ERROR - Error: BotFrameworkAdapter.parseRequest(): missing activity type.
UnhandledPromiseRejectionWarning: Error: Error: BotFrameworkAdapter.parseRequest(): missing activity type.
at BotFrameworkAdapter.processActivity (.../node_modules/botbuilder/src/botFrameworkAdapter.ts:608:19)
在我的 ngrok 控制台上,我可以看到 400 请求,有时在 facebook APP 日志错误上看到 502 个相同的请求。
这是要去的地方:
// using restify
server.post('/api/messages', (req, res) => {
console.log('/api/messages - POST');
adapter.processActivity(req, res, async turnContext => {
await bot.run(turnContext);
});
});
基本上,该机器人根本不起作用,但我使用botkit适配器进行了测试,以连接到facebook messenger,除了提示选择,旋转木马和HeroCards等特殊消息外,它似乎在大多数情况下几乎可以工作。基本上它仅适用于简单的文本。
BotFrameworkAdapter应该翻译得很好。知道发生了什么吗? 不确定我是否错过了什么。
好的。问题是Facebook应用程序上的回调链接。
由于我的代码上有一个验证令牌,如下所示,我将 facebook 回调 URL 指向我的 ngrok 链接,并且验证工作正常。但看起来要在 Azure 配置上进行调试,必须使用 azure 提供给你的回调链接。类似于"https://facebook.botframework.com/api..."您可以在频道/脸书下找到。
一旦我将facebook应用程序设置为使用azure回调链接,一切正常。
server.post('/api/messages', (req, res) => {
adapter.processActivity(req, res, async turnContext => {
await bot.run(turnContext);
});
});
server.get('/api/messages', (req, res) => {
const mode = req.query['hub.mode'];
const token = req.query['hub.verify_token'];
const challenge = req.query['hub.challenge'];
if (mode && token) {
if (mode === 'subscribe' && token === VERIFY_TOKEN) {
// Responds with the challenge token from the request
console.log('WEBHOOK_VERIFIED', challenge);
res.status(200);
res.end(challenge);
} else {
res.send(403);
}
}
});