Qué respuesta confirma la entrega
No necesitas devolver el objeto procesado. Una respuesta pequeña es suficiente:
Patrón recomendado
1
Verifica la firma
Si falla, responde
401 y no guardes ni proceses el contenido.2
Inserta el identificador de forma única
Para eventos generales usa
payload.id. Si la inserción choca con la restricción única, ya fue recibido.3
Guarda el payload
Conserva el JSON, tipo, fecha de recepción y estado de procesamiento para auditoría.
4
Encola el trabajo
Publica una tarea interna que procese el evento fuera del request HTTP.
5
Responde inmediatamente
Devuelve
200 antes de llamar APIs lentas, enviar mensajes o ejecutar conciliaciones.Reintentos
Pendientes de envío
En los webhooks generales configurados por empresa, Cobrix guarda el evento antes de iniciar HTTP. Si no hay un cupo disponible o se prepara un lote de recordatorios, el resultado puede ser En cola (queued): Cobrix conserva el evento para
enviarlo, pero todavía no hay confirmación de recepción del destino.
Las respuestas que exponen el despacho incluyen la cantidad queued y, por
destino, eventLogId y nextRetryAt cuando están disponibles. Conserva esa
referencia para consultar su avance; no generes otro evento para reemplazarlo.
Cada destino mantiene su resultado independiente. El correo y el webhook también
son independientes: un correo enviado no confirma el envío de WhatsApp.
Cómo interpretar cada resultado
El estado persistido de un pendiente nuevo puede ser
retry con attempts: 0:
en ese caso aún no se realizó una solicitud HTTP. Consulta también attempts,
lastResponseStatus, lastError y nextRetryAt; retry por sí solo no distingue
un evento esperando su primer envío de uno que ya tuvo un error.
Capacidad y tiempos
El recuperador revisa eventos elegibles cada cinco segundos, en lotes de hasta 50, compartiendo los cupos HTTP con los envíos inmediatos. Esperar cupo no consume intentos. No existe un descarte fijo al llegar a 60 despachos por minuto. La fecha de elegibilidad no garantiza el instante exacto del envío ni su entrega por un proveedor final como Meta. Este comportamiento no cambia el protocolo específico de documentos públicos ni activa automáticamente eventos históricos que no eran elegibles. La capacidad se configura en el backend medianteWEBHOOK_DISPATCH_CONCURRENCY:
entero de 1 a 50, predeterminado 10 por proceso. No es un límite por minuto
ni una opción del panel de empresa. Los procesos no comparten un regulador global.
La cantidad que sale por minuto depende de la latencia y capacidad del receptor.
No hay un tiempo garantizado para completar un lote. El productor de suscripciones
conserva su pausa de correo de 600 ms por destinatario cuando ese canal está
habilitado; el recorrido sólo webhook no la aplica. Las rutas predeterminadas
fuera de este dispatcher conservan su comportamiento. Esta mejora no añade una
separación global de 60 segundos entre mensajes al mismo teléfono.
Después de un error HTTP
Los eventos generales realizan hasta cinco intentos totales. Después del intento inicial, las ventanas de reintento vigentes son aproximadamente 5 minutos, 30 minutos, 2 horas y 24 horas; el worker se ejecuta periódicamente, por lo que la hora exacta puede desplazarse. Los eventos de documentos públicos realizan hasta cinco intentos totales: el inicial y reintentos aproximadamente después de 1 minuto, 5 minutos, 30 minutos y 2 horas.Un reenvío manual puede producir un nuevo intento HTTP. En documentos públicos, deduplica por
X-Cobrix-Event-Id: Cobrix conserva el mismo valor en todos los intentos del evento.Diagnóstico por código HTTP
Qué guardar para soporte
- En eventos generales,
payload.idypayload.event. - En documentos públicos,
X-Cobrix-Event-IdyX-Cobrix-Event-Type. - Fecha de recepción y duración.
- Resultado de firma sin guardar el secreto.
- Código y cuerpo de respuesta enviados.
- Estado del trabajo asíncrono y último error interno.

