Complete "Lección 3: Métodos de autenticación — API Keys, OAuth2 y Headers" primero para desbloquear esta lección.Ir a la lección anterior

Introducción

Al conectar múltiples servicios en n8n, los datos sin procesar de una API rara vez coinciden con el formato que espera la siguiente. Es necesario reformular campos, filtrar registros irrelevantes y enrutar datos a distintas ramas según condiciones. n8n proporciona tres nodos fundamentales para esto: Set (para mapeo simple de campos), Function (para lógica personalizada en JavaScript) e IF (para enrutamiento condicional). Dominar estos nodos transforma un workflow lineal en una automatización inteligente con múltiples rutas.

Reformulación de datos con el nodo Set

El nodo Set permite crear nuevos campos o renombrar los existentes sin escribir código. Es la herramienta ideal para transformaciones simples, como extraer una propiedad anidada, combinar campos o añadir valores estáticos.

Supón que un webhook entrega este payload:

json
{
"user": {
"firstName": "Alice",
"lastName": "Johnson"
},
"orderTotal": 149.99
}

Quieres enviarlo a un CRM que espera `full_name` y `amount`. Añade un nodo Set después del webhook, configura dos campos: `full_name` con la expresión `{{json.user.firstName}} {{json.user.lastName}}`, y `amount` con `{{$json.orderTotal}}`. La salida queda así:

json
{
"full_name": "Alice Johnson",
"amount": 149.99
}

El nodo Set admite expresiones entre dobles llaves. Puedes hacer referencia a `json‘paraelıˊtemactual,‘json` para el ítem actual, `node['NombreNodo'].json` para la salida de otro nodo, y funciones integradas como `now‘o‘now` o `today`. Para operaciones aritméticas o de cadenas, escribe JavaScript plano dentro de las llaves: `{{$json.price * 1.1}}` añade un10% de margen.

diagrama de flujo que muestra los datos del webhook entrando al nodo Set, los campos siendo remapeados y luego la salida hacia el nodo CRM

Lógica personalizada con el nodo Function

Cuando las expresiones del nodo Set se vuelven difíciles de manejar, cambia al nodo Function. Ejecuta JavaScript arbitrario y te da control total sobre el array de entrada. El nodo recibe `items` (un array de objetos, cada uno con una propiedad `json`) y debe devolver un array con la misma estructura.

Ejemplo: filtra los pedidos inferiores a $100 y añade un nivel de descuento:

javascript
for (let i = 0; i < items.length; i++) {
const order = items[i].json;
if (order.amount < 100) {
items.splice(i, 1);
i--;
continue;
}
order.discount_tier = order.amount >= 500 ? 'gold' : 'silver';
}
return items;

Esto modifica el array de ítems en su lugar. Para transformaciones más complejas, puedes iterar sobre los ítems con map y devolver un nuevo array:

javascript
return items.map(item => ({
json: {
customer_id: item.json.user.id,
total: Math.round(item.json.amount),
tags: item.json.categories.join(', ')
}
}));

El nodo Function tiene acceso a la biblioteca estándar de Node.js y a algunos helpers como `$input.all()` para obtener todos los ítems entrantes. Evita operaciones asíncronas a menos que entiendas el manejo de promesas; para llamadas a API dentro de funciones, usa el nodo HTTP Request y encadénalos.

Enrutamiento condicional con el nodo IF

El nodo IF divide tu workflow en dos ramas: true y false. Evalúa una o más condiciones contra cada ítem y envía los ítems coincidentes por el camino correspondiente.

Añade un nodo IF después de tu fuente de datos. Establece el tipo de condición en `Number` si comparas montos, `String` para coincidencias de texto, `Boolean` para flags. Puedes combinar múltiples condiciones con lógica AND/OR.

Ejemplo de workflow: un webhook de Typeform envía respuestas de encuestas. Usa el nodo IF con la condición `{{$json.score}} > 8`. Conecta la salida true a un nodo de Slack que publique los comentarios positivos en un canal. Conecta la salida false a un nodo de Google Sheets que registre los problemas para su revisión.

javascript
// Condition in IF node:
// Value 1: {{$json.score}}
// Operation: Larger
// Value 2: 8

El nodo IF no modifica los datos, solo los enruta. Si necesitas transformar antes de enrutar, coloca un nodo Set o Function antes del nodo IF. Si ambas ramas necesitan la misma acción posterior, fusiónalas usando un nodo Merge (elige el modo "Append" para combinar las salidas).

diagrama de flujo que muestra los datos entrando al nodo IF, dividiéndose en la rama true hacia Slack y la rama false hacia Google Sheets

Combinación de nodos en workflows multi-servicio

Los workflows reales encadenan estos nodos. Patrón: Webhook → Function (limpiar datos) → IF (enrutar por tipo) → Set (formatear para API A) → HTTP Request (enviar a API A), y la rama false va a Set (formatear para API B) → HTTP Request (enviar a API B).

Error común: olvidar que cada nodo procesa los ítems de forma independiente. Si un nodo Function filtra ítems, los nodos posteriores solo verán los ítems restantes. Si necesitas los datos originales más adelante, guárdalos en una variable dentro del nodo Function o usa un nodo Set al principio para copiar los campos que necesitarás.

Otro escollo: expresiones complejas en el nodo Set que fallan silenciosamente. Siempre prueba con Execute Workflow e inspecciona la salida de cada nodo. Si una expresión devuelve undefined, el campo se omite en la salida. Usa `{{$json.field || 'default'}}` para proporcionar valores por defecto.

Resumen

El nodo Set se encarga del mapeo simple de campos y expresiones. El nodo Function ofrece control total con JavaScript para filtrado, agregación y transformaciones complejas. El nodo IF enruta los datos por distintos caminos según condiciones. Combínalos para construir workflows que se adapten de forma inteligente a los datos entrantes. Valida siempre las transformaciones ejecutando el workflow con datos de muestra reales y comprobando las salidas intermedias antes de conectar con servicios en producción.

Práctica de la lección

Punto de control de la lección

Repasa lo aprendido y recibe comentarios sobre tu trabajo.

0/1
Respondidas · 0/1
Lección 4: Transformación y enrutamiento de datos entre servicios