montajes / MT-075

Publicada el · Actualizada el

aitorconia_.montajes1 / 18
/ 00MontajelecturaNivel medio

N8n Automation Nodes Cheat Sheet de JSON para nodos

Chuleta práctica con los fragmentos JSON de los nodos más usados en n8n, lista para copiar, pegar y adaptar a tus flujos. Orientada a quien ya conoce el editor y quiere acelerar la construcción de automatizaciones mediante la estructura interna de los nodos.

Ilustracion de apertura de la guia MT-075
@aitorconia · biblioteca de montajes · 2026
aitorconia_.montajes ~ indice.md2 / 18
/ 00Índice

Lo que hay dentro, de principio a fin

Qué obtienes
Snippets JSON de los nodos clave de n8n, con explicación de cada parámetro
Tiempo
Lectura y consulta
Coste extra
0 EUR
Necesitas
n8n en local o en la nube, y credenciales configuradas para los servicios que vayas a usar
Se rompe si
El nombre o ID de la credencial no coincide con una credencial existente en tu instancia
@aitorconia · MT-075
aitorconia_.montajes ~ seccion-01.md3 / 18
/ 01Estructura datos

Estructura de datos en n8n cómo viaja la información

n8n mueve los datos entre nodos como un array de objetos. Cada objeto recibe el nombre de "item" y los nodos procesan los items uno a uno.

~ data-structure.json
[
  {
    "json": {
      "property1": "value1",
      "property2": "value2"
    },
    "binary": {}
  },
  {
    "json": {
      "property1": "anotherValue1",
      "property2": "anotherValue2"
    },
    "binary": {}
  }
]

A partir de la versión 0.166.0, los nodos Code y Function añaden la clave json automáticamente si falta y envuelven los items en un array cuando es necesario.

Para leer datos en expresiones:

OrigenSintaxis
Campo del item actual{{ $json.property1 }}
Campo anidado{{ $json.parent.child.property }}
Campo de un nodo concreto{{ $node["NodeName"].json.property }}
/ 02IA modelos

IA y modelos de lenguaje nodos LangChain en n8n

Chat Model de OpenAI (GPT-3.5 o GPT-4)

@aitorconia · MT-075
aitorconia_.montajes ~ seccion-cont.md4 / 18
Viene de la hoja anterior
~ chatgpt.json
{
  "name": "ChatGPT",
  "type": "n8n-nodes-langchain.lmChatOpenAi",
  "typeVersion": 1,
  "parameters": {
    "model": "gpt-3.5-turbo",
    "temperature": 0.7,
    "maxTokens": 500,
    "systemPrompt": "You are a helpful assistant.",
    "userPrompt": "Hello! How can I automate tasks with n8n?"
  },
  "credentials": {
    "openAiApi": {
      "id": "YOUR_CRED_ID",
      "name": "OpenAI API"
    }
  }
}

Ajusta temperature para más o menos creatividad y maxTokens para limitar la longitud de la respuesta.

Text Completion de OpenAI

~ openai-completion.json
{
  "name": "OpenAI Completion",
  "type": "n8n-nodes-langchain.openai",
  "typeVersion": 1,
  "parameters": {
    "model": "text-davinci-003",
    "prompt": "Summarize the following text: {{$json[\"content\"]}}",
    "temperature": 0.5,
    "maxTokens": 200
  },
  "credentials": {
    "openAiApi": {
      "name": "OpenAI API"
    }
  }
}

La sintaxis {{$json["content"]}} inserta datos del nodo anterior. La salida queda en el campo result del JSON del nodo.

AI Agent con herramientas

@aitorconia · MT-075
aitorconia_.montajes ~ seccion-cont.md5 / 18
Viene de la hoja anterior
~ ai-agent-react.json
{
  "name": "AI Agent (ReAct)",
  "type": "n8n-nodes-langchain.agent",
  "typeVersion": 1,
  "parameters": {
    "agentType": "react",
    "model": "gpt-4",
    "memory": false,
    "tools": [
      {
        "name": "googleSearch",
        "input": "What is n8n?"
      }
    ]
  }
}

El array tools debe corresponderse con nodos Tool conectados al Agent. Añádelos desde el editor visual; allí pasan a ser subnodos. El agente decide cuándo invocar cada herramienta según la estrategia (ReAct, Functions, Plan and Execute o SQL).

