fb messenger bot总是在webhooksvalidation时返回空json

我的节点js bot无法validationfacebook messenger bot平台的validation令牌。 按照给定的官方文档,我已经在开发者控制台中正确完成了webhook的设置。 我以前build立了一个聊天机器人,所以我可以很放心,我已经正确configuration了应用程序控制台设置。 请检查我的下面的代码,并告诉我是否有任何问题。

'use strict' const express = require('express'); const bodyParser = require('body-parser'); const request = require('request'); const app = express(); app.set('port', (process.env.PORT || 5000)); // Process application/x-www-form-urlencoded app.use(bodyParser.urlencoded({extended: false})); // Process application/json app.use(bodyParser.json()); const VALIDATION_TOKEN = (process.env.MESSENGER_VALIDATION_TOKEN) ? (process.env.MESSENGER_VALIDATION_TOKEN) : 'alex'; // Webhook route app.get('/', function (req, res) { console.log(req.query); // console.log(req.query['hub.verify_token']); if (req.query['hub.verify_token'] === VALIDATION_TOKEN) { console.log("Validating webhook"); res.status(200).send(req.query['hub.challenge']); } else { console.error("Failed validation. Make sure the validation tokens match."); res.sendStatus(403); } }); // Spin up the server app.listen(app.get('port'), function() { console.log('running on port', app.get('port')); }); 

console.log(req.query)返回一个空的对象,并且总是if-else执行的其他部分,并且控制台打印出:“validation失败,确认validation令牌匹配。

我想你可能在设置webhook的时候使用了“ https:// your_heroku_url / webhook ”作为你的callbackurl,但是你在代码中调用了“ https:// your_heroku_url / ”。 尝试下面的代码:

 app.get('/webhook', function (req, res) { if (req.query['hub.verify_token'] === VALIDATION_TOKEN) { console.log("Validating webhook"); res.status(200).send(req.query['hub.challenge']); } else { console.error("Failed validation. Make sure the validation tokens match."); res.sendStatus(403); } }); 

参考: https : //developers.facebook.com/docs/messenger-platform/guides/quick-start