Pagamentos & Checkout
Claude 3.5 Sonnet
Fluxo de Dunning: Recuperação de Pagamentos Falhos por E-mail
Sistema que detecta falhas de cobrança recorrente, dispara a sequência de e-mails de recuperação (3 toques) e atualiza o cartão via portal.
0cópias
0joinhas
0favoritos
O prompt
Implemente um fluxo completo de dunning (recuperação de pagamentos falhos) para as assinaturas do SaaS {{nome_saas}} em Node.js/TypeScript + Stripe.
Parâmetros:
- Nome do SaaS: {{nome_saas}}
- Dias entre Tentativas da Stripe: usar o padrão (7 dias, 5 tentativas)
- Canal de Recuperação: e-mail (Resend)
Requisitos:
1. Webhook invoice.payment_failed criando/atualizando um registro DunningCase { subscriptionId, email, attempt, nextRetryAt, status } — a Stripe já tenta automaticamente; o sistema acompanha para orquestrar os e-mails.
2. Sequência de 3 e-mails (via Resend): (a) na 1ª falha: 'Seu pagamento não foi aprovado' com link direto para o Customer Portal da Stripe atualizar o cartão, tom neutro; (b) na 3ª tentativa: urgência moderada + aviso de que os recursos ficam suspensos em X dias; (c) na última: 'Última chance' com garantia de que a assinatura é mantida se atualizar até o fim do período.
3. Cada e-mail inclui um link único (token assinado, expira em 72h) para o portal — nunca expor customer_id cru na URL.
4. invoice.payment_succeeded durante o dunning encerra o caso como 'recovered' e envia confirmação de volta ao normal; charge.dispute ou cancelamento encerra como 'lost'.
5. Painel simples GET /api/dunning (admin, auth): casos abertos por tentativa, taxa de recuperação dos últimos 30 dias e valor em risco (MRR dos casos abertos).
6. Idempotência: o mesmo evento processado duas vezes não duplica e-mail nem caso; logs estruturados com subscriptionId em tudo.
Como usar
- Substitua {{nome_saas}} e configure RESEND_API_KEY + remetente verificado.
- Cole no Claude dentro do projeto que já tem as assinaturas Stripe — webhook, tabela DunningCase e os 3 templates de e-mail saem prontos.
- Teste em modo sandbox: force uma falha (cartão de teste 4000 0000 0000 0002) e acompanhe a sequência; o link do portal deve abrir autenticado para aquele assinante.
- Acompanhe /api/dunning por 30 dias: a taxa de recuperação saudável fica acima de 60% — abaixo disso, revise o tom/timing dos e-mails (a IA marca os templates com comentários).
Exemplo de saída
Módulo dunning (~240 linhas): webhook payment_failed criando DunningCase idempotente, 3 e-mails Resend em momentos distintos (neutro → urgência → última chance) com link de portal tokenizado expirando em 72h, encerramento 'recovered' no payment_succeeded com confirmação, painel admin com casos abertos + MRR em risco + taxa de recuperação 30d e logs estruturados por subscriptionId.