> ## 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.

# Acciones de Journey

> Define períodos de espera, ramifica journeys según el comportamiento del usuario y etiqueta usuarios usando pasos de journey.

Usa **acciones de Journey** para controlar cómo y cuándo los usuarios avanzan en tu Journey, personalizar experiencias y probar resultados.

## Esperar

Retrasa el progreso del Journey del usuario por una cantidad específica de tiempo: minutos, horas, días o semanas.

Úsalo para:

* Espaciar mensajes y pasos
* Dar tiempo a los usuarios para interactuar con un mensaje antes de ramificar

<Frame caption="Un nodo de espera con usuarios actualmente esperando para progresar en el journey">
  <img src="https://mintcdn.com/onesignal/yt4lRKoquAlWvRvF/images/docs/wait-node.png?fit=max&auto=format&n=yt4lRKoquAlWvRvF&q=85&s=13178c10c8f9d0e439c47e601ad00978" width="644" height="391" data-path="images/docs/wait-node.png" />
</Frame>

***

## Esperar hasta

Mantén a un usuario en este paso hasta que cumpla condiciones específicas:

* Entrar en un segmento
* Activar un evento de mensaje (por ejemplo, mensaje específico entregado, abierto o clicado)
  * **Solo un evento de mensaje por paso de esperar hasta** es compatible en este momento.
* Activar un evento personalizado (por ejemplo, incorporación completa, compra realizada)

Puedes **agregar múltiples condiciones** y ramificar usuarios según la *primera condición que cumplan*. Si esas condiciones no se cumplen en cierto tiempo, puedes establecer una **rama de expiración** para continuar a los usuarios a través del Journey o salir completamente.

<Note>
  Si un usuario ya cumple una condición cuando llega a este paso, avanzará por esa rama de inmediato sin esperar. Las condiciones se evalúan en orden (de arriba a abajo / A–Z).
</Note>

