Webhooks. Eventos en tiempo real, entregados con fiabilidad.
Los puntos finales de webhook por espacio de trabajo reciben eventos de clics, conversiones y gestión de enlaces con firmas HMAC-SHA256. Reintentos automáticos con retroceso exponencial. El modo SIEM transmite eventos a su plataforma de seguridad.
- 10+ tipos de evento - clics, conversiones, cambios de dominio
- Firma HMAC-SHA256 en cada entrega
- Reintentos con backoff exponencial durante 72 horas
- Registro de entregas con replay en un clic
Tipos de evento
Más de 10 tipos de evento listos
Suscríbete por endpoint - recibe solo los eventos que te interesan. Los eventos de clic de alto volumen se envían por defecto en una ventana batch de 5 segundos; el modo raw-click entrega por clic para procesadores de streaming.
- link.clicked
Cada clic de redirección. Modo batch (ventana de 5 s) o raw-click.
- link.created
Se ha creado un nuevo enlace corto en el workspace.
- link.updated
Se han cambiado metadatos, URL destino o reglas del enlace.
- link.deleted
Enlace eliminado - actualiza cualquier referencia dependiente.
- domain.verified
El dominio propio ha pasado la verificación DNS.
- conversion.attributed
Evento de ingresos asociado a un clic vía Stripe o Shopify.
- campaign.completed
La campaña alcanzó su fecha final o tope de clics.
- member.invited
Miembro del workspace añadido o aprovisionado por SCIM.
Además link.expired, link.click_cap_reached, domain.ssl_issued y más - consulta el catálogo completo de eventos.
Garantías de entrega
Backoff exponencial. Ventana de 72 horas.
Una respuesta fuera del rango 2xx o un timeout de 30 segundos dispara reintentos automáticos: 30 s → 2 min → 10 min → 30 min → 2 h → 8 h → 24 h → 48 h. Tras 72 horas la entrega se marca como definitivamente fallida y se elimina de la cola - pero permanece en el registro de entregas para replay manual.
- Timeout de respuesta de 30 segundosDevuelve 200 de inmediato; procesa en asíncrono si tu handler es lento.
- 8 reintentos en 72 horasBackoff exponencial - sin efecto avalancha al reiniciar.
- Auto-pausa tras 30 fallos consecutivosEl admin del workspace recibe email. Reanudar desde el panel.
- Replay con un clic desde el logPayload original, mismo event_id - el receptor debe ser idempotente.
| Evento | Endpoint | Estado | Latencia | Hora | |
|---|---|---|---|---|---|
link.clicked | api.acme.com/wh | 200 | 142ms | 14:04:31 | |
link.created | api.acme.com/wh | 200 | 88ms | 14:03:19 | |
conversion.attributed | logs.acme.com | 500 | 30001ms | 14:02:01 | |
domain.verified | api.acme.com/wh | 200 | 67ms | 13:58:44 | |
link.deleted | logs.acme.com | timeout | 30000ms | 13:55:12 |
Registro de entregas
Registro completo. Filtra, inspecciona, vuelve a enviar.
Cada intento se registra: ID del evento, tipo de evento, URL del endpoint, estado HTTP, cuerpo de respuesta (hasta 4 KB) y latencia. Retención de 30 días en Pro y 90 días en Business.
- Filtra por tipo de evento, endpoint, estado y rango de fechas
- Las entradas fallidas muestran el cuerpo completo de la petición para depurar
- Replay envía el payload original - mismo event_id
- API: POST /v1/webhooks/deliveries/:id/replay
- Modo SIEM: JSON estructurado con garantía de reintentos de 7 días
Lo que puedes hacer
- Eventos de clics, conversiones, enlaces y dominios
- Firma de solicitudes HMAC-SHA256
- Reintentos automáticos - hasta 72 horas
- Modo SIEM para el reenvío de eventos de seguridad
- Filtrado de temas por tipo de evento
- Registro de entrega de webhooks con reenvío (replay)
Qué entregan los webhooks de Elido y cómo funciona la entrega
Los webhooks solo son útiles si son fiables. Las siguientes secciones cubren las garantías de entrega, la verificación de firmas, el comportamiento de reintento y el modo SIEM.
Eventos de clics, conversiones, ciclo de vida de enlaces y dominios - configurables por punto final
Cada punto final de webhook puede suscribirse a uno o más tipos de eventos: click.created (cada clic de redirección), conversion.created (evento de conversión recibido de Stripe, Shopify o un punto final personalizado), link.created, link.updated, link.deleted, link.expired, link.click_cap_reached, domain.verified, domain.ssl_issued, domain.ssl_error, workspace.member.added, workspace.member.removed. Los eventos de clics de alto volumen pueden generar mucho ruido; por defecto, los webhooks click.created se envían con una ventana de agregación de 5 segundos (entrega por lotes, hasta 100 eventos por carga útil). Si necesita una entrega por clic en tiempo real (por ejemplo, para alimentar un procesador de flujo), active el modo raw-click en el punto final; tenga en cuenta que esto puede producir miles de solicitudes por minuto para espacios de trabajo con mucho tráfico y solo debe activarse para puntos finales que puedan manejar tal caudal.
Cada solicitud se firma con HMAC-SHA256 - verifique el encabezado X-Elido-Signature antes de procesarla
Elido firma cada cuerpo de solicitud de webhook con HMAC-SHA256 utilizando el secreto compartido configurado en el punto final. La firma se incluye en el encabezado X-Elido-Signature como 'sha256=<hex_digest>'. Para verificar: calcule el HMAC-SHA256 sobre el cuerpo bruto de la solicitud utilizando el secreto compartido y compare el resultado con el valor del encabezado mediante una función de comparación de tiempo constante (para evitar ataques de tiempo). Nunca procese una carga útil de webhook antes de verificar la firma. El secreto se muestra una sola vez al crear el punto final; rótelo en el panel de control con una ventana de solapamiento de tiempo de inactividad cero (el secreto antiguo sigue siendo válido durante 15 minutos después de generar uno nuevo). Encontrará ejemplos de código para la verificación de firmas en Node.js, Python y Go en la guía de webhooks en /docs/guides/webhooks.
Reintentos automáticos con retroceso exponencial - hasta 72 horas antes de marcar una entrega como fallida
Si un punto final devuelve un código de estado que no es 2xx o se agota el tiempo de espera (tiempo de respuesta de 30 segundos), Elido reintenta la entrega con un retroceso exponencial: 30 segundos, 2 minutos, 10 minutos, 30 minutos, 2 horas, 8 horas, 24 horas, 48 horas. Tras la ventana de 72 horas, la entrega se marca como permanentemente fallida y se elimina de la cola de reintentos. Las entregas fallidas aparecen en el registro de entregas de webhooks con el código de estado HTTP final (o 'timeout'). Puede reenviar cualquier entrega fallida desde el panel de control o la API (POST /v1/webhooks/deliveries/:id/replay), lo cual es útil para recuperar un lote de eventos tras una interrupción en el sistema de destino. Los puntos finales que devuelven 5xx durante más de 30 entregas consecutivas se pausan automáticamente y se notifica al administrador del espacio de trabajo por correo electrónico. Reanude el punto final desde el panel de control una vez solucionado el problema subyacente.
El modo SIEM transmite eventos de auditoría del espacio de trabajo a Splunk, Datadog o cualquier punto final de ingestión de registros HTTPS
El modo SIEM es una configuración especial de webhook para el reenvío de eventos de seguridad. En lugar de eventos de aplicación (clics, conversiones), el modo SIEM entrega eventos de auditoría del espacio de trabajo: inicios de sesión SSO, inicios de sesión fallidos, creación/rotación/eliminación de claves API, eventos de aprovisionamiento SCIM, cambios de rol, rotaciones de secretos de webhooks y acciones de administración (eliminación de enlaces, exportaciones masivas). El formato de la carga útil es JSON estructurado con un esquema estándar (marca de tiempo, actor, acción, objetivo, workspace_id, ip_address, user_agent) diseñado para su ingestión en plataformas SIEM comunes. Los webhooks SIEM tienen entrega garantizada con reintento de hasta 7 días y se firman por separado de los webhooks de aplicación. Integraciones probadas: Splunk HTTP Event Collector (HEC), Datadog Logs API, entrada HTTP de Elastic Logstash y cualquier punto final de registro HTTPS genérico. El modo SIEM es una función exclusiva de Business.
Registro de entrega completo con cuerpo de solicitud, código de respuesta y reenvío con un solo clic para entregas fallidas
Se registra cada intento de entrega de webhook: ID del evento, tipo de evento, URL del punto final, marca de tiempo de la entrega, código de estado HTTP, cuerpo de la respuesta (hasta 4 KB) y latencia. El registro de entregas se puede consultar por tipo de evento, punto final, rango de fechas y estado (entregado, reintentando, fallido). Las entregas fallidas incluyen el cuerpo completo de la solicitud para que pueda inspeccionar el evento que falló sin necesidad de reenviarlo. Reenvío: POST /v1/webhooks/deliveries/:id/replay envía la carga útil original (no un evento nuevo) al punto final; se requiere idempotencia en su receptor. La retención del registro de entregas es de 30 días en Pro y 90 días en Business. Para una auditoría permanente de los eventos de webhook, configure un punto final SIEM o active la exportación programada del registro de auditoría.
Equipos de ingeniería que utilizan los webhooks de Elido en producción
Los nombres son marcadores de posición - los casos de estudio de clientes reales se publicarán aquí a medida que se lancen.
“Consumimos webhooks click.created en modo por lotes para alimentar nuestro propio flujo de análisis. La verificación de la firma HMAC y el registro de entregas con reenvío nos ahorraron horas de depuración durante una interrupción parcial: reenviamos el lote de eventos perdidos desde el panel de control sin tener que reconstruir el evento desde el origen.”
“El modo SIEM que transmite eventos de auditoría del espacio de trabajo a nuestro Splunk HEC era la característica empresarial que nuestro equipo de InfoSec requería. Tener los eventos de inicio de sesión SSO y las rotaciones de claves API en Splunk, con el esquema correcto, nos permitió correlacionar los eventos de acceso de Elido con nuestras reglas de alerta SIEM en un solo día tras la configuración.”
“Los webhooks link.expired activan nuestro flujo de trabajo interno para actualizar la base de datos de materiales impresos: cuando caduca un enlace de código QR, nuestro equipo de operaciones recibe una tarea automática para actualizar la etiqueta física. Cero monitorización manual de los estados de caducidad de los enlaces.”
Webhooks de Elido vs Bitly vs Short.io
Ni Bitly ni Short.io ofrecen webhooks de salida con firma HMAC y garantías de reintento. Esta comparación es sincera sobre la diferencia.
| Feature | Elido | Bitly | Short.io |
|---|---|---|---|
| Webhooks de salida | Sí - puntos finales por espacio de trabajo, suscripción por tipo de evento | No disponible | Sí - webhook básico al hacer clic |
| Firma HMAC-SHA256 | Sí - cada entrega firmada, ejemplos de código incluidos | No aplicable | Parcial - encabezado de firma presente, no documentado |
| Reintentos automáticos | Sí - retroceso exponencial, ventana de 72 horas | No aplicable | Sin reintentos - enviar y olvidar |
| Registro de entrega con reenvío | Sí - 30 días Pro, 90 días Business, reenvío con un clic | No aplicable | Sin registro de entregas |
| Modo de eventos de auditoría SIEM | Sí - Business, JSON estructurado para ingestión SIEM | No disponible | No disponible |
| Pausa automática del punto final por fallo | Sí - pausado tras 30 fallos consecutivos, administrador notificado | No aplicable | No disponible |
| Tipos de eventos | Clic, conversión, ciclo de vida del enlace, dominio, eventos de auditoría | No aplicable | Solo clics |
Preguntas sobre webhooks
¿Cómo verifico la firma HMAC-SHA256?
Lea el cuerpo bruto de la solicitud como bytes (antes de cualquier procesamiento JSON), calcule el HMAC-SHA256 sobre los bytes brutos utilizando el secreto compartido de su punto final, codifique el resultado en base16 (hexadecimal) y compárelo con el valor del encabezado X-Elido-Signature tras quitar el prefijo 'sha256='. Utilice una función de comparación de tiempo constante (por ejemplo, hmac.compare_digest en Python, crypto.timingSafeEqual en Node.js) para evitar ataques de tiempo. Nunca compare la firma con un operador de igualdad de cadenas estándar. Encontrará ejemplos de código para Node.js, Python y Go en /docs/guides/webhooks#verification.
¿Qué debe devolver mi receptor de webhooks?
Devuelva HTTP 200 (o cualquier código de estado 2xx) en un plazo de 30 segundos. El cuerpo de la respuesta se ignora; puede devolver un cuerpo vacío o { ok: true }. Si su procesamiento tarda más de 30 segundos, devuelva 200 inmediatamente y procese el evento de forma asíncrona (añádalo a una cola interna, devuelva 200 y procéselo fuera de la ruta de la solicitud). Devolver 4xx se trata igual que 5xx a efectos de reintento: ambos activan un reintento. Devuelva 200 incluso si el evento no es relevante para su integración (por ejemplo, un evento link.created que no necesita) para evitar reintentos innecesarios.
¿Cómo funciona la idempotencia para los eventos de webhook?
Cada carga útil de webhook incluye un campo event_id (UUID). Utilice este campo como clave de idempotencia en su receptor: si recibe el mismo event_id dos veces (debido a un reintento tras un fallo parcial), procéselo solo una vez. Almacene los ID de los eventos recibidos en una tabla de deduplicación con un TTL de al menos 72 horas (la ventana de reintento). La carga útil del reintento es idéntica a la original -mismo event_id, mismo cuerpo-, por lo que una simple comprobación de '¿ya he visto este event_id?' es suficiente.
¿Por qué se ha pausado mi punto final automáticamente?
Los puntos finales se pausan automáticamente tras 30 fallos de entrega consecutivos (no 2xx o tiempo de espera agotado). Esto evita que Elido sature un punto final defectuoso indefinidamente. Corrija el problema subyacente (normalmente: la URL del punto final cambió, el servidor está caído o se supera el tiempo de espera de 30 segundos debido a un procesamiento lento) y luego reanude el punto final en el panel de control. Una vez reanudado, Elido no reenvía automáticamente los eventos que se omitieron durante la pausa; reenvíelos manualmente desde el registro de entregas si necesita recuperar esos eventos.
¿Puedo recibir eventos de clic en tiempo real por cada clic individual?
Sí, active el modo raw-click en el punto final. En este modo, Elido entrega los eventos click.created individualmente, sin ventana de agregación, en los 2 segundos siguientes al clic. Tenga en cuenta que un espacio de trabajo con mucho tráfico puede generar miles de eventos por minuto en modo raw-click; asegúrese de que su receptor pueda manejar ese volumen. Para la mayoría de los casos de uso analítico, la agregación predeterminada de 5 segundos (hasta 100 clics por carga útil) es suficiente y genera muchas menos solicitudes HTTP.
¿Cuál es el límite de tamaño de la carga útil para los eventos de webhook?
Las cargas útiles de eventos individuales son inferiores a 10 KB. Las cargas útiles de clics por lotes (modo predeterminado) pueden contener hasta 100 eventos por lote, con un límite máximo de tamaño de carga útil de 100 KB. Si un lote supera los 100 KB, se divide automáticamente en varias entregas. Los campos de metadatos de gran tamaño en los clics (por ejemplo, URLs de remitente largas) se truncan a 2 KB por campo. Si su receptor impone un límite estricto al tamaño de la carga útil, configure el modo raw-click (un evento por entrega) en lugar del modo por lotes.
¿Hay alguna forma de probar los webhooks localmente durante el desarrollo?
Utilice una herramienta como ngrok, Cloudflare Tunnel o localtunnel para exponer su servidor local con una URL HTTPS pública y, a continuación, registre esa URL como un punto final de webhook en su espacio de trabajo de prueba. Alternativamente, utilice el botón de prueba de envío de webhooks en el panel de control para enviar una carga útil de muestra de cualquier tipo de evento a un punto final registrado sin activar un evento real. La Elido CLI (elido webhook test --event click.created --endpoint https://...) también funciona para pruebas locales mediante scripts.
¿Qué ocurre con los eventos de webhook durante una ventana de mantenimiento planificada?
Los eventos generados durante una ventana de mantenimiento se ponen en cola en nuestro flujo de eventos y se entregan una vez finalizado el mantenimiento. La página de estado de Elido (status.elido.app) anuncia las ventanas de mantenimiento planificadas con antelación. El SLA de entrega de webhooks excluye las ventanas de mantenimiento anunciadas. Para una ventana de mantenimiento típica de 30 a 60 minutos, el margen de reintento de 72 horas garantiza que no se pierda ningún evento de forma permanente: se entregarán en el orden en que se generaron una vez que el punto final sea alcanzable de nuevo.
Sigue leyendo
El complemento de API síncrona a los webhooks asíncronos: cree y consulte enlaces mediante programación.
Reciba eventos de conversión a través de webhooks desde Stripe y Shopify: la vertiente de webhooks entrantes.
El modo SIEM entrega eventos de auditoría del espacio de trabajo: inicios de sesión SSO, aprovisionamiento SCIM, cambios de roles.
Eventos de clic en tu almacén de analítica: la alternativa mediante consultas a la recepción de clics vía webhook.
¿Listo para probarlo?
Empieza con el plan gratuito, actualiza cuando necesites un dominio personalizado.