O que são Webhooks?
Na prática os Webhooks (também conhecidos como HTTP push APIs ou Web Calbacks e em português diríamos: Ganchos Web) servem para que um sistema ou aplicativo possa enviar informações ou dados para outros sistemas e aplicativos de forma passiva, o que torna o processo realmente rápido (praticamente em tempo real).
Apesar de utilizar um conceito semelhante ao das APIs, um webhook não precisa de validações, os dados podem trafegar por uma “via de mão única” e em geral são ativados por gatilhos (Trigers) de eventos.
Uma vez que determinado evento tenha ocorrido, o webhook dispara uma requisição HTTP (em geral do tipo POST) para que a outra aplicação receba os dados (normalmente no formato XML ou Json) em determinada URL.
Como os Webhooks do GemMail funcionam?
Simples, funcionam no momento de criar sua campanha, basta inserir a URL de destino. Os dados são enviados em formato JSON.
Webhooks de aberturas
Ao criar uma campanha, você poderá adicionar webhooks de aberturas no momento que estiver configurando a sua campanha.
Para adicionar uma URL de Webhook em clique no botão “+ Mostrar Mais Opções”.
A tela será expandida para baixo mostrando algumas formas de interação com a campanha, procure o Box “Webhooks de assinantes após a abertura da campanha”, em “Webhook URL” insira o domínio do seu aplicativo que receberá os dados do GemMail.
Seus aplicativos receberão dados no seguinte formato:
{ "event": { "type": "open", "ip_address": "192.17.0.1", "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36", "date_added": "2018-12-05 07:24:31" }, "timestamp": 1543994693, "list": { "attributes": { "list_uid": "va040m9kye4sb", "name": "Lista de Clientes #1" } }, "subscriber": { "attributes": { "subscriber_uid": "nb456skdh129", "email": "email@dominio.com.br", "source": "import", "status": "confirmed", "ip_address": "192.17.0.1" }, "fields": { "EMAIL": "email@dominio.com.br", "FNAME": "Fname Updated", "LNAME": "Lname Updated" } }, "campaign": { "attributes": { "campaign_uid": "mn582trps61si", "name": "Campanha teste webhook #1" } } }
Webhooks de cliques
Para cliques, você pode adicionar o webhook na etapa de Configurar o Template ou Modelo da Campanha.
Ao final da Página procure o botão “Webhooks de assinantes que clicam em links”.
Você pode ter quantos webhooks forem necessários.
Quando alguém abrir a campanha ou clicar em qualquer um dos links atribuídos aos webhooks, o GemMail gravará um evento na fila e quando a tarefa (cron do sistema) for executada, o GemMail processará esses eventos e enviará os dados corretos para o URL do webhook que você tiver registrado. Caso o envio para um URL falhe, o GemMail tentará novamente 5 vezes.
Os dados serão enviados neste formato:
{ "event": { "type": "click", "ip_address": "192.17.0.1", "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36", "date_added": "2018-12-05 07:24:35", "clicked_url": "https://meudominio.com.br/meu_produto_xyz" }, "timestamp": 1543994694, "list": { "attributes": { "list_uid": "va040m9kye4sb", "name": "Lista de Clientes #1" } }, "subscriber": { "attributes": { "subscriber_uid": "nb456skdh129", "email": "email@dominio.com.br", "source": "import", "status": "confirmed", "ip_address": "172.17.0.1" }, "fields": { "EMAIL": "email@dominio.com.br", "FNAME": "Fname Updated", "LNAME": "Lname Updated" } }, "campaign": { "attributes": { "campaign_uid": "mn582trps61si", "name": "Campanha teste webhook #1" } } }
Exemplo rápido em PHP
O seu código PHP para receber o Webhook do GemMail deve ficar semelhante ao exemplo abaixo:
<?php $data = json_decode(file_get_contents('php://input'), true); if ($data['event']['type'] == 'open') { // Dados de abertura - insira seu código } elseif ($data['event']['type'] == 'click') { // Dados de Cliques - insira seu código }
?>
Daí para frente o show é seu, possivelmente suas integrações usarão conexões com as APIs de outros aplicativos e você deverá seguir a documentação deles.