Бот fb messenger всегда возвращает пустой json при проверке вебхуков

Мой бот node js не может проверить токен проверки для платформы ботов facebook messenger. Я правильно выполнил настройку веб-перехватчика в консоли разработчика, следуя данной официальной документации. Я уже создавал чат-бота, поэтому могу быть уверен, что правильно настроил параметры консоли приложения. Пожалуйста, проверьте мой следующий код и скажите, если с ним что-то не так.

'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, и консоль выводит: «Проверка не удалась. Убедитесь, что токены проверки совпадают».


person Sumedh Nimkarde    schedule 13.02.2017    source источник
comment
Ваш маршрут веб-перехватчика ничего не возвращает, даже когда вы пытаетесь использовать команду curl? Кроме того, разве мессенджер Facebook не разрешает только URL-адрес обратного вызова с https? Я спрашиваю об этом, поскольку в вашем коде нет кода https. еще раз проверьте настройку веб-перехватчика.   -  person sam    schedule 14.02.2017
comment
он возвращает {успех: правда}. и да, я использую героку.   -  person Sumedh Nimkarde    schedule 14.02.2017
comment
Я фактически скопировал код из примеров, предоставленных facebook.   -  person Sumedh Nimkarde    schedule 14.02.2017


Ответы (1)


Я думаю, возможно, что вы использовали "https://your_heroku_url/webhook" в качестве URL-адреса обратного вызова при настройке веб-перехватчика, но вы вызываете "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

person sam    schedule 14.02.2017
comment
Нет, я сделал настройку правильно. Я получаю сообщения пользователя по почтовому запросу. - person Sumedh Nimkarde; 14.02.2017
comment
хм... как вы могли получить почтовый запрос, если веб-хук не проверен? - person sam; 14.02.2017