## Visión general

Algunas acciones nativas hacen mucho más que definir un único valor — crear un **negocio del CRM**, un
**cobro**, una **tarea**, un **contacto** o una **conversación** implica varios campos. Ahora esas
acciones muestran un **formulario de verdad** en el nodo de acción del Flow Builder, en lugar del selector
de valor único. Completas cada campo con los mismos campos tipados que se usan en el resto del
constructor, incluido el selector de `{{ variable }}`.

Al mismo tiempo, las largas listas de eventos y acciones ahora están **agrupadas por módulo** y con
**búsqueda**, así encuentras `crm_item_won` o "Crear negocio" sin desplazarte por todo.

## Requisitos previos

- Permiso de **Admin** para editar automatizaciones, macros, flujos y webhooks.
- El módulo correspondiente activo (CRM, Pagos, Tareas, Follow-ups, …) para cargar sus selectores.

## Paso a paso

1. Abre un flujo, añade un nodo de **Acciones generales** y elige la acción.
2. Completa primero los campos dependientes, como **embudo → etapa**.
3. Usa `{ }` para variables y **Avanzado** para objetivos, vínculos y atributos.
4. Ejecuta **Ejecutar prueba** con el contexto correcto y revisa salidas, omisiones y efectos antes de publicar.

## Configuración y opciones

### Formularios de acción (orientados a parámetros)

Al elegir una de estas acciones en un nodo de **Acciones generales**, aparece un formulario con
exactamente los campos que la acción acepta:

- **Crear negocio del CRM** — título, descripción, **embudo → etapa** (la lista de etapas sigue al embudo
  elegido), **importe** (con variables), moneda, prioridad, responsable, equipo, fecha prevista de
  cierre, **fecha de apertura**, **contacto** (por id, correo o teléfono), **empresa**, **participantes**
  (colaboradores del negocio) y los **atributos personalizados** y **adicionales**.
- **Crear cobro** — tipo de cobro, **importe** (con variables), moneda, descripción, vencimiento, cuotas
  (para tarjeta de crédito) y, en **Avanzado**, la conexión de pago, el vínculo con el negocio, los
  productos del catálogo y el origen.
- **Crear tarea** — título, descripción, responsable, prioridad, estado, fecha de vencimiento o "vence en
  N días", la lista de tareas y, en **Avanzado**, el **equipo**, la **tarea padre**, la **fecha de
  inicio**, las **etiquetas** y los **atributos personalizados** y **adicionales**.
- **Crear una cita** — calendario, título, descripción, ubicación, zona horaria, inicio y fin, todo el
  día, conferencia, invitados, recurrencia y, en **Avanzado**, el **contacto** explícito, el **vínculo
  con un negocio** y con una **tarea**, además de los **atributos personalizados** y **adicionales**.
- **Crear contacto** / **Crear conversación** — los campos de identidad (nombre, correo, teléfono,
  identificador), bandeja de entrada, atributos personalizados; y, para conversaciones, el estado
  inicial, responsable, equipo y mensaje.
- **Inscribir en follow-up** — la secuencia y, opcionalmente, los vínculos con negocio/cobro en
  **Avanzado**.
- **Crear suscripción** — tipo de cobro, importe, moneda, **ciclo** (semanal a anual), descripción,
  primer vencimiento y, en **Avanzado**, la conexión de pago y el plan.
- **Enviar plantilla de WhatsApp** — nombre, idioma y variables de la plantilla aprobada en Meta, con el
  namespace y el texto de respaldo en **Avanzado**.
- **Verbos de encadenamiento** — añadir nota/checklist/participante, asignar negocio o tarea,
  comentar/etiquetar/vincular tarea, enviar/cancelar cobro o suscripción, asumir conversación y ajustar
  presupuesto de anuncio ahora tienen formularios con un campo de **objetivo explícito** en Avanzado
  (ver "Encadenando pasos" más abajo).

Dos detalles importantes:

- **El dinero se escribe en unidades mayores y acepta variables.** `4,97` significa `R$ 4,97`; también
  puedes escribir un token como `{{ crm.value }}`, que se renderiza cuando el flujo se ejecuta.
- El selector **embudo → etapa** es dependiente: elegir otro embudo limpia la etapa, para que nunca
  mantengas una etapa que pertenece a otro embudo.

### Los mismos formularios en Automatizaciones y Macros

