Получение и ошибка, неправильный токен проверки при попытке создать чат-бота Facebook

Я пытаюсь создать чат-бот Facebook с NodeJS, Express и сервером Heroku.

Я создал свой веб-хук на героку, проверил и сохранил его в Facebook. Затем я начал добавлять код, который будет отвечать на входящие сообщения, и я не могу его подключить. Он продолжает говорить «Ошибка, неверный токен проверки», когда я пытаюсь загрузить свой веб-хук в своем браузере. И когда я пытаюсь отправить своему боту сообщение, я не получаю ответа. Хотя я уже проверил его и не менял код.

Вот мой код:

var express = require('express');
var bodyParser = require('body-parser');

var app = express();
var port = process.env.PORT || 3000;

// body parser middleware
app.use(bodyParser.urlencoded({ extended: true }));

// test route
//app.get('/', function (req, res) { res.status(200).send('Hello world!') });

app.get('/', function (req, res) {
  if (req.query['hub.verify_token'] === '8FKU9XWeSjnZN4ae') {
    res.send(req.query['hub.challenge']);
  }
  res.send('Error, wrong validation token');
})

app.post('/', function (req, res) {
  messaging_events = req.body.entry[0].messaging;
  for (i = 0; i < messaging_events.length; i++) {
    event = req.body.entry[0].messaging[i];
    sender = event.sender.id;
    if (event.message && event.message.text) {
      text = event.message.text;
      sendTextMessage(sender, "Text received, echo: "+ text.substring(0, 200));
    }
  }
  res.sendStatus(200);
});

// error handler
app.use(function (err, req, res, next) {
  console.error(err.stack);
  res.status(400).send(err.message);
});

app.listen(port, function () {
  console.log('Listening on port ' + port);
});

var token = <myToken>;

function sendTextMessage(sender, text) {
  messageData = {
    text:text
  }
  request({
    url: 'https://graph.facebook.com/v2.6/me/messages',
    qs: {access_token:token},
    method: 'POST',
    json: {
      recipient: {id:sender},
      message: messageData,
    }
  }, function(error, response, body) {
    if (error) {
      console.log('Error sending message: ', error);
    } else if (response.body.error) {
      console.log('Error: ', response.body.error);
    }
  });
}

Поэтому я не понимаю, почему ничего не происходит и почему я получаю эту ошибку. Я чувствую, что пропускаю целый шаг. Кстати, я следую этому руководству: https://developers.facebook.com/docs/messenger-platform/quickstart

Любая помощь приветствуется. Спасибо!

Редактировать: вот мои журналы heroku

Журналы Heroku


person Eric Walier    schedule 16.04.2016    source источник
comment
У меня такая же проблема. В общем получаю ошибку 500. Вот и все!   -  person helicopter    schedule 16.04.2016
comment
Хотелось бы лучшей документации. Я понимаю, хотя, потому что это так ново   -  person Eric Walier    schedule 16.04.2016


Ответы (2)


  1. Не размещайте здесь свои токены полного доступа!
  2. Вы тестировали результат задачи? Поскольку это просто GET, и вы знаете все значения, вы можете попробовать это сами: your-app-domain.com/your-callback-url?hub_mode=subscribe&hub_verify_token=the_token_you_set_in_your_app_config&hub_challenge=ping, который должен напечатать 'ping', если все работает нормально.
  3. Убедитесь, что вы также добавили sendStatus(200) в ответ на вызов концентратора.
  4. Сначала вам нужно подписаться на свою страницу в приложении. Для этого сделайте POST-запрос к /your-page-id/subscribed_apps, который должен вернуть «успех». После этого вы можете сделать запрос GET к той же конечной точке, чтобы дважды проверить, подписано ли ваше приложение на вашу страницу.
  5. Вы не указали, на какие события вы подписаны (должны быть сообщения message_deliveries, messages, messages_optins, messages_postbacks)
  6. Убедитесь, что на вкладке веб-перехватчиков на панели инструментов вашего приложения теперь указано «завершено».
  7. Проверить еще раз
person lars.schwarz    schedule 18.04.2016
comment
Эй, спасибо за помощь. Однако быстрый вопрос. Будет ли graph.facebook.com/v2.6/me обратным вызовом? url для шага 2 или я далеко не в этом - person Eric Walier; 18.04.2016
comment
URL-адрес обратного вызова — это URL-адрес, указанный вами в приложении в разделе Веб-перехватчики › Подписка на страницу. Эта конечная точка /me — это URL-адрес, из которого можно получить имя пользователя, чтобы вы могли использовать его для сообщения Hello xy. - person lars.schwarz; 18.04.2016

На самом деле вы используете «запрос», но никогда никуда его не импортируете. Вот как это исправить:

var request = require("request")

После того, как вы добавили это в свой файл index.js или app.js (в основном, каким бы ни был этот файл), убедитесь, что вы сделали:

npm install request --save

Это должно исправить это. К сожалению, Heroku не ошибается и не говорит, что не знает, что такое «запрос», и именно поэтому было так сложно понять это с самого начала!

person helicopter    schedule 16.04.2016
comment
После попытки я все еще получаю сообщение об ошибке и никакого ответа от моего бота. - person Eric Walier; 17.04.2016
comment
@EricWalier Это та же ошибка? Можете ли вы отправить свое сообщение журнала ошибок, пожалуйста? Вы также можете использовать журналы heroku --tail для проверки журналов в реальном времени. - person helicopter; 17.04.2016
comment
Да такая же ошибка. Я добавил правку в свой пост с изображением журнала - person Eric Walier; 17.04.2016