FB messenger Bot не получает постбэки

Я занимаюсь разработкой чата на Facebook. Я столкнулся с проблемой, которую не могу решить. Я развиваю это в Laravel. Здесь я не могу получить полезную нагрузку обратной передачи. вот мой код


индекс публичной функции (Request $ request) {
if ($ request-> hub_verify_token === $ this-> verifyToken) {
echo $ request-> hub_challenge;
выход;
}

$ input = json_decode (file_get_contents ("php: // input"), true);
$ senderId = $ input ['entry'] [0] ['message'] [0] ['sender'] ['id'];
$ messageText = $ input ['entry'] [0] ['message'] [0] ['message'] ['text'];
$ pageId = $ input ['entry'] [0] ['id'];

$ accessToken = "access_token_that_got_from_fb";

// установить сообщение
if ($ messageText! = "") {
$ answer = "Привет! Пользователь";
}

if ($ messageText == "hello") {
$ answer = 'Привет от бота';
}

foreach ($ input ['entry'] [0] ['message'] как $ message) {
// Когда бот получает сообщение от пользователя
if (! empty ($ message ['postback'])) {
$ answer = 'получил это тада';
}
}

// отправить сообщение в фейсбук бот
$ response = [
'receient' => ['id' => $ senderId],
'message' => ['text' => $ answer] // json_encode ($ request-> getContent ())
];


$ ch = curl_init ('https://graph.facebook.com/v2.11/me/messages?access_token='.$accessToken);
curl_setopt ($ ch, CURLOPT_POST, 1);
curl_setopt ($ ch, CURLOPT_POSTFIELDS, json_encode ($ response));
curl_setopt ($ ch, CURLOPT_HTTPHEADER, ['Content-Type: application / json']);

$ result = curl_exec ($ ch);
curl_close ($ ч);
}

и мой маршрут

Route::any('chatbot', 'ChatbotController@index');

здесь сообщение работает. но запрос обратной передачи не отправляется на сервер. с другой стороны, используя тот же код в обычном php-файле, я могу получить payback для обратной передачи.


$ hubVerifyToken = 'chatbot';
$ accessToken = "access_token";
// проверяем токен при настройке
if ($ _REQUEST ['hub_verify_token'] === $ hubVerifyToken) {
echo $ _REQUEST ['hub_challenge'];
выход;
}
// обрабатывать ответ бота
$ input = json_decode (file_get_contents ('php: // input'), true);
$ senderId = $ input ['entry'] [0] ['message'] [0] ['sender'] ['id'];
$ messageText = $ input ['entry'] [0] ['message'] [0] ['message'] ['text'];
$ postback = isset ($ input ['entry'] [0] ['message'] [0] ['postback'] ['payload'])? $ input ['entry'] [0] ['message'] [0] ['postback'] ['payload']: '';

// установить сообщение
if ($ messageText == "hi") {
$ answer = "Hello";
}
if ($ messageText == "hello") {
$ answer = "Привет, добро пожаловать в Chatleads";
}

if ($ postback) {
$ answer = "postback TADA";
}

// отправить сообщение в фейсбук бот
$ response = [
'receient' => ['id' => $ senderId],
'message' => ['text' => $ answer]
];

$ ch = curl_init ();

curl_setopt ($ ch, CURLOPT_URL, "https://graph.facebook.com/v2.11/me/messages?access_token=$accessToken");
curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ ch, CURLOPT_POSTFIELDS, json_encode ($ response));
curl_setopt ($ ch, CURLOPT_POST, 1);

$ headers = array ();
$ headers [] = "Content-Type: application / json";
curl_setopt ($ ch, CURLOPT_HTTPHEADER, $ заголовки);

$ result = curl_exec ($ ch);
if (curl_errno ($ ch)) {
echo 'Ошибка:'. curl_error ($ ч);
}
curl_close ($ ch);

Как решить эту проблему? кто-нибудь может показать мне путь?

1

Решение

Решил это, проверив файл laravel.log.

$this->messageText  = isset($this->input['entry'][0]['messaging'][0]['message']['text']) ? $this->input['entry'][0]['messaging'][0]['message']['text'] : '' ;

messageText должен быть таким. вот почему это вызывает ошибку.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]