У меня относительно простой Facebook Messenger бот в php для исследовательских целей:
$access_token = "xxxxxxx"; $challenge = $_REQUEST['hub_challenge']; $verify_token = $_REQUEST['hub_verify_token']; if ($verify_token === 'MY_VERIFICATION_TOKEN') { echo $challenge; } $input = json_decode(file_get_contents('php://input'), true); $sender = $input['entry'][0]['messaging'][0]['sender']['id']; $message = $input['entry'][0]['messaging'][0]['message']['text']; $url = 'https://graph.facebook.com/v2.6/me/messages?access_token='.$access_token.'; $ch = curl_init($url); if($message=="hi") { $jsonData = '{ "recipient":{ "id":"'.$sender.'" }, "message":{ "text":"hello!" } }'; } $jsonDataEncoded = $jsonData; curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); $result = curl_exec($ch);
и мое задание cron такое же, как в руководстве разработчика
curl -ik -X POST "https://graph.facebook.com/v2.6/me/subscribed_apps?access_token=xxxxxx"
Так что в принципе, ничего, кроме связи и одного ответа. Когда я лично отправляю «привет» (как владелец страницы и владелец приложения), мой бот всегда отвечает правильно, но когда другие люди пытаются сказать, что хи-бот иногда отвечает, иногда нет (обычно нет, в 5 случаях бот ответил один раз)
Кроме того, когда я нахожусь в URL-адресе моего скрипта, это дает мне ошибку:
{"error":{"message":"(#100) The parameter recipient is required","type":"OAuthException","code":100,"fbtrace_id":"DvrO1UEw5BJ"}}
Пожалуйста, помогите мне установить это право.
Это также может произойти, если вы забудете также установить тип содержимого.
Только пользователи, зарегистрированные в качестве админов или разработчиков или тестеров в ваших ролях приложений ( https://developers.facebook.com/apps/YOUR_APP_ID/roles/ ), могут взаимодействовать с вашим веб-хостом чата. Он не будет доступен другим пользователям, если ваше приложение не одобрено Facebook и не будет доступно. Из Документов :
Когда вы будете готовы опубликовать свое приложение для общественности, он должен пройти процесс утверждения. Это проведет вас через процесс подачи, а также приемлемое и неприемлемое использование.
Что касается второго вопроса, Facebook отправляет API-запрос на ваш веб-сайт в виде данных JSON, который включает идентификатор отправителя и идентификатор получателя в теле запроса HTTP. Но когда вы посещаете свой веб-сайт вручную, у вас нет этих параметров в вашем теле запроса, поэтому отправитель будет пустым в вашем случае. И поэтому запрос CURL на API Facebook не работает с ошибкой «Требуется получатель параметров», потому что "recipient":{"id":"'.$sender.'"},
Будет пустым.
Если вы хотите попробовать свой webhook вручную, используйте фактический идентификатор получателя , например:
Команда Curl:
curl -i -X POST -H 'Content-Type: application/json' -d '{"object":"page","entry":[{"id":43674671559,"time":1460620433256,"messaging":[{"sender":{"id":853241244787916},"recipient":{"id":43674671559},"timestamp":1460620433123,"message":{"mid":"mid.1460620432888:f8e3412003d2d1cd93","seq":12604,"text":"Testing Chat Bot .."}}]}]}' https://YOUR_WEBHOOK_URL_HERE