Node.js Fb开发商问题-';URL无法';无法验证。响应与预期的质询不匹配';

Node.js Fb开发商问题-';URL无法';无法验证。响应与预期的质询不匹配';,node.js,facebook,heroku,chatbot,facebook-chatbot,Node.js,Facebook,Heroku,Chatbot,Facebook Chatbot,我使用以下文件启动了Heroku应用程序:- app.js '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-w

我使用以下文件启动了Heroku应用程序:-

app.js

'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())

// Index route
app.get('/', function (req, res) {
    res.send("Hello world, I seem to be working")

})

// for Facebook verification
app.get('/webhook', function (req, res) {
    if (req.query['hub.verify_token'] === 'test-token') {
      res.send(req.query['hub.challenge']);
   } else {
      res.send('Error, wrong validation token');    
   }
})

// Spin up the server
app.listen(app.get('port'), function() {
    console.log('running on port', app.get('port'))
})
.gitignore

node_modules
web: node app.js
package.json

{
  "name": "heroku-node-practice",
  "version": "1.0.0",
  "description": "New bot",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node app.js"
  },
  "author": "Paigal",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.17.1",
    "express": "^4.15.2",
    "foobar": "^1.1.0",
    "mongoose": "^4.9.8",
    "request": "^2.81.0"
  }
}
Procfile

node_modules
web: node app.js

我使用以下命令安装了node.js依赖项:
npm install express request body parser--save

在git push heroku master之后,应用程序将正确启动

但是,当尝试在fb developer中设置webhook时,错误是“无法验证URL”。响应与预期的质询不匹配”,然后对质询给出不同的响应。也就是说,我的URL响应为“Hello world,我似乎正在工作”,而不是数字键


非常感谢您的帮助

您需要将FB指向具有验证功能的路由。您当前正在将FB指向站点根索引
“/”

将应用程序设置中的FB webhook url更改为
https://YOUR_DOMAIN.com/webhook
,验证将完成。然后,FB会将您订阅的任何事件发送到您的
'/webhook'
路线

如果这不起作用,请注意,您已经将验证令牌硬编码为
测试令牌

...

if (req.query['hub.verify_token'] === 'test-token') { ...
只有当您将webhook验证令牌设置为
“test-token”
时,这才会完成挑战。一个更好的方法是:

...

if (req.query['hub.verify_token'] === process.env.VERIFY_TOKEN ) { ...
在上面的示例中,在尝试验证webhook之前,必须在运行服务器时传入为webhook选择的验证令牌。


在heroku仪表板中,添加
VERIFY_TOKEN
,将您的TOKEN作为配置变量的值。这将使验证令牌无需硬编码即可使用。

听起来好像您没有为webhook指定正确的URL…谢谢-这很有效!只需将/webhook添加到url。非常感谢你的帮助。