Facebook的使者bot错误“TypeError:不能读取未定义的属性”0“。

我正在尝试使用NodeJS,Express和Heroku服务器来创build一个Facebook chatbot。

我在Heroku上创build了我的webhook,并通过Facebook进行了validation和保存。 然后我运行这个代码来连接我的webhook到Facebook。

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

这个返回{success:true}。

那么我开始添加代码来回复传入的消息,但我似乎无法得到它发送的信息。 每当我发送消息,我都没有回复。

一切都连接和运行,但这个错误我得到“TypeError:不能读取未定义的属性'0'是因为我没有得到从Facebook发送到我的webhook的消息信息。 这是空的代码行:

 messaging_events = req.body.entry[0].messaging; 

这是我的完整代码:

 var express = require('express'); var bodyParser = require('body-parser'); var request = require("request") 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'] === '8FKU9XWeSjnZN4ae') { res.send(req.query['hub.challenge']); console.log("app.get ran") res.sendStatus(200) } console.log("Error: wrong validation token") }) app.post('/', function (req, res) { messaging_events = req.body.entry[0].messaging; console.log("app.post ran") 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); }); 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); } }); } 

这里是我的Heroku日志:

Heroku日志

所以我很困惑,为什么我没有得到消息数据,当我的webhook连接到Facebook,他们正在沟通。 我也确定我有所有需要检查的订阅字段。

任何人都看到问题? 任何帮助表示赞赏。 谢谢!

编辑:我按照这个方法 – https://developers.facebook.com/docs/messenger-platform/quickstart

我有同样的问题。 你可以在bodyParser.urlencoded()之前添加app.use(bodyParser.json())吗?