Como funciona o WebHook de mensagens recebidas?

Como funciona o WebHook de mensagens recebidas?

A primeira coisa que você precisa fazer é ativar 'Leitura Recebida' na gaveta de navegação. Você pode fazer isso seguindo este guia .

Você precisa criar um script como sugerido na seção WebHook Example Script da página da  API no seu Painel de Administração e carregá-lo no seu servidor. Basta fornecer sua URL no formulário Add WebHook na página da API e clicar no botão Save. Agora, sempre que você receber uma mensagem no seu dispositivo, esse script será executado automaticamente.

Lembre-se, você não pode executar o script WebHook diretamente. Não vai funcionar.

Aqui está um exemplo detalhado de como adicioná-lo.

[1] Faça login no seu Painel de Administração e abra a página da API. Você verá uma seção chamada "Webhook Example Script" conforme mostrado na captura de tela abaixo.

[2] Basta copiar todo o texto dentro desta seção. Agora crie um arquivo PHP chamado "hook-example.php" na raiz do seu servidor, e cole todo o texto que você copiou daquela seção neste arquivo.

[3] Agora, para fazer funcionar, você tem que adicionar a URL do arquivo que criamos. Basta fazer login no seu Painel de Administração e abrir sua página de API. Você verá uma seção chamada "Adicionar Webhook para mensagens recebidas". Basta digitar a URL para "hook-example.php" no formulário e pressionar salvar, conforme mostrado abaixo. É recomendado fornecer uma URL segura (começa com https://) se a URL do seu servidor também for uma URL segura.

[4] Agora você deve ativar o "Read Received" no aplicativo móvel, conforme mostrado aqui , caso ainda não tenha feito isso.

Agora, sempre que você receber a mensagem no seu dispositivo registrado na conta do SMS Gateway onde você adicionou este webhook, o script do webhook será chamado automaticamente.

Exemplo de Script WebHook

Criar script com o seguinte conteúdo e gerar URL como WebHook.

define("API_KEY", "58a894148c1933ebdf387182a638044d2ec1bffd");

try {
    if (isset($_SERVER["HTTP_X_SG_SIGNATURE"])) {
        if (isset($_POST["messages"])) {
            $hash = base64_encode(hash_hmac('sha256', $_POST["messages"], API_KEY, true));
            if ($hash === $_SERVER["HTTP_X_SG_SIGNATURE"]) {
                $messages = json_decode($_POST["messages"], true);
    
                /**
                 * For example :-
                 * $messages = [
                 *                 0 => [
                 *                          "ID" => "1",
                 *                          "number" => "+11234567890",
                 *                          "message" => "This is a test message.",
                 *                          "deviceID" => "1",
                 *                          "simSlot" => "0",
                 *                          "userID" => "1",
                 *                          "status" => "Received",
                 *                          "sentDate" => "2018-10-20T00:00:00+02:00",
                 *                          "deliveredDate" => "2018-10-20T00:00:00+02:00"
                 *                          "groupID" => null
                 *                      ]
                 *             ]
                 *
                 * senDate represents the date and time when the message was received on the device.
                 * deliveredDate represents the date and time when the message was received by the server.
                 */
    
                foreach ($messages as $message) {
                    if(strtolower($message["message"]) === "hi") {
                        // Reply to message using API or execute some commands. Possibilities are limitless.
                    }
                }
            } else {
                throw new Exception("Signature don't match!");
            }
        } else if (isset($_POST["ussdRequest"])) {
            $hash = base64_encode(hash_hmac('sha256', $_POST["ussdRequest"], API_KEY, true));
            if ($hash === $_SERVER["HTTP_X_SG_SIGNATURE"]) {
                $ussdRequest = json_decode($_POST["ussdRequest"]);
                $deviceID = $ussdRequest->deviceID;
                $simSlot = $ussdRequest->simSlot;
                $request = $ussdRequest->request;
                $response = $ussdRequest->response;
                
                // Do whatever you want with data you received.
            } else {
                throw new Exception("Signature don't match!");
            }
        }
    } else {
        http_response_code(400);
        error_log("Signature not found!");
    }
} catch (Exception $e) {
    http_response_code(401);
    error_log($e->getMessage());
}

______