首页 文章

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

提问于
浏览
0

Facebook Messenger API整体上非常甜美 . 但是,每当用户向我的机器人发送贴纸(例如气球拇指贴纸)时,它总是会冻结约20秒 . 如果用户发送了大量贴纸,机器人将会崩溃,Facebook将向我发送“Webhook失败”开发人员警报 .

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

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 回答

  • 2

    最终,我自己想出了问题 . 我的代码确实有问题(或者facebook的入门代码;)) .

    从Messenger平台开始page

    post处理程序定义如下

    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发送到服务器时,“event”变量的“message”字段将为空 . 因此,自从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或贴纸)时,“event”变量将具有“附件”属性 . 换句话说,将定义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了解更多详情

相关问题