Índice
- Qué eventos de Stripe te necesitan de verdad
- Paso 1 — Un canal por nivel de urgencia
- Paso 2 — Añade los endpoints en Stripe
- Paso 3 — Convierte el payload en algo legible
- Paso 4 — Pruébalo sin esperar un pago real
- Lo que este montaje no te da
- Preguntas frecuentes
- ¿Stripe puede llamarme directamente?
- ¿Una alerta de disputa me despertará de verdad?
- ¿Mi socio puede recibir las mismas alertas?
- ¿Y el modo de prueba?
- Cierre
- Contenido relacionado
Stripe te envía correos sobre todo y sobre nada. Un cobro correcto, una renovación de suscripción fallida y un contracargo llegan como el mismo tipo de mensaje a la misma bandeja, y cuando los lees ya has perdido la diferencia entre ellos.
La solución no es más notificaciones. Es dar a cada evento de Stripe la urgencia que de verdad merece: un push discreto cuando alguien paga, una alerta sensible al tiempo cuando falla una renovación, y una llamada telefónica cuando aparece una disputa con una fecha límite de respuesta.
Qué eventos de Stripe te necesitan de verdad
No todos los eventos merecen una notificación, y los que la merecen no son igual de urgentes.
| Evento de Stripe | Por qué importa | Urgencia |
|---|---|---|
payment_intent.succeeded | Alguien pagó. Está bien saberlo, nunca es urgente. | Normal |
invoice.payment_failed | Falló una renovación. Tienes una ventana de reintentos antes de que caduque la suscripción. | Sensible al tiempo |
charge.dispute.created | Un contracargo. Stripe da un plazo de respuesta fijado por la red de tarjetas, y no cumplirlo pierde el caso por defecto. | Llamada |
payment_intent.payment_failed | Falló un pago puntual. Útil en volumen, ruidoso de uno en uno. | Normal, o ninguna |
La disputa es la única que justifica una llamada. Lo demás puede esperar a que cojas el teléfono; una disputa que ves una semana tarde es dinero que nunca ibas a conservar.
Paso 1 — Un canal por nivel de urgencia
Crea tres canales en Echobell, porque la urgencia es un ajuste por canal:
- Stripe · Ingresos — notificaciones normales, para pagos correctos
- Stripe · Pago fallido — sensible al tiempo
- Stripe · Disputa — llamada
Copia la URL de webhook de cada canal desde sus ajustes. Apuntarás Stripe a las tres.
Activa Solo POST en cada uno mientras estás ahí. Stripe siempre envía por POST, y así evitas que una vista previa de enlace o el autocompletado de la barra de direcciones dispare tu canal por accidente.
Paso 2 — Añade los endpoints en Stripe
En el panel de Stripe, ve a Developers → Webhooks → Add endpoint, pega la URL del canal y selecciona solo los eventos que ese canal debe gestionar.
Añade un endpoint por canal en lugar de uno para todo. Stripe permite elegir eventos por endpoint, así el enrutado ocurre en su lado y tus canales quedan simples.
Si prefieres un único endpoint, apúntalo a un canal y filtra con una condición:
type == "charge.dispute.created"
Las condiciones se escriben sin las llaves {{ }} que usan las plantillas.
Paso 3 — Convierte el payload en algo legible
Stripe envía un cuerpo JSON con esta forma:
{
"type": "charge.dispute.created",
"data": {
"object": {
"amount": 4900,
"currency": "usd",
"reason": "fraudulent",
"status": "warning_needs_response"
}
}
}
Así que las plantillas del canal entran en data.object:
Título
Disputa: {{data.object.reason}}
Cuerpo
{{data.object.amount}} {{data.object.currency}} en disputa
Estado: {{data.object.status}}
Un detalle que pilla a todo el mundo: los importes de Stripe están en la unidad monetaria más pequeña. 4900 son 49,00 $, no 4.900 $. Las plantillas de Echobell sustituyen el valor tal cual, así que o divides antes de enviarlo, o escribes la moneda detrás y lo lees como céntimos. Si el número tiene que ser correcto de un vistazo, pon la división en lo que haya entre Stripe y Echobell: un Worker, una automatización, tu propio endpoint.
Para el canal de ingresos, la misma idea con menos palabras:
Título
+{{data.object.amount}} {{data.object.currency}}
Cuerpo
{{data.object.description}}
Paso 4 — Pruébalo sin esperar un pago real
La CLI de Stripe puede lanzar payloads reales a tu endpoint:
stripe trigger payment_intent.succeeded
stripe trigger charge.dispute.created
Hazlo antes de depender de ello. Es también la forma más rápida de ver qué renderiza tu plantilla cuando un campo que dabas por hecho llega como null.
Lo que este montaje no te da
Dos límites que conviene conocer antes de ponerlo delante de tus ingresos.
Echobell no verifica la firma de Stripe. Stripe firma cada webhook con una cabecera Stripe-Signature, y verificarla requiere el secreto del endpoint. El endpoint de webhook de Echobell no hace esa comprobación, así que la URL del canal es lo único que lo protege. Trátala como un secreto, deja Solo POST activado y no la pegues en un repositorio público ni en una captura.
Puedes añadir una comprobación débil con una condición:
header["stripe-signature"] != ""
Eso confirma que algo está enviando una petición con forma de Stripe. No confirma que fuera Stripe. Si una notificación falsificada causara un daño real —y no solo un momento de confusión— pon tu propio endpoint delante, verifica ahí la firma y que sea él quien llame a Echobell.
Esto es una vía de alerta, no un libro de cuentas. Stripe reintenta las entregas de webhook fallidas, pero las notificaciones no son un registro de lo ocurrido. Concilia contra Stripe, no contra tu historial de notificaciones.
Preguntas frecuentes
¿Stripe puede llamarme directamente?
No. Stripe envía correo y webhooks. Una llamada implica enrutar un webhook hacia algo que pueda realizarla.
¿Una alerta de disputa me despertará de verdad?
Si el canal está en modo llamada, sí: llega como una llamada entrante y suena a través de Concentración y No molestar. Consulta cómo atravesar el modo Concentración de iOS para alertas críticas.
¿Mi socio puede recibir las mismas alertas?
Sí. Comparte el canal y cada suscriptor elige su tipo de notificación. Tú puedes recibir las llamadas mientras otra persona recibe un push discreto por el mismo evento.
¿Y el modo de prueba?
Los eventos en modo prueba de Stripe van a endpoints registrados en modo prueba. Registra la URL del canal en ambos si quieres ver ese tráfico, o solo en prueba hasta que confíes en el montaje.
Cierre
Tres canales, tres endpoints, una plantilla cada uno. La cuestión no es que te enteres de lo que pasa en Stripe: ya te enterabas. Es que un contracargo deje de parecerse exactamente a un recibo.
Descarga Echobell para iPhone o consíguelo en Google Play, y luego ejecuta stripe trigger charge.dispute.created y deja que tu teléfono suene una vez a propósito.