---
title: "Tipos de nodo"
description: "Cada tipo de nodo que puedes agregar desde el lienzo de campaña, con su categoría, salidas, configuración requerida, y qué hace cuando una ejecución lo alcanza."
canonical: https://docs.afp.monster/es/reference/node-types
updated: 2026-08-19
pageType: reference
---

Trece tipos de nodo pueden agregarse a una campaña desde la paleta del lienzo: dos activaciones, cuatro nodos de lógica, un nodo de mensaje, cuatro acciones de comentario, y dos acciones de contacto. Cada tipo lleva sus propias claves de configuración y un número fijo de salidas, y esas dos cosas deciden qué hace una ejecución en ese nodo y a dónde va después. Los tipos de nodo que existen en el runtime pero no tienen mosaico en la paleta se listan en el [esquema del grafo de campaña](/es/reference/campaign-graph-schema).

## Resumen

| Tipo de nodo | Categoría | Salidas | Configuración requerida | Qué hace |
|---|---|---|---|---|
| `trigger_comment` | activación | 1 | `post_id` cuando `post_scope` es `specific` | Inicia la campaña cuando alguien comenta en la página |
| `trigger_dm` | activación | 1 | ninguna | Inicia la campaña cuando alguien envía un mensaje directo a la página |
| `condition` | lógica | 2 (Coincidencia / Sin coincidencia) | `match_type`, más `text` o `keyword_list_id` para los tipos de coincidencia que los leen | Compara el texto del mensaje y elige una rama, o detiene la ejecución hasta que llega una respuesta |
| `send_dm` | mensaje | 1, más una por cada botón `postback` | `message_type` y las claves que ese tipo lee | Envía un mensaje directo: texto, imagen, tarjeta, o texto con botones |
| `reply_comment` | comentarios | 1 | `text` | Responde públicamente bajo el comentario que inició la ejecución |
| `send_comment` | comentarios | 1 | `text`, `post_id` | Publica un nuevo comentario en una publicación indicada |
| `hide_comment` | comentarios | 1 | ninguna | Oculta el comentario que inició la ejecución |
| `delete_comment` | comentarios | 1 | ninguna | Elimina el comentario que inició la ejecución |
| `delay` | lógica | 1 | ninguna | Detiene la ejecución y la continúa después |
| `random_split` | lógica | una por brazo | `paths` | Envía cada ejecución por un brazo, elegido al azar |
| `add_tag` | contacto | 1 | `tag_ids` | Agrega etiquetas al contacto |
| `remove_tag` | contacto | 1 | `tag_ids` | Quita etiquetas del contacto |
| `stop` | lógica | 0 | ninguna | Termina la ejecución |

## `trigger_comment`

- **Categoría:** activación
- **Salidas:** 1, y se conecta solo a una `condition`
- **Configuración requerida:** `post_id` cuando `post_scope` es `specific`

| Clave | Tipo | Qué establece |
|---|---|---|
| `post_scope` | string | `all` o `specific`. Una clave ausente cuenta como `all`. |
| `post_id` | string | La publicación en la que escucha un alcance `specific`. El panel de configuración ofrece las publicaciones de la página conectada. |
| `unique_per_user` | boolean | Activa la restricción de una vez por persona descrita abajo. |

Inicia una ejecución cuando llega un comentario a la página conectada. Con `post_scope` establecido en `specific`, solo los comentarios en la publicación indicada por `post_id` inician la campaña; cualquier otro comentario en la página se ignora.

`unique_per_user` restringe la campaña a una sola ejecución por persona. 

```json
{
  "post_scope": "specific",
  "post_id": "104857392017465_998234511",
  "unique_per_user": true
}
```

## `trigger_dm`

- **Categoría:** activación
- **Salidas:** 1, y se conecta solo a una `condition`
- **Configuración requerida:** ninguna

| Clave | Tipo | Qué establece |
|---|---|---|
| `unique_per_user` | boolean | Activa la restricción de una vez por persona descrita abajo. |

Inicia una ejecución cuando alguien envía un mensaje directo a la página conectada. No hay clave `post_scope`, porque un mensaje directo no está adjunto a una publicación. Las acciones de comentario no están disponibles en una campaña cuya activación es `trigger_dm`.

