Поэтому я пытаюсь реализовать «быстрые ответы» в соответствии с документами здесь: 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
принимает значения и отправляет их пользователю.
Ваши брекеты не совпадают. Я просто попытаюсь сделать так, чтобы код соответствовал фигурным скобкам, чтобы сделать его более наглядным.
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);
}
}
}
Других решений пока нет …