---
title: "Alertas de pagamento do Stripe: ser ligado quando o dinheiro está em risco"
description: "Encaminhe os webhooks do Stripe para o telefone com a urgência que cada evento merece — um aviso discreto para uma cobrança bem-sucedida e uma ligação para uma contestação com prazo."
date: 2026-09-09
author: Nooc
authorAvatarLink: /images/avatars/nooc.webp
authorLink: https://nooc.me
tags:
  - Stripe
  - alertas de pagamento
  - notificações webhook
  - indie hackers
  - monitoramento de receita
---

# Alertas de pagamento do Stripe: ser ligado quando o dinheiro está em risco

O Stripe manda e-mail sobre tudo e sobre nada. Uma cobrança bem-sucedida, uma renovação de assinatura que falhou e um chargeback chegam como o mesmo tipo de mensagem na mesma caixa de entrada, e quando você lê já perdeu a diferença entre elas.

A solução não é mais notificação. É dar a cada evento do Stripe a urgência que ele realmente merece: um push discreto quando alguém paga, um alerta sensível ao tempo quando uma renovação falha, e uma ligação quando aparece uma contestação com prazo de resposta.

## Quais eventos do Stripe realmente precisam de você

Nem todo evento merece uma notificação, e os que merecem não são igualmente urgentes.

| Evento do Stripe | Por que importa | Urgência |
| --- | --- | --- |
| `payment_intent.succeeded` | Alguém pagou. Bom saber, nunca urgente. | Normal |
| `invoice.payment_failed` | Uma renovação falhou. Existe uma janela de novas tentativas antes de a assinatura cair. | Sensível ao tempo |
| `charge.dispute.created` | Um chargeback. O Stripe informa um prazo de resposta definido pela bandeira, e perder o prazo perde o caso automaticamente. | Chamada |
| `payment_intent.payment_failed` | Um pagamento avulso falhou. Útil em volume, barulhento um a um. | Normal, ou nenhuma |

A contestação é a única que justifica uma ligação. O resto pode esperar você pegar o telefone; uma contestação notada uma semana depois é dinheiro que você não ia manter mesmo.

## Passo 1 — Um canal por nível de urgência

Crie três canais no Echobell, porque urgência é um ajuste por canal:

- **Stripe · Receita** — notificações normais, para pagamentos bem-sucedidos
- **Stripe · Pagamento falhou** — sensível ao tempo
- **Stripe · Contestação** — chamada

Copie a URL de webhook de cada canal nas configurações dele. Você vai apontar o Stripe para as três.

Já aproveite e ative **Somente POST** em cada uma. O Stripe sempre envia via POST, e isso evita que uma prévia de link ou o autocompletar da barra de endereços dispare seu canal sem querer.

## Passo 2 — Adicione os endpoints no Stripe

No painel do Stripe, vá em **Developers → Webhooks → Add endpoint**, cole a URL do canal e selecione apenas os eventos que aquele canal deve tratar.

Adicione um endpoint por canal em vez de um endpoint para tudo. O Stripe deixa escolher eventos por endpoint, então o roteamento acontece do lado dele e seus canais ficam simples.

Se preferir um único endpoint, aponte-o para um canal e filtre com uma condição:

```
type == "charge.dispute.created"
```

Condições são escritas sem as chaves `{{ }}` que os templates usam.

## Passo 3 — Transforme o payload em algo legível

O Stripe envia um corpo JSON com este formato:

```json
{
  "type": "charge.dispute.created",
  "data": {
    "object": {
      "amount": 4900,
      "currency": "usd",
      "reason": "fraudulent",
      "status": "warning_needs_response"
    }
  }
}
```

Então os templates do canal entram em `data.object`:

**Título**

```
Contestação: {{data.object.reason}}
```

**Corpo**

```
{{data.object.amount}} {{data.object.currency}} contestados
Status: {{data.object.status}}
```

