Módulo 11

Módulo 11: El Motor de Expresiones — Dominio Completo

Las expresiones de n8n no son solo arrastrar y soltar. Son un lenguaje funcional completo con funciones built-in para fechas, números, arrays, strings y lógica condicional.

Fase 2 · n8n ~50 min Guía práctica

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:

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:

  1. Seleccione solo los leads con prioridad "High"
  2. Solo muestre los de los últimos 10 días (desde 2026-07-30)
  3. Devuelva el resultado en el nodo siguiente como array filtrado
  4. 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.