Skip to main content

¿Qué es un webhook?

Un webhook te permite recibir una notificación cuando ocurren determinadas acciones del sistema mediante una llamada a una URL que tú proporcionas. Los webhooks también se conocen como “URL Callbacks” o “HTTP push calls”. Tu URL debe usar SSL y comenzar con HTTPS.

Acciones de webhook

Consulta las acciones disponibles para webhooks.

Entendiendo los webhooks de Ayrshare

Los webhooks se categorizan por la acción específica y se registran a nivel del Primary Profile o del User Profile. Cualquier actualización para el Primary o el User Profile se envía primero al webhook registrado para el User Profile. Si el User Profile no tiene un webhook registrado, la actualización se enviará al webhook registrado en el Primary Profile. Por ejemplo:
  • Si un User Profile tiene un webhook Social Action registrado y desvincula TikTok, se llamará a la URL del webhook Social Action registrado para el User Profile. El webhook del Primary Profile no se llamará.
  • Si un User Profile desvincula TikTok y no tiene un webhook Social Action registrado, pero el Primary Profile sí tiene un webhook registrado, se llamará a la URL del webhook Social Action registrado para el Primary Profile.

Registrar un webhook

Registra un webhook proporcionando una URL de endpoint y el tipo de acción al endpoint POST /hook/webhook. Cuando ocurra la acción, se enviará un mensaje HTTP POST a la URL proporcionada. Por ejemplo, registra una URL para recibir notificaciones del estado de un scheduled post. La URL de endpoint del webhook no debe usar redirecciones y debe ser la URL de destino final. Si solo registras el webhook del Primary Profile, los User Profiles heredarán automáticamente el webhook del Primary Profile. Para tener un webhook único para cada User Profile, debes registrar un webhook para cada User Profile.
Después de que tu webhook reciba el HTTP POST, tu servidor debe responder con un status HTTP 200 para marcar la llamada como correcta. Si tu servidor no responde en 15 segundos, el intento se registra como fallido y se reintenta. Responde en cuanto recibas la solicitud y realiza el procesamiento de forma asíncrona: un timeout no es un rechazo, así que si tu handler completa el trabajo pero responde tarde, el reintento hará que lo proceses dos veces.
También puedes registrar webhooks en el Developer Dashboard.

Reintentos de webhook

Si la respuesta HTTP de tu servidor no está en el rango de éxito 200-299, o tu servidor no responde en 15 segundos, el sistema reintentará automáticamente la llamada al webhook dos veces más. El primer reintento se realizará al cabo de 5 segundos y el segundo reintento 30 segundos después. Los reintentos tendrán el mismo hookId y el mismo payload.

Semántica de entrega e idempotencia

Ayrshare entrega los webhooks al menos una vez. Los duplicados ocasionales son parte del funcionamiento normal, no un defecto: todo consumidor necesita idempotencia como propiedad permanente. Los duplicados llegan en dos formas distintas, y cada una necesita una clave diferente: hookId identifica una entrega de un evento. Es idéntico en cada reintento de esa entrega, por lo que reclamar sobre él hace que los reintentos sean seguros. Pero una notificación nueva del mismo evento subyacente llega con un hookId nuevo, así que hookId por sí solo no reconocerá ese caso. Patrón recomendado para el receptor:
  1. Responde primero. Devuelve 2xx inmediatamente y luego procesa de forma asíncrona. Un timeout no es un rechazo: si terminas el trabajo pero respondes tarde, el evento se vuelve a enviar.
  2. Reclama hookId de forma atómica en el momento en que llega la solicitud: una restricción de unicidad, un INSERT ... ON CONFLICT DO NOTHING o un SET NX, no una comprobación tipo lectura y luego escritura. Dos intentos pueden llegar de forma concurrente, y una comprobación seguida de una acción deja pasar a ambos.
  3. Reclama también una clave propia, construida a partir del payload, para que una segunda notificación que traiga un hookId nuevo siga siendo reconocida. En messages, id combinado con subAction funciona bien.
  4. Después haz el trabajo, manteniendo ambas reclamaciones el tiempo suficiente para cubrir la ventana de reintentos y cualquier renotificación posterior.
El id del payload no es único por sí mismo para todos los tipos de evento: el mismo id de mensaje se repite en ediciones y reacciones, y los payloads de messageRead no llevan id, así que combínalo con subAction en lugar de usarlo solo.

Cabeceras de metadatos de entrega

Cada entrega lleva dos cabeceras que identifican esa transmisión concreta, para que puedas distinguir una original de un reintento:
X-Ayrshare-Delivery-Attempt es 0 en el primer envío y se incrementa en uno con cada reintento, por lo que cualquier valor superior a 0 significa que ya hemos enviado esta entrega al menos una vez. Trátalo como un contador no acotado en lugar de un conjunto fijo de valores: el número de reintentos es un detalle operativo que puede cambiar. X-Ayrshare-Delivery-Id es único para cada intento; cítalo al contactar con soporte y sirve para identificar el registro exacto de la entrega. Estas cabeceras identifican la transmisión; hookId identifica el evento. Deduplica por hookId, no por el delivery id: el delivery id es diferente en cada intento por diseño, así que nunca se reconocería nada como duplicado.

Seguridad de webhook

Puedes optar por añadir seguridad adicional configurando autenticación HMAC como solicitud HTTP. Esto se hace a menudo para prevenir ataques de repetición. Ayrshare utiliza HMAC-SHA256 para hashear el cuerpo del mensaje e incluye el hash y el UNIX timestamp en la cabecera del POST.
Basándote en una secret key establecida al registrar tu webhook, puedes validar el POST comparando la cabecera X-Authorization-Content-SHA256 con el HMAC-SHA256 del cuerpo del POST. El signing secret es a nivel de perfil: un secret por User Profile, usado en todas las acciones de webhook de ese perfil, por lo que establecerlo para una acción lo cambia para todas las acciones de ese perfil. Las cuentas multiperfil gestionan un secret separado por perfil (apunta a un perfil con la cabecera Profile-Key).

Logs de webhook

En el Ayrshare Dashboard, puedes ver los webhooks activos, consultar los detalles del webhook enviado, el estado de la respuesta de tu servidor y reenviar el webhook a la URL registrada. Cambia a un User Profile concreto para ver los logs de webhook de ese perfil.

Códigos de respuesta HTTP

La primera columna indica una respuesta HTTP correcta ✔️ (200, 300) del webhook o una respuesta fallida ✖️ (400, 500). Cambia a un user profile concreto para ver los logs de webhook de ese perfil.

Tasa de error

La “Error Rate” de los 1000 posts más recientes puede consultarse tanto en las páginas Actions como en Webhook Logs del dashboard. Cualquier respuesta del webhook de tu servidor entre 400 y 500 se considera un error.