Embeddings y Vector Stores

~ embeddings.json
{
  "name": "Text to Vector",
  "type": "n8n-nodes-langchain.embeddingsOpenAi",
  "typeVersion": 1,
  "parameters": {
    "model": "text-embedding-ada-002",
    "text": "={{ $json[\"content\"] }}"
  },
  "credentials": {
    "openAiApi": {
      "name": "OpenAI API"
    }
  }
}

El nodo convierte el campo content en un vector de 1536 dimensiones. Combínalo con un nodo Pinecone (o similar) para insertar o consultar vectores y montar búsqueda semántica o RAG.

@aitorconia · MT-075
aitorconia_.montajes ~ seccion-03.md6 / 18
/ 03APIs webhooks

APIs y webhooks HTTP, GraphQL y disparadores

HTTP Request: GET con query params

~ http-get.json
{
  "name": "HTTP GET Example",
  "type": "n8n-nodes-base.httpRequest",
  "typeVersion": 1,
  "parameters": {
    "url": "https://api.example.com/data",
    "method": "GET",
    "responseFormat": "json",
    "queryParametersUi": {
      "parameter": [
        { "name": "q", "value": "search term" },
        { "name": "limit", "value": "10" }
      ]
    }
  }
}

HTTP Request: POST con cuerpo JSON

~ http-post.json
{
  "name": "HTTP POST Example",
  "type": "n8n-nodes-base.httpRequest",
  "typeVersion": 1,
  "parameters": {
    "url": "https://api.example.com/posts",
    "method": "POST",
    "responseFormat": "json",
    "jsonParameters": true,
    "options": {
      "bodyContentType": "json"
    },
    "bodyParametersJson": {
      "title": "Hello World",
      "content": "This is an example post via n8n."
    }
  },
  "credentials": {
    "httpBasicAuth": {
      "name": "Example API Auth"
    }
  }
}
@aitorconia · MT-075
aitorconia_.montajes ~ seccion-cont.md7 / 18
Viene de la hoja anterior

bodyContentType: "json" fuerza la cabecera Content-Type: application/json. En la sección credentials puedes referenciar HTTP Basic Auth, OAuth2 o API Key según lo que requiera el servicio.

GraphQL

~ graphql.json
{
  "name": "GraphQL Query",
  "type": "n8n-nodes-base.graphql",
  "typeVersion": 1,
  "parameters": {
    "endpoint": "https://api.spacex.land/graphql/",
    "query": "query Launches($limit:Int!) { launchesPast(limit: $limit) { mission_name launch_date_utc } }",
    "variables": "{ \"limit\": 3 }",
    "headerParametersUi": {
      "parameter": [
        { "name": "Authorization", "value": "Bearer YOUR_API_TOKEN" }
      ]
    }
  }
}

El nodo envía la consulta como POST en JSON y devuelve la respuesta como JSON. Puedes inyectar datos dinámicos con expresiones dentro de query o variables.

Webhook Trigger

~ webhook-trigger.json
{
  "name": "Webhook Trigger",
  "type": "n8n-nodes-base.webhook",
  "typeVersion": 1,
  "parameters": {
    "path": "incoming-data",
    "methods": ["POST"],
    "responseMode": "onReceived",
    "responseData": {
      "statusCode": 200,
      "body": "Webhook received successfully"
    }
  }
}
@aitorconia · MT-075
aitorconia_.montajes ~ seccion-04.md8 / 18
Viene de la hoja anterior
Modo de respuestaComportamiento
onReceivedResponde de inmediato al recibir la petición, sin esperar al final del flujo
lastNodeEspera a que termine el flujo y responde con la salida del último nodo

Respond to Webhook

~ respond-to-webhook.json
{
  "name": "Webhook Response",
  "type": "n8n-nodes-base.respondToWebhook",
  "typeVersion": 1,
  "parameters": {
    "responseMode": "responseNode",
    "options": {
      "responseData": {
        "body": "{ \"success\": true, \"message\": \"Processed\" }",
        "headers": {
          "Content-Type": "application/json"
        },
        "statusCode": 200
      }
    }
  }
}

Útil para devolver un JSON a medida o un acuse de recibo antes de seguir procesando en segundo plano.