`unique_per_user` es la misma configuración que en `trigger_comment`, y restringe la campaña a una sola ejecución por persona. 

```json
{
  "unique_per_user": false
}
```

## `condition`

- **Categoría:** lógica
- **Salidas:** 2 — la salida 0 es Coincidencia, la salida 1 es Sin coincidencia
- **Configuración requerida:** `match_type`, más `text` o `keyword_list_id` para los tipos de coincidencia que los leen

| Clave | Tipo | Qué establece |
|---|---|---|
| `match_type` | string | `any`, `contains`, `exact`, o `keyword_list`. Decide la comparación y qué claves de abajo se leen. |
| `text` | string | El texto comparado por `contains` y `exact`. |
| `keyword_list_id` | number | La lista de palabras clave guardada comparada por `keyword_list`. |
| `reverse_keywords` | boolean | Invierte el resultado de una comparación `keyword_list`. |
| `wait_for_reply` | boolean | Detiene la ejecución en este nodo en lugar de evaluar el mensaje que lo alcanzó. |
| `filter_images` | boolean | Filtro de medios en el mensaje entrante. |
| `filter_gifs` | boolean | Filtro de medios en el mensaje entrante. |
| `filter_links` | boolean | Filtro de medios en el mensaje entrante. |

Evalúa el mensaje y envía la ejecución por la salida Coincidencia o Sin coincidencia. [Reglas de coincidencia de palabras clave](/es/reference/keyword-matching) cubre qué compara cada tipo de coincidencia y qué salida produce.

`wait_for_reply` detiene la ejecución en este nodo en lugar de evaluar de inmediato, y se queda ahí hasta que la persona responde. [Estados de ejecución](/es/reference/execution-states) cubre cuánto tiempo sobrevive una ejecución detenida y qué la despierta.

Los filtros de medios son configuraciones separadas en el mismo nodo y no forman parte de la comparación de palabras clave. [Coincidir comentarios con listas de palabras clave](/es/guides/keyword-lists) cubre construir la lista a la que apunta `keyword_list_id`.

```json
{
  "match_type": "keyword_list",
  "keyword_list_id": 41,
  "reverse_keywords": false,
  "wait_for_reply": true
}
```

## `send_dm`

- **Categoría:** mensaje
- **Salidas:** 1, más una salida extra por cada botón `postback`
- **Configuración requerida:** `message_type` y las claves que ese tipo lee

| Clave | Tipo | Qué establece |
|---|---|---|
| `message_type` | string | `text`, `image`, `card`, o `text_with_buttons`. Decide qué claves de abajo se leen. |
| `text` | string | El texto del mensaje. |
| `image_url` | string | La imagen para un mensaje `image`, y la foto en una `card`. |
| `title` | string | El encabezado en una `card`. |
| `subtitle` | string | La segunda línea en una `card`. |
| `buttons` | array | Botones en una tarjeta o un mensaje de botones. Cada entrada lleva un `id`, un `type` de `web_url` o `postback`, un `title`, y una `url` para un botón `web_url`. |
| `buttons_text` | string | Una etiqueta de botón por línea, para un mensaje `text_with_buttons`. Cada línea se convierte en un botón `postback` cuyo payload es la etiqueta. |

Envía un mensaje directo a la persona para la que se ejecuta la ejecución. `message_type` selecciona qué claves se leen: `text` para un mensaje simple, `image_url` para una imagen, `title`, `subtitle`, e `image_url` para una tarjeta, y `buttons_text` para texto con botones.

Las variables de nombre de remitente en `text`, `title`, y `subtitle` se sustituyen antes de enviar el mensaje.

Un botón `postback` agrega su propia salida al nodo, así que una ejecución puede continuar por una rama diferente según qué botón presione la persona.

Un nodo sin nada configurado no envía nada, y la ejecución continúa al siguiente nodo.

```json
{
  "message_type": "text_with_buttons",
  "text": "Thanks for commenting. Which size do you want?",
  "buttons_text": "Small\nMedium\nLarge"
}
```

## `reply_comment`

- **Categoría:** comentarios
- **Salidas:** 1
- **Configuración requerida:** `text`

