> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Webhooks de Journey

> Envía solicitudes HTTP desde pasos de Journey a servidores externos, personalizadas con datos del usuario mediante sintaxis Liquid, con lógica de reintento y herramientas de depuración.

Los webhooks de Journey envían solicitudes HTTP desde un paso de Journey a tus servidores o cualquier endpoint públicamente accesible. Configuras el método HTTP, la URL, los encabezados y el contenido del cuerpo. Las solicitudes pueden personalizarse con datos específicos del usuario mediante la [sintaxis Liquid](./using-liquid-syntax), lo que te permite sincronizar eventos de Journey con CRM, plataformas de análisis o backends personalizados en tiempo real.

## Requisitos

* [Contacta al equipo de ventas de OneSignal](https://onesignal.com/contact) para obtener acceso.
* La URL o dirección IP debe ser válida y accesible mediante HTTP o HTTPS.
* Los endpoints deben ser **públicamente enrutables** — no detrás de un firewall ni en localhost.
* Los dominios deben tener un dominio de nivel superior válido (`.com`, `.org`, `.net`, etc.).

<Warning>
  Los webhooks de Journey no pueden llamar a las API de OneSignal. Están diseñados únicamente para enviar datos a sistemas externos.
</Warning>

***

## Configuración

Una vez que tu Journey está creado, sigue estos pasos:

1. Navega a **Datos > Webhooks** en el panel de OneSignal.
2. Haz clic para crear un nuevo webhook.
3. Define lo siguiente:
   * **Método HTTP** (generalmente `POST`)
   * **URL de destino**
   * **Encabezados personalizados** (por ejemplo, tokens de autenticación)
   * **Contenido del cuerpo** (texto plano o JSON, opcionalmente usando Liquid)

<Frame caption="Pantalla de configuración del webhook">
  <img src="https://mintcdn.com/onesignal/Xl2NHJvxakrK4JbL/images/docs/f4bb77a-Screenshot_2023-04-20_at_9.24.03_PM.png?fit=max&auto=format&n=Xl2NHJvxakrK4JbL&q=85&s=79005b0332776e4703954789fe40c5ea" alt="Formulario de configuración del webhook con campos de método HTTP, URL, encabezados y cuerpo" width="1038" height="926" data-path="images/docs/f4bb77a-Screenshot_2023-04-20_at_9.24.03_PM.png" />
</Frame>

### Encabezados no permitidos

No puedes establecer los siguientes encabezados:

* `content-length`
* `referer`
* `metadata-flavor`
* `x-google-metadata-request`
* `host`
* Cualquier encabezado que comience con `x-onesignal`

### Probar webhooks

También puedes probar tu endpoint manualmente usando una herramienta como curl:

```bash theme={null}
curl -X POST https://yourserver.com/webhook \
  -H "Content-Type: application/json" \
  -d '{ "user_id": "abc123" }'
```

Útil para validar que tu endpoint sea accesible y funcione antes de agregarlo a un Journey.

***

## Personalización

Todos los campos de webhook soportan [sintaxis Liquid](./using-liquid-syntax), lo que te permite insertar dinámicamente datos de usuario y suscripción en la solicitud.

Consulta [Personalización de mensajes](./message-personalization) para la lista completa de propiedades disponibles.

### Referencia de datos de usuario

Las siguientes propiedades del objeto `user` están disponibles en campos de webhook mediante sintaxis Liquid:

| Propiedad    | Tipo   | Uso                                 | ¿Disponible en prueba? |
| ------------ | ------ | ----------------------------------- | ---------------------- |
| OneSignal ID | String | `{{ user.onesignal_id }}`           | ✅                      |
| External ID  | String | `{{ user.external_id }}`            | ✅                      |
| Tags         | Object | `{{ user.tags.your_tag_key_here }}` | ❌                      |
| Language     | String | `{{ user.language }}`               | ✅                      |

<Warning>
  Las etiquetas no están disponibles al probar webhooks fuera de un Journey activo. Usa [Suscripciones de prueba](./test-users) para validar el comportamiento antes de activarlo.
</Warning>

***

## Agregar un webhook a un Journey

1. Después de crear y probar tu webhook, abre tu Journey.
2. Agrega un **paso de Webhook** donde sea necesario.
3. Selecciona el webhook que configuraste anteriormente.

Cada vez que un usuario alcanza ese paso, el webhook se activa con sus datos personalizados.

<Frame caption="Un paso de webhook dentro de un Journey">
  <img src="https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/7e6782f-Screenshot_2023-04-20_at_3.54.09_PM.png?fit=max&auto=format&n=0qspEXXeJ8zJbkJ-&q=85&s=e017a2eff865b6de671a34b71c437332" alt="Canvas de Journey con un paso de webhook conectado entre pasos de mensajes" width="664" height="1058" data-path="images/docs/7e6782f-Screenshot_2023-04-20_at_3.54.09_PM.png" />
</Frame>

***

## Depuración y registros

### Estadísticas del webhook

Ve a la pestaña **Estadísticas** del webhook para ver el rendimiento de tu webhook. Esto incluye:

* Total de eventos enviados
* Tendencias de tiempo de respuesta
* Distribución de código de estado

<Frame caption="Estadísticas del webhook que muestran el recuento de eventos y los tiempos de respuesta">
  <img src="https://mintcdn.com/onesignal/Xl2NHJvxakrK4JbL/images/docs/f0cfcb8-small-Screenshot_2023-04-21_at_9.04.57_AM.png?fit=max&auto=format&n=Xl2NHJvxakrK4JbL&q=85&s=f4514d8cecf78831bd55019cfce61b9b" alt="Pestaña de estadísticas del webhook con recuento de eventos, tendencias de tiempo de respuesta y distribución de códigos de estado" width="1185" height="1007" data-path="images/docs/f0cfcb8-small-Screenshot_2023-04-21_at_9.04.57_AM.png" />
</Frame>

### Pestaña de registros

Para información más detallada, la pestaña de Registros muestra:

* Datos de solicitud/respuesta recientes
* Códigos de estado y mensajes de error
* Encabezados y cargas útiles (cuando aplique)

<Frame caption="Registros del webhook que muestran detalles de solicitudes y respuestas">
  <img src="https://mintcdn.com/onesignal/jBdBk5XvQR5eKOks/images/docs/729c24f-Screenshot_2023-04-20_at_9.27.31_PM.png?fit=max&auto=format&n=jBdBk5XvQR5eKOks&q=85&s=3923dcf3fbf2975e27b5f158a1442824" alt="Pestaña de registros del webhook con solicitudes recientes, códigos de estado y cargas útiles" width="2130" height="1264" data-path="images/docs/729c24f-Screenshot_2023-04-20_at_9.27.31_PM.png" />
</Frame>

***

## Lógica de reintento y comportamiento de deshabilitación

OneSignal reintenta solicitudes de webhook fallidas para errores recuperables (por ejemplo, `429 Too Many Requests`). Los reintentos ocurren con retrasos crecientes.

Si los reintentos fallan repetidamente, el webhook se marca como **permanentemente fallido** y no se hacen más intentos.

### Deshabilitación automática

Si un webhook falla de forma consistente, OneSignal lo deshabilita para prevenir más problemas. Los administradores reciben alertas por correo electrónico y un banner en el panel antes y después de que se deshabilite un webhook. Identifica la causa raíz y prueba el webhook antes de volver a habilitarlo.

Tu endpoint debe ser capaz de manejar el volumen de eventos que produce tu Journey. Revisa el volumen de envío de mensajes de tu aplicación para estimar el rendimiento que necesita tu API.

### Guía de rendimiento

* Los endpoints lentos o sobrecargados (especialmente los que devuelven respuestas `429`) pueden activar la deshabilitación automática.
* Registra eventos rápidamente y difiere el procesamiento adicional para evitar tiempos de espera.
* El volumen escala con la actividad del usuario — asegúrate de que tu endpoint pueda manejar el rendimiento máximo.
* Usa el valor `event.id` (disponible como encabezado o en el cuerpo) para deduplicar eventos entrantes.

### Mejores prácticas de confiabilidad

* **Enruta primero a través de tu propio servidor**, no directamente a servicios de terceros. Esto te da control sobre el registro, la autenticación, la limitación y la gestión de colas. Los servicios de terceros pueden limitar o bloquear solicitudes durante picos de volumen, y OneSignal no gestiona esos límites.
* **Planifica para ráfagas.** La ejecución del webhook ocurre inmediatamente cuando los usuarios alcanzan el paso. Si muchos usuarios llegan a un paso de webhook a la vez, OneSignal envía una ráfaga de solicitudes HTTP sin limitación de velocidad. Considera construir una capa de API ligera o proxy de cola que pueda ingerir webhooks de manera confiable, aplicar límites de velocidad o procesamiento por lotes, y enrutar solicitudes a tus servicios de terceros de manera apropiada.
* **Revisa los límites de API de terceros.** Las herramientas populares como Slack, Twilio y Segment ofrecen API HTTP públicas, pero tienen sus propios límites de velocidad, requisitos de autenticación y manejo de errores. Consulta su documentación antes de conectarte directamente.

***

## Proteger tu webhook

Para verificar que las solicitudes provienen de OneSignal, agrega un encabezado de autorización personalizado (por ejemplo, `Authorization: Bearer TU_TOKEN_SECRETO`) y verifícalo del lado del servidor antes de aceptar la solicitud.

***

## Preguntas frecuentes

### ¿Puedo usar webhooks para llamar a las API de OneSignal?

No. Los webhooks de Journey están diseñados únicamente para enviar datos a sistemas externos. No pueden llamar a las API de OneSignal. Para actualizar datos de OneSignal basándote en eventos de Journey, enruta el webhook a través de tu propio servidor y haz que tu servidor llame a la API de OneSignal.

### ¿Por qué mi webhook fue deshabilitado automáticamente?

OneSignal deshabilita los webhooks que fallan de forma consistente para prevenir más problemas. Revisa la pestaña **Registros** para ver los detalles del error (códigos de estado, cuerpos de respuesta), corrige la causa raíz y prueba el webhook antes de volver a habilitarlo. Las causas comunes incluyen tiempo de inactividad del endpoint, errores de autenticación y limitación de velocidad.

### ¿Cómo deduplico eventos de webhook?

Usa el valor `event.id` (disponible como encabezado o en el cuerpo de la solicitud) para identificar eventos únicos. Almacena los ID de eventos procesados en tu servidor y omite cualquier duplicado. Esto es especialmente importante si los reintentos entregan el mismo evento más de una vez.

### ¿OneSignal limita la velocidad de las solicitudes de webhook?

No. OneSignal envía solicitudes de webhook inmediatamente cuando los usuarios alcanzan el paso, sin limitación de velocidad. Si muchos usuarios llegan a un paso de webhook a la vez, tu endpoint recibe una ráfaga de solicitudes. Construye tu endpoint para manejar el volumen máximo, o usa un proxy de cola para almacenar en búfer y procesar por lotes las solicitudes.

### ¿Puedo probar webhooks sin lanzar un Journey?

Sí. Usa el botón **Probar** en la configuración del webhook para enviar una solicitud de muestra. Ten en cuenta que las [etiquetas](./add-user-data-tags) no están disponibles en las solicitudes de prueba — usa [suscripciones de prueba](./test-users) en un Journey activo para una validación completa.

***

## Páginas relacionadas

<Columns cols={2}>
  <Card title="Descripción general de Journeys" icon="route" href="./journeys-overview">
    Introducción a los Journeys y cómo funcionan los flujos multicanal.
  </Card>

  <Card title="Acciones de Journey" icon="code-branch" href="./journeys-actions">
    Agrega pasos de espera, lógica de ramificación, ventanas de tiempo y rutas divididas.
  </Card>

  <Card title="Sintaxis Liquid" icon="code" href="./using-liquid-syntax">
    Referencia completa para plantillas Liquid en mensajes y webhooks de OneSignal.
  </Card>

  <Card title="Personalización de mensajes" icon="user-pen" href="./message-personalization">
    Descripción general de todos los métodos de personalización incluyendo etiquetas, Liquid y contenido dinámico.
  </Card>
</Columns>
