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.
O abandono de carrinho é uma das maiores dores do e-commerce global. Estatísticas do setor indicam que cerca de 70% dos consumidores adicionam itens ao carrinho de compras, mas saem da loja sem finalizar a transação. Embora o e-mail marketing tradicional continue sendo uma ferramenta útil, suas taxas de abertura raramente superam os 20%. Por outro lado, o WhatsApp apresenta taxas de abertura superiores a 95% e taxas de resposta que podem triplicar a recuperação de vendas.
Neste artigo técnico, vamos explorar como construir um sistema automatizado e resiliente para recuperar carrinhos abandonados em tempo real, conectando sua plataforma de e-commerce (como Shopify, WooCommerce ou Nuvemshop) à API do WhatsApp utilizando webhooks nativos e um orquestrador de automação (n8n ou Node.js).
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.