Estos formularios ya no son exclusivos del Flow Builder. **Crear negocio del CRM**, **Crear tarea**,
**Crear una cita**, **Crear contacto**, **Vincular tarea a un registro**, **Definir equipo de la tarea**
y **Registrar pedido** muestran el formulario completo también en el editor de **Automatizaciones** y en el de
**Macros** — antes, "Crear un negocio en el CRM" solo pedía allí título y descripción, sin embudo, etapa,
valor ni responsable.

Las demás acciones siguen igual: las que ya tienen un editor dedicado (valor del negocio, atributo
personalizado, catálogo, pagos, comercio, WhatsApp…) mantienen su widget enriquecido.

Algunos campos aparecen **solo en el Flow Builder**: los que existen para encadenar pasos (el **contacto**
y la **empresa** de "Crear negocio", la **tarea padre** de "Crear tarea"). En una regla que se dispara por
conversación, un valor fijo allí fijaría todas las ejecuciones en el mismo registro — dejándolos vacíos,
la acción usa el contacto de la conversación que disparó, que es el comportamiento correcto.

### Sin escribir ids: selectores con búsqueda y fecha con calendario

Todo campo que antes pedía un **id crudo** ahora es un selector con búsqueda sobre registros reales —
negocio, tarea, contacto, empresa, lista de tareas, agenda, cobro, suscripción, plan, afiliado y campaña
de anuncios. Cada campo trae un botón para alternar entre:

- **Elegir** — busca por nombre (o título) entre los registros de la cuenta;
- **Variable** — el campo de texto con el selector de `{{ }}`, para encadenar
  `{{ steps.crear_negocio.id }}`.

El modo se deduce del propio valor: un valor con `{{` abre directamente en modo variable. Cambiar de modo
**no borra** lo que estaba configurado, y un id guardado cuyo registro no vino en la primera página se
sigue mostrando como `#123` en vez de desaparecer. La lista solo se carga cuando abres el selector.

Las fechas de negocio (**inicio** y **fin** de una cita, **fecha de apertura** de un negocio) usan ahora
el selector de fecha y hora en la **zona horaria de la cuenta** — el mismo componente del resto del
producto —, también con el modo variable al lado. Los campos de día puro (vencimiento, fecha prevista de
cierre) siguen como fecha simple.

"Vincular tarea a un registro" quedó completo: además del tipo (Conversación, Contacto, Negocio) ahora
tiene el selector del **registro destino**, que acompaña al tipo elegido. Sin ese destino la acción no
hacía nada.

### Dos acciones que ganaron pantalla

- **Definir equipo de la tarea** — elige el equipo de la tarea; vacío, quita el equipo actual.
- **Registrar pedido** — registra un pedido para el contacto de la conversación: título, importe, moneda,
  estado, origen/pasarela, id externo y, en Avanzado, el vínculo con un negocio y el afiliado. Solo
  aparece en las cuentas con el módulo **Registro de pedidos** activo. Los pedidos se deduplican por el
  **id externo**.

### Vínculos: de quién es el registro que se creó

Cuando el flujo se ejecuta dentro de una conversación, el negocio creado hereda automáticamente **esa
conversación y su contacto** — es el comportamiento clásico de "conversación resuelta → crear negocio", y
sigue vigente mientras dejes esos campos vacíos.

**Lo que tú completas gana sobre esa herencia.** Si el formulario indica un **contacto**, ese es el
contacto del negocio, aunque la conversación apunte a otra persona. La herencia pasa a ser solo un valor
predeterminado para cuando el flujo no dijo de quién es el registro.

En un flujo **sin conversación** (disparador de webhook, API, programación) no hay de quién heredar. Para
esos casos el formulario acepta tres caminos, en este orden:

1. **Contacto** — el id de un contacto existente, normalmente proveniente de un paso anterior.
2. **Correo del contacto** — busca por la dirección y, si nadie coincide, **crea a la persona**.
3. **Teléfono del contacto** — misma regla, con el número normalizado al formato internacional (puedes
   enviar `21971532700`; se convierte en `+5521971532700`).

Si la persona no se puede encontrar ni crear (un correo inválido, por ejemplo), **el negocio se crea de
todos modos** — solo que sin el vínculo — y el motivo aparece como insignia de "omitido" en el panel de
datos. Perder el vínculo es malo; perder el negocio sería peor.

