Como criar um fluxo de recuperação de carrinhos abandonados via WhatsApp usando webhooks nativos
Construa um funil automatizado de alta conversão conectando sua plataforma de e-commerce ao WhatsApp via webhooks e APIs.
Cerca de 70% a 80% dos clientes que entram no checkout do seu e-commerce vão embora sem comprar. Em uma operação de alta volumetria, esse abandono representa milhões de reais em receita perdida que poderiam ser recuperados com a estratégia correta. Embora o e-mail marketing automático de recuperação continue ativo nas empresas, as taxas de abertura despencaram nos últimos anos, raramente passando dos 20%. No mercado de e-commerce moderno, a conversão e o engajamento se moveram para as mensagens instantâneas: o WhatsApp apresenta taxas de abertura superiores a 95% e respostas quase imediatas.
Para evitar pagar taxas abusivas ou depender de ferramentas SaaS prontas e engessadas, a solução técnica de alta performance é estruturar uma esteira de recuperação proprietária. Conectando webhooks nativos da plataforma de e-commerce (como Shopify ou WooCommerce) ao seu orquestrador de automação, é possível formular réguas de recuperação altamente personalizadas e com custo de execução fixo.
Neste artigo, detalhamos o passo a passo de como arquitetar e implementar esse fluxo orientado a eventos na infraestrutura própria da sua empresa.
O que é um Fluxo de Recuperação via Webhook?
[!NOTE] Definição Direta: Um fluxo de recuperação por webhook é uma arquitetura orientada a eventos onde a plataforma de e-commerce dispara uma notificação HTTP POST imediata (webhook) contendo os dados do cliente e do carrinho no exato momento em que um abandono é detectado. O servidor de automação processa essa requisição, aplica regras de atraso inteligente e aciona a API do WhatsApp para enviar uma mensagem personalizada com um link direto para o checkout com os itens pré-carregados.
Estrutura do Fluxo de Automação
O ciclo de vida do evento de abandono de carrinho segue quatro etapas principais descritas abaixo:
graph TD
A[Cliente Abandona Checkout] -->|1. Webhook Event| B(Servidor de Automação - n8n/Node.js)
B -->|2. Validação e Filtro| C{Já comprou nos últimos 30 min?}
C -->|Sim| D[Encerrar Fluxo]
C -->|Não| E[Aguardar Delay de 20-30 min]
E -->|3. Formatar Mensagem| F[Chamar API do WhatsApp]
F -->|4. Envio| G[Smartphone do Cliente com Link de Checkout]
Resumo dos Componentes do Sistema
| Componente | Função Principal | Tecnologia Recomendada |
|---|---|---|
| Origem do Evento | Monitorar o carrinho e disparar o webhook de “Checkout Abandonado” | Shopify, WooCommerce API, Hotmart Webhooks |
| Orquestrador | Receber, filtrar, aplicar delay e estruturar o payload de envio | n8n (Self-hosted) ou microsserviço Node.js |
| Validador de Estado | Evitar envio de mensagens se o cliente concluir a compra posteriormente | Consulta ao Banco de Dados do E-commerce ou CRM |
| Canal de Disparo | Enviar a mensagem para o número do cliente de forma estável e segura | WhatsApp Business Cloud API ou gateways de API (Z-API, Evolution) |
Guia de Implementação Passo a Passo
Passo 1: Recebimento e Estrutura do Webhook
Quando um checkout é abandonado, sua plataforma envia um payload JSON. Abaixo está um exemplo típico do payload recebido pelo webhook:
{
"event": "checkout.abandoned",
"created_at": "2026-06-15T14:30:00Z",
"customer": {
"first_name": "Erick",
"last_name": "Nascimento",
"phone": "5511999999999",
"email": "[email protected]"
},
"cart": {
"checkout_url": "https://sualoja.com.br/checkout/pay?token=abc123xyz",
"total_price": 450.00,
"currency": "BRL",
"items": [
{
"product_name": "Teclado Mecânico Keychron K2",
"quantity": 1,
"price": 450.00
}
]
}
}
Passo 2: Otimização e Limpeza de Dados (Node.js/n8n)
Antes de enviar os dados para a API do WhatsApp, é preciso higienizar as variáveis, garantindo que o número de telefone esteja formatado corretamente no padrão internacional exigido pelo WhatsApp (DDI + DDD + Número, sem espaços ou caracteres especiais).
Insira um nó de código para preparar o payload de envio:
// Nó de processamento do webhook (JavaScript)
const input = items[0].json;
// Função para limpar e validar telefone brasileiro
function formatBrazilianPhone(phone) {
let clean = phone.replace(/\D/g, ''); // Remove tudo que não for dígito
// Se não tiver o código do país (55), adiciona
if (clean.length === 11 && !clean.startsWith('55')) {
clean = '55' + clean;
}
// Lógica para tratar o dígito 9 adicional do Brasil
// O WhatsApp Business API costuma ignorar o nono dígito em algumas regiões antigas
// Mas para envio direto, manter o número formatado recebido pela plataforma costuma funcionar
return clean;
}
return [{
json: {
phone: formatBrazilianPhone(input.customer.phone),
firstName: input.customer.first_name,
productName: input.cart.items[0].product_name,
checkoutUrl: input.cart.checkout_url,
totalPrice: new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(input.cart.total_price)
}
}];
Passo 3: Adicionando Delay Inteligente e Verificação de Compra
Enviar uma mensagem no exato segundo em que o cliente fecha a aba da loja pode parecer invasivo. A melhor prática aponta para um intervalo de 20 a 30 minutos.
No seu orquestrador (como o n8n), utilize um nó de Wait (Atraso) configurado para 20 minutos. Antes de prosseguir para o envio do WhatsApp após o término do delay, faça uma consulta à API do seu e-commerce buscando o status de pedidos daquele e-mail/telefone. Se houver um pedido pago ou criado nos últimos 20 minutos, aborte o fluxo imediatamente para evitar o envio de mensagens duplicadas ou inconvenientes.
Passo 4: Disparo via API do WhatsApp
Se a verificação confirmar que a compra continua pendente, dispare uma requisição HTTP POST para o gateway do WhatsApp. Se estiver usando o WhatsApp Business Cloud API (Meta), você enviará um modelo de mensagem pré-aprovado (Message Template):
POST https://graph.facebook.com/v17.0/YOUR_PHONE_NUMBER_ID/messages
Content-Type: application/json
Authorization: Bearer YOUR_ACCESS_TOKEN
{
"messaging_product": "whatsapp",
"to": "{{$json.phone}}",
"type": "template",
"template": {
"name": "recuperacao_carrinho_dinamico",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "{{$json.firstName}}"
},
{
"type": "text",
"text": "{{$json.productName}}"
}
]
},
{
"type": "button",
"sub_type": "url",
"index": "0",
"parameters": [
{
"type": "text",
"text": "checkout/pay?token=abc123xyz"
}
]
}
]
}
}
Nota: A URL do botão dinâmica é concatenada usando parâmetros dinâmicos de acordo com a estrutura do seu template cadastrado no Meta Business Suite.
Melhores Práticas para Conversão e Conformidade
- Políticas de Opt-in: Envie mensagens de recuperação apenas para usuários que preencheram ativamente seus dados de contato na página de checkout e deram consentimento implícito ou explícito para comunicações transacionais.
- Facilidade de Opt-out: Sempre ofereça uma saída clara na mensagem, como: “Se não deseja receber mais mensagens, responda SAIR”. O n8n pode capturar essa resposta via webhook de entrada do WhatsApp e atualizar o cadastro do cliente no CRM/Banco de dados como “unsubscribed”.
- Abordagem Consultiva: Em vez de focar apenas no desconto, inicie a mensagem com suporte técnico: “Olá, [Nome]! Vi que você não concluiu a compra do [Produto]. Ocorreu algum problema com o pagamento ou você tem alguma dúvida técnica?”. Isso gera conexões de atendimento humanizado e eleva a conversão de vendas B2B e B2C complexas.