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);
    }
  }
});