| Clave | Tipo | Qué establece |
|---|---|---|
| `text` | string | La respuesta publicada bajo el comentario que activó la ejecución. |

Publica una respuesta pública bajo el comentario que inició la ejecución. Las variables de nombre de remitente en `text` se sustituyen antes de publicar la respuesta.

El nodo no está disponible en una campaña activada por `trigger_dm`, y el lienzo rechaza colocarlo río abajo de un `delete_comment`.

```json
{
  "text": "Sent you the price list in a DM."
}
```

## `send_comment`

- **Categoría:** comentarios
- **Salidas:** 1
- **Configuración requerida:** `text`, `post_id`

| Clave | Tipo | Qué establece |
|---|---|---|
| `text` | string | El comentario publicado en la publicación indicada. |
| `post_id` | string | La publicación en la que se publica el comentario. |

Publica un nuevo comentario de primer nivel en la publicación indicada por `post_id`. No hay respaldo a la publicación de la que vino la ejecución: sin `post_id` el nodo no hace nada y la ejecución continúa al siguiente nodo.

El nodo no está disponible en una campaña activada por `trigger_dm`.

```json
{
  "text": "Restocked today — sizes S to XL are back.",
  "post_id": "104857392017465_998234511"
}
```

## `hide_comment`

- **Categoría:** comentarios
- **Salidas:** 1
- **Configuración requerida:** ninguna

| Clave | Tipo | Qué establece |
|---|---|---|
| `also_block_user` | boolean | Bloquea al autor del comentario en el mismo paso. Solo Facebook. |

Oculta el comentario que inició la ejecución.

`also_block_user` bloquea al autor del comentario en el mismo paso y funciona solo en Facebook — la opción está deshabilitada en una campaña de Instagram.

## `delete_comment`

- **Categoría:** comentarios
- **Salidas:** 1
- **Configuración requerida:** ninguna

| Clave | Tipo | Qué establece |
|---|---|---|
| `also_block_user` | boolean | Bloquea al autor del comentario en el mismo paso. Solo Facebook. |

Elimina el comentario que inició la ejecución. `also_block_user` funciona solo en Facebook, igual que en `hide_comment`.

Río abajo de este nodo, el lienzo rechaza `reply_comment` y `hide_comment`, porque el comentario sobre el que actuarían esos nodos ya no existe.

## `delay`

- **Categoría:** lógica
- **Salidas:** 1
- **Configuración requerida:** ninguna

| Clave | Tipo | Qué establece |
|---|---|---|
| `delay_seconds` | number | Cuánto tiempo espera la ejecución, de 1 a 31536000 segundos. |
| `only_if_no_reply` | boolean | Cancela el resto de la ejecución si la persona respondió mientras la espera estaba en curso. |

Detiene la ejecución y programa que continúe después. `delay_seconds` se limita entre 1 y 31536000 segundos (365 días), y un valor fuera de ese rango se recorta sin un error. Un nodo sin valor configurado espera 60 segundos.

`only_if_no_reply` se verifica cuando la espera termina: si la persona respondió en algún momento durante ella, la ejecución se completa en el retraso en lugar de continuar por la rama.

```json
{
  "delay_seconds": 3600,
  "only_if_no_reply": true
}
```

## `random_split`

- **Categoría:** lógica
- **Salidas:** una por entrada en `paths`
- **Configuración requerida:** `paths`

| Clave | Tipo | Qué establece |
|---|---|---|
| `paths` | array | Una entrada `{ "percent": number }` por salida. Cada porcentaje es de 0 a 100 y el total no puede exceder 100. |

Divide el tráfico entre ramas: cada ejecución sigue un brazo, elegido al azar. Establece un porcentaje por brazo en el lienzo; cada uno es de 0 a 100 y el total no puede exceder 100.

Trata los porcentajes como la división que estás pidiendo en lugar de una proporción garantizada, y confirma la distribución real en el historial de ejecuciones antes de confiar en ella para algo importante. 

Sin porcentajes configurados, el nodo recae en dos brazos iguales.

El brazo elegido decide qué salida sigue la ejecución. Si esa salida no tiene conexión, la ejecución se completa en este nodo.

```json
{
  "paths": [{ "percent": 70 }, { "percent": 30 }]
}
```