/ 04Procesamiento datos

Procesamiento de datos lógica y transformaciones

Code (Function)

~ code-node.json
{
  "name": "Add Field",
  "type": "n8n-nodes-base.function",
  "typeVersion": 1,
  "parameters": {
    "functionCode": "for (const item of items) {\n  item.json.newField = item.json.someField + 100;\n}\nreturn items;"
  }
}
@aitorconia · MT-075
aitorconia_.montajes ~ seccion-cont.md9 / 18
Viene de la hoja anterior

El código debe terminar con return items;. Si activas el modo "No Inputs" el nodo actúa como generador de datos desde cero. n8n también soporta Code (Python) cuando está habilitado.

IF: bifurcación por condición

~ if-node.json
{
  "name": "Check Status",
  "type": "n8n-nodes-base.if",
  "typeVersion": 2,
  "parameters": {
    "conditions": {
      "conditions": [
        {
          "leftValue": "={{ $json[\"status\"] }}",
          "rightValue": "success",
          "operator": {
            "type": "string",
            "operation": "equals"
          }
        }
      ],
      "combinator": "and"
    }
  }
}

El nodo IF enruta los items, no los filtra. Cada item va a una salida (true o false). Para descartar elementos, combínalo con Merge.

Switch: múltiples rutas

@aitorconia · MT-075
aitorconia_.montajes ~ seccion-cont.md10 / 18
Viene de la hoja anterior
~ switch-node.json
{
  "name": "Route by Category",
  "type": "n8n-nodes-base.switch",
  "typeVersion": 1,
  "parameters": {
    "dataType": "string",
    "value1": "={{ $json[\"category\"] }}",
    "rules": {
      "rules": [
        { "operation": "equal", "value2": "support" },
        { "operation": "equal", "value2": "sales" }
      ]
    },
    "fallbackOutput": 2
  }
}

Salida 0 para "support", salida 1 para "sales", salida 2 como fallback. En el editor configura "Number of Outputs" a 3.

Set: añadir o modificar campos

~ set-node.json
{
  "name": "Set Fields",
  "type": "n8n-nodes-base.set",
  "typeVersion": 3,
  "parameters": {
    "keepOnlySet": false,
    "values": {
      "number": [
        { "name": "year", "value": 2025 }
      ],
      "string": [
        { "name": "statusMessage", "value": "Processed by n8n" }
      ]
    }
  }
}

Con keepOnlySet: false conserva los campos originales y añade los nuevos. Con true elimina todo lo que no listes.

Merge: unir dos flujos

@aitorconia · MT-075
aitorconia_.montajes ~ seccion-cont.md11 / 18
Viene de la hoja anterior
~ merge-node.json
{
  "name": "Merge on ID",
  "type": "n8n-nodes-base.merge",
  "typeVersion": 1,
  "parameters": {
    "mode": "mergeByKey",
    "propertyName": "id",
    "outputDataFrom": "both"
  }
}
ModoQué hace
appendConcatena los items de ambas entradas
waitEspera a ambas entradas y emite juntas
mergeByIndexEmpareja items por posición
mergeByKeyEmpareja items por un campo común

Item Lists: partir y agrupar arrays

~ item-lists.json
{
  "name": "Split Array",
  "type": "n8n-nodes-base.itemLists",
  "typeVersion": 1,
  "parameters": {
    "operation": "splitIntoItems",
    "property": "results"
  }
}

splitIntoItems rompe un array en items individuales. aggregateItems hace lo contrario: agrupa varios items en un único array.

Split In Batches: bucles por lotes

@aitorconia · MT-075
aitorconia_.montajes ~ seccion-05.md12 / 18
Viene de la hoja anterior
~ split-batches.json
{
  "name": "Batch Loop",
  "type": "n8n-nodes-base.splitInBatches",
  "typeVersion": 1,
  "parameters": {
    "batchSize": 10
  }
}

Para cerrar el bucle, conecta el último nodo del flujo de vuelta al input 2 del Split In Batches (opción "Execute Next Batch"). Cuando no queden items, el flujo termina o lo gestionas con un nodo Run IF conectado a la salida "No Items".

Stop And Error: cortar el flujo a propósito