Usando la regla de entrada de eventos personalizados, también puedes agregar [Event Matching](#event-matching) para controlar qué instancia del usuario progresa a través del Journey si los ingresas múltiples veces.

<Frame caption="Esperar hasta que el usuario esté en un segmento o active un evento personalizado">
  <img src="https://mintcdn.com/onesignal/yt4lRKoquAlWvRvF/images/journeys/journeys-wait-until-action.png?fit=max&auto=format&n=yt4lRKoquAlWvRvF&q=85&s=1a27c7d1bb9e26bc68a9980d9662b400" width="952" height="1462" data-path="images/journeys/journeys-wait-until-action.png" />
</Frame>

Cuando un evento personalizado coincide con una condición, ese evento se almacena en nombre del usuario y puede [referenciarse en sintaxis Liquid](./custom-events#liquid-syntax-for-custom-events) al enviar mensajes de Journey.

### Coincidencia de eventos

Usando la regla de entrada de eventos personalizados, puedes hacer que los usuarios ingresen a un Journey múltiples veces. Con la configuración de **coincidencia de eventos** del paso Esperar hasta, puedes controlar qué instancia del usuario progresa a través del Journey.

Requisitos:

* Establece las reglas de entrada del Journey para usar un evento personalizado.
* Incluye una propiedad de evento al ingresar usuarios al Journey.

Por ejemplo, tienes un Journey de "Recordatorio de encuesta". Tienes múltiples encuestas, lo que significa que los usuarios pueden ingresar al Journey múltiples veces (una vez por cada encuesta). Quieres enviar un mensaje de recordatorio si no completaron la encuesta o eliminarlos si lo hicieron.

Puedes usar la configuración de **coincidencia de eventos** para controlar qué instancia del usuario progresa a través del Journey.

**Ejemplo**:

<Steps>
  <Step title="Establecer las reglas de entrada del Journey y propiedades de eventos personalizados">
    Establece las reglas de entrada del Journey para usar un evento personalizado. **Ejemplo**: `survey_start`

    <Frame caption="Reglas de entrada del Journey usando un evento personalizado">
      <img src="https://mintcdn.com/onesignal/yt4lRKoquAlWvRvF/images/journeys/survey_start.png?fit=max&auto=format&n=yt4lRKoquAlWvRvF&q=85&s=146924d7b2a759c1894496745a078c4f" width="469" height="298" data-path="images/journeys/survey_start.png" />
    </Frame>

    Los usuarios ingresarán al Journey a través de la [API de eventos personalizados](/reference/create-custom-events).

    El evento personalizado tendrá el `name` establecido en `survey_start` y una propiedad `payload` `survey_id` con un valor de la encuesta que están tomando (por ejemplo, `survey_1`).

    ```json Entrance Trigger Event Example theme={null}
    {
      "events": [
        {
          "external_id": "UserA",
          "name": "survey_start",
          "properties": {
              "survey_id": "survey_1"
          }
        }
      ]
    }
    ```
  </Step>

  <Step title="Crear un paso Esperar hasta y propiedades de eventos personalizados">
    Establece la condición Esperar hasta para usar un evento personalizado. **Ejemplo**: `survey_complete`

    Establece la opción de **coincidencia de eventos** para especificar qué instancia del usuario progresa a través del paso Esperar hasta haciendo coincidir:

    * **Propiedad de evento desencadenante**: establecida en el evento desencadenante de entrada del Journey (por ejemplo, `survey_id`)
    * **Propiedad de evento de espera**: establecida en el evento Esperar hasta (por ejemplo, `survey_type`)

    ```json Wait Until Event Example theme={null}
    {
      "events": [
        {
          "external_id": "UserA",
          "name": "survey_complete",
          "properties": {
              "survey_type": "survey_1"
          }
        }
      ]
    }
    ```

    Cuando el valor de `survey_id` coincide con el valor de `survey_type`, esa instancia del usuario progresará a través del Journey.

    <Warning>
      Puedes usar las mismas propiedades (por ejemplo, `survey_id`) en ambas **Propiedad de evento desencadenante** y **Propiedad de evento de espera**. El ejemplo usa propiedades diferentes (por ejemplo, `survey_id` y `survey_type`) para demostrar el concepto.

      ¡Las propiedades distinguen entre mayúsculas y minúsculas! `survey_1` no es igual a `Survey_1`.
    </Warning>

    **Rama de expiración**:

    Si el evento Esperar hasta no ocurre dentro del tiempo de expiración, el usuario progresará a través del Journey. Este ejemplo le da al usuario 1 semana para completar la encuesta.

    <Frame caption="Paso Esperar hasta usando un evento personalizado">
      <img src="https://mintcdn.com/onesignal/yt4lRKoquAlWvRvF/images/journeys/survey_complete.png?fit=max&auto=format&n=yt4lRKoquAlWvRvF&q=85&s=59ad63e1af649a09f5c3a18a32a979b8" width="488" height="648" data-path="images/journeys/survey_complete.png" />
    </Frame>
  </Step>

  <Step title="Agregar un paso de mensaje">
    Para completar el ejemplo, agrega un paso de mensaje dentro de la rama de expiración para enviar el recordatorio.

    <Frame caption="Paso de mensaje dentro de la rama de expiración">
      <img src="https://mintcdn.com/onesignal/yt4lRKoquAlWvRvF/images/journeys/survey_reminder.png?fit=max&auto=format&n=yt4lRKoquAlWvRvF&q=85&s=1a367c270dec75e70a6409b3c66be36e" width="955" height="572" data-path="images/journeys/survey_reminder.png" />
    </Frame>
  </Step>

  <Step title="¡Pruébalo!">
    Después de seguir los pasos anteriores, puedes probarlo:

    * Reemplaza el `external_id` en la [API de eventos personalizados](/reference/create-custom-events) con tu ID externo
    * Activa el evento `survey_start` con un `survey_id` de `survey_1`
      * Verás a tu usuario ingresar al Journey y fluir al paso Esperar hasta

    <Warning>
      ¡Los eventos no son inmediatos pero son muy rápidos! Es posible que debas esperar unos minutos antes de que se procese el evento.

      Verifica la lista de eventos personalizados para ver si el evento se procesó.
    </Warning>

    * Activa otro evento `survey_start` con un `survey_id` de `survey_2`
      * Verás 2 usuarios ingresar al Journey y al paso Esperar hasta
    * Activa el evento `survey_complete` con un `survey_type` de `survey_1`
      * Verás a tu usuario progresar a través del Journey
    * Activa otro evento `survey_complete` con un `survey_type` de `survey_2`
      * Verás ambas instancias de tu usuario progresar a través del Journey y salir

    <Check>
      ¡Completaste el ejemplo de evento personalizado de Journey con coincidencia de eventos!
    </Check>
  </Step>
</Steps>

***

## Ventana de tiempo

Restringe cuándo los usuarios pueden avanzar al siguiente paso en el Journey según **días y horas específicos**.

**Ejemplo**: Solo permite que los usuarios reciban un mensaje los fines de semana por la noche.

<Frame caption="Captura de pantalla que muestra un ejemplo de un nodo de ventana de tiempo">
  <img src="https://mintcdn.com/onesignal/3zq1PvSaqvUE2bIx/images/docs/31f4664-Screenshot_2024-03-21_at_15.56.12.png?fit=max&auto=format&n=3zq1PvSaqvUE2bIx&q=85&s=07267995ec158e725ecd0c6afb28af20" width="540" height="448" data-path="images/docs/31f4664-Screenshot_2024-03-21_at_15.56.12.png" />
</Frame>

### Cómo funciona el comportamiento de la ventana de tiempo

Si un usuario ingresa a este nodo fuera del tiempo permitido:

* OneSignal establece un temporizador para retrasar al usuario hasta la **siguiente ventana disponible**
* El **tiempo de entrada a la ventana se aleatoriza**

La ventana de tiempo puede usar la **zona horaria del usuario** cuando los datos de zona horaria estén disponibles. Si un usuario no tiene datos de zona horaria, se usa la zona horaria predeterminada de la aplicación.

**Ejemplo**:
Si tu ventana de tiempo es los martes de 1:00 PM a 6:00 PM PST, y un usuario llega al nodo el lunes, puede continuar el martes a una hora aleatoria como 5:45 PM.

### Usar ventanas de tiempo para envíos recurrentes

Combina un nodo de ventana de tiempo con [reglas de reingreso](./journeys-settings#re-entry-rules) para enviar mensajes recurrentes según un programa (diario, semanal, etc.). Coloca la ventana de tiempo como el **primer paso** en el Journey para que los usuarios esperen el día y la hora correctos antes de recibir el mensaje.

Al elegir una duración de reingreso, configúrala como **más larga que la duración de la ventana de tiempo** pero más corta que el intervalo de envío. Esto evita envíos duplicados dentro de la misma ventana y garantiza que los usuarios reingresen con suficiente anticipación para alcanzar la siguiente ventana.

**Ejemplo — envío diario:**

* Ventana de tiempo: todos los días, de 10 AM a 6 PM (ventana de 8 horas)
* Reingreso: 12 horas (más larga que la ventana de 8 horas, más corta que 24 horas)
* Resultado: los usuarios reingresan \~12 horas después de salir, siempre llegan antes de que cierre la ventana del día siguiente y reciben un mensaje por día

Consulta [Journeys recurrentes para días específicos](./journeys-examples#recurring-journeys-for-specific-days) y [¿Puedo programar el envío de un mensaje todos los días?](./journeys-examples#can-i-schedule-a-message-to-send-every-day) para ver ejemplos completos.

***

## Rama Sí/No

Ramifica usuarios según **membresía de segmento** o **comportamiento de mensaje**.

### Membresía de segmento

Crea ramas según en qué segmento está un usuario.

**Ejemplo**:
Si los usuarios están etiquetados por tipo de plan:

* Rama "Gratis" = promover actualización
* Rama "Pagado" = destacar características premium

### Comportamiento de mensaje

Ramifica según la interacción con mensajes anteriores en el Journey:

* **Push**: Clicado, Entregado
* **Email**: Clicado, Abierto, Entregado

**Nota**: Safari no admite entrega confirmada.

***

## Rama dividida

Distribuye usuarios aleatoriamente a través de diferentes rutas para probar mensajes, canales o flujos de Journey.

<Frame caption="Un ejemplo de una rama dividida de 3 vías">
  <img src="https://mintcdn.com/onesignal/56ctKxZSV4m5VEkn/images/docs/b7a62545ad25878949fe7b0fffc1b64ddee30730dbe351cd51eaea5ed8e9964f-Screenshot_2024-12-23_at_1.37.49_PM.png?fit=max&auto=format&n=56ctKxZSV4m5VEkn&q=85&s=b9f67d64e3721cba629798663860be3f" width="1916" height="1430" data-path="images/docs/b7a62545ad25878949fe7b0fffc1b64ddee30730dbe351cd51eaea5ed8e9964f-Screenshot_2024-12-23_at_1.37.49_PM.png" />
</Frame>

<Warning>
  Una vez que un Journey está en vivo, **no puedes editar** una Rama dividida. Para cambiar el número de ramas, crea un nuevo Journey.
</Warning>

### Cómo funciona

* Hasta 20 ramas
* Establece divisiones de porcentaje iguales o personalizadas
* Los porcentajes se redondean a números enteros (por ejemplo, una división de 3 vías se convierte en 34/33/33)
* La distribución puede variar ligeramente con tamaños de muestra pequeños

<Frame caption="Configuración de rama dividida">
  <img src="https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/517165a9f4f78a584ce252ae7581c6fc48f05e040a0ba921d759392577218988-Screenshot_2024-12-23_at_11.28.53_AM.png?fit=max&auto=format&n=jFWn5xzleD8du3j6&q=85&s=57308fa43c451864c80af0c97a4a9cfa" width="460" height="456" data-path="images/docs/517165a9f4f78a584ce252ae7581c6fc48f05e040a0ba921d759392577218988-Screenshot_2024-12-23_at_11.28.53_AM.png" />
</Frame>

Por defecto, los usuarios se vuelven a aleatorizar cada vez que reingresan a un Journey.
Para mantenerlos en la misma rama, desactiva **Aleatorizar al reingresar**.

Usa la acción **Etiquetar usuario** para rastrear qué rama siguió un usuario.

### Pruebas A/B/N

Usa Ramas divididas anidadas para probar más de dos variantes simultáneamente.

**Ejemplo**:
Para dividir usuarios equitativamente entre 3 variantes:

1. Primera rama: 33% vs 67%
2. Debajo de la rama del 67%, agrega otra Rama dividida 50/50

Esto da \~33% en cada ruta.

### Grupos de control

Prueba el impacto de la mensajería dejando una rama vacía (sin nodos de mensaje). Esto te permite comparar contra usuarios que no reciben ningún mensaje.

### Elegir un ganador

Una vez que se identifica una variante ganadora, actualiza la rama para enviar **100%** del tráfico por esa ruta.

Para continuar midiendo el impacto a lo largo del tiempo, considera mantener un pequeño **grupo de retención**—un porcentaje de usuarios que no reciben el mensaje ganador.

***

## Etiquetar usuario

Usa esta acción para aplicar o eliminar etiquetas durante un Journey.

**Casos de uso comunes**:

* Rastrear el progreso del Journey (por ejemplo, `journeyStep: welcome`)
* Potenciar mensajes in-app etiquetando usuarios en momentos clave
* Excluir usuarios de otros Journeys usando etiquetas activas

<Frame caption="Un flujo simple de incorporación/bienvenida">
  <img src="https://mintcdn.com/onesignal/6tscVAtiSqz353kV/images/docs/99f568ee808ea29f528fd83830bf9a7ebed7e590e95d34047e6495fc810015f2-image.png?fit=max&auto=format&n=6tscVAtiSqz353kV&q=85&s=cb4cbbbe43b252f44f22f08379b9b709" width="237" height="485" data-path="images/docs/99f568ee808ea29f528fd83830bf9a7ebed7e590e95d34047e6495fc810015f2-image.png" />
</Frame>

### Ejemplo: control de flujo de incorporación

1. Primer paso: Agregar una etiqueta (por ejemplo, `onboardingJourney: active`)
2. Usar esta etiqueta para crear un segmento para exclusión de otros Journeys
3. Último paso: Eliminar la etiqueta estableciendo el valor en blanco

<Frame caption="Configuración de nodo de etiqueta para eliminar la etiqueta del usuario">
  <img src="https://mintcdn.com/onesignal/4HyuQPBpu-4xjmQC/images/docs/d4199348801030819f94a56976af9b180a77434be6f8b76fd24c7c5a283fc0ba-image.png?fit=max&auto=format&n=4HyuQPBpu-4xjmQC&q=85&s=004b49369e6eb2a13a55dfa1b93855bf" width="651" height="193" data-path="images/docs/d4199348801030819f94a56976af9b180a77434be6f8b76fd24c7c5a283fc0ba-image.png" />
</Frame>

***

### Mejor práctica: Usar etiquetas con webhooks o personalización

Cuando agregas o eliminas etiquetas en un Journey, puede tomar un poco de tiempo antes de que esos cambios estén listos para usarse en el siguiente paso. Para asegurarte de que todo funcione sin problemas:

* **Para Webhooks**: Agrega una breve espera después de establecer una etiqueta antes de enviar datos con un webhook.
* **Para Personalización**: Agrega una breve espera después de establecer o eliminar una etiqueta antes de usarla en un email para personalizar contenido.

<Tip>
  Recomendamos agregar un **nodo de Espera de 15 minutos** entre la acción Etiquetar y el siguiente paso. Esto asegura que la etiqueta esté completamente lista, para que tu webhook o email siempre incluya los datos correctos.
</Tip>

***

## Preguntas frecuentes

### ¿Puedo ramificar un Journey según qué botón de acción push se hizo clic?

No solo con la ramificación Sí/No integrada — las condiciones de comportamiento de mensajes solo detectan "Hecho clic" o "Entregado", no qué botón específico fue clicado. Para ramificar por botón, escucha el evento de clic en tu SDK, lee el Action ID y envía un [Evento personalizado](./custom-events). Luego usa un paso [Wait Until](#wait-until) para ramificar según qué evento personalizado se active primero.

Consulta [Ramificar un Journey por botón de acción clicado](./journeys-examples#branch-a-journey-by-action-button-clicked) para un recorrido completo con ejemplos de código.

### ¿Necesito escribir código para usar Eventos personalizados en un Journey?

Sí. Los Eventos personalizados se envían a OneSignal desde tu app o sitio web usando el [SDK](./mobile-sdk-reference#custom-events), o desde tu backend usando la [REST API](/reference/create-custom-events). No existe una forma solo con el panel de control para disparar Eventos personalizados. Una vez que los eventos fluyen hacia OneSignal, puedes usarlos en Journeys y Segmentos a través del panel sin código adicional.
