Más Allá del Drag & Drop
Hasta ahora has usado expresiones básicas como {{ $json.nombre }}. Pero el editor de expresiones de n8n contiene un intérprete completo que entiende:
- Variables especiales:
$now,$today,$env,$workflow - Funciones de tipo: conversión String ↔ Number ↔ DateTime
- Condicionales ternarias: lógica if/else en una línea
- Funciones de array: map, filter, reduce, pluck
- Funciones de string: split, join, replace, toUpperCase
Regla de arquitectura
Siempre intenta resolver la transformación con una expresión antes de usar el Code Node. Las expresiones son más legibles, más rápidas y no requieren JavaScript externo. Solo cuando la lógica es demasiado compleja para una expresión, pasas al Code Node.
Las 10 Funciones Built-in Esenciales
| Función | Propósito | Ejemplo |
|---|---|---|
$now |
Fecha y hora actual (ISO 8601) | 2026-07-30T14:22:00.000Z |
$today |
Solo fecha, sin hora | 2026-07-30 |
$env.N8N_BASE_URL |
Variable de entorno | Usar credenciales sin hardcodear |
$ifEmpty(valor, fallback) |
Devuelve fallback si valor es null | $ifEmpty($json.email, "sin-email") |
$ifNotEmpty(valor, template) |
Devuelve template si valor no es vacío | $ifNotEmpty($json.lead, "Lead: " + $json.lead, "") |
$items |
Array de todos los items | Cuando procesas en lote |
$node["Nodo Anterior"].data |
Acceso directo a salida de nodo | Referenciar cualquier nodo por su nombre |
$binary |
Datos binarios (archivos) | FormData, imágenes, documentos |
$jmespath(data, query) |
Filtrar JSON con JMESPath | $jmespath($json, "items[?score > `50`]") |
$pageCount |
Número de páginas (paginación) | APIs con paginated responses |
Condicionales Ternarias — Lógica en Una Línea
La sintaxis ternaria es: {{ condición ? valor_si_true : valor_si_false }}
// Ejemplo 1: Clasificar prioridad
{{ $json.score > 50 ? "Prioridad Alta" : "Prioridad Normal" }}
// Ejemplo 2: Valor por defecto con comparación
{{ $json.rol === "admin" ? "Acceso total" : "Solo lectura" }}
// Ejemplo 3: Cadena de condiciones (ternaria anidada)
{{ $json.score >= 80 ? "Excelente" :
$json.score >= 60 ? "Bueno" : "Necesita mejora" }}
Patrón profesional
Usa ternarias anidadas para reemplazar un nodo IF + 3 ramas. Una sola expresión = un solo nodo. Pero si la lógica involucra más de 2 condiciones, usa el nodo Switch — es más legible y mantenible.
Arrays: Transformar Colecciones de Datos
Cuando un nodo emite múltiples items (por ejemplo, 30 leads desde un GET), el editor de expresiones puede filtrar y transformar el array entero.
Referencia de funciones de array
| Operación | Expresión |
|---|---|
| Filtrar leads calientes | $json.leads.filter(lead => lead.score > 50) |
| Extraer solo emails | $json.leads.map(lead => lead.email) |
| Sumar puntajes | $json.leads.reduce((sum, lead) => sum + lead.score, 0) |
| Encontrar un lead | $json.leads.find(lead => lead.id === 42) |
| Ordenar por fecha | $json.leads.sort((a, b) => a.creado.localeCompare(b.creado)) |
Checklist del Módulo 11
Desafío de Arquitecto
Filtro de Leads — Solo Expresiones
Tienes la siguiente estructura que llega de un webhook (200 registros):
[
{ "nombre": "Cliente A", "prioridad": "High", "fecha": "2026-07-15" },
{ "nombre": "Cliente B", "prioridad": "Low", "fecha": "2026-07-28" },
...
]
Tu misión: Sin usar un nodo Code, solo con expresiones, escribe un filtro que:
- Seleccione solo los leads con prioridad "High"
- Solo muestre los de los últimos 10 días (desde 2026-07-30)
- Devuelva el resultado en el nodo siguiente como array filtrado
- Envía la cuenta final (cantidad de leads que pasan el filtro) por Telegram
Pista: Usa .filter() combinado con $now y operadores de comparación de fecha.