### Los atributos personalizados siguen los campos del embudo

Atención con esta regla, suele sorprender: si el **embudo** de destino tiene **campos personalizados
configurados**, el negocio guarda **solo** los atributos de esa lista. Cualquier clave que envíes y que no
esté configurada como campo de ese embudo se **descarta en silencio** — sin error, sin aviso, sin que el
nodo falle.

- Antes de mapear un atributo en el formulario, verifica en **CRM → Configuración** que exista como campo
  del embudo que usará la acción.
- Si el embudo **no configura ningún campo personalizado**, se guarda todo lo que envíes.
- Los campos obligatorios del embudo siguen siendo obligatorios: enviar uno de ellos vacío hace que la
  creación falle (y el nodo registra el error) en lugar de guardar a medias.

### Listas por categoría y con búsqueda

- **Eventos de webhook** (Configuración → Integraciones → Webhooks): los eventos se agrupan por módulo
  (Conversaciones y Contactos, CRM — Negocios, Tareas, Pagos, WhatsApp, …). Cada grupo tiene una
  **búsqueda**, un selector **marcar todos** con contador y un estado parcial (indeterminado) cuando solo
  algunos eventos del grupo están marcados.
- **Disparadores de las automatizaciones**: el selector de evento se divide en secciones por módulo.
- **Acciones** (Automatizaciones, Macros y Flow Builder): el selector de acción muestra un **encabezado de
  módulo** encima de cada conjunto de acciones.

Nada de esto cambia los datos guardados — las claves de evento, los nombres de las acciones y el payload
del webhook siguen siendo exactamente iguales. Solo cambió la forma de presentarlos.

### Ejecutar una prueba directamente desde el editor

El botón **Ejecutar prueba** ejecuta el **borrador actual** del flujo una vez, sin publicar. Tras la
ejecución, cada nodo del lienzo muestra una insignia con el resultado (**✓ completado** con su duración,
**✗ falló** con el error, **◇ omitido**) y el panel de datos pasa a mostrar los **valores reales** que
produjo cada paso.

- Atención: la prueba ejecuta las acciones **de verdad** — crea registros, dispara cobros y webhooks.
  Aparece una confirmación explícita antes de ejecutar.
- Sin una conversación de prueba, los nodos de mensaje se **omiten** (el resto del flujo se ejecuta).
  Puedes indicar una conversación o un contacto para probar el camino completo.
- Disponible para administradores.

### Disparador de webhook: autenticación flexible y prueba antes de publicar

- La URL y el **token** del webhook existen desde el **borrador** — el ejemplo de `curl` del panel es
  real desde el primer guardado.
- Un envío autenticado a un flujo **no publicado** se acepta como **muestra de prueba** (el panel captura
  el cuerpo para el mapeo), sin iniciar una sesión. Publica cuando estés listo.
- Tres **modos de autenticación**: **Firmado** (HMAC del cuerpo — el predeterminado y más seguro),
  **Bearer** (encabezado `Authorization`) y **Secreto en la URL** (`?token=…`) — los dos últimos para
  herramientas que no firman el cuerpo (formularios, ERPs, no-code).
- El panel muestra la **última entrega recibida** (aceptada, muestra capturada, repetida o rechazada por
  autenticación) con su hora — se acabó adivinar si el POST llegó.

### Encadenando pasos (ids de registros creados)

Cada acción que crea un registro ahora expone su **id** (y los campos principales) en la salida del paso.
En el selector de variables, busca el nombre del nodo — un paso "Crear negocio", por ejemplo, ofrece su id
para que los pasos siguientes lo usen como objetivo:

1. **Recibir lead** (disparador de webhook) → 2. **Crear contacto** → 3. **Crear negocio del CRM** →
4. **Crear cobro** → 5. **Inscribir en follow-up** → 6. **Crear tarea**.

La clave del paso es el **nombre del nodo** en minúsculas, con `_` en lugar de todo lo que no sea letra
sin acento, número o `_`. Un nodo llamado "Buscar contacto" se convierte en `buscar_contacto`, y su salida
se lee así:

- `{{ steps.buscar_contacto.contact_id }}` — el contacto encontrado, listo para el campo **Contacto** de
  un "Crear negocio del CRM" justo después.
