Respuesta esperada
Un
4xx también se reintenta: si tu endpoint rechaza una entrega por un error que no se corrige solo, recibirás los cuatro intentos.
No respondas con una redirección. Pruff sigue las redirecciones, y si tu endpoint responde
301, 302 o 303, la request redirigida llega a la nueva URL como GET y sin body.Reintentos
Cada entrega tiene hasta 4 intentos. Después de cada intento fallido, Pruff espera antes del siguiente:
Los reintentos reenvían la entrega original: mismo body, mismo timestamp, misma firma y mismo valor del header de idempotencia. Solo cambia
X-Webhook-Attempt.
Si el cuarto intento también falla, la entrega se descarta y no se vuelve a enviar.
Garantías
- Puedes recibir duplicados. Una misma entrega puede llegar más de una vez aunque hayas respondido
2xx. - No hay orden garantizado. Los eventos pueden llegar en un orden distinto al que ocurrieron, sobre todo cuando hay reintentos de por medio.
- Los eventos con listas no tienen un tamaño máximo fijo.
invoice.newInvoices,cession.newCessionsycreditNote.newCreditNotesenvían en una sola entrega todos los documentos detectados en un mismo procesamiento.
Idempotencia
Procesa cada entrega una sola vez aunque la recibas varias veces:- Usa el header de idempotencia de tu suscripción como clave. Su valor es único por entrega y se repite en todos sus reintentos. Si tu suscripción no lo tiene, pídele a Pruff que lo configure.
- Si no tienes header de idempotencia, usa el valor
v1deX-Webhook-Signature: es el mismo en todos los reintentos de una entrega. - No uses
X-Webhook-Id. Identifica el tipo de evento y se repite en todas las entregas de ese evento.
Buenas prácticas
- Responde en menos de 5 segundos.
- Responde
2xxapenas guardes la entrega, y procésala después, fuera del handler. - Valida la firma antes de procesar (ver Headers y firma).
- Trata cada entrega como posible duplicado.