**Uma pegadinha que pega todo mundo:** os valores do Stripe estão na menor unidade da moeda. `4900` é US$ 49,00, não US$ 4.900. Os templates do Echobell substituem o valor como está, então ou você divide antes de enviar, ou escreve a moeda depois e lê como centavos. Se o número precisa estar certo de primeira, coloque a divisão no que estiver entre o Stripe e o Echobell — um Worker, uma automação, seu próprio endpoint.

Para o canal de receita, a mesma ideia com menos palavras:

**Título**

```
+{{data.object.amount}} {{data.object.currency}}
```

**Corpo**

```
{{data.object.description}}
```

## Passo 4 — Teste sem esperar um pagamento real

A CLI do Stripe consegue disparar payloads reais no seu endpoint:

```bash
stripe trigger payment_intent.succeeded
stripe trigger charge.dispute.created
```

Faça isso antes de depender disso. É também o jeito mais rápido de ver o que o seu template renderiza quando um campo que você achava garantido chega como `null`.

## O que essa montagem não entrega

Dois limites que vale conhecer antes de colocá-la na frente da sua receita.

**O Echobell não verifica a assinatura do Stripe.** O Stripe assina todo webhook com um cabeçalho `Stripe-Signature`, e verificar isso exige o segredo do endpoint. O endpoint de webhook do Echobell não faz essa checagem, então a URL do canal é a única coisa que o protege. Trate-a como segredo, mantenha **Somente POST** ligado e não cole em repositório público nem em captura de tela.

Dá para adicionar uma checagem fraca com uma condição:

```
header["stripe-signature"] != ""
```

Isso confirma que algo está enviando uma requisição no formato do Stripe. Não confirma que foi o Stripe. Se uma notificação forjada causasse dano real — e não só um momento de confusão — coloque seu próprio endpoint na frente, verifique a assinatura ali e faça ele chamar o Echobell.

**Isso é um caminho de alerta, não um livro-caixa.** O Stripe repete entregas de webhook que falharam, mas notificações não são registro do que aconteceu. Concilie contra o Stripe, não contra seu histórico de notificações.

## Perguntas frequentes

### O Stripe consegue me ligar direto?

Não. O Stripe manda e-mail e webhooks. Uma ligação significa encaminhar um webhook para algo capaz de fazê-la.

### Um alerta de contestação vai mesmo me acordar?

Se o canal estiver em modo chamada, sim — ele chega como ligação recebida e toca atravessando o Foco e o Não perturbe. Veja [como atravessar o modo Foco do iOS para alertas críticos](/pt/blog/how-to-bypass-ios-focus-mode-for-critical-alerts).

### Meu sócio pode receber os mesmos alertas?

Pode. Compartilhe o canal e cada assinante escolhe o próprio tipo de notificação. Você fica com as ligações enquanto outra pessoa recebe um push discreto pelo mesmo evento.

### E o modo de teste?

Eventos em modo de teste do Stripe vão para endpoints registrados em modo de teste. Registre a URL do canal nos dois se quiser ver esse tráfego, ou só em teste até confiar na montagem.

## Fechando

Três canais, três endpoints, um template em cada. A questão não é você ser notificado pelo Stripe — você já era. É um chargeback parar de parecer exatamente um recibo.

[Baixe o Echobell para iPhone](https://apps.apple.com/app/apple-store/id6743597198?pt=128151925&ct=blog-stripe-payment-alerts-pt&mt=8) ou [pegue no Google Play](https://play.google.com/store/apps/details?id=one.echobell.echobellandroid), depois rode `stripe trigger charge.dispute.created` e deixe seu telefone tocar uma vez de propósito.

---

## Conteúdo relacionado

- [Documentação do gatilho webhook](/pt/docs/webhook)
- [Referência do sistema de templates](/pt/docs/template)
- [Referência das condições de canal](/pt/docs/conditions)
- [Atravessar o modo Foco do iOS para alertas críticos](/pt/blog/how-to-bypass-ios-focus-mode-for-critical-alerts)
- [Guia do desenvolvedor contra fadiga de alertas](/pt/blog/fix-alert-fatigue-developer-guide)
