BotFrameworkAdapter缺少活动类型-本地调试Messenger

时间:2019-07-10 23:03:59

标签: node.js typescript botframework facebook-messenger-bot ngrok

我一直在使用机器人模拟器在本地机器人中工作。一切似乎都正常。现在是时候与Messenger集成了,我也想在本地运行它。

从Messenger通过ngrok到我的本地机器人。

我基本上是在尝试访问此链接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);
  });
});

基本上,该机器人根本无法工作,但是我使用botkit适配器进行了测试,以连接到Facebook Messenger,并且在大多数情况下,除了Prompt Choice,Carousel和HeroCards之类的特殊消息外,它几乎可以正常工作。基本上,它仅适用于简单文本。

BotFrameworkAdapter应该可以正常翻译。有什么想法吗? 不知道我是否想念什么。

1 个答案:

答案 0 :(得分:0)

好的。问题是Facebook应用程序上的回调链接。

由于我的代码上有一个验证令牌,如下所示,我将facebook回调URL指向我的ngrok链接,验证工作正常。但是,它看起来像是要在azure配置上进行调试,您必须使用azure提供给您的回调链接。您可以在频道/ facebook下找到类似“ https://facebook.botframework.com/api ...之类的内容。

一旦我将facebook APP设置为使用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);
    }
  }
});