Um SaaS com 300 assinantes perde em média R$4.200 por mês em tentativas de cobrança que falham silenciosamente. O Stripe emite o evento invoice.payment_failed em milissegundos. O sistema manda um email. Ninguém abre. A assinatura cancela sozinha 7 dias depois.
Taxa de abertura de email transacional de cobrança: entre 15% e 22%. Taxa de abertura de mensagem no WhatsApp: 98%. A diferença não é marginal. É a diferença entre recuperar o cliente antes que ele vá para o concorrente e descobrir o churn na planilha no fim do mês.
Por Que a Maioria das Ferramentas de Cobrança Não Resolve o Problema?
Plataformas de billing automatizado enviam emails e SMS em sequência. É a solução padrão, com alcance limitado para ações urgentes de recuperação de pagamento. WhatsApp é diferente por um motivo técnico: a notificação aparece na tela do celular em tempo real, no mesmo app que o usuário abriu 23 vezes hoje. A janela de atenção que abre nos primeiros 30 minutos após a falha do pagamento é a janela com maior taxa de conversão para recuperação.
Dado-chave: Estratégias de cobrança via WhatsApp aumentam as taxas de recuperação de pagamentos em 30% a 40% em comparação com email isolado. Taxa de abertura de mensagem WhatsApp supera 90%, contra menos de 22% de emails comerciais de cobrança. Fonte: SocialHub Automação Cobrança 2026 e Asaas WhatsApp Cobrança.
O segundo problema é que notificação não é conversa. Enviar "Seu pagamento falhou, atualize o cartão" é diferente de ter um Assistente que responde quando o cliente diz "tô sem grana essa semana, posso pagar na quinta?". Um Assistente que conversa tem taxa de resolução maior porque consegue capturar contexto e oferecer alternativas em tempo real.
Por Que Notificação Unidirecional Deixa Dinheiro na Mesa?
A maioria das integrações Stripe + WhatsApp usa a lógica de disparo e esquece: Stripe emite evento, você manda mensagem, fim. O cliente responde e ninguém processa.
A abordagem diferente é usar um Assistente conversacional no loop de cobrança. O fluxo completo fica assim: pagamento falha, Assistente abre conversa no WhatsApp, cliente responde "cartão errado, vou trocar", Assistente confirma quando o cliente atualiza e segue com nova tentativa automática. Em vez de uma notificação unidirecional, você tem um loop de resolução que fecha dentro da janela de 24 horas.
Para devs que constroem SaaS, é o caso de uso onde o ROI de "colocar um agente no WhatsApp" aparece no dashboard do Stripe na semana seguinte, não em 6 meses.
Como Integrar Stripe Webhook e WhatsApp em 30 Minutos
Passo 1: Configurar o Webhook no Stripe (5 minutos)
No dashboard do Stripe, vá em Developers > Webhooks > Add endpoint. Aponte para o endpoint que vamos criar e selecione os eventos:
invoice.payment_failed: cobrança recorrente de assinatura que falhoupayment_intent.payment_failed: pagamento avulso que falhoucustomer.subscription.past_due: assinatura em atraso após múltiplas tentativas
O Stripe fornece um Webhook Signing Secret para validar a autenticidade dos eventos. Guarde-o como variável de ambiente.
Passo 2: Endpoint que Recebe o Evento Stripe (15 minutos)
O endpoint precisa: validar a assinatura do Stripe, extrair os dados do cliente e disparar a conversa no WhatsApp via API da Verboo.
const express = require('express');
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
const axios = require('axios');
const app = express();
// Raw body obrigatório para validação de assinatura do Stripe
app.post('/webhook/stripe', express.raw({ type: 'application/json' }), async (req, res) => {
const sig = req.headers['stripe-signature'];
let event;
try {
event = stripe.webhooks.constructEvent(
req.body,
sig,
process.env.STRIPE_WEBHOOK_SECRET
);
} catch (err) {
console.error('Assinatura inválida:', err.message);
return res.status(400).send(`Webhook Error: ${err.message}`);
}
const eventosCobranca = [
'invoice.payment_failed',
'payment_intent.payment_failed',
'customer.subscription.past_due'
];
if (eventosCobranca.includes(event.type)) {
await dispararCobrancaWhatsApp(event);
}
res.json({ received: true });
});
async function dispararCobrancaWhatsApp(event) {
const obj = event.data.object;
const customer = await stripe.customers.retrieve(obj.customer);
const phone = customer.phone; // formato E.164: +5511999999999
if (!phone) {
console.warn('Cliente sem telefone cadastrado:', obj.customer);
return;
}
const valorEmReais = (obj.amount_due || obj.amount) / 100;
const planName = obj.lines?.data[0]?.description || 'sua assinatura';
await axios.post('https://api.verboo.ai/v1/trigger', {
agentId: process.env.VERBOO_AGENT_ID,
phone: phone,
data: {
nomeCliente: customer.name,
valorCobranca: valorEmReais.toFixed(2),
plano: planName,
tipoEvento: event.type,
customerId: obj.customer,
invoiceId: obj.id || null
}
}, {
headers: {
'Authorization': `Bearer ${process.env.VERBOO_API_KEY}`,
'Content-Type': 'application/json'
}
});
}
app.listen(3000);
Dois pontos que a maioria dos tutoriais omite: o express.raw() é obrigatório para validação da assinatura do Stripe (o body precisa chegar não parseado). E o customer.phone precisa estar no formato E.164 (+5511999999999) para funcionar com a API do WhatsApp.
Passo 3: Instrução do Assistente de Cobrança na Verboo (10 minutos)
No painel da Verboo, crie um Assistente novo. A Instrução define o comportamento do agente no loop de cobrança. Os dados chegam via API no campo data e ficam disponíveis como variáveis de contexto:
Você é o assistente de cobrança da [Empresa].
Um pagamento falhou para {{nomeCliente}} no plano {{plano}},
no valor de R${{valorCobranca}}.
Objetivo: recuperar o pagamento de forma consultiva, sem pressão excessiva.
FLUXO:
1. Abra com uma mensagem direta mas simpática sobre a falha de pagamento
2. Pergunte se o cliente quer atualizar o cartão ou prefere outro método
3. Se confirmar que vai regularizar: agradeça e informe que
a cobrança será refeita automaticamente
4. Se pedir prazo: registre o compromisso com a data informada
e encerre a conversa educadamente
5. Se não responder em 24h: encerre sem insistir
TOM: profissional, direto, sem ameaças ou linguagem agressiva.
LIMITE: máximo 4 mensagens no fluxo.
NUNCA peça dados de cartão de crédito pelo WhatsApp.
Ao confirmar regularização, finalize com:
"Perfeito! Sua assinatura continua ativa. Qualquer dúvida, estamos aqui."
Passo 4: Testar em Staging com o Stripe CLI
O Stripe tem modo de teste nativo. Para simular uma falha de pagamento sem cobrar ninguém:
# Simular falha de pagamento
stripe trigger invoice.payment_failed
# Encaminhar eventos para o servidor local com assinatura correta
stripe listen --forward-to localhost:3000/webhook/stripe
Confirme que o Assistente dispara no WhatsApp em staging antes de apontar o webhook para produção.
Qual é o Resultado Real Dessa Integração?
| Métrica | Email de cobrança | WhatsApp com Assistente |
|---|---|---|
| Taxa de abertura | 15% a 22% | 98% |
| Tempo até leitura | Horas a dias | Minutos |
| Taxa de resposta | 2% a 5% | 40% a 60% |
| Recuperação de pagamentos | Baseline | +30% a +40% |
| Setup técnico | Nativo no Stripe | 30 minutos (esse tutorial) |
Para um SaaS com 300 assinantes e 5% de churn involuntário, são 15 clientes por mês que saem sem querer sair. Se o ticket médio é R$200, são R$3.000 por mês que a régua de email recupera mal. Com 40% de melhora na recuperação via WhatsApp, são R$1.200 por mês a mais retidos com 30 minutos de setup.
Referência: A documentação oficial do Stripe detalha os eventos de assinatura e os fluxos de retry automático. A integração com WhatsApp funciona em paralelo com o retry nativo do Stripe: o Assistente recupera casos onde o cliente precisa agir (trocar cartão, confirmar dados) antes da próxima tentativa automática.
O Que Mais Essa Arquitetura Resolve?
A mesma integração Stripe + Verboo cobre outros eventos além de falha de pagamento:
- Assinatura ativada (
customer.subscription.created): mensagem de boas-vindas com links de onboarding - Trial expirando (
customer.subscription.trial_will_end): lembrete 3 dias antes do fim do trial - Upgrade de plano (
customer.subscription.updated): confirmação e upsell de recursos do novo plano - Cancelamento (
customer.subscription.deleted): abertura de conversa de winback
Cada evento Stripe vira um Gatilho de conversa diferente na Verboo, com Instrução específica para aquele momento do ciclo de vida do cliente. O código do webhook é o mesmo. Só os parâmetros e a Instrução mudam.
Com mais de 390 empresas e 27 milhões de mensagens processadas, o padrão na plataforma é consistente: times que adicionam WhatsApp ao ciclo de billing reduzem churn involuntário em menos de um mês de operação. O Assistente resolve o problema que email nunca resolveu: chegar na hora certa, no canal certo, e conseguir uma resposta.
Cole o código no seu backend, aponte o webhook no Stripe e o Assistente de cobrança já roda no WhatsApp. Crie sua conta grátis (login Google em 10s, sem cartão).