- `{{ steps.crear_negocio.id }}` — el negocio recién creado, para vincularle un cobro, una cita o una
  tarea.
- `{{ steps.crear_tarea.id }}` — la tarea creada, útil como **tarea padre** de subtareas o como vínculo de
  una cita.

**Cuidado con los acentos y la eñe:** no se convierten en la letra sin acento, se convierten en `_`. Un
nodo "Crear cotización" responde por `crear_cotizaci_n`. Por eso conviene nombrar sin acentos los nodos
que vas a encadenar — o simplemente elegir el token en el selector de variables.

¿Renombraste el nodo? La clave sigue al nombre nuevo — revisa los tokens que apuntaban a él. Si dos nodos
tienen exactamente el mismo nombre, el primero se queda con la clave y el otro responde por el id del nodo
(el selector de variables siempre muestra el token correcto, así que prefiere elegirlo ahí antes que
escribirlo de memoria).

- En un flujo **sin conversación** (webhook/API), el contacto creado en el paso 2 se convierte
  automáticamente en el objetivo de los pasos siguientes.
- Los formularios de nota, checklist, participante, asignación, comentario, etiqueta y vínculo tienen un
  campo de **objetivo** en Avanzado que acepta el id de un paso anterior; vacío, se usan los registros del
  propio flujo.

### Cuando una acción no hace nada: el motivo en el panel y el modo estricto

Algunas acciones simplemente no tienen qué hacer — no había negocio que asignar, el contacto no se pudo
resolver, el módulo no estaba configurado. Antes eso pasaba desapercibido: el flujo seguía adelante, el
paso terminaba vacío y nada explicaba el porqué.

Ahora la acción que decide no actuar registra el **motivo** junto al paso. Para consultarlo:

1. Abre el panel **Datos disponibles** y ve a la pestaña **Pasos**.
2. El paso muestra el aviso **"Acción omitida"** seguido del motivo, en el mismo bloque de alertas que los
   avisos de truncamiento.
3. Con el paso plegado, el icono de atención de su encabezado ya trae el motivo en la información
   emergente — no hace falta expandirlo para entender qué pasó.

Vale tanto para **Ejecutar prueba** como para el historial de ejecuciones.

De forma predeterminada, una acción omitida **no interrumpe el flujo**: se registra y la ejecución
continúa. Usa ese aviso justamente para descubrir por qué un paso posterior no encontró el registro que
esperaba.

#### Modo estricto: detenerse en lugar de seguir con un registro a medias

Cuando seguir adelante es peor que detenerse, abre **Avanzado** en el nodo de acción y activa el
interruptor **"Fallar el nodo cuando la acción no hace nada"**:

- **Desactivado (predeterminado)** — el comportamiento actual, sin ningún cambio en los flujos existentes:
  cuando la acción no llega a actuar, el flujo continúa y el motivo aparece en la salida del paso.
- **Activado** — la acción que no llega a actuar **y no produce nada** hace **fallar el nodo** en lugar de
  avanzar. Úsalo en pasos críticos, como el cobro que debe existir antes de enviar el enlace de pago.

**Atención a la excepción, que es sutil:** un éxito *parcial* sigue avanzando incluso con el interruptor
activado — por ejemplo, el contacto se creó pero no se pudo vincular a la bandeja (el canal de la bandeja
elegida no pudo derivar un `source_id`). El contacto **existe** y los siguientes pasos ya tienen un
registro real para usar, así que detenerse ahí sería un error. El interruptor solo detiene el caso en que
la acción no produjo absolutamente nada.

La opción aparece en **Avanzado** en el nodo genérico de **Acciones generales** y en todos los nodos de
acción por módulo: **CRM**, **Tareas**, **Contactos**, **WhatsApp**, **Agenda**, **Pagos**, **Catálogo**,
**Commerce** y **Anuncios**. El nodo de **Account Brain** funciona con su propio motor y, por eso, no trae
el interruptor.

### Enviar plantilla y enviar flow de WhatsApp

Las dos acciones de mensajería de WhatsApp existían en el motor pero **no aparecían en ningún selector**:
no se podía crear una regla ni una macro con ellas. Ahora están en los catálogos de **Automatizaciones**,
**Macros** y del **Flow Builder** (en el nodo genérico y en el nodo de **WhatsApp**), con formulario
completo:

