Variables y datos en los flujos
Toda caja de texto de un flujo acepta variables entre llaves dobles. Se completan en el momento en que sale el mensaje, para ese contacto:
¡Hola {{first_name|cliente}}! Tu pedido #{{trigger.number}} de {{trigger.total:money}} está confirmado.
La forma de una variable
{{ origen.ruta :formato |valor predeterminado }}
- el origen dice de dónde viene el dato;
- la ruta entra en datos anidados;
- el formato (opcional, hasta dos) convierte el dato en algo legible;
- el valor predeterminado (opcional) es lo que sale cuando el dato no existe.
Un {{…}} que no es una variable — {{ texto con espacios }}, {{1}} — sale tal como se
escribió.
Orígenes
| Variable | Lo que trae |
|---|---|
{{first_name}}, {{last_name}}, {{full_name}} | El nombre del contacto (el nombre de pila recurre al nombre del perfil de WhatsApp) |
{{profile_name}}, {{email}}, {{phone}} | Nombre en WhatsApp, correo, teléfono con + |
{{field.ciudad}} | Un campo personalizado del contacto |
{{flow.nota}} | La respuesta que un paso guardó, o el evento de un Esperar evento |
{{trigger.pedido.id}} | Lo que trajo el disparador: los datos del webhook o el data de la API |
{{$json.pedido.id}} | Lo mismo que trigger. — la forma de n8n |
{{now}} | El momento en que sale el mensaje |
Rutas
Los datos de una tienda nunca son planos. La ruta entra en ellos:
| Ruta | Lee |
|---|---|
trigger.billing.first_name | Un campo dentro de otro |
trigger.line_items[0].name | El primer elemento de una lista |
trigger.line_items.0.name | Lo mismo, con punto |
trigger.line_items[-1].name | El último elemento |
trigger["meta data"].gift | Una clave con espacio o un carácter especial |
Una lista de textos sale separada por comas (vip, recurrente); una lista de objetos no tiene
texto propio — elige un campo de un elemento, o cuenta los elementos con :count.
Formatos
| Formato | Ejemplo | Sale |
|---|---|---|
:money | {{trigger.total:money}} | R$ 189,90 |
:money(USD) | {{trigger.total:money(USD)}} | US$ 189,90 |
:number, :number(2) | {{trigger.peso:number(2)}} | 1,50 |
:date | {{trigger.date_created:date}} | 22/09/2026 |
:datetime, :time | {{trigger.date_created:time}} | 11:03 (hora de Brasilia; otra zona: :time(America/Mexico_City)) |
:title | {{trigger.billing.first_name:title}} | Maria da Silva |
:upper, :lower | {{trigger.cupon:upper}} | BIENVENIDO10 |
:first_word | {{trigger.billing.first_name:first_word}} | Maria |
:digits | {{trigger.billing.phone:digits}} | 11987654321 |
:join, :join( / ) | {{trigger.tags:join( / )}} | vip / recurrente |
:count | {{trigger.line_items:count}} | 2 |
:truncate(20) | {{trigger.producto:truncate(20)}} | Camiseta básica de… |
Los números y las fechas salen a la brasileña. También valen los nombres en portugués (:moeda,
:data, :hora, :contar…). Un número puede llegar como 189.9, "189.90" o "1.234,56"; una
fecha, en ISO, en segundos desde 1970 o como dd/mm/aaaa. Un dato que el formato no puede leer —
un total "n/a" — cuenta como ausente y sale el valor predeterminado.
Valor predeterminado
{{field.ciudad|tu ciudad}} escribe tu ciudad para quien no tiene el campo. Sin valor
predeterminado, un dato ausente se convierte en texto vacío, y la publicación avisa.
En las plantillas
Las variables de una plantilla, en un paso de plantilla, tienen dos orígenes más además del contacto:
- Dato del disparador — una ruta en los datos del disparador, con formato opcional;
- Respuestas del flujo — lo que un paso guardó.
El valor predeterminado es obligatorio, como en las campañas: Meta rechaza una variable vacía. Un
texto fijo también acepta variables — Pedido {{trigger.number}} —, para armar un valor con
el dato en medio.
Así sale una confirmación de pedido fuera de la ventana de 24 horas, donde solo se puede enviar una plantilla.
En enlaces
El enlace de un botón de URL y la dirección del webhook de salida también aceptan variables:
https://tienda.com/pedido/{{trigger.id}}?nombre={{first_name}}. Cada valor en medio del enlace se
codifica (un espacio o un & no rompen la URL); una variable al principio es la base misma —
{{trigger.tracking_url}}. El enlace tiene que quedar como una dirección https://; si no, la
ejecución termina con el motivo enlace no válido.
Los títulos de los botones — de respuesta, el de la lista y el del botón de URL — también
aceptan variables: Pagar {{trigger.total:money}}. WhatsApp limita un título a 20 caracteres, así
que lo que formaron los datos se recorta con … en ese límite; un título que quedaría vacío usa el
texto fijo escrito alrededor de las variables, y dos botones de respuesta con el mismo título
reciben un número (Sí 2). Las opciones de la lista también aceptan variables en el título y la
descripción: el título se recorta a 24 caracteres y se numera cuando queda igual a otra opción; la
descripción se recorta a 72 y no aparece si los datos la dejan vacía. El título de la sección también acepta variables y se recorta a 24;
con más de una sección (cuando WhatsApp lo exige) nunca queda vacío.
En condiciones y campos
- La regla Dato del disparador compara una ruta —
statusigual aprocessing,totalmayor que500. Las comparaciones son: igual, distinto, contiene, no contiene, empieza por, es uno de (una lista separada por comas), vacío, completado, mayor, mayor o igual, menor, menor o igual. El valor comparado también acepta variables:{{field.limite}}. - Definir campo puede sumar y restar (un contador de pedidos, el total gastado), añadir opciones a una lista y quitarlas, guardar el momento actual o vaciar el campo.
- Espera puede ir hasta una fecha de los datos — una hora antes de
{{trigger.appointment.start}}, por ejemplo — y dice qué hacer si la fecha ya pasó.
Validación
Al publicar, el flujo avisa de un formato que no existe (error), un origen desconocido, una ruta que no aparece en los ejemplos capturados del webhook y una variable sin valor predeterminado (avisos). Debajo de cada caja, el editor muestra el mensaje completado con el ejemplo capturado.