BotFrameworkAdapter 缺少 activity 类型 - 在本地调试 Messenger
BotFrameworkAdapter missing activity type - Debug Messenger locally
我一直在本地使用我的机器人,使用机器人模拟器。一切似乎都很好。现在是时候与 Messenger 集成了,我也在尝试 运行 在本地集成它。
通过 ngrok 从 Messenger 到我的本地 bot。
我基本上是在尝试遵循这个 link here。
当我从 Messenger 发送消息时,它似乎需要一段时间才能到达我的端点(和断点),但当它到达时我收到以下错误:
/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 控制台上,我可以在 facebook APP 日志错误中看到 400 请求,有时是 502 请求。
这是要点:
// using restify
server.post('/api/messages', (req, res) => {
console.log('/api/messages - POST');
adapter.processActivity(req, res, async turnContext => {
await bot.run(turnContext);
});
});
基本上这个 bot 根本不工作,但我使用 botkit 适配器连接到 facebook messenger 进行了测试,它似乎在大多数情况下几乎可以工作,除了 Prompt Choice、Carousel 和 HeroCards 等特殊消息。基本上它只适用于简单的文本。
BotFrameworkAdapter 应该可以很好地翻译。知道发生了什么事吗?
不确定我是否遗漏了什么。
好的。问题出在 Facebook 应用程序的回调 link。
因为我的代码上有一个验证令牌,如下所示,我将 facebook 回调 URL 指向我的 ngrok link 并且验证工作正常。但是看起来要在 azure 配置上进行调试,您必须使用 azure 提供给您的回调 link。类似于“https://facebook.botframework.com/api...”的内容,您可以在频道/facebook 下找到。
一旦我将 facebook APP 设置为使用 azure 回调 link 一切正常。
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);
}
}
});
我一直在本地使用我的机器人,使用机器人模拟器。一切似乎都很好。现在是时候与 Messenger 集成了,我也在尝试 运行 在本地集成它。
通过 ngrok 从 Messenger 到我的本地 bot。
我基本上是在尝试遵循这个 link here。
当我从 Messenger 发送消息时,它似乎需要一段时间才能到达我的端点(和断点),但当它到达时我收到以下错误:
/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 控制台上,我可以在 facebook APP 日志错误中看到 400 请求,有时是 502 请求。
这是要点:
// using restify
server.post('/api/messages', (req, res) => {
console.log('/api/messages - POST');
adapter.processActivity(req, res, async turnContext => {
await bot.run(turnContext);
});
});
基本上这个 bot 根本不工作,但我使用 botkit 适配器连接到 facebook messenger 进行了测试,它似乎在大多数情况下几乎可以工作,除了 Prompt Choice、Carousel 和 HeroCards 等特殊消息。基本上它只适用于简单的文本。
BotFrameworkAdapter 应该可以很好地翻译。知道发生了什么事吗? 不确定我是否遗漏了什么。
好的。问题出在 Facebook 应用程序的回调 link。
因为我的代码上有一个验证令牌,如下所示,我将 facebook 回调 URL 指向我的 ngrok link 并且验证工作正常。但是看起来要在 azure 配置上进行调试,您必须使用 azure 提供给您的回调 link。类似于“https://facebook.botframework.com/api...”的内容,您可以在频道/facebook 下找到。
一旦我将 facebook APP 设置为使用 azure 回调 link 一切正常。
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);
}
}
});