- **Enviar plantilla** — la **plantilla** es una lista de las plantillas **aprobadas** de la cuenta (sin
  escribir el nombre). Deje el **idioma** vacío y el envío adopta el idioma de la propia plantilla elegida.
  Las **variables** completan los `{{1}}`, `{{2}}` del cuerpo.
- En **Avanzado**, dos campos nuevos cubren las plantillas que el mapa simple no alcanzaba: **variables del
  encabezado** (incluidos `media_url` + `media_type` para un encabezado con medios) y **variables de los
  botones** (array JSON, un objeto por botón dinámico). Sin ellos, una plantilla con encabezado de medios o
  botón dinámico era rechazada por Meta.
- **Enviar flow** — elija el **flow publicado** en una lista; el token del flow se genera en cada envío.
  Puede definir texto del botón, mensaje, encabezado, pie, modo (publicado/borrador), pantalla inicial y
  datos iniciales.

### Condiciones de lista y de tamaño

En la condición del Flow Builder, el campo **Valor** ahora sigue al **operador**, no solo al campo:

- **está en la lista / no está en la lista** — marque **varios valores** a la vez; se guardan separados por
  comas, exactamente como los lee el motor. Antes solo se podía elegir uno, lo que volvía el operador
  equivalente a "es igual a".
- **tamaño mayor/menor que**, **fecha dentro de N días**, **fecha antes/después de** — vuelven a ser
  **texto libre**, porque el valor comparado es un tamaño, un número de días o una fecha, no un valor del
  campo.
- **el array contiene** mantiene la elección única: compara **un** elemento del array.

### Una espera con duración inválida ahora se bloquea al publicar

Un nodo de **espera** con todas las unidades en cero esperaba **1 segundo** en silencio, y una unidad mal
escrita hacía fallar el nodo solo durante la ejecución. Ambas situaciones aparecen ahora como error al
publicar el flujo. Una unidad con una variable (`{{ }}`) se sigue resolviendo en ejecución.

### Listas de opciones de WhatsApp

Una lista con más de 10 filas, título de más de 24 caracteres o descripción de más de 72 era rechazada por
WhatsApp y el mensaje se perdía. Ahora se ajusta al límite antes del envío (las filas sobrantes salen, los
textos largos se recortan) y el mensaje llega.

## Casos de uso

- Crear un contacto, encadenar su id en un negocio y usar el id del negocio en un cobro o tarea.
- Actualizar CRM y tareas desde webhook/API sin fijar IDs de otra ejecución.
- Detener un camino crítico cuando una acción no produce efecto activando el modo estricto.

## Consejos, límites y buenas prácticas

- Dejar un campo opcional vacío simplemente lo omite — la acción usa su valor predeterminado.
- Prefiere **variables** en lugar de valores fijos en títulos, descripciones e importes, para que el mismo
  flujo se adapte a cada contacto o negocio.
- Completa el **contacto** solo cuando de verdad quieras mandar tú: en un flujo dentro de una conversación,
  dejar el campo vacío mantiene el contacto de la conversación, que suele ser lo correcto.
- Antes de mapear atributos personalizados, confirma que estén configurados como campos del **embudo** de
  destino — de lo contrario se descartan sin aviso.
- Si un paso posterior no encontró el registro esperado, busca en la pestaña **Pasos** el aviso **"Acción
  omitida"** del paso anterior — el motivo suele estar justo ahí.
- Activa el **modo estricto** solo en los nodos donde "no hizo nada" es un problema real, y atiende la
  salida de error con una notificación o un camino alternativo.
- Usa la **búsqueda** del grupo para ir directo a un evento por su etiqueta o por su clave técnica.

## Solución de problemas

- Si un selector está vacío, confirma el módulo, el permiso y cualquier dependencia elegida primero.
- Si una acción se omite, lee el motivo del trace antes de cambiar los pasos posteriores.
- Si la publicación rechaza el nodo, corrige el campo indicado por el schema; v2 no acepta campos no declarados.

## Ver también

- [Flow Builder: datos del disparador, mapeo y transformación](/hc/ajuda/articles/automation-flows-flow-builder-dados-e-mapeamento-es)
- [Flow Builder: acciones nativas](/hc/ajuda/articles/automation-flows-flow-builder-acoes-nativas-es)
- [Flow Builder en la práctica](/hc/ajuda/articles/automation-flows-flow-builder-operacao-es)