贴纸和Gif导致Facebook Messenger僵尸程序冻结

时间:2016-04-26 03:04:37

标签: node.js facebook facebook-graph-api facebook-messenger

Facebook Messenger API整体上非常甜美。但是,每当用户向我的机器人发送贴纸(例如气球拇指贴纸)时,它总是会冻结约20秒。如果用户发送了很多贴纸,那么机器人就会崩溃,Facebook会发送给我#Webhook失败"开发人员警报。

我怀疑我的代码有问题,但我找不到任何错误。我发现有趣的是,当机器人崩溃并且Facebook发送给我时,#Webhook失败了#34;警报,如果我通过在命令行中输入以下内容将我的应用重新订阅到页面,则机器人将恢复并返回响应消息。

curl -X POST "https://graph.facebook.com/v2.6/me/subscribed_apps?access_token=<PAGE_ACCESS_TOKEN>"

以下是一些可能对您有所帮助的信息。

回购:https://github.com/lorix-lpan/r-score-god

Server.js:https://github.com/lorix-lpan/r-score-god/blob/master/src/server.js

Facebook页面:https://www.facebook.com/rscoregod/

注意:僵尸程序目前仍然无法供公众使用,请发送消息,以便我可以将您添加为测试用户。

非常感谢!

1 个答案:

答案 0 :(得分:2)

最终,我自己想出了问题。我的代码确实存在问题(或者Facebook的入门代码;))。

来自Messenger平台的入门page

后处理程序定义如下

app.post('/webhook/', function (req, res) {
  messaging_events = req.body.entry[0].messaging;
  for (i = 0; i < messaging_events.length; i++) {
    event = req.body.entry[0].messaging[i];
    sender = event.sender.id;
    if (event.message && event.message.text) {
      text = event.message.text;
      sendTextMessage(sender, "Text received, echo: "+ text.substring(0, 200));
    }
  }
  res.sendStatus(200);
});

然而,当贴纸或GIF被发送到服务器时,&#34;消息&#34> &#34;事件的领域&#34;变量将为空。因此,自从sendTextMessage函数POST到Facebook服务器后,将不会评估以下块中的代码并且不会发出HTTP请求。

if (event.message && event.message.text) {
  text = event.message.text;
  sendTextMessage(sender, "Text received, echo: "+ text.substring(0, 200));
}

我通过简单地为贴纸和GIF(或其他附件)添加另一个简单的if语句解决了这个问题。当用户发送附件(GIF或贴纸)时,&#34;事件&#34;变量将有一个&#34;附件&#34;属性。换句话说,将定义event.attachments。我的解决方案如下:

app.post('/webhook/', function (req, res) {
  messaging_events = req.body.entry[0].messaging;
  for (i = 0; i < messaging_events.length; i++) {
    event = req.body.entry[0].messaging[i];
    sender = event.sender.id;
    if (event.attachments) {
      sendTextMessage(sender, 'I am an attachment');
    }
    if (event.message && event.message.text) {
      text = event.message.text;
      sendTextMessage(sender, "Text received, echo: "+ text.substring(0, 200));
    }
  }
  res.sendStatus(200);
});

查看此commit了解更多详情