Фейсбук чат-пост не работает

Я установил работающий чат-бот Facebook в PHP и создал шаблонную карусель с одной из кнопок обратной передачи:

[
type"=>"postback",
"title"=>"Opening Hours",
"payload"=>"Opening Hours"],

Нажав кнопку обратной передачи и проверив мои логи PHP, я получаю:

{"object":"page","entry":[{"id":"457107221010xxx","time":1513219207386,
"messaging": [{"recipient":
{"id":"457107221010xxx"},"timestamp":1513219207386,"sender":
{"id":"1510264525690xxx"},"postback":{"payload":"Opening
Hours","title":"Opening Hours"}}]}]}

Я обрабатываю этот постбэк в моем коде:

$postback = $input['entry'][0]['messaging'][0]['postback']['payload'];
if ($postback!="") {
$answer = ["text"=> $openingHours];
}

Но в окне мессенджера после нажатия упомянутой кнопки обратной передачи, мессенджер, кажется, «печатает» с диалоговым окном с тремя точками, которое отображается в течение нескольких секунд, но затем оно просто останавливается без каких-либо ответов. Я включил опцию «message_postback» в webhooks, и другие запросы работают (например, если я введу «Часы работы» вручную, я получу ответ «Часы работы»). Я обрабатываю другие запросы с помощью следующего кода, и он работает:

$sender     = $input['entry'][0]['messaging'][0]['sender']['id'];
$message    = $input['entry'][0]['messaging'][0]['message']['text'];
if(preg_match('[opening|hours]', strtolower($message))) {
$answer =     ["text"=>"Opening Hours:
10:30 am – 1:00 am (Sun-Thu)"];
} else {
//show menu
}

Любой совет высоко ценится!

0

Решение

Поскольку я не вижу код, который запускает фактическую отправку, ошибка может быть найдена там. Если вы скопировали базовый урок, он может выглядеть так, как я начинал давным-давно:

if(preg_match('[time|current time|now]', strtolower($message))) {
$message_to_reply = date('l jS \of F Y h:i:s A');
} else {
$message_to_reply = 'Huh! what do you mean?';
}

// your code here
$postback = $input['entry'][0]['messaging'][0]['postback']['payload'];
if ($postback!="") {
$message_to_reply = "postback!";
$foundPostback = true;
}

$url = 'https://graph.facebook.com/v2.11/me/messages?access_token='.$access_token;
$ch = curl_init($url);
$jsonData = '{
"recipient":{
"id":"'.$sender.'"},
"message":{
"text":"'.$message_to_reply.'"}
}';

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

if(!empty($input['entry'][0]['messaging'][0]['message']) || $foundPostback ){
$result = curl_exec($ch);
}

Обратите внимание на $foundPostback, Если ваш триггер отправки выглядит так из одного учебника, он не будет отправлять сообщения, так как нет $input['entry'][0]['messaging'][0]['message']атрибут в постбэках. Так что, если вы обнаружите обратную передачу, вы должны сохранить этот флаг.


введите описание изображения здесь


Тем не менее, я настоятельно рекомендую создавать собственные классы для обработки сообщений, обратной передачи, доставки, эха и так далее. Подробнее о тех, кого вы можете найти здесь: Документы Facebook Messenger

3

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

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

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