Módulo 05

Mapeo de Datos (Data Mapping)

Convertir datos brutos en inteligencia operativa. La esencia del trabajo de automatización.

Fase 2 · n8n ~45 min Práctica guiada
1

La Analogía del Traductor

Cada sistema habla su propio idioma. Tu trabajo como automatizador es traducir entre idiomas para que la información fluya sin perder sentido. Eso es mapear: tomar un campo que viene en un "idioma" (formato, ruta, nombre) y entregarlo en otro que el destino entienda.

Traductor de español a inglés

  • Origen (español): nombre_completo, teléfono, valor_pedido.
  • Destino (inglés): fullName, phone, orderAmount.
  • Tu trabajo: escribir la traducción campo a campo, respetando tipos (número, texto, fecha) y formato (ej. valor_pedido en centavos vs dólares).

Mapear no es copiar y pegar: es decidir qué dato va dónde, con qué transformación, y en qué formato.

2

¿Qué es mapear en n8n?

Mapear datos es el acto de conectar la salida (output) de un nodo con la entrada (input) de otro. En n8n se hace con expresiones dentro de doble llave: {{ ... }}.

Expression · anatomía mínima

// Dato que el Webhook recibió
$json.body.usuario = "Gabriel"

// Campo de Telegram que quieres llenar
"Hola {{ $json.body.usuario }}, bienvenido"
// → "Hola Gabriel, bienvenido"

El motor de expresiones de n8n usa JavaScript-like syntax. Puedes hacer operaciones, condicionales, formateo de fechas, etc. Empieza con lo simple y crece.

3

El Editor de Expresiones (n8n v2.x)

n8n tiene un editor visual de expresiones que evita que memorices rutas. Úsalo y dejarás de escribir $json.cuerpo.del.usuario.que.esta.anidado a mano.

  1. En cualquier campo de un nodo (ej. Text de Telegram), busca el botón con el ícono o la etiqueta Expression. Clic ahí.
  2. El editor se divide en dos paneles: izquierda = estructura JSON disponible, derecha = la expresión que escribes.
  3. Arrastra el campo deseado desde la izquierda. n8n escribe la sintaxis por ti: {{ $json.body.usuario }}.
  4. Si necesitas un valor estático en medio del dinámico, ciérralo con }} y sigue escribiendo texto plano.
  5. El editor valida en vivo: si ves un cuadrado rojo, la ruta no existe en los datos del nodo anterior.

Cómo navegar JSON anidado

Usa punto para bajar un nivel: $json.body.lead.nombre. Usa corchetes para arrays: $json.items[0].nombre (primer elemento), $json.items[3].nombre (cuarto). Para múltiples items, n8n ejecuta el workflow una vez por cada ítem, así que [0] rara vez es lo que quieres fuera de un SplitInBatches.

4

Errores comunes de mapeo

Error #1 — campo no existe (undefined)

Escribes {{ $json.usuario }} y obtienes undefined. El JSON que recibiste tiene el dato en $json.body.usuario. Solución: abre el panel INPUT del nodo y verifica la estructura real antes de inventar rutas. No asumas: confirma.

Error #2 — mayúsculas / distinto casing

La API origen manda Email (con mayúscula) y tú escribes {{ $json.email }}. JavaScript distingue: Emailemail. Copia el nombre exacto del panel izquierdo, no lo "adivines" en inglés.

Error #3 — olvidar que hay múltiples items

Tu nodo anterior devolvió 50 leads pero solo ves el primero en el output del actual. Casi siempre es porque escribiste [0] cuando debías dejar que n8n itere. Para procesar uno por uno: usa el modo "Run Once for Each Item" del nodo.

Error #4 — datos numéricos tratados como texto

El precio viene como string "45000" (con comillas) y al concatenar con otro número obtienes "45000123" en vez de 450123. Usa {{ Number($json.monto) }} para forzar la conversión a número antes de operar.

5

Práctica guiada: Webhook → Telegram con datos dinámicos

Objetivo: tomar usuario y monto de un webhook y armar un mensaje personalizado para Telegram.

  1. Workflow Crea un workflow nuevo llamado lab-05-mapeo. Trigger: Webhook, método POST, path mapeo.
  2. Payload de prueba Desde Postman envía: {"lead": {"usuario": "Sofía", "monto": 95000, "moneda": "COP"}}.
  3. Nodo Telegram Agrega el nodo Telegram (o HTTP Request a la API). En el campo Chat ID pon tu chat.
  4. Expresión del Text En el campo Text abre el editor de expresiones y escribe: "Nuevo lead: {{ $json.body.lead.usuario }} - {{ $json.body.lead.monto }} {{ $json.body.lead.moneda }}".
  5. Resultado En Telegram debes ver: "Nuevo lead: Sofía - 95000 COP".
  6. Validación Cambia el JSON en Postman (otro nombre, otro monto, otra moneda). El mensaje en Telegram debe cambiar sin tocar n8n.

Mapeo · ejemplo completo de expresión

// Payload que llegó al Webhook
{
  "lead": {
    "usuario": "Sofía",
    "monto": 95000,
    "moneda": "COP",
    "items": [
      { "producto": "Curso", "precio": 50000 },
      { "producto": "Mentoría", "precio": 45000 }
    ]
  }
}

// Expresión para el Text de Telegram
"Hola {{ $json.body.lead.usuario }}, compraste {{ $json.body.lead.items.length }} items por {{ $json.body.lead.monto }} {{ $json.body.lead.moneda }}"
6

Checklist del Módulo 05

Desafío del módulo

Mapea un objeto complejo a un mensaje útil

Tu misión:

  1. Crea un webhook /pedido que reciba un JSON como este: {"cliente": {"nombre": "Andrés", "ciudad": "Bogotá"}, "productos": [{"sku": "A1", "cantidad": 2, "precio": 30000}, {"sku": "B7", "cantidad": 1, "precio": 80000}], "cupon": "GABY10"}.
  2. Calcula el total con una expresión: {{ $json.body.productos[0].cantidad * $json.body.productos[0].precio + $json.body.productos[1].cantidad * $json.body.productos[1].precio }}.
  3. Arma el mensaje de Telegram: "Pedido de Andrés desde Bogotá — Total: $X (cupón GABY10 aplicado)".
  4. Si el cupón es GABY10, aplica 10% de descuento en el mensaje usando {{ Number(...) * 0.9 }}.

Bonus: convierte el total a texto con separador de miles: {{ Number(total).toLocaleString('es-CO') }} te da "162.000".