尝试设置 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