Fb开发人员问题 - '无法验证URL。回复与预期的挑战“

时间:2017-05-09 21:59:23

标签: 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-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

的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

web: node app.js

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

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

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

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您需要将FB指向其中包含验证功能的路由。您当前正在将FB指向站点根索引'/'

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

如果这不起作用,请注意您已将验证令牌硬编码为test-token

...

if (req.query['hub.verify_token'] === 'test-token') { ...

如果您将webhook验证令牌设置为'test-token',则只会完成此挑战。做这个imo的更好方法是:

...

if (req.query['hub.verify_token'] === process.env.VERIFY_TOKEN ) { ...

在上面的示例中,在尝试验证webhook之前,您必须在运行服务器时传入为webhook选择的验证令牌。

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