~ stop-and-error.json
{
  "name": "Stop on Condition",
  "type": "n8n-nodes-base.stopAndError",
  "typeVersion": 1,
  "parameters": {
    "message": "Terminating workflow due to business rule X"
  }
}

Colócalo tras un IF cuando quieras abortar el workflow con un mensaje propio. Para capturar errores globales, añade el nodo Error Trigger en otro flujo.

/ 05Triggers

Triggers cómo arrancar el flujo

Cron Trigger (Schedule)

@aitorconia · MT-075
aitorconia_.montajes ~ seccion-cont.md13 / 18
Viene de la hoja anterior
~ cron-trigger.json
{
  "name": "Daily Schedule",
  "type": "n8n-nodes-base.cron",
  "typeVersion": 1,
  "parameters": {
    "triggerTimes": {
      "item": [
        { "hour": 9, "minute": 0 },
        { "hour": 17, "minute": 0 }
      ]
    }
  }
}

Para disparar cada 15 minutos:

~ cron-interval.json
{ "item": [ { "mode": "everyX", "value": 15, "unit": "minutes" } ] }

Puedes añadir weekday o dayOfMonth para afinar la programación.

Email Trigger (IMAP)

~ email-imap.json
{
  "name": "Email Trigger",
  "type": "n8n-nodes-base.emailReadImap",
  "typeVersion": 1,
  "parameters": {
    "mailbox": "INBOX",
    "postProcessAction": "read",
    "options": {
      "criteria": "UNSEEN"
    }
  },
  "credentials": {
    "imap": {
      "name": "My Email Account"
    }
  }
}

Cada correo no leído dispara el flujo y se marca como leído.

Manual Trigger

@aitorconia · MT-075
aitorconia_.montajes ~ seccion-07.md14 / 18
Viene de la hoja anterior
~ manual-trigger.json
{
  "name": "Manual Trigger",
  "type": "n8n-nodes-base.manualTrigger",
  "typeVersion": 1,
  "parameters": {}
}

Sirve para lanzar el flujo con el botón "Execute Workflow" durante el desarrollo.

Execute Workflow

~ execute-workflow.json
{
  "name": "Run Sub-workflow",
  "type": "n8n-nodes-base.executeWorkflow",
  "typeVersion": 1,
  "parameters": {
    "workflowId": "123",
    "waitForCompletion": true,
    "inputs": {
      "inputData": "={{ $json[\"data\"] }}"
    }
  }
}

Con waitForCompletion: true el flujo padre espera al subflujo. Con false, dispara y sigue (fire-and-forget).

/ 07Integraciones

Integraciones destacadas servicios populares

Slack: enviar mensaje

@aitorconia · MT-075
aitorconia_.montajes ~ seccion-cont.md15 / 18
Viene de la hoja anterior
~ slack-send.json
{
  "name": "Send Slack Message",
  "type": "n8n-nodes-base.slack",
  "typeVersion": 1,
  "parameters": {
    "resource": "message",
    "operation": "send",
    "channel": "C01234567",
    "text": "Hello from n8n :tada:"
  },
  "credentials": {
    "slackApi": {
      "name": "Slack OAuth2"
    }
  }
}

Activa jsonParameters: true cuando necesites enviar blocks o attachments en JSON.

Google Sheets: añadir fila

~ google-sheets-append.json
{
  "name": "Append to Sheet",
  "type": "n8n-nodes-base.googleSheets",
  "typeVersion": 4,
  "parameters": {
    "operation": "append",
    "spreadsheetId": "1A2b3C4D5E6FgHiJkLMnoPQrstu",
    "sheetName": "Sheet1",
    "dataMode": "autoMap",
    "options": {
      "valueInputMode": "USER_ENTERED"
    }
  },
  "credentials": {
    "googleSheetsOAuth2Api": {
      "name": "Google Sheets OAuth2"
    }
  }
}

Con dataMode: "autoMap" n8n empareja los campos del item con las cabeceras de la hoja. valueInputMode: "USER_ENTERED" permite que las fórmulas se recalculen.

Notion: consultar base de datos

