Saltar al contenido principal
Una entrega es un evento dirigido a un endpoint. Si tres de tus endpoints están suscritos a contact.created, un contacto nuevo produce tres entregas, y cada una se sigue y se reintenta por separado.

Qué cuenta como entregado

Ciarem envía el evento en el momento en que ocurre, normalmente en unos segundos, y espera hasta 10 segundos a que tu servidor responda. Una entrega fallida se reintenta automáticamente.

Reintentos

Después de un fallo, Ciarem espera y vuelve a intentar, con una espera más larga cada vez: Los reintentos continúan hasta que la entrega tiene 3 días. Después de eso Ciarem la abandona y la marca como Fallido. En la práctica son unos 14 intentos. Los reintentos se ejecutan una vez por minuto, así que un intento puede empezar hasta un minuto después de su hora programada. Cada intento envía el mismo cuerpo con el mismo id de evento. Solo cambia el encabezado Ciarem-Signature, porque cada intento se firma con una marca de tiempo nueva.

Estados de entrega

Cuando un endpoint sigue fallando

Si todas las entregas a un endpoint fallan durante 3 días seguidos, Ciarem apaga el endpoint. En el panel muestra Desactivado por fallos repetidos; en la API, enabled es false y disabled_reason es auto_failures. Una sola entrega exitosa reinicia la cuenta, así que un endpoint con fallos ocasionales nunca se desactiva. Mientras un endpoint está desactivado:
  • No se le envía nada, y los eventos que ocurren mientras tanto no se guardan para después.
  • Las entregas que esperaban un reintento se marcan como Fallido.
Para volver a encenderlo, arregla tu servidor y luego elige Activar en el menú del endpoint, o envía PATCH /v1/webhook-endpoints/{id} con {"enabled": true}. Las entregas se reanudan con los eventos nuevos a partir de ese momento. Para recuperar lo que te perdiste, consulta Recuperar eventos perdidos.

Pausar un endpoint por tu cuenta

Elige Desactivar en el menú del endpoint, o envía {"enabled": false}, para detener las entregas sin eliminar el endpoint. Se comporta igual que el caso automático: no se envía nada mientras está apagado, los reintentos en espera se descartan, y activarlo más tarde no reenvía los eventos antiguos. disabled_reason es user. Eliminar un endpoint también elimina su registro de entregas.

Si tu plan cambia

Los webhooks son parte del acceso a la API. Si tu organización pasa a un plan que no lo incluye, o una prueba termina sin una suscripción, Ciarem deja de enviar eventos de inmediato. Tus endpoints se conservan, y las entregas se reanudan solas cuando vuelves a Growth o Scale. Los eventos que ocurrieron en ese intervalo no se envían después.

Duplicados y orden

Construye tu handler en torno a dos hechos: El mismo evento puede llegar más de una vez. Ciarem garantiza que cada evento se entrega al menos una vez, no exactamente una vez. La causa habitual es un reintento después de que tu servidor procesó el evento pero respondió demasiado lento. Haz que procesar un evento sea seguro de repetir:
  • Guarda el id de cada evento que procesas y sáltate cualquier id que ya hayas visto. Conservar los ids unos días es suficiente, porque los reintentos terminan a los 3 días.
  • O haz que la acción misma sea repetible, por ejemplo “pon la etapa del contacto en X” en vez de “avanza el contacto una etapa”.
Los eventos pueden llegar fuera de orden. Un evento reintentado llega después de otros más nuevos, y dos eventos con segundos de diferencia pueden intercambiar su lugar. No asumas que el último evento que recibiste es el estado más reciente:
  • Compara created_at del sobre, o updated_at del contacto, con lo que ya tienes guardado, e ignora los datos más antiguos.
  • En las conversaciones, espera que messages.inbound pueda llegar antes que el conversation.created de la misma conversación.
  • Cuando el orden importa, trata el evento como una señal y lee el estado actual desde la API.

El registro de entregas

Cada entrega de los últimos 30 días queda registrada, con el cuerpo exacto que se envió. En el panel: abre Configuración → Webhooks y haz clic en un endpoint. La tabla Entregas muestra cada evento, su estado, el código de respuesta de tu servidor y el número de intentos. Haz clic en una fila para ver el cuerpo que se envió, el id del evento, la respuesta de tu servidor o el error, y el último y el próximo intento. Con la API:
response_status es null cuando tu servidor nunca respondió (un timeout o un error de conexión); en ese caso error dice qué salió mal. Dos cosas no están en el registro: los eventos de prueba, y las entregas sobre un contacto que después se borró de forma permanente, que se eliminan junto con los datos del contacto.

Enviar una entrega de nuevo

Puedes reenviar cualquier entrega del registro, sea cual sea su estado, por ejemplo después de corregir un error en tu handler.
  • En el panel: haz clic en la entrega para abrirla y luego haz clic en Enviar de nuevo.
  • Con la API: POST /v1/webhook-deliveries/{delivery_id}/redeliver.
La entrega vuelve a Pendiente y se envía en menos de un minuto, con el mismo cuerpo y el mismo id de evento. Como el id no cambia, un handler que deduplica la va a saltar: borra primero ese id de tu lado si quieres que se procese otra vez. Enviar de nuevo se rechaza con 409 endpoint_disabled mientras el endpoint está apagado. Actívalo primero.

Recuperar eventos perdidos

Los reintentos cubren caídas de hasta 3 días. Para algo más largo, o para el tiempo en que un endpoint estuvo desactivado, reconcilia desde la API:
  • Contactos: lístalos con GET /v1/contacts y compara updated_at con lo que tienes.
  • Conversaciones: lístalas con GET /v1/conversations y lee los mensajes de las que cambiaron.
Una reconciliación periódica como esta es una buena práctica incluso cuando todo funciona. Te protege de errores de tu lado que los webhooks por sí solos no pueden revelar.

Gestionar endpoints con la API

Todo lo que hay en el panel también está disponible para una clave de API. Los detalles completos de solicitudes y respuestas están en la referencia de la API, en Webhooks. Errores específicos de los webhooks, además de los generales: Estas llamadas cuentan para tu límite de uso como cualquier otra solicitud a la API. Los eventos que Ciarem te envía no cuentan.

Solución de problemas