Я не могу заставить моего чата Messenger успешно ответить на полезную нагрузку

Поэтому я пытаюсь реализовать «быстрые ответы» в соответствии с документами здесь: https://developers.facebook.com/docs/messenger-platform/send-messages/quick-replies#text

У меня есть чат-бот, который может успешно отвечать на любые сообщения пользователя. Моя основная проблема возникает, когда ответом является полезная нагрузка быстрого ответа, поэтому у меня это в самом верху:

$postback = isset($input['entry'][0]['messaging'][0]['postback']['payload']) ? $input['entry'][0]['messaging'][0]['postback']['payload']: '' ;
$message = isset($input['entry'][0]['messaging'][0]['message']['text']) ? $input['entry'][0]['messaging'][0]['message']['text']: '' ;

После этого я проверяю, какой это тип сообщения. Если это «сообщение», то отображаются некоторые ответы. Если это «постбэк», то другие. Однако внутри «сообщения» я также проверяю быстрый ответ ($qr) и если значение не пустое, оно должно идти в этом if но он этого не делает, и я понятия не имею, почему.

К концу у меня есть replyUser метод, который принимает $ jsonData и просто отвечает. Это работает нормально. Кроме того, defaultJSON ответ просто отправляет открытый текст, пока jsonQuickReplies форматирует JSON, чтобы быть быстрым ответом. Я знаю, что это работает, потому что я вижу быстрые ответы, нет проблем, только после того, как пользователь выбирает тот, который ничего не происходит.

Полезная нагрузка обратной передачи (даже если она $input['entry'][0]['messaging'][0]['message']['quick_reply']['payload'] по какой-то причине пропускает if, и я понятия не имею, почему (поэтому он всегда отправляет мне сообщение под словом «else».

if($message || $postback) {

if($message){

$qr = isset($input['entry'][0]['messaging'][0]['message']['quick_reply']['payload']) ? $input['entry'][0]['messaging'][0]['message']['quick_reply']['payload']: '' ;

if(!empty($qr)){
if(preg_match('[postback payload from qr]', strtolower($qr))){
$message_to_reply = "Something for the user";
$jsonData = defaultJSON($sender, $message_to_reply);
}
}

//Some Basic rules to validate ("chat") incoming messages
if(preg_match('[hey]', strtolower($message))) {
$message_to_reply = "welcome message to the user";
$jsonData = jsonQuickReplies($sender, $message_to_reply);
}else {
$message_to_reply = "default message not knowing what the user said";
$jsonData = defaultJSON($sender, $message_to_reply);
}else if($postback){
// If Page receives Postback, process the Postback and prepare content to reply
if(preg_match('[any postback]', strtolower($postback))){
$message_to_reply = "process postback";
$jsonData = defaultJSON($sender, $message_to_reply);
}
}
}

Var разбивка:

$postback содержит любой постбэк, назначенный ответом.

$message будет все, что пользователь отправляет.

$qr любое значение быстрого ответа, прочитанное из данных обратной передачи.

$message_to_reply текстовое сообщение, которое будет отправлено пользователю в ответ.

$jsonData это только окончательные значения JSON, отправленные для replyUser использовать в ответе.

$sender это идентификатор пользователя, который только что подключился к чатботу.

Путь к коду следующий: любой пользователь отправляет что-либо. Это сообщение затем читается $postback или же $message переменные (буквально глядя в $input, После этого, если следует, и если это $message следует по этому маршруту (верно обратное, если это $postback). После этого сообщение создается либо defaultJSON() или же jsonQuickReplies() метод и, наконец, replyUser принимает значения и отправляет их пользователю.

0

Решение

Ваши брекеты не совпадают. Я просто попытаюсь сделать так, чтобы код соответствовал фигурным скобкам, чтобы сделать его более наглядным.

if($message || $postback) {

if($message){

$qr = isset($input['entry'][0]['messaging'][0]['message']['quick_reply']['payload']) ? $input['entry'][0]['messaging'][0]['message']['quick_reply']['payload']: '' ;

if(!empty($qr)){
if(preg_match('[postback payload from qr]', strtolower($qr))){
$message_to_reply = "Something for the user";
$jsonData = defaultJSON($sender, $message_to_reply);
}
}

//Some Basic rules to validate ("chat") incoming messages
if(preg_match('[hey]', strtolower($message))) {
$message_to_reply = "welcome message to the user";
$jsonData = jsonQuickReplies($sender, $message_to_reply);
}else {
$message_to_reply = "default message not knowing what the user said";
$jsonData = defaultJSON($sender, $message_to_reply);
//MISSING BRACE
}else if($postback){
// If Page receives Postback, process the Postback and prepare content to reply
if(preg_match('[duda]', strtolower($postback))){
$message_to_reply = "process postback";
$jsonData = defaultJSON($sender, $message_to_reply);
}
}
}
0

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

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

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