# Referencia de puntos

Cada [punto](/es/developer/api-reference/customer-journey-api/journey-object/#point) lleva un objeto `point_data` con exactamente una clave anidada, que coincide con el `point_type` del punto (consulte la [asignación de tipo de punto → clave](/es/developer/api-reference/customer-journey-api/journey-object/#point-types-and-point_data)). Esta página documenta la estructura debajo de cada clave.

<Aside type="note">
Los puntos de entrada, temporización, división, acción y conversión se documentan en su totalidad a continuación.

Para los puntos de mensajería (`send_*`, `inapp`), esta página cubre solo los campos estructurales: a qué preset o contenido hacer referencia y qué configuración de canal pasar.
El contenido del mensaje en sí se define en el preset y se documenta en la [API de Presets](/es/developer/api-reference/presets-api/) y en la documentación por canal.
Algunos campos hacen referencia a objetos anidados que reflejan los controles en el constructor de Customer Journey.
</Aside>
## Puntos de entrada

Un journey necesita al menos un punto de entrada. Todos los puntos de entrada tienen una única salida `default`.

### start_by_segment

Ingresa a los usuarios que coinciden con un segmento. `POINT_TYPE_START_BY_SEGMENT`.

| Campo | Tipo | Descripción |
|---|---|---|
| `application_code` | string | [Código de aplicación](/es/developer/api-reference/api-identifiers/#application-code). |
| `filter_code` | string | [Código de segmento/filtro](/es/developer/api-reference/api-identifiers/#segment--filter-code) que define la audiencia. |
| `repeat` | `SegmentRepeat` | Programación opcional de entrada recurrente (consulte [SegmentRepeat](#segmentrepeat)). |
| `start_at` | timestamp | No procesar antes de esta hora (ISO 8601). |
| `is_deactivated` | bool | Si este punto de entrada está desactivado. |

### message_bus (entrada de evento)

Ingresa a los usuarios cuando activan un evento. `POINT_TYPE_EVENT`.

| Campo | Tipo | Descripción |
|---|---|---|
| `event_name` | string | [Nombre del evento](/es/developer/api-reference/api-identifiers/#event-name) a escuchar. |
| `application_code` | string | [Código de aplicación](/es/developer/api-reference/api-identifiers/#application-code). |
| `event_conditions` | `PointEventCondition[]` | Condiciones que coinciden con los atributos del evento. |
| `active_period` | `Period` | Ventana de tiempo durante la cual el disparador está activo. |
| `multi_entry` | `MultiEntry` | Cómo un usuario puede entrar más de una vez (consulte [MultiEntry](#multientry)). |
| `attribute_entry` | `AttributeEntry` | Inscribir los ID de usuario que se encuentran en un atributo de evento en lugar del usuario que activó el evento (consulte [AttributeEntry](#attributeentry)). |
| `allow_reenter` | bool | Si los usuarios pueden volver a entrar en el journey. |

##### AttributeEntry

Inscribe los [ID de usuario](/es/developer/api-reference/api-identifiers/#user-id) que se encuentran en un atributo de evento, en lugar del usuario que activó el evento. Refleja [Usuarios de un atributo de evento](/es/product/customer-journey/journey-elements/entry-elements/trigger-based-entry/#users-from-an-event-attribute) en el constructor de Customer Journey.

| Campo | Tipo | Descripción |
|---|---|---|
| `enabled` | bool | Si se deben inscribir los usuarios nombrados en un atributo de evento en lugar del usuario que activó el evento. |
| `attribute_name` | string | Nombre del atributo de evento que contiene el ID de usuario (o lista de ID de usuario) a inscribir. |

### start_by_api

Punto de entrada alimentado por la llamada [Start by API](/es/developer/api-reference/customer-journey-api/start-by-api/). `POINT_TYPE_START_BY_API`.

| Campo | Tipo | Descripción |
|---|---|---|
| `application_code` | string | [Código de aplicación](/es/developer/api-reference/api-identifiers/#application-code). |
| `attributes` | string[] | Nombres de los atributos personalizados que se pueden pasar en los `attribute_values` de una solicitud [Start by API](/es/developer/api-reference/customer-journey-api/start-by-api/#request-body). |
| `is_deactivated` | bool | Si este punto de entrada está desactivado. |

## Puntos de temporización

### delay (espera)

Pausa a cada usuario durante un intervalo fijo o calculado. `POINT_TYPE_WAIT`. El objeto `point_data.delay` establece exactamente una de las siguientes claves de intervalo:

| Clave de intervalo | Tipo | Descripción |
|---|---|---|
| `sec` | uint64 | Esperar un número fijo de segundos. |
| `exact_time` | [`ExactTime`](#time-objects) | Esperar hasta una hora del día (`hour`, `minute`). |
| `exact_date_time` | [`ExactDateTime`](#time-objects) | Esperar hasta una fecha y hora absolutas. |
| `exact_week_days_time` | `ExactWeekDaysTime` | Esperar hasta horas específicas en días de la semana específicos (mapa de día `0`=Lunes … `6`=Domingo → `ExactTime`). |
| `dynamic_time` | [`DynamicTime`](#dynamictime) | Esperar en relación con un valor de una etiqueta o evento. |

Un `dynamic_time` con `split_branches: true` agrega una rama `output1` (consulte [claves de salida](/es/developer/api-reference/customer-journey-api/journey-object/#output-keys)).

#### DynamicTime

| Campo | Tipo | Descripción |
|---|---|---|
| `from` | enum `DynamicTimeFrom` | Si la hora base proviene de una etiqueta o un evento. |
| `direction` | enum `DynamicTimeDirection` | Desplazamiento antes o después de la hora base. |
| `duration` | uint64 | Tamaño del desplazamiento. |
| `unit` | enum `DynamicTimeUnit` | Unidad de `duration` (minutos, horas, días, …). |
| `split_branches` | bool | Dividir a los usuarios en ramas separadas cuando sus tiempos calculados difieren. |
| `tag_name` | string | Etiqueta que contiene la hora base (cuando `from` es una etiqueta). |
| `event_name` / `event_attribute` / `point_id` | string | Fuente del evento de la hora base (cuando `from` es un evento). |

### wait_event

Espera hasta que los usuarios activen un evento (o un tiempo de espera). `POINT_TYPE_WAIT_EVENT`. La salida `default` es la ruta no activada. La ruta activada es `output1` o, con un script, una rama por condición.

| Campo | Tipo | Descripción |
|---|---|---|
| `events` | `PointWaitEventInfo[]` | Eventos a esperar. |
| `conditions_script` | string | Script opcional para lógica compleja de múltiples eventos. Sus nombres de condición analizados se convierten en las claves de salida. |
| `multi_entry` | `MultiEntry` | Comportamiento de reingreso. |

## Puntos de división y filtrado

### boolean_splitter

Dirige a los usuarios por ramas según una condición. `POINT_TYPE_BOOLEAN_SPLITTER`.

| Campo | Tipo | Descripción |
|---|---|---|
| `application_code` | string | [Código de aplicación](/es/developer/api-reference/api-identifiers/#application-code). |
| `split_strategy` | enum | `SPLIT_FILTER` (por segmento), `SPLIT_TAGS` (por condiciones de etiqueta) o `SPLIT_EVENTS` (por condiciones de evento). |
| `load_policy` | enum | `ALL` (cualquiera de los dispositivos del usuario puede coincidir) o `FILTER` (solo el dispositivo actual). |
| `filter_code` | string | Código de segmento, cuando `split_strategy` es `SPLIT_FILTER`. |
| `filter_expressions` | `FilterExpression[]` | Condiciones de etiqueta, cuando `split_strategy` es `SPLIT_TAGS`: una rama `output` adicional por expresión. |
| `event` | `BooleanSplitterEventInfo` | Condiciones de evento, cuando `split_strategy` es `SPLIT_EVENTS`: una rama `output` adicional por condición. |

### ab_splitter

Divide aleatoriamente a los usuarios en variantes ponderadas. `POINT_TYPE_AB_SPLITTER`. Las claves de salida son `output0`, `output1`, … (una por entrada en `split`, indexada desde 0. No hay `default`).

| Campo | Tipo | Descripción |
|---|---|---|
| `split` | uint32[] | Porcentaje para cada rama. Debe sumar 100. El índice `i` se asigna a la clave de salida `output{i}`. |
| `auto_select_winner` | bool | Si se debe elegir automáticamente una rama ganadora. |
| `winner_strategy` | enum | `ANY_GOAL` o `SPECIFIC_GOAL`. |
| `goal_uuid` | string | Objetivo utilizado para determinar el ganador (con `SPECIFIC_GOAL`). |
| `winner_split` | uint32 | Número de la rama ganadora (basado en 1, `0` = aún no hay ganador). |

### filter

Permite que solo los usuarios que coinciden continúen (`default`), dirigiendo el resto a `output1`. `POINT_TYPE_FILTER`.

| Campo | Tipo | Descripción |
|---|---|---|
| `filter` | enum `Filter` | Una comprobación predefinida: `EMAIL_EXISTS`, `PUSH_TOKEN_EXISTS`, `SMS_TOKEN_EXISTS`, `WHATSAPP_TOKEN_EXISTS`, `LINE_TOKEN_EXISTS` o `CUSTOM`. |
| `filter_raw` | string | Expresión de filtro personalizada, cuando `filter` es `CUSTOM`. |

## Puntos de acción

### set_tags

Actualiza las etiquetas en el usuario. `POINT_TYPE_SET_TAGS`.

| Campo | Tipo | Descripción |
|---|---|---|
| `application_code` | string | [Código de aplicación](/es/developer/api-reference/api-identifiers/#application-code). |
| `tags` | [`Tag`](#tag)[] | Etiquetas a escribir. |

#### Tag

| Campo | Tipo | Descripción |
|---|---|---|
| `name` | string | Nombre de la etiqueta. |
| `type` | enum `TagType` | Tipo de datos y operación: `TYPE_STRING`, `TYPE_INTEGER`, `TYPE_DATE`, `TYPE_BOOLEAN`, `TYPE_LIST`, `TYPE_LIST_APPEND`, `TYPE_LIST_REMOVE`, `TYPE_DYNAMIC`, … |
| _value_ | oneof | Exactamente una clave de valor que coincida con `type`: `str`, `int`, `bool`, `date`, `price`, `version`, `timezone`, `list` o `dynamic`. |

### web_hook

Envía una solicitud HTTP saliente. `POINT_TYPE_WEBHOOK`. Salida `default` única.

| Campo | Tipo | Descripción |
|---|---|---|
| `method` | string | Método HTTP (`GET`, `POST`, `PUT`, …). |
| `url` | string | URL de destino. |
| `request_template` | string | Plantilla del cuerpo de la solicitud. Admite plantillas [Liquid](/es/developer/api-reference/messaging-api-v2/payload-reference/). |
| `headers` | map&lt;string, string&gt; | Cabeceras HTTP. |
| `disabled` | bool | Solo lectura. `true` cuando Pushwoosh desactivó automáticamente el webhook después de errores repetidos. |
| `reactivate` | bool | Solo escritura. Establezca `true` para volver a habilitar un webhook deshabilitado. |

## Puntos de conversión

### goal_event

Realiza un seguimiento de un objetivo de conversión. `POINT_TYPE_GOAL_EVENT`. No tiene salidas.

| Campo | Tipo | Descripción |
|---|---|---|
| `event_name` | string | Nombre del evento objetivo. |
| `application_code` | string | [Código de aplicación](/es/developer/api-reference/api-identifiers/#application-code). |
| `event_conditions` | `PointEventCondition[]` | Condiciones que coinciden con los atributos del evento objetivo. |
| `is_throw_out` | bool | Si se debe eliminar al usuario del journey una vez que se alcanza el objetivo. |
| `is_cancel_event` | bool | Si este es un objetivo negativo (cancelación). |

## Puntos de salida

### terminator

Finaliza el journey para el usuario. `POINT_TYPE_EXIT`. Objeto vacío (`{}`) y sin salidas.

```json
{ "point_type": "POINT_TYPE_EXIT", "point_data": { "terminator": {} }, "outputs": [] }
```

## Puntos de mensajería

Todos los puntos de mensajería se envían a través de un canal y comparten un sobre común. Cada uno tiene una única salida `default` a menos que se habilite un divisor (consulte [claves de salida](/es/developer/api-reference/customer-journey-api/journey-object/#output-keys)).

Campos comunes:

| Campo | Tipo | Descripción |
|---|---|---|
| `application_code` | string | [Código de aplicación](/es/developer/api-reference/api-identifiers/#application-code). |
| `preset_code` | string | [Preset](/es/developer/api-reference/presets-api/) (plantilla) a enviar. `inapp` usa `richmedia_code` en su lugar. |
| `content` / `title` | string | Contenido del mensaje en línea, cuando no se usa un preset (depende del canal). |
| `campaign_code` | string | [Código de campaña](/es/developer/api-reference/api-identifiers/#campaign-code) para seguimiento. Se crea automáticamente si se omite. |
| `split_params` | [`BehaviorSplitter`](#behaviorsplitter) | Opcional: esperar una interacción y ramificar en ella. |
| `message_type` | enum | Tipo de mensaje [Marketing vs transaccional](/es/product/messaging-channels/marketing-vs-transactional/) (controla el manejo del grupo de control). |

Tipos de puntos y sus campos adicionales notables:

| Tipo de punto | Clave `point_data` | Notas |
|---|---|---|
| `POINT_TYPE_SEND_PUSH` | `send_push` | `split_params` (comportamiento) más un divisor de entrega pueden producir hasta tres salidas. `send_by_user_id`, `wait_optimal_time`. |
| `POINT_TYPE_SEND_EMAIL` | `send_email` | `liquid_template_params`, `personalise`. Consulte la [API de correo electrónico](/es/developer/api-reference/email-api/). |
| `POINT_TYPE_SEND_SMS` | `send_sms` | Consulte [SMS](/es/developer/api-reference/sms/). |
| `POINT_TYPE_SEND_WHATSAPP` | `send_whatsapp` | Un preset de respuesta rápida agrega una salida por respuesta (clave = valor de respuesta). Consulte [WhatsApp](/es/developer/api-reference/whatsapp/). |
| `POINT_TYPE_SEND_TELEGRAM` | `send_telegram` | Canal de Telegram. |
| `POINT_TYPE_SEND_KAKAO` | `send_kakao` | Consulte [Kakao](/es/developer/api-reference/kakao/). |
| `POINT_TYPE_SEND_LINE` | `send_line` | Consulte la [API de LINE](/es/developer/api-reference/line-api/). |
| `POINT_TYPE_SEND_DATA` | `send_data` | Mensaje de datos silencioso (sin UI). |
| `POINT_TYPE_INAPP` | `inapp` | Usa `richmedia_code`, `expire_in_days`, `capping`. |

## Tipos compartidos

### SegmentRepeat

| Campo | Tipo | Descripción |
|---|---|---|
| `enabled` | bool | Si la entrada recurrente está activada. |
| `frequency` | string | `daily`, `weekly`, `monthly` o `dates`. |
| `every` | uint32 | Repetir cada N períodos. |
| `dates` | string[] | Fechas específicas, cuando `frequency` es `dates`. |
| `time` | `SegmentRepeatTime` | Configuración de la hora del día. |

### Objetos de tiempo

- `ExactTime`: `{ "hour": 0–23, "minute": 0–59 }`.
- `ExactDateTime`: `{ "year", "month": 1–12, "day": 1–31, "hour": 0–23, "minute": 0–59 }`.

### BehaviorSplitter

| Campo | Tipo | Descripción |
|---|---|---|
| `enabled` | bool | Si se debe esperar una interacción y ramificar en ella. |
| `interval` | uint64 | Segundos a esperar por la interacción. |

### MultiEntry

Controla cuántas sesiones activas puede tener un usuario en el journey al mismo tiempo. Refleja [Controlar cuántas sesiones puede tener un usuario al mismo tiempo](/es/product/customer-journey/journey-elements/entry-elements/trigger-based-entry/#control-how-many-sessions-a-user-can-have-at-the-same-time) en el constructor de Customer Journey. Utilizado por el [punto de entrada de evento](#message_bus-event-entry) y [wait_event](#wait_event).

| Campo | Tipo | Descripción |
|---|---|---|
| `enabled` | bool | Si un usuario puede tener múltiples sesiones activas al mismo tiempo. `false`: una sesión activa por usuario. `true`: múltiples sesiones activas por usuario. |
| `attribute_name` | string | Opcional. Atributo de evento que define el alcance de cada sesión. Cuando se establece, un usuario puede tener una sesión activa por cada valor distinto de este atributo (por ejemplo, una por `order_id`). Los eventos con el mismo valor comparten una sesión. Deje vacío para agrupar todas las entradas del usuario. |

## Relacionado

<CardGrid>
  <LinkCard title="Objeto Journey" href="/developer/api-reference/customer-journey-api/journey-object/" />
  <LinkCard title="Crear y actualizar" href="/developer/api-reference/customer-journey-api/create-update/" />
  <LinkCard title="API de Presets" href="/developer/api-reference/presets-api/" />
</CardGrid>