¿Mapeo visual o Code Node?
El 80% de las transformaciones se resuelven con el editor de expresiones ({{ $json.campo }}) y el mapeo de columnas. Pero hay escenarios donde necesitas lógica:
- Calcular algo basado en múltiples campos (puntajes, precios dinámicos)
- Filtrar items de un array grande según criterios complejos
- Transformar la estructura del JSON antes de enviarlo a una API
- Aplicar algoritmos de validación (regex, hash, encoding)
Arquitectura de transformación
El Code Node es un micro-script que corre entre dos nodos de n8n. Recibe items procesados del nodo anterior, ejecuta tu código JS, y emite los datos transformados al siguiente.
Anatomía del Code Node (JavaScript)
El nodo Code tiene dos modos de ejecución:
| Modo | Comportamiento | Variables disponibles |
|---|---|---|
| Run Once for All Items | El código se ejecuta una vez con todos los items en un array. | $items — aparece todos los ítems de entrada |
| Run Once for Each Item | El código se ejecuta por cada item individualmente. | $item — cada ítem en secuencia |
Específicamente, en JavaScript (Node.js), cada función devuelve los datos para la salida del nodo. El objeto $json está disponible desde la entrada. Al devolver un nuevo array de objetos, estas emitiendo los items transformados.
Métodos Built-in de n8n en JavaScript
Cuando escribes JS dentro del Code Node, tienes acceso a estas variables internas. Te permite más que un script puro — tienes acceso al contexto de ejecución de n8n.
| Variable / Método | Devuelve | Uso |
|---|---|---|
$input.all() |
Array completo | Cuando necesitas ordenar/contar todo |
$input.first() |
Primer item | Solo el registro principal (ej. único resultado) |
$now |
DateTime | Timestamp ISO 8601 para logs |
$workflow.id |
String | ID del workflow en ejecución |
$execution.id |
String | ID único de cada ejecución para debug |
Ejemplo Práctico: Transformar JSON de Lead
Recibes un webhook con este JSON del cliente:
{
"nombre": "María López",
"email": "maria@ejemplo.com",
"prioridad": 3,
"canal": "whatsapp"
}
Pero la API de destino espera: { "name": "...", "contact": "...", "score": ..., "source": "..." }
Con el Code Node, escribes:
const input = $input.all();
return input.map(item => ({
json: {
name: item.json.nombre,
contact: item.json.email,
score: item.json.prioridad * 10,
source: item.json.canal
}
}));
Resultado transformado
Ahora el nodo Code emite { name: "María López", contact: "maria@ejemplo.com", score: 30, source: "whatsapp" } — listo para que el nodo Telegram lo consuma sin modificar su configuración.
Checklist del Módulo 08
Desafío de Arquitecto
Creador de Score de Lead
Tu tarea es convertir un JSON de entrada en un puntaje de lead clasificable:
- Recibe un webhook con JSON:
{ lead: string, email: string, canal: "whatsapp"|"email"|"insta", acciones: number } - Usa el Code Node para calcular un score:
- canal
"whatsapp"→ +30 puntos - canal
"email"→ +10 puntos - cada acción adicional → +5 puntos (min 1)
- canal
- Redondea el score a entero y añade un campo
"nivel":- Score ≥ 50 → "caliente"
- Score < 50 → "frío"
- El nodo Code debe emitir el JSON transformado que luego será enviado a Telegram
- Verifica en el panel de ejecución que cada lead de tu Postman genera el score correcto.