facebook — Fecebook Messenger Bot на PHP не всегда отвечает пользователю

У меня есть относительно простой бот 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 случаях бот отвечал один раз)

Кроме того, когда я захожу в свой скрипт, я получаю сообщение об ошибке:

{"error":{"message":"(#100) The parameter recipient is required","type":"OAuthException","code":100,"fbtrace_id":"DvrO1UEw5BJ"}}

Пожалуйста, помогите мне исправить это.

3

Решение

Это также может произойти, если вы забудете установить тип контента.

6

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

Только пользователи, перечисленные как Админы или же Разработчики или же Тестеры в ролях вашего приложения (https://developers.facebook.com/apps/YOUR_APP_ID/roles/) может взаимодействовать с вашим чат-ботом. Оно не будет доступно для других пользователей, если ваше приложение не будет одобрено Facebook и не станет общедоступным. От Документы:

Когда вы будете готовы опубликовать свое приложение для общественности, оно должно пройти процедуру одобрения. Это проведет вас через процесс представления, а также допустимое и недопустимое использование.

Что касается вашего второго вопроса, Facebook отправляет вызов API на ваш webhook в форме данных JSON, который включает в себя Удостоверение личности отправителя & идентификатор получателя в теле HTTP-запроса. Но когда вы посещаете ваш webhook вручную, у вас нет этих параметров в теле запроса, поэтому $ отправитель будет пустым в вашем случае. И именно поэтому запрос CURL к Facebook API не выполняется с ошибкой «Требуется получатель параметра», потому что "recipient":{"id":"'.$sender.'"}, будет пустым.

Если вы хотите попробовать свой веб-крючок вручную, используйте актуальный идентификатор получателя, что-то вроде:

Curl Command:

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
4

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