Variables Dinámicas
Que son las Variables Dinámicas
Sección titulada «Que son las Variables Dinámicas»Las variables dinámicas son un sistema de plantillas que permite referenciar datos de nodos anteriores, almacenamiento en memoria y funciones especiales dentro de los campos de configuración de cualquier nodo.
Cuando el motor procesa la configuración de un nodo, resuelve todas las expresiones {{...}} antes de ejecutarlo. Esto permite construir valores dinámicos basados en la información que fluye a traves del workflow.
Sintaxis básica - Referencia al nodo anterior
Sección titulada «Sintaxis básica - Referencia al nodo anterior»La forma mas simple de variable dinámica accede a los datos de salida (data) del nodo inmediatamente anterior.
{{campo}}- Accede adata.campodel nodo anterior{{campo.subcampo}}- Accede a propiedades anidadas{{campo[0].nombre}}- Accede a elementos de arrays
Ejemplo:
Si el nodo anterior retorna:
{ "email": "user@test.com", "name": "Juan"}Entonces:
{{email}}se resuelve auser@test.com{{name}}se resuelve aJuan
Referencia por nombre de nodo (@)
Sección titulada «Referencia por nombre de nodo (@)»Permite acceder al resultado de cualquier nodo del workflow usando su etiqueta (label).
{{@Nombre_Nodo.campo}}- Accede al resultado de un nodo especifico por su label- Los espacios en el nombre se reemplazan por guiones bajos
- Los caracteres especiales se eliminan
Ejemplo:
{{@HTTP_Request.body.total}} obtiene el campo body.total del nodo cuya etiqueta es “HTTP Request”.
Esto es útil cuando se necesita acceder a datos de un nodo que no es el inmediatamente anterior, sino uno anterior en el flujo.
Referencia por posición relativa (#)
Sección titulada «Referencia por posición relativa (#)»Permite acceder a nodos anteriores usando su posición relativa en el flujo de ejecución.
{{#1.campo}}- Nodo anterior (1 paso atras){{#2.campo}}- Dos nodos atras{{#3.campo}}- Tres nodos atras
Es útil cuando los nombres de los nodos pueden cambiar pero la posición relativa se mantiene estable.
Ejemplo:
Si el flujo ejecuta: Webhook -> Transform -> HTTP Request, y estamos en HTTP Request:
{{#1.resultado}}accede al camporesultadode Transform{{#2.body}}accede al campobodyde Webhook
Variables de memoria (var)
Sección titulada «Variables de memoria (var)»Permiten leer variables almacenadas en el sistema de memorystorage.
{{var.nombre_variable}}- Lee una variable almacenada en memorystorage{{var.usuario.email}}- Accede a propiedades anidadas de la variable- Las variables se crean con el nodo SetVariable y se leen con GetVariable
- Persisten entre ejecuciones del workflow (tabla
memorystorage)
Ejemplo:
Si previamente se almaceno una variable llamada empresa_nombre con el valor "Floogos S.L.", entonces {{var.empresa_nombre}} se resuelve a Floogos S.L..
Funciones especiales ($)
Sección titulada «Funciones especiales ($)»Funciones integradas que generan valores dinámicos en el momento de la ejecución.
{{$guid}}- Genera un UUID v4 único{{$timestamp}}- Timestamp actual en milisegundos{{$datetime}}- Fecha y hora actual en formato ISO 8601{{$randomInt min max}}- Número entero aleatorio entre min y max
Ejemplos:
{{$guid}}->3f2a7b1c-9d4e-4a8f-b6c2-1e5d7f9a0b3c{{$timestamp}}->1679582400000{{$datetime}}->2026-03-23T10:30:00.000Z{{$randomInt 1 100}}->42
Condicionales
Sección titulada «Condicionales»Permiten incluir contenido de forma condicional basandose en los datos disponibles.
Estructura básica if/else:
{{if data.status === 'active'}} Bienvenido, usuario activo{{else}} Su cuenta esta inactiva{{endif}}Estructura con elseif:
{{if data.amount > 1000}} Pedido grande{{elseif data.amount > 100}} Pedido mediano{{else}} Pedido pequeno{{endif}}Las condiciones se evaluan como JavaScript, por lo que se pueden usar operadores como ===, !==, >, <, >=, <=, &&, ||.
Permiten iterar sobre arrays de datos para generar contenido repetitivo.
Bucle básico:
{{loop data.items}}- Producto: {{name}} - Precio: {{price}}{{endloop}}Bucle con limite:
{{loop data.items limit=5}}{{name}}{{endloop}}limitcontrola la cantidad maxima de iteraciones- Dentro del loop, se accede a las propiedades del item directamente por su nombre (sin prefijo)
Ejemplo: Si data.items contiene [{"name": "Camiseta", "price": 20}, {"name": "Pantalon", "price": 40}], el resultado seria:
- Producto: Camiseta - Precio: 20- Producto: Pantalon - Precio: 40Filtros de valor (|)
Sección titulada «Filtros de valor (|)»Después de cualquier variable puedes añadir filtros con | para darle formato sin escribir código. Se pueden encadenar, de izquierda a derecha:
{{nombre|trim|capitalize}}{{total|fixed:2}} €{{@Pedido.creado|date:DD/MM/YYYY HH:mm}}{{cliente|default:sin nombre}}| Filtro | Efecto | Ejemplo → resultado |
|---|---|---|
trim | Quita espacios al principio y al final | " Ana " → Ana |
upper / lower | Mayúsculas / minúsculas | ana → ANA |
capitalize | Primera letra en mayúscula, el resto en minúscula | aNA → Ana |
fixed:N | Número con N decimales | 12.3456 → 12.35 con fixed:2 |
round | Número redondeado a entero | 12.6 → 13 |
date o date:formato | Fecha; sin formato AAAA-MM-DD. Tokens: YYYY MM DD HH mm ss (UTC) | 2026-10-31T14:05:09Z → 31/10/2026 con date:DD/MM/YYYY |
truncate:N | Recorta a N caracteres y añade … | |
default:texto | Texto si el valor está vacío o no existe | {{cliente|default:sin nombre}} |
json | Escapa comillas y saltos de línea para incrustar el valor en un JSON | "nombre":"{{nombre|json}}" |
urlencode | Codifica el valor para una URL | ana lópez → ana%20l%C3%B3pez |
replace:buscar:nuevo | Sustituye texto literal (no es una expresión regular) | {{tel|replace:-:}} quita los guiones |
Notas:
- Funciona con
{{campo}},{{@Nodo.campo}},{{#N.campo}}y{{var.nombre}}. - Si la variable no tiene valor, el texto se deja tal cual (como siempre), salvo que uses
default. - Un filtro que no existe deja el texto sin tocar, para que se vea el error.
- Los argumentos no pueden contener
|,{ni}, y se les quitan los espacios de los extremos. - No se aplican dentro de bloques
{{loop}}ni en consultas SQL parametrizadas. Para listas, usa el nodo List to Text, que admite los mismos filtros en{{item.campo}}.
Donde se pueden usar
Sección titulada «Donde se pueden usar»Las variables dinámicas se pueden usar en cualquier campo de texto de la configuración de un nodo. Algunos ejemplos comunes:
- URLs:
https://api.example.com/users/{{user_id}} - Bodies:
{"email": "{{@Form.email}}", "name": "{{@Form.nombre}}"} - Consultas SQL:
SELECT * FROM users WHERE id = '{{user_id}}' - Mensajes:
Hola {{var.nombre}}, tu pedido {{order_id}} esta listo - Asuntos de email:
Confirmacion de pedido #{{order_id}} - Nombres de archivos:
reporte_{{$datetime}}.pdf - Headers HTTP:
Bearer {{var.api_token}}
Tabla resumen
Sección titulada «Tabla resumen»| Sintaxis | Descripción | Ejemplo |
|---|---|---|
{{campo}} | Campo del nodo anterior | {{email}} -> email del nodo anterior |
{{campo.subcampo}} | Propiedad anidada del nodo anterior | {{address.city}} -> ciudad de la dirección |
{{campo[0].prop}} | Elemento de array del nodo anterior | {{items[0].name}} -> nombre del primer item |
{{@Nombre_Nodo.campo}} | Campo de un nodo especifico por label | {{@HTTP_Request.body.total}} -> total del body |
{{#N.campo}} | Campo de un nodo N pasos atras | {{#2.email}} -> email de 2 nodos atras |
{{var.nombre}} | Variable de memorystorage | {{var.empresa_nombre}} -> nombre de la empresa |
{{campo|filtro:arg}} | Filtros de valor encadenables (ver «Filtros de valor») | {{total|fixed:2}} -> 12.35 |
{{$guid}} | UUID v4 generado | 3f2a7b1c-9d4e-... |
{{$timestamp}} | Timestamp actual (ms) | 1679582400000 |
{{$datetime}} | Fecha/hora ISO 8601 | 2026-03-23T10:30:00.000Z |
{{$randomInt min max}} | Entero aleatorio entre min y max | {{$randomInt 1 100}} -> 42 |
{{if ...}}...{{endif}} | Contenido condicional | Ver sección Condicionales |
{{loop ...}}...{{endloop}} | Iteración sobre arrays | Ver sección Bucles |
Ejemplo completo
Sección titulada «Ejemplo completo»A continuación se muestra un workflow completo que utiliza varios tipos de variables dinámicas:
Escenario: Procesamiento de un pedido recibido por Webhook
Sección titulada «Escenario: Procesamiento de un pedido recibido por Webhook»1. Nodo Webhook (label: “Webhook”)
Recibe los datos del pedido:
{ "order_id": "ORD-2024-001", "customer_email": "cliente@email.com", "total": 250.00}2. Nodo HTTP Request (label: “HTTP Request”)
Llama a una API externa para verificar el pedido usando el ID recibido.
- URL:
https://api.tienda.com/orders/{{order_id}}
Aquí {{order_id}} se resuelve a ORD-2024-001 tomandolo del nodo anterior (Webhook).
3. Nodo Decision
Evalua el estado devuelto por la API.
- Condición:
{{@HTTP_Request.status}} === 'confirmed'
Aquí {{@HTTP_Request.status}} accede al campo status del resultado del nodo con label “HTTP Request”.
4. Nodo SendMail (rama true)
Envia un correo de confirmación al cliente.
- Para:
{{@Webhook.customer_email}} - Asunto:
Confirmacion de pedido {{@Webhook.order_id}} - Cuerpo:
Estimado cliente,
Su pedido {{@Webhook.order_id}} por un total de {{@Webhook.total}} EUR ha sido confirmado.
Gracias por confiar en {{var.empresa_nombre}}.
ID de seguimiento: {{$guid}}Fecha de confirmacion: {{$datetime}}En este ejemplo:
{{@Webhook.customer_email}}obtiene el email del nodo Webhook{{@Webhook.order_id}}obtiene el ID del pedido del nodo Webhook{{var.empresa_nombre}}lee el nombre de la empresa desde memorystorage{{$guid}}genera un identificador único de seguimiento{{$datetime}}inserta la fecha y hora actual de la confirmación