## `add_tag`

- **Categoría:** contacto
- **Salidas:** 1
- **Configuración requerida:** `tag_ids`

| Clave | Tipo | Qué establece |
|---|---|---|
| `tag_ids` | array | Los identificadores numéricos de las etiquetas a agregar. |

Agrega las [etiquetas](/es/guides/tags) indicadas al contacto para el que se ejecuta la ejecución, junto a las etiquetas que ese contacto ya lleva.

Cuando la ejecución no tiene un contacto detrás, el nodo no cambia nada y la ejecución continúa al siguiente nodo.

```json
{
  "tag_ids": [12, 19]
}
```

## `remove_tag`

- **Categoría:** contacto
- **Salidas:** 1
- **Configuración requerida:** `tag_ids`

| Clave | Tipo | Qué establece |
|---|---|---|
| `tag_ids` | array | Los identificadores numéricos de las etiquetas a quitar. |

Quita las etiquetas indicadas del contacto para el que se ejecuta la ejecución, y deja las otras etiquetas de ese contacto en su lugar. [Campos de contacto](/es/reference/contact-fields) lista el resto del registro de contacto.

Cuando la ejecución no tiene un contacto detrás, el nodo no cambia nada y la ejecución continúa al siguiente nodo.

```json
{
  "tag_ids": [19]
}
```

## `stop`

- **Categoría:** lógica
- **Salidas:** 0
- **Configuración requerida:** ninguna

Termina la ejecución tan pronto como se alcanza, y registra que el flujo se detuvo. El nodo no tiene salida, así que nada puede conectarse después de él.

## Tipos de nodo fuera de la paleta

Ocho tipos de nodo adicionales existen en el runtime, no llevan mosaico en la paleta ni panel de configuración, y nunca aparecen en una campaña construida en el lienzo. [Esquema del grafo de campaña](/es/reference/campaign-graph-schema) los nombra y dice qué hace una ejecución en cada uno. Trátalos como solo de runtime en lugar de como funciones.

## Notas

- Las salidas se numeran desde 0. Una `condition` usa 0 para Coincidencia y 1 para Sin coincidencia, un `random_split` usa un número por brazo en el orden configurado, y cualquier otro nodo continúa desde 0.
- Una ejecución sigue la conexión que sale de la salida que el nodo seleccionó. Cuando esa salida no lleva conexión, la ejecución se completa en ese nodo.
- Un nodo cuya acción genera un error registra el error contra la ejecución y no avanza, así que la ejecución no va más allá de ese nodo.
- Una ejecución que llega a un nodo que ya visitó termina con un error de ciclo nombrando ese nodo. Cada nodo se ejecuta como máximo una vez por ejecución.
- Un tipo de nodo que el runtime no reconoce se pasa por alto con una advertencia, y la ejecución continúa desde la salida 0.
- Una acción de comentario que no tiene comentario sobre el cual actuar no hace nada, y la ejecución continúa.
- Los mosaicos de la paleta se filtran por la plataforma de la campaña, así que la paleta en una campaña de Instagram puede ofrecer menos tipos de nodo que la paleta en una de Facebook.
- Qué tipos de nodo pueden seguir a cuáles se aplica mientras se arrastra una conexión, no cuando se guarda la campaña. [Esquema del grafo de campaña](/es/reference/campaign-graph-schema) lista esas restricciones.
- En una ejecución de prueba, `add_tag` y `remove_tag` registran lo que habrían hecho y dejan el contacto sin tocar, y un `delay` termina la ejecución de prueba en lugar de programar una reanudación.

## Relacionado

- [Esquema del grafo de campaña](/es/reference/campaign-graph-schema) — cómo se guardan los nodos, conexiones, y configuración
- [Construir una campaña](/es/guides/build-a-campaign) — agregar y conectar estos nodos en el lienzo
- [Reglas de coincidencia de palabras clave](/es/reference/keyword-matching) — qué compara cada tipo de coincidencia de `condition`
- [Estados de ejecución](/es/reference/execution-states) — cómo se ve una ejecución mientras pasa por estos nodos
- [Campos de contacto](/es/reference/contact-fields) — el registro de contacto en el que escriben los nodos de etiqueta
