Domina las expresiones de sistema de n8n para construir flujos profesionales y fiables. Con ellas puedes leer datos del nodo actual, identificar cada ejecución, incorporar el nombre del workflow o usar la fecha actual. Todo con doble llave {{ }}, expresiones de JavaScript y con previsualización del resultado en tiempo real.
¿Qué son y por qué importan las expresiones de sistema de n8n?
Las expresiones de sistema te permiten inyectar datos dinámicos en cualquier campo. Así evitas valores fijos y documentas mejor cada paso.
Acceder a datos del nodo con $json.
Identificar la ejecución con $execution.id para auditorías y errores.
Obtener metadatos con $workflow.name.
Usar fecha y hora actuales con $now.
Referenciar nodos por nombre con $node['Nombre'] y la sintaxis moderna $item.json.
¿Cómo acceder a los datos del nodo con $json?
Cuando abres un campo en edit fields, activa "expressions" y usa doble llave.
Ejemplos usando los campos mensaje y prioridad definidos en edit fields:
{{ $json.mensaje}}{{ $json.prioridad}}
$json apunta al nodo previo conectado.
Útil para leer los valores actuales sin configurar nada extra.
¿Cómo identificar la ejecución con $execution?
Necesitas un identificador único por corrida del flujo. Úsalo para logs, auditorías o rastreo de errores.
{{ $execution.id}}
Genera un ID único por ejecución.
Ideal para adjuntar en respuestas o en registros.
¿Cómo obtener metadatos y la fecha actual con $workflow y $now?
Incluye el nombre del workflow en mensajes o logs.
{{ $workflow.name}}
Trabaja con la fecha y hora actual. Puedes mostrarla en ISO o aplicar format.
{{ $now.toIso}}{{ $now.format}}
Son expresiones de JavaScript, por lo que puedes encadenar métodos.
Visualiza a la derecha la previsualización del valor antes de guardar.
¿Cómo referenciar nodos por nombre sin romper el flujo?
Cuando insertas un nodo intermedio (por ejemplo, un set que añade categoría: IT), $json puede cambiar porque apunta al nodo directamente anterior. En cambio, $node['Nombre'] apunta por nombre y no se rompe al reordenar.
¿Por qué $json puede fallar al insertar nodos intermedios?
Si agregas un set entre el nodo "Editar" y tu campo actual, $json ya no es el mismo.
$json se actualiza al nodo inmediatamente anterior.
Un cambio en la cadena de nodos puede romper referencias como {{ $json.prioridad }}.
¿Cómo usar $node['Editar'] y la sintaxis moderna con $item.json?
Para apuntar al nodo "Editar" por nombre y leer prioridad:
{{ $node['Editar'].json.prioridad}}
En la sintaxis más moderna, se trabaja con $item y luego con json:
{{ $item.json.prioridad}}
En ambos casos verás el mismo valor cuando no hay nodos intermedios.
Con nodos añadidos, $node['Editar'] mantiene la referencia estable.
¿Qué práctica recomiendan para flujos estables?
Preferir $node['NombreDelNodo'] para datos críticos.
Usar $json cuando el orden de nodos no cambiará.
Documentar con $execution.id y $workflow.name en tus logs.
Normalizar fechas con $now.toIso.
¿Cómo replicar el ejercicio y consolidar el aprendizaje?
Configura un trigger manual, un edit fields con mensaje y prioridad, y un set final para ver valores. Luego:
Prueba {{ $json.prioridad }} y {{ $node['Editar'].json.prioridad }} en el set.
Inserta un set intermedio que añada categoría: IT.
Ejecuta el workflow y observa cómo $json se rompe mientras $node sigue correcto.
Añade {{ $execution.id }}, {{ $workflow.name }} y {{ $now.toIso }} a tus campos.
¿Te animas a intentarlo? Haz una pequeña modificación con dos expresiones de sistema de n8n en el nodo set, toma una captura y compártela en los comentarios.
{{ $node['X'].json.Y }} → JSON de un nodo específico (nombre fijo).
{{ $('X').item.json.Y }} → igual que arriba, pero con más control si hay múltiples items/salidas.
{{ $execution.id }} → ID de ejecución.
{{ $workflow.name }} → nombre del workflow.
El primer cambio que implementé fue pasar todos mis input fields a nombres por referencia :D
Antes:
Después:
Entendi la clase pero no entendi al mismo tiempo. Que paso con el webhook? como funciona lo que se vio en esta clase con la anterior? me perdi, totalmente. No se si estoy viendo un curso o un tutorial.
Gracias por tu feedback, intentaremos mejorarlo para futuros cursos.
El Webhook te da una respuesta en json, dependiendo de el camino que tome en tu logica.
Eso es una API, recibes una dato, lo procesas y tienes una respuesta.
Recibes un correo desde una web con esa llamada a el webhook, validas si esta correcto el correo, envias un email al cliente, lo añades a una base de datos, o un google sheet, agendas una reunion etc, la respuesta del webhook la recibe la pagina y se termina el proceso, en todo necesitas expresiones.
{{ $node['nombre_del_nodo'].json.prioridad}}
este bloque creo que esto es lo mas poderoso que tiene para el manejo de datos, no sabia que funcionaba asi,
{{(()=>{const normalize =(s ="")=> s
.toString().toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/\r?\n|\r/g," ").replace(/\s+/g," ").trim();const raw = $json.body.mensaje||"";const msg =normalize(raw);const keywords ={alta:["urgente","error","caido","caído","no funciona"],media:["lento","problema","soporte","importante"],baja:["reunion","reporte","tarea","baja"]};consthasAny=(arr)=> arr.some(w=> msg.includes(normalize(w)));let result ="baja";if(hasAny(keywords.alta)){ result ="alta";}elseif(hasAny(keywords.media)){ result ="media";}elseif(hasAny(keywords.baja)){ result ="baja";}return result.replace(/[\r\n]+/g,"");})()}}
Me llamo bastante la atencion las expresiones con lo que podemos ser mas especificos a la hora de referirnos a siertos nodos o acciones dentro de N8N investigue un poco y añadi como prueba las siguientes expresiones:
no entendí bien me ayudan con esto y en edit fields1 como les salio verde
el problema es en en nombre del nodo, en este caso, el nombre del nodo es "Edit Fields", y tú estás poniendo "editar", para ambos casos
gracias
Solo por el gesto mecanico que tiene Idir de guardar constatemente, puedo intuir que se pierde facilmente lo implementado.
Es como los videojuegos antiguos, cada 2 pasos hay que guardar.
Es una manía que tengo desde que conseguí tuve mi primer ordenador :)
En n8n cuando refrescas la página o vas atrás, siempre sale un modal preguntando si de verdad quieres salir y quieres guardar, asi que el riesgo de que se pierda en lo que se ha trabajado es bastante bajo.
Un lugar muy util para usar este tipo de expresiones es en los if o nodos de decisiones.
Asi si agregas algun nodo intermedio, tu logica no se rompe
1. The Central Idea (The Core 💡): Master n8n system expressions ($json, $execution, $workflow, $now, $node) to build robust and professional workflows.
2. Key Points (In Bullet Points 📌):
$json: Accesses data from the directly preceding node.
$execution: Provides unique execution details, like $execution.id for auditing.
$workflow: Offers workflow information, such as $workflow.name.
$now: Returns the current date and time, with JavaScript formatting options.
$node: References data from any specific node by its name, making workflows more resilient.
3. The Crucial Example or Fact 🚀: Referencing nodes by name using $node["Node Name"].json.key (or the modern $node["Node Name"].item.json.key) ensures workflow stability even if intermediate nodes are added, unlike $json which breaks.
⚠️ The primary limitation of $json is its tight coupling to the immediate preceding node; adding or removing nodes upstream can break references, leading to runtime errors.
📉 Using $node for every reference can make expressions verbose and harder to read in very complex workflows with many nodes. The class implies this trade-off.
2. The Expert-Level Debate:
⚖️ Direct Reference vs. Dynamic Context: The debate is whether to rely on $json for brevity and directness (when node order is stable) or $node for robustness and explicit referencing (when workflow structure might change). It's a trade-off between conciseness and resilience.
3. Strategic Weakness (The "But..."):
🧐 This is great, but the lecture doesn't deeply explore debugging strategies for complex expression failures or best practices for managing node name changes in $node references across large, evolving workflows.
Realmente no se si les pasa a los demás compañeros o solo a mí pero estoy viendo la clase y de la nada se baja la calidad del video, no solo ha sido con este curso. Si sería recomendable que el usuario pueda escoger la calidad del video y en caso de que haya un bajón en el ancho de banda, se espera un rato que se estabilice y se continue con una buena calidad de video, similar a lo de Youtube.
$json: Es el "ahora mismo". Mira los datos que le acaban de llegar al nodo donde estás parado. Es volátil: si metes un nodo nuevo en medio, lo que antes era $json cambia.
$execution: Es el "DNI" de la corrida. Úsalo con $execution.id para rastrear logs o errores. Cada vez que ejecutas el flujo, este ID cambia.
$workflow: Es el "nombre del proyecto". Con $workflow.name obtienes el nombre del flujo. Útil para avisos automáticos.
$now: Es el "reloj". Te da fecha y hora exactas. Como es JavaScript, puedes añadirle .format() para que se vea como tú quieras.
$node["nombre"]: Es el "rastreador". En lugar de confiar en el nodo anterior, le dices por su nombre exactamente de dónde sacar el dato. Es el más profesional, porque si mueves los nodos, tu flujo no se rompe.
Añadí estos 2 campos al nodo EDIT:
JSON que envío a la automatización:
Nodo de respuesta al webhook:
Super interesante esta clase 🎉
Hola, con n8n puedo descargar un .pdf de un drive y extraer información específica que contiene el documento y luego guardar en una bd?
Correcto, para ello debes usar alguna IA para que lea el documento, analice y obtenga la información que deseas extraer, posteriormente, se enviaría a una base de datos, por ejemplo, una base de datos en notion.
¡Hola, compañeros!
Les quería compartir mi solución al reto propuesto por Idir en esta clase, donde implementé un flujo completo de gestión de tickets de soporte técnico usando múltiples expresiones de n8n.
Mi flujo tiene 4 nodos principales:
Nodo "Editar": Captura los datos del ticket (usuario, contacto, prioridad)
Nodo "Edit Fields": Genera un mensaje dinámico usando los datos capturados con expresiones de referencia entre nodos
Nodo "Log Error": Aquí usé varias expresiones del sistema para crear campos individuales de registro:
{{ $execution.id }} → Para trackear cada ejecución
{{ $workflow.name }} y {{ $workflow.id }} → Identificar el flujo
{{ $now.format('yyyy-MM-dd') }} → Timestamp del error
{{ $('Editar').item.json.prioridad }} → Referencia a la prioridad del nodo anterior
Nodo "Complete Log": Este nodo consolida toda la información en un log estructurado en formato JSON usando comillas simples para evitar conflictos, conteniendo: timestamp, workflow info, execution ID, error details y reporter data.
Mi idea fue simular un sistema real donde cada ticket queda registrado con toda su metadata para trazabilidad. Me pareció un ejercicio súper útil para entender cómo las expresiones del sistema nos ayudan a hacer los flujos más robustos y cómo las expresiones propias de n8n permiten implementar monitoreo a los workflows para tener trazabilidad de lo que ocurre en cada ejecución.
Adjunto imágenes y explicación del workflow:
Revisión detallada del flujo:
Sistema de tickets de soporte con 4 nodos tipo "Set":
1. Nodo "Editar" - Recibe los datos iniciales del ticket:
username: "Marcela"
contacto: ""
prioridad: "alta"
2. Nodo "Edit Fields" - Construye el mensaje usando expresiones:
Usa interpolación con {{ $('Editar').item.json.username }} y {{ $('Editar').item.json.contacto }}
Crea un mensaje dinámico basado en los datos anteriores
Define la categoría del error
3. Nodo "Log Error" - Expresiones de sistema utilizadas para campos individuales:
{{ $execution.id }} - ID de la ejecución
{{ $workflow.name }} - Nombre del workflow
{{ $now.format('yyyy-MM-dd') }} - Fecha actual formateada
{{ $('Editar').item.json.prioridad }} - Referencia a datos previos
{{ $('Edit Fields').item.json.categoria }} - Categoría del error
Campo adicional: Estado = "activo" -> Este hace refencia al estado del ticket
4. Nodo "Complete Log" - Log consolidado en formato JSON:
Combina todas las expresiones de sistema en un único registro estructurado
Ideal para guardar en base de datos o sistema de monitoreo
Total: 5 expresiones de sistema diferentes usadas ($execution, $workflow, $now, y múltiples referencias a nodos anteriores) distribuidas a lo largo del flujo para crear tanto registros individuales como un log consolidado completo.
Porque N8N directamente no referencia el nodo o los nodos siempre?