Я занимаюсь разработкой чата на 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);
Как решить эту проблему? кто-нибудь может показать мне путь?
Решил это, проверив файл laravel.log.
$this->messageText = isset($this->input['entry'][0]['messaging'][0]['message']['text']) ? $this->input['entry'][0]['messaging'][0]['message']['text'] : '' ;
messageText должен быть таким. вот почему это вызывает ошибку.
Других решений пока нет …