@aitorconia · MT-075
aitorconia_.montajes ~ seccion-cont.md16 / 18
Viene de la hoja anterior
~ notion-query.json
{
  "name": "Query Notion DB",
  "type": "n8n-nodes-base.notion",
  "typeVersion": 2,
  "parameters": {
    "resource": "databasePage",
    "operation": "getAll",
    "databaseId": "YOUR_NOTION_DATABASE_ID",
    "options": {
      "filter": {
        "singleCondition": {
          "key": "Email|email",
          "condition": "equals",
          "emailValue": "={{ $json[\"email\"] }}"
        }
      }
    }
  },
  "credentials": {
    "notionApi": {
      "name": "Notion API"
    }
  }
}

La clave sigue el patrón PropertyName|propertyType para que n8n formatee correctamente el filtro.

GitHub: crear issue

~ github-issue.json
{
  "name": "Create GitHub Issue",
  "type": "n8n-nodes-base.github",
  "typeVersion": 1,
  "parameters": {
    "resource": "issue",
    "operation": "create",
    "owner": "octocat",
    "repository": "Hello-World",
    "title": "Automated Issue from n8n",
    "body": "This issue was created by an n8n workflow."
  },
  "credentials": {
    "githubApi": {
      "name": "GitHub personal access token"
    }
  }
}
@aitorconia · MT-075
aitorconia_.montajes ~ seccion-cont.md17 / 18
Viene de la hoja anterior

La credencial debe ser un Personal Access Token con permisos de repo (o un token OAuth).

MySQL: ejecutar consulta

~ mysql-query.json
{
  "name": "MySQL Query",
  "type": "n8n-nodes-base.mySql",
  "typeVersion": 2,
  "parameters": {
    "operation": "executeQuery",
    "query": "SELECT * FROM users WHERE id = {{ $json[\"user_id\"] }}",
    "additionalFields": {}
  },
  "credentials": {
    "mySql": {
      "name": "My MySQL DB"
    }
  }
}

Si inyectas valores del usuario dentro del SQL, sánitalos o usa consultas parametrizadas para evitar inyección SQL. Para PostgreSQL cambia type a postgres y la credencial a postgreSql.

Otras integraciones habituales

ServicioUso típico
AWS S3Subir y descargar ficheros
Google DriveOperaciones con ficheros (subir, listar, descargar)
SMTP / SendGridEnviar correos
TwilioSMS o WhatsApp
StripeCobros y eventos de pago
Jira, Trello, AsanaCrear y actualizar tareas
HubSpot, SalesforceGestión de contactos y deals
CSV / XMLParsear y generar ficheros

El patrón común es resource (entidad) + operation (acción) + campos específicos. Configura el nodo en el editor y luego exporta el JSON como referencia.

@aitorconia · MT-075
aitorconia_.montajes ~ seccion-08.md18 / 18
/ 08Conexiones entre

Conexiones entre nodos el objeto connections

Cuando montas un flujo mediante JSON necesitas definir cómo se enlazan los nodos. Cada nodo expone una salida main que conecta con la entrada del siguiente.

~ connections.json
{
  "Cron":     { "main": [ [ { "node": "GraphQL",  "type": "main", "index": 0 } ] ] },
  "GraphQL":  { "main": [ [ { "node": "Summarize","type": "main", "index": 0 } ] ] },
  "Summarize":{ "main": [ [ { "node": "Slack",    "type": "main", "index": 0 } ] ] }
}

Los IDs y posiciones (id, position) que aparecen en los JSON exportados no son obligatorios; sirven para colocar el nodo en el editor.

/ 09Consejos uso

Consejos de uso expresiones, credenciales y test

  • Expresiones. Todo lo que ves como ={{ $json["..."] }} se evalúa en tiempo de ejecución. Dentro de cadenas JSON escríbelo entre dobles llaves.
  • Acceso por nombre de nodo. Usa $node["NodeName"].json["field"] para leer la salida de un nodo concreto. $items() referencia todos los items.
  • Credenciales. El bloque credentials referencia credenciales ya creadas en n8n. Basta con el name si es único; el id solo es necesario cuando creas workflows por la API. Crea la credencial antes de importar el flujo.
  • Test progresivo. Empieza con Manual Trigger más un nodo para validar la estructura JSON. Después ve añadiendo nodos. Puedes importar el JSON desde Workflow -> Import from JSON para revisarlo en el editor.
@aitorconia · MT-075 · fin

Relacionadas

Más del mismo tema

Siguiente paso

Llévalo a la práctica

markdown