Faça a Systeme.io disparar um webhook e leia o que chega
Resposta curta
Você liga uma regra de automação da Systeme.io a um endereço seu, provoca o evento e lê o corpo exato que a plataforma envia, com o código de status para conferir sozinho. Página, lista e automação ficam no mesmo painel. O teste fica de pé em uma tarde e se repete em dois minutos.
Assunto: E-mail automático
Por Alan Victor · · · 8 min de leitura
- 1escolha o evento que você consegue provocar em um minuto
- 2crie a ação de webhook dentro da regra
- 3ponha um endereço que aceite POST e mostre o corpo
- 4dispare o evento e leia o log
No fim deste guia você tem uma regra de automação da Systeme.io disparando um webhook para um endereço seu, e o corpo exato dessa requisição impresso na sua tela. O teste leva uma tarde e você repete quantas vezes quiser: quem confirma que funcionou é o código de status que volta, não a minha palavra.
Sai um guia por dia, e o canal do Telegram avisa quando sai. A ferramenta que eu uso para a página, a captura e o e-mail automático no mesmo lugar é a Systeme.io, que tem plano gratuito.
O que você vai ter no fim
- Uma regra de automação ativa na Systeme.io, com uma ação de webhook apontando para um endereço que você controla.
- O corpo da requisição registrado: os nomes internos dos campos como a plataforma os envia, com os valores do contato que disparou o evento.
- Um teste que você repete em dois minutos, mais a tabela de códigos de status para saber sozinho se o disparo chegou.
Etapa 1: escolha o evento que você consegue provocar em um minuto
Resposta direta: escolha o evento mais fácil de provocar com um contato de teste — tag aplicada, contato criado ou formulário enviado — e anote o nome dele.
Toda regra de automação começa por um gatilho: o evento que faz a regra rodar. Se você escolher algo que depende de outra pessoa, como uma compra aprovada, o teste fica esperando e você não fecha o dia com nada no ar.
Crie um contato de teste com um e-mail seu, marcado no nome, só para isso. Assim você provoca o evento dez vezes seguidas sem encostar na sua lista real, e apaga o contato no fim.
Etapa 2: crie a ação de webhook dentro da regra
Resposta direta: dentro da regra, adicione a ação de webhook, cole a URL de destino e escolha o método POST.
- No menu da conta, abra Automações e crie uma regra nova.
- Defina o gatilho como o evento que você escolheu na etapa 1.
- Adicione uma ação do tipo Webhook, que é o campo que pede uma URL. Se o seu painel chamar de requisição HTTP, é o mesmo campo.
- Cole a URL de destino, marque o método POST e deixe os cabeçalhos vazios por enquanto.
- Ative a regra. Regra em rascunho não dispara — é a causa mais comum de “não aconteceu nada”.
Eu monto isso na Systeme.io justamente porque a regra nasce no mesmo painel onde estão a página que capta o contato, a lista que guarda esse contato e os e-mails que falam com ele. Você aplica uma tag e a automação enxerga na hora, sem exportar nada para fora.
Existe também o caminho pela API, com a chave em Configurações, e ele serve para ler e escrever contatos sob demanda. Para receber o aviso de que algo aconteceu, quem empurra a requisição é a regra; este guia fica no painel. Os nomes de campo e a lógica da ação estão na central de ajuda da Systeme.io, e o outro caminho está na documentação oficial da API.
Etapa 3: ponha um endereço que aceite POST e mostre o corpo
Resposta direta: o destino precisa ser um endereço público que aceite POST e responda 200; o script abaixo faz isso e imprime o corpo que chegar.
Salve o texto como recebedor.py e rode com python3 recebedor.py. Ele fica escutando na porta 8080 e imprime cada corpo recebido.
from http.server import BaseHTTPRequestHandler, HTTPServer
class Recebedor(BaseHTTPRequestHandler):
def do_POST(self):
tamanho = int(self.headers.get("Content-Length", 0))
corpo = self.rfile.read(tamanho).decode("utf-8")
print("--- chegou ---")
print(corpo)
self.send_response(200)
self.send_header("Content-Type", "application/json")
self.end_headers()
self.wfile.write(b'{"recebido": true}')
HTTPServer(("0.0.0.0", 8080), Recebedor).serve_forever()
O que você deve ver na tela do terminal: a linha --- chegou --- e, embaixo, o corpo em uma linha só. Se o corpo vier cortado, o problema é o cabeçalho Content-Length — o script lê exatamente a quantidade de bytes que ele declara.
Aviso que evita meia hora perdida: 127.0.0.1:8080 só existe dentro da sua máquina e a Systeme.io não alcança esse endereço. Para o disparo chegar, o destino precisa ser público. Sem servidor próprio, você tem dois caminhos: subir este mesmo script em uma máquina com endereço público, ou ler só o código de status no histórico da regra e adiar a leitura do corpo até ter esse endereço. O primeiro entrega o texto; o segundo já diz se a regra está disparando.
Para fazer isso sem montar servidor
O que este guia faz por API, a Systeme.io faz por formulário: página, lista, etiqueta e e-mail automático na mesma conta. É a conta em que eu testo o que aparece aqui, e o plano gratuito já dá para publicar e capturar.
Etapa 4: dispare o evento e leia o log
Resposta direta: provoque o evento com o contato de teste e leia o código de status — 200 é o único que significa que a requisição chegou.
Aplique a tag, crie o contato ou envie o formulário, conforme o gatilho que você escolheu. Depois abra o histórico da regra e o terminal ao mesmo tempo: um mostra o status, o outro mostra o conteúdo.
| Código no log | O que significa | O que fazer |
|---|---|---|
| 200 | o seu endereço recebeu o corpo e respondeu que aceitou | nada; leia o corpo |
| 404 | o caminho da URL não existe no endereço | conferir a URL inteira, inclusive a barra final |
| 500 | o seu código quebrou ao processar a requisição | ler o erro impresso no terminal |
| 501 | o endereço existe mas não aceita POST | usar o receptor deste guia ou ajustar o método no destino |
| sem código | o endereço não respondeu no prazo | conferir se o serviço está no ar e se é público |
Na primeira leitura do corpo, anote quatro coisas: o nome do evento, o id do contato, os campos personalizados com o nome interno (não o rótulo que você vê na tela) e o carimbo de tempo. É esse texto que você vai usar para montar qualquer coisa depois.
Por que o webhook não disparou?
Resposta direta: na ordem em que costuma acontecer — a regra está em rascunho, o gatilho não é o evento que você provocou, o contato já tinha passado pela regra, ou o endereço não respondeu.
- Regra desativada. O histórico fica vazio, sem nenhuma linha. Ative e dispare de novo.
- Gatilho errado. Você aplicou uma tag e a regra espera contato criado. Confira o nome do evento na regra e no que você fez.
- Contato repetido. É comum a regra rodar uma vez por contato. Use um contato novo a cada teste.
- Método GET. A requisição sai, mas o corpo chega vazio, porque GET não carrega corpo. Troque para POST.
- Endereço privado ou fora do ar. O log mostra falha de conexão em vez de 200; o problema está do seu lado, não na plataforma.
Vale a pena fazer isso na Systeme.io em vez de juntar ferramentas?
Resposta direta: para mim vale, porque a regra que dispara o webhook é montada no mesmo painel da sua página, da sua lista e dos seus e-mails, e você não mantém uma segunda conta só para ligar os pontos.
Cada ferramenta a mais é uma senha a mais, um lugar a mais para o contato ficar desatualizado e uma conta a mais para pagar quando o negócio cresce. Na Systeme.io o contato do teste nasce no formulário da sua página e já está disponível para a automação.
Comecei no plano grátis e só subi de plano quando a operação pediu. Se o seu caso for o mesmo, o próximo degrau é o plano pago da própria Systeme.io — não uma pilha de assinaturas diferentes.
O que muda depois que você vê o corpo uma vez
Antes, você sabia apenas que “o contato entrou”. Depois, você sabe o nome exato do campo, o formato da data e o que a plataforma manda quando aquele evento acontece. Isso é a diferença entre pedir para alguém integrar e você mesmo decidir o que fazer com o dado.
O teste também vira rotina: mudou o formulário, mudou o campo, você dispara de novo e confere em dois minutos, em vez de descobrir o problema uma semana depois.
E é o tipo de recurso que fica meses fechado no menu sem ninguém abrir. Ligar uma vez tira ele da lista dos que você não conhece.
Se você ainda não tem conta, o convite é este: crie a conta grátis da Systeme.io pelo botão desta página e faça a Etapa 1 agora, enquanto o guia está aberto. Montar a regra e ver o primeiro 200 no log leva menos tempo do que continuar decidindo se vale a pena.
O que eu não vou afirmar
- Não afirmo que o corpo tem sempre o mesmo formato: ele muda com o evento e com os campos que você criar.
- Não afirmo prazo de entrega nem número de tentativas em caso de falha, porque não medi.
- Não afirmo limite de requisições por minuto na conta.
- Não afirmo que os nomes de menu são idênticos em toda conta e idioma; se o seu painel mostrar outro nome, é o mesmo campo.
- Não afirmo quais recursos de automação cada plano da Systeme.io libera; confira no seu painel ao adicionar a ação.
Travou em alguma etapa?
Abra uma discussão em github.com/alanvito1/funil-simples dizendo em que passo parou. Dúvida que aparece mais de uma vez tem boa chance de virar guia, e o código deste site está no mesmo lugar, aberto.
Se ainda não tem onde publicar o que montou, a conta gratuita da Systeme.io resolve a página e a lista.
Perguntas frequentes
Como testar um webhook da Systeme.io sem sujar a minha lista?
Dá para testar com um único contato de teste seu, marcado no nome e apagado no fim do dia. A regra dispara para o contato que sofre o evento, então um contato só resolve todos os disparos do teste, mesmo que você repita dez vezes.
O que significa o código 200 no log do webhook?
Significa que o seu endereço recebeu o corpo e respondeu que aceitou. Qualquer outro código, como 404, 500 ou 501, quer dizer que a requisição saiu da plataforma e não foi aceita do outro lado — o problema está no destino, não na regra.
Preciso saber programar para ligar a Systeme.io num automatizador?
Não para ligar: a regra é montada no painel da Systeme.io, com uma URL e a escolha do método POST. Programar só entra se você quiser tratar o corpo por conta própria, e o script deste guia já faz a parte de receber e imprimir.
Por que o corpo do webhook chega vazio?
Chega vazio quando a ação está configurada como GET, porque GET não carrega corpo na requisição. Troque o método para POST na ação de webhook e o conteúdo do contato volta a aparecer no seu receptor.
O webhook substitui a API da Systeme.io?
Não substitui: o webhook avisa que algo aconteceu, e a API serve para você ler e escrever dados quando quiser. Um completa o outro — o aviso chega e você decide se busca mais dados ou apenas registra o que veio.
Leve isto com você
A sequência de boas-vindas, em três e-mails
É os três e-mails de boas-vindas que eu escrevi para este site, em texto, com o assunto, o atraso de cada um e o objetivo de cada um.
Cole cada um numa campanha da sua ferramenta de e-mail, na ordem. Troque a assinatura e o endereço, e a variável do link de saída pela que a sua ferramenta usa. Sem cadastro, sem e-mail: o arquivo baixa direto.
Receba o resto por e-mail
Eu testo ferramenta de funil e e-mail e mando o que descubro.