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

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

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

$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 принимает значения и отправляет их пользователю.

1 ответ

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

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);
            }
        }
    }
Другие вопросы по тегам