尝试设置 facebook messenger bot 时出现“Webhooks failed”和“webhooks disabled”错误

Posted

技术标签:

【中文标题】尝试设置 facebook messenger bot 时出现“Webhooks failed”和“webhooks disabled”错误【英文标题】:"Webhooks failing" and "webhooks disabled" error while trying to set up facebook messenger bot 【发布时间】:2016-08-10 07:46:00 【问题描述】:

我正在尝试设置 Facebook Messenger 机器人并不断遇到同样的两个错误。

Webhook 失败:

Webhook 已禁用:

我正在使用 NodeJS、Express 和服务器创建我的聊天机器人。我在 Heroku 服务器上运行我的 webhook。我已经通过 Facebook 验证并保存了它。

之后,我运行了这段代码:

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

这回复了一条成功消息,所以我开始添加代码来回复传入的消息,但我似乎无法连接它。

这是我的代码:

var express = require('express');
var bodyParser = require('body-parser');

var app = express();
var port = process.env.PORT || 3000;

// body parser middleware
app.use(bodyParser.urlencoded( extended: true ));

app.get('/', function (req, res) 
  if (req.query['hub.verify_token'] === '<myToken>') 
    res.send(req.query['hub.challenge']);
  
  res.send('Error, wrong validation token');
)

app.post('/', 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);
);

// error handler
app.use(function (err, req, res, next) 
  console.error(err.stack);
  res.status(400).send(err.message);
);

app.listen(port, function () 
  console.log('Listening on port ' + port);
);

var token = <myToken>;

function sendTextMessage(sender, text) 
  messageData = 
    text:text
  
  request(
    url: 'https://graph.facebook.com/v2.6/me/messages',
    qs: access_token:token,
    method: 'POST',
    json: 
      recipient: id:sender,
      message: messageData,
    
  , function(error, response, body) 
    if (error) 
      console.log('Error sending message: ', error);
     else if (response.body.error) 
      console.log('Error: ', response.body.error);
    
  );

此时,我应该能够开始与我的机器人聊天并让它回复一个回声,但什么都没有发生。

感谢任何帮助。谢谢!

【问题讨论】:

【参考方案1】:

您没有在正确的端点上收听。 你的app.post('/' 应该是

    app.post('/webhook', function(req, res) 
    var messagingEvents = req.body.entry[0].messaging;

    messagingEvents.forEach(function(event) 
    var sender = event.sender.id;

【讨论】:

我是否也要更改 app.get 函数? 是的......他们都应该在 webhook 端点上监听。获取和发布 好的,我使用了错误的 webhook 吗?当我尝试运行此 app.get('/wyrdbot.herokuapp.com', function (req, res) 时,在浏览器中加载 webhook 时出现 Cannot Get / 错误。 尝试将 '/wyrdbot.herokuapp.com' 替换为 '/webhook'

以上是关于尝试设置 facebook messenger bot 时出现“Webhooks failed”和“webhooks disabled”错误的主要内容,如果未能解决你的问题,请参考以下文章

Facebook Messenger API 发件人姓名不可用

Facebook Messenger 的 Webhook 不验证 Laravel5.4

用于在Firefox中工作的网站的Facebook Messenger,而不是Chrome

网站上的 Facebook Messenger,每个页面都有不同的问候信息

Facebook Messenger sdk 贴纸

Facebook Messenger 嵌套持久菜单错误