POST HTTP firmado. Es la forma recomendada de integrar bots y CRMs externos: te enterás del evento en cuanto sucede, sin necesidad de hacer polling.
Eventos soportados
Crear una suscripción
201 (el secret se devuelve una sola vez — guardalo):
webhooks:read para listar/consultar, webhooks:write para crear/actualizar/borrar/test/replay.
Aislamiento por tenant
Cada suscripción está atada a tu API key, y por lo tanto a tu tenant. Solo recibís eventos de tu propia cuenta. Nunca ves datos de otros tenants.Códigos que cuentan como entrega
Waspy marca la entrega como exitosa cuando tu URL responde:- 2xx — el evento se recibió.
- Cualquier 3xx (301, 302, 303, 307, 308 y el resto) — el
POSTya se ejecutó. Guardamos el status real (por ejemplo302) y no reintentamos.
script.google.com / script.googleusercontent.com): doPost corre y después el runtime responde 302. Eso no es un fallo. Si lo contáramos como error, Waspy reintentaría el mismo evento (y tu script lo procesaría de nuevo) y, a las 10 fallas seguidas, desactivaría la suscripción.
No volvemos a mandar el POST a la URL de Location. Seguir el redirect con POST re-ejecutaría el handler y, si el Location apuntara a una IP interna, se saltearía la validación del destino.
Si la respuesta trae Location, hacemos un GET a esa URL únicamente para dejar asentado en el registro de la entrega qué devolvió el redirect. Antes de ese GET se vuelve a validar el destino con las mismas reglas que la URL de la suscripción. Si el GET falla, no hay Location, o el destino no es seguro, la entrega sigue contando como exitosa: el GET no cambia el resultado.
La misma regla vale para las entregas reales, para POST /webhooks/:id/test y para el reenvío manual POST /webhooks/:id/replay/:deliveryId.
Un 4xx, un 5xx o una URL que no responde en 10 segundos es una entrega fallida.
Reintentos y auto-disable
Si la entrega falla, Waspy reintenta automáticamente:
Después de 10 entregas consecutivas fallidas la suscripción se auto-desactiva (
enabled: false, disabledReason poblado). Para reactivarla, hacé PATCH /webhooks/:id con enabled: true.
Probar antes de producción
message.received con datos dummy para que validés tu firma + URL.