node.js - Facebook 开发者问题 - 'URL couldn' 待验证。响应与预期挑战不符'

标签 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"
  }
}

Proc文件

web: node app.js
<小时/>

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

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

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

非常感谢您的帮助!

最佳答案

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

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

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

...

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

只有在 'test-token' 是您设置的 webhook 验证 token 时,这才会完成挑战。在我看来,更好的方法如下:

...

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

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

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

关于node.js - Facebook 开发者问题 - 'URL couldn' 待验证。响应与预期挑战不符',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43880550/

相关文章:

android - Libgdx 中的 Facebook 集成

java - Heroku 无法找到主类

django - 通过 Django 设置事务\查询超时?

javascript - 在 NodeJS MongoDB 中保留嵌套 for 循环和回调中的执行顺序

node.js - Laravel 混合 : What's the difference between scripts() and combine()?

javascript - 如果没有参数,node.js next() 中间件函数如何工作?

ios - IOS 中的 Facebook 错误代码=7

ios - 在登录成功时运行函数 MGTwitterEngine ala FBConnect

ruby-on-rails - 删除 Rails 应用并将其重新部署到 heroku

node.js - 单元测试快速路由调用 Controller 方法?