Olvida los chatbots básicos. Lo que vas a ver hoy es la arquitectura de un Sistema Multi-Agente capaz de gestionar tu vida real. He diseñado un flujo en n8n que conecta Telegram con Google Calendar, Gmail, Airtable y Tavily, permitiéndome gestionar mi negocio usando solo notas de voz.


Diagrama de Flujo Sistema Multi-Agente n8n con Telegram y GPT-4


Figura 1: Arquitectura completa del "Ultimate Assistant" en n8n.

🧠 La Arquitectura "Cerebro y Extremidades"

La mayoría de la gente usa un solo modelo de IA para todo. Error. Para lograr una automatización compleja sin alucinaciones, utilizo un diseño de Agente Orquestador (The Ultimate Assistant) que delega tareas a sub-agentes especializados.

Este sistema escucha mis audios en Telegram, los transcribe con Whisper (OpenAI) y decide qué herramienta activar:

  • 📧 Email Agent: Redacta, envía, etiqueta y responde correos en Gmail.
  • 📅 Calendar Agent: Agenda citas, verifica disponibilidad y mueve reuniones.
  • 📇 Contact Agent: Guarda nuevos leads en Airtable o actualiza teléfonos.
  • 🌐 Research Agent: Busca información en tiempo real en la web usando Tavily.

🚀 Flujo Técnico del Workflow

El diagrama que ves arriba no es ciencia ficción, es lógica pura aplicada a la productividad. El sistema utiliza un nodo "Router" inteligente impulsado por GPT-4 que actúa como semáforo, dirigiendo la petición del usuario a la herramienta correcta.

📜 El Código JSON Completo (Arquitectura Maestra)

A continuación, comparto el código íntegro del Agente Principal. Este JSON contiene la lógica de decisión, la conexión con Telegram, la transcripción de audio y la llamada a los sub-agentes.

⚠️ Nota Técnica: Este workflow hace llamadas a "Sub-Workflows" (Tools) que debes tener configurados previamente en tu n8n con sus respectivos IDs.

{
  "nodes": [
    {
      "parameters": {
        "sendTo": "={{ $fromAI(\"emailAddress\") }}",
        "subject": "={{ $fromAI(\"subject\") }}",
        "message": "={{ $fromAI(\"emailBody\") }}",
        "options": {
          "appendAttribution": false
        }
      },
      "type": "n8n-nodes-base.gmailTool",
      "typeVersion": 2.1,
      "position": [
        608,
        1632
      ],
      "id": "da0999e6-1ccc-4f83-86b8-a567944e5c81",
      "name": "Send Email",
      "webhookId": "86c8c4b1-13bb-4ebe-acb9-30e1d7082d55"
    },
    {
      "parameters": {
        "operation": "getAll",
        "limit": "={{ $fromAI(\"limit\",\"how many emails the user wants\") }}",
        "simple": false,
        "filters": {
          "sender": "={{ $fromAI(\"sender\",\"who the emails are from\") }}"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.gmailTool",
      "typeVersion": 2.1,
      "position": [
        720,
        1760
      ],
      "id": "362da6c3-6a41-4176-9895-ca609e71d3e9",
      "name": "Get Emails",
      "webhookId": "af4b3298-9037-44b0-aa12-2acbfbb5e66f"
    },
    {
      "parameters": {
        "resource": "draft",
        "subject": "={{ $fromAI(\"subject\") }}",
        "emailType": "html",
        "message": "={{ $fromAI(\"emailBody\") }}",
        "options": {
          "threadId": "={{ $fromAI(\"threadID\") }}",
          "sendTo": "={{ $fromAI(\"emailAddress\") }}"
        }
      },
      "type": "n8n-nodes-base.gmailTool",
      "typeVersion": 2.1,
      "position": [
        608,
        1760
      ],
      "id": "f182cfc9-2b5d-4579-9030-5bb9145b9276",
      "name": "Create Draft",
      "webhookId": "17016bce-d7d7-428a-a56c-f6ea122db8be"
    },
    {
      "parameters": {
        "operation": "reply",
        "messageId": "={{ $fromAI(\"ID\",\"the message ID\") }}",
        "message": "={{ $fromAI(\"emailBody\") }}",
        "options": {
          "appendAttribution": false
        }
      },
      "type": "n8n-nodes-base.gmailTool",
      "typeVersion": 2.1,
      "position": [
        720,
        1632
      ],
      "id": "b5edc643-bbef-4dae-a5dc-c3f45ba8375d",
      "name": "Email Reply",
      "webhookId": "114785e6-a859-432b-81b4-c490c1c35b1c"
    },
    {
      "parameters": {
        "resource": "label",
        "returnAll": true
      },
      "type": "n8n-nodes-base.gmailTool",
      "typeVersion": 2.1,
      "position": [
        848,
        1760
      ],
      "id": "e64b38f1-4ca8-425c-9132-711f7a9e2b74",
      "name": "Get Labels",
      "webhookId": "9e08b59e-792d-4566-83f1-9263c9ad86ae"
    },
    {
      "parameters": {
        "operation": "addLabels",
        "messageId": "={{ $fromAI(\"ID\",\"the ID of the message\") }}",
        "labelIds": "={{ $fromAI(\"labelID\") }}"
      },
      "type": "n8n-nodes-base.gmailTool",
      "typeVersion": 2.1,
      "position": [
        848,
        1632
      ],
      "id": "dbd63cbe-1099-4c69-82bb-55ec163a4c67",
      "name": "Label Emails",
      "webhookId": "0e951529-2e6d-40bf-ac40-fc0947e242e2"
    },
    {
      "parameters": {
        "operation": "markAsUnread",
        "messageId": "={{ $fromAI(\"messageID\") }}"
      },
      "type": "n8n-nodes-base.gmailTool",
      "typeVersion": 2.1,
      "position": [
        480,
        1760
      ],
      "id": "78a40fda-f74d-4995-b917-9ce83d2c448b",
      "name": "Mark Unread",
      "webhookId": "a35af9d8-f67d-4ff9-803f-59ec6356e795"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "gpt-4.1-mini",
          "mode": "list",
          "cachedResultName": "gpt-4.1-mini"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        480,
        1632
      ],
      "id": "b977f80a-a8eb-469f-9c6e-dfa67b39a233",
      "name": "4.1-mini"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.query }}",
        "options": {
          "systemMessage": "=# Overview\nYou are an email management assistant. All emails must be formatted professionally in HTML and signed off as \"Nate.\" \n\n**Email Management Tools**   \n   - Use \"Send Email\" to send emails.  \n   - Use \"Create Draft\" if the user asks for a draft.  \n   - Use \"Get Emails\" to retrieve emails when requested.\n   - Use \"Get Labels\" to retrieve labels.\n   - Use \"Mark Unread\" to mark an email as unread. You must use \"Get Emails\" first so you have the message ID of the email to flag.\n   - Use \"Label Email\" to flag an email. You must use \"Get Emails\" first so you have the message ID of the email to flag. Then you must use \"Get Labels\" so you have the label ID.\n   - Use \"Email Reply\" to reply to an email. You must use \"Get Emails\" first so you have the message ID of the email to reply to.\n\n## Final Notes\n- Here is the current date/time: {{ $now }}"
        }
      },
      "id": "70a4ab70-fc96-460b-94dd-f92efe9756b0",
      "name": "Email Agent1",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.6,
      "position": [
        560,
        1424
      ],
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "calendar": {
          "__rl": true,
          "value": "nateherk88@gmail.com",
          "mode": "list",
          "cachedResultName": "nateherk88@gmail.com"
        },
        "start": "={{ $fromAI(\"eventStart\") }}",
        "end": "={{ $fromAI(\"eventEnd\") }}",
        "additionalFields": {
          "attendees": [
            "={{ $fromAI(\"eventAttendeeEmail\") }}"
          ],
          "summary": "={{ $fromAI(\"eventTitle\") }}"
        }
      },
      "type": "n8n-nodes-base.googleCalendarTool",
      "typeVersion": 1.3,
      "position": [
        1328,
        1760
      ],
      "id": "123922d2-d8f3-4778-bdc3-dda90b340224",
      "name": "Create Event with Attendee"
    },
    {
      "parameters": {
        "calendar": {
          "__rl": true,
          "value": "nateherk88@gmail.com",
          "mode": "list",
          "cachedResultName": "nateherk88@gmail.com"
        },
        "start": "={{ $fromAI(\"eventStart\") }}",
        "end": "={{ $fromAI(\"eventEnd\") }}",
        "additionalFields": {
          "attendees": [],
          "summary": "={{ $fromAI(\"eventTitle\") }}"
        }
      },
      "type": "n8n-nodes-base.googleCalendarTool",
      "typeVersion": 1.3,
      "position": [
        1200,
        1760
      ],
      "id": "a3aa6e59-00ee-4e30-aa23-43a65be4ac4c",
      "name": "Create Event"
    },
    {
      "parameters": {
        "operation": "getAll",
        "calendar": {
          "__rl": true,
          "value": "nateherk88@gmail.com",
          "mode": "list",
          "cachedResultName": "nateherk88@gmail.com"
        },
        "timeMin": "={{ $fromAI(\"dayBefore\",\"the day before the date the user requested\") }}",
        "timeMax": "={{ $fromAI(\"dayAfter\",\"the day after the date the user requested\") }}",
        "options": {}
      },
      "type": "n8n-nodes-base.googleCalendarTool",
      "typeVersion": 1.3,
      "position": [
        1088,
        1760
      ],
      "id": "c8160e77-7cd9-4470-92f5-2e3ad5dea33d",
      "name": "Get Events"
    },
    {
      "parameters": {
        "operation": "delete",
        "calendar": {
          "__rl": true,
          "value": "nateherk88@gmail.com",
          "mode": "list",
          "cachedResultName": "nateherk88@gmail.com"
        },
        "eventId": "={{ $fromAI(\"eventID\") }}",
        "options": {}
      },
      "type": "n8n-nodes-base.googleCalendarTool",
      "typeVersion": 1.3,
      "position": [
        1328,
        1632
      ],
      "id": "b7722cef-9bf9-406b-8744-1bac81008533",
      "name": "Delete Event"
    },
    {
      "parameters": {
        "operation": "update",
        "calendar": {
          "__rl": true,
          "value": "nateherk88@gmail.com",
          "mode": "list",
          "cachedResultName": "nateherk88@gmail.com"
        },
        "eventId": "={{ $fromAI(\"eventID\") }}",
        "updateFields": {
          "end": "={{ $fromAI(\"endTime\") }}",
          "start": "={{ $fromAI(\"startTime\") }}"
        }
      },
      "type": "n8n-nodes-base.googleCalendarTool",
      "typeVersion": 1.3,
      "position": [
        1200,
        1632
      ],
      "id": "c3fd6140-878e-480c-a567-d4106fc09d8a",
      "name": "Update Event"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.query }}",
        "options": {
          "systemMessage": "=# Overview\nYou are a calendar assistant. Your responsibilities include creating, getting, and deleting events in the user's calendar.\n\n**Calendar Management Tools**  \n   - Use \"Create Event with Attendee\" when an event includes a participant.  \n   - Use \"Create Event\" for solo events.   \n   - Use \"Get Events\" to fetch calendar schedules when requested.\n   - Use \"Delete Event\" to delete an event. You must use \"Get Events\" first to get the ID of the event to delete.\n   - Use \"Update Event\" to update an event. You must use \"Get Events\" first to get the ID of the event to update.\n\n## Final Notes\nHere is the current date/time: {{ $now }}\nIf a duration for an event isn't specified, assume it will be one hour."
        }
      },
      "id": "557a8ebd-63b6-4d33-beef-807e483830fe",
      "name": "Calendar Agent1",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.6,
      "position": [
        1104,
        1424
      ],
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "gpt-4.1-mini",
          "mode": "list",
          "cachedResultName": "gpt-4.1-mini"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        1088,
        1632
      ],
      "id": "0c939025-4866-420d-b7d4-9641ffa1562a",
      "name": "4.1-mini1"
    },
    {
      "parameters": {
        "operation": "search",
        "base": {
          "__rl": true,
          "value": "appK0rbtvf9e7vt6w",
          "mode": "list",
          "cachedResultName": "Contacts",
          "cachedResultUrl": "https://airtable.com/appK0rbtvf9e7vt6w"
        },
        "table": {
          "__rl": true,
          "value": "tbl08JGCfUK1RhXsG",
          "mode": "list",
          "cachedResultName": "Contacts",
          "cachedResultUrl": "https://airtable.com/appK0rbtvf9e7vt6w/tbl08JGCfUK1RhXsG"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.airtableTool",
      "typeVersion": 2.1,
      "position": [
        1760,
        1648
      ],
      "id": "298f53ba-425a-46df-9a89-6d4e755498f2",
      "name": "Get Contacts"
    },
    {
      "parameters": {
        "operation": "upsert",
        "base": {
          "__rl": true,
          "value": "appK0rbtvf9e7vt6w",
          "mode": "list",
          "cachedResultName": "Contacts",
          "cachedResultUrl": "https://airtable.com/appK0rbtvf9e7vt6w"
        },
        "table": {
          "__rl": true,
          "value": "tbl08JGCfUK1RhXsG",
          "mode": "list",
          "cachedResultName": "Contacts",
          "cachedResultUrl": "https://airtable.com/appK0rbtvf9e7vt6w/tbl08JGCfUK1RhXsG"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "name": "={{ $fromAI(\"name\") }}",
            "email": "={{ $fromAI(\"emailAddress\") }}",
            "phoneNumber": "={{ $fromAI(\"phoneNumber\") }}"
          },
          "matchingColumns": [
            "name"
          ],
          "schema": [
            {
              "id": "name",
              "displayName": "name",
              "required": false,
              "defaultMatch": false,
              "canBeUsedToMatch": true,
              "display": true,
              "type": "string",
              "readOnly": false,
              "removed": false
            },
            {
              "id": "email",
              "displayName": "email",
              "required": false,
              "defaultMatch": false,
              "canBeUsedToMatch": true,
              "display": true,
              "type": "string",
              "readOnly": false,
              "removed": false
            },
            {
              "id": "phoneNumber",
              "displayName": "phoneNumber",
              "required": false,
              "defaultMatch": false,
              "canBeUsedToMatch": true,
              "display": true,
              "type": "string",
              "readOnly": false,
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.airtableTool",
      "typeVersion": 2.1,
      "position": [
        1888,
        1648
      ],
      "id": "1f742853-506f-4763-a38e-628bf441375c",
      "name": "Add or Update Contact"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.query }}",
        "options": {
          "systemMessage": "=# Overview\nYou are a contact management assistant. Your responsibilities include looking up contacts, adding new contacts, or updating a contact's information.\n\n**Contact Management**  \n   - Use \"Get Contacts\" to retrieve contact information. \n   - Use \"Add or Update Contact\" to store new contact information or modify existing entries. "
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.7,
      "position": [
        1664,
        1424
      ],
      "id": "ee6e297f-0af1-4791-9e68-24b0570ea424",
      "name": "Contact Agent1",
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "toolDescription": "Use this tool to search the internet",
        "method": "POST",
        "url": "https://api.tavily.com/search",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "{\n    \"api_key\": \"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\",\n    \"query\": \"{searchTerm}\",\n    \"search_depth\": \"basic\",\n    \"include_answer\": true,\n    \"topic\": \"news\",\n    \"include_raw_content\": true,\n    \"max_results\": 3\n} ",
        "placeholderDefinitions": {
          "values": [
            {
              "name": "searchTerm",
              "description": "What the user has requested to write a blog about",
              "type": "string"
            }
          ]
        }
      },
      "type": "@n8n/n8n-nodes-langchain.toolHttpRequest",
      "typeVersion": 1.1,
      "position": [
        2368,
        1648
      ],
      "id": "4c51f75b-a265-45d9-8329-09b68488700f",
      "name": "Tavily1"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.query}}",
        "options": {
          "systemMessage": "=# Overview\nYou are a skilled AI blog writer specializing in engaging, well-structured, and informative content. Your writing style is clear, compelling, and tailored to the target audience. You optimize for readability, SEO, and value, ensuring blogs are well-researched, original, and free of fluff.\n\n## Tools\nTavily - Use this to search the web about the requested topic for the blog post.\n\n## Blog Requirements\nFormat all blog content in HTML, using proper headings (
,

), paragraphs (

), bullet points (

  • ), and links () for citations. All citations from the Tavily tool must be preserved, with clickable hyperlinks so readers can access the original sources.\n\nMaintain a natural, human-like tone, use varied sentence structures, and include relevant examples or data when needed. Structure content for easy reading with concise paragraphs and logical flow. Always ensure factual accuracy and align the tone with the intended brand or purpose.\"" } }, "type": "@n8n/n8n-nodes-langchain.agent", "typeVersion": 1.7, "position": [ 2208, 1424 ], "id": "31875d3a-6311-4c50-abe4-4fb76797e345", "name": "Content Creator Agent1", "onError": "continueErrorOutput" }, { "parameters": { "model": "anthropic/claude-3.7-sonnet", "options": {} }, "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter", "typeVersion": 1, "position": [ 2224, 1648 ], "id": "0e7850b4-0fe2-4faf-ae36-bae89f9ad1a8", "name": "Claude 3.7" }, { "parameters": { "modelName": "models/gemini-2.0-flash", "options": {} }, "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini", "typeVersion": 1, "position": [ 1648, 1648 ], "id": "550807c0-4d57-4dc8-8c0e-2c473f609aa9", "name": "Gemini 2.0 Flash" }, { "parameters": { "promptType": "define", "text": "={{ $json.text }}", "options": { "systemMessage": "=# Overview\nYou are the ultimate personal assistant. Your job is to send the user's query to the correct tool. You should never be writing emails, or creating even summaries, you just need to call the correct tool.\n\n## Tools\n- Think: Use this to think deeply or if you get stuck\n- emailAgent: Use this tool to take action in email\n- calendarAgent: Use this tool to take action in calendar\n- contactAgent: Use this tool to get, update, or add contacts\n- contentCreator: Use this tool to create blog posts\n- Tavily: Use this tool to search the web\n\n## Rules\n- Some actions require you to look up contact information first. For the following actions, you must get email address and send that to the agent who needs it:\n - sending emails\n - drafting emails\n - creating calendar event with attendee\n\n## Instructions\n1) Call the neccessary tools based on the user request\n2) Use the \"Think\" tool to verify you took the right steps. This tool should be called every time.\n\n\n## Examples\n1) \n- Input: send an email to nate herkelman asking him what time he wants to leave\n - Action: Use contactAgent to get nate herkelman's email\n - Action: Use emailAgent to send the email. You will pass the tool a query like \"send nate herkelman an email to ask what time he wants to leave. here is his email: [email address]\n- Output: The email has been sent to Nate Herkelman. Anything else I can help you with?\n\n\n## Final Reminders\nHere is the current date/time: {{ $now }}\n" } }, "type": "@n8n/n8n-nodes-langchain.agent", "typeVersion": 1.7, "position": [ 1904, 992 ], "id": "4c320fdd-fdd3-4c93-bc25-5cab9aba1075", "name": "Ultimate Assistant" }, { "parameters": { "name": "emailAgent", "description": "Call this tool for any email actions.", "workflowId": { "__rl": true, "value": "C3hLlOS4O6ZJtVFy", "mode": "list", "cachedResultName": "🤖Email Agent" }, "workflowInputs": { "mappingMode": "defineBelow", "value": {}, "matchingColumns": [], "schema": [], "attemptToConvertTypes": false, "convertFieldsToString": false } }, "type": "@n8n/n8n-nodes-langchain.toolWorkflow", "typeVersion": 2, "position": [ 848, 1264 ], "id": "734fbcfb-4abc-47c1-9878-c5eef76827b1", "name": "Email Agent" }, { "parameters": { "name": "contactAgent", "description": "Call this tool for any contact related actions.", "workflowId": { "__rl": true, "value": "IsSUyrla7wc1cDLE", "mode": "list", "cachedResultName": "🤖Contact Agent" }, "workflowInputs": { "mappingMode": "defineBelow", "value": {}, "matchingColumns": [], "schema": [], "attemptToConvertTypes": false, "convertFieldsToString": false } }, "type": "@n8n/n8n-nodes-langchain.toolWorkflow", "typeVersion": 2, "position": [ 1968, 1264 ], "id": "8ee0cc9d-ae3b-43aa-bc1d-28824436f63c", "name": "Contact Agent" }, { "parameters": { "name": "contentCreator", "description": "Call this tool to create blog posts.", "workflowId": { "__rl": true, "value": "WWSu94V939ATcqvi", "mode": "list", "cachedResultName": "🤖Content Creator Agent" }, "workflowInputs": { "mappingMode": "defineBelow", "value": {}, "matchingColumns": [], "schema": [], "attemptToConvertTypes": false, "convertFieldsToString": false } }, "type": "@n8n/n8n-nodes-langchain.toolWorkflow", "typeVersion": 2, "position": [ 2528, 1264 ], "id": "97fa08ee-b625-4be6-9998-2400703fcda1", "name": "Content Creator Agent" }, { "parameters": {}, "type": "@n8n/n8n-nodes-langchain.toolCalculator", "typeVersion": 1, "position": [ 576, 1072 ], "id": "e7c416cd-e49b-440f-a232-98601f686d58", "name": "Calculator" }, { "parameters": { "name": "calendarAgent", "description": "Call this tool for any calendar action.", "workflowId": { "__rl": true, "value": "0NtlJ41IozGhtFa6", "mode": "list", "cachedResultName": "🤖Calendar Agent" }, "workflowInputs": { "mappingMode": "defineBelow", "value": {}, "matchingColumns": [], "schema": [], "attemptToConvertTypes": false, "convertFieldsToString": false } }, "type": "@n8n/n8n-nodes-langchain.toolWorkflow", "typeVersion": 2, "position": [ 1408, 1264 ], "id": "e7ec345f-3a14-4ceb-b93b-77fe5fa25f38", "name": "Calendar Agent" }, { "parameters": { "content": "# Parent Agent\n\n", "height": 420, "width": 1660, "color": 2 }, "type": "n8n-nodes-base.stickyNote", "position": [ 976, 800 ], "typeVersion": 1, "id": "caf699e4-32bc-40c9-bd7d-3bfd2dc79ea5", "name": "Sticky Note" }, { "parameters": {}, "type": "@n8n/n8n-nodes-langchain.toolThink", "typeVersion": 1, "position": [ 704, 1072 ], "id": "72d77af5-053a-4705-9622-19cc0a5c91e1", "name": "Think" }, { "parameters": { "model": { "__rl": true, "value": "gpt-4.1", "mode": "list", "cachedResultName": "gpt-4.1" }, "options": {} }, "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", "typeVersion": 1.2, "position": [ 576, 928 ], "id": "4a5f8cb8-0fc9-42d1-8334-74a10d3f1895", "name": "GPT 4.1" }, { "parameters": { "updates": [ "message" ], "additionalFields": {} }, "id": "406b1daf-e3d5-40c9-9b48-f471db818107", "name": "Telegram Trigger", "type": "n8n-nodes-base.telegramTrigger", "typeVersion": 1.1, "position": [ 1104, 1024 ], "webhookId": "99eab1a0-569d-4f0f-a49e-578a02abfe63" }, { "parameters": { "assignments": { "assignments": [ { "id": "fe7ecc99-e1e8-4a5e-bdd6-6fce9757b234", "name": "text", "value": "={{ $json.message.text }}", "type": "string" } ] }, "options": {} }, "id": "9c85ba5b-f054-45b5-ab1e-0deb51c65cef", "name": "Set 'Text'", "type": "n8n-nodes-base.set", "typeVersion": 3.4, "position": [ 1488, 1040 ] }, { "parameters": { "resource": "file", "fileId": "={{ $json.message.voice.file_id }}", "additionalFields": {} }, "id": "9f0d6abe-5f72-4a43-88a3-7d5928cb865a", "name": "Download Voice File", "type": "n8n-nodes-base.telegram", "typeVersion": 1.2, "position": [ 1424, 880 ], "webhookId": "c0b376b1-7b63-41b6-8063-0b3096b8333d" }, { "parameters": { "resource": "audio", "operation": "transcribe", "options": {} }, "id": "24b9e513-777a-48ec-beff-1dc94f98024a", "name": "Transcribe Audio", "type": "@n8n/n8n-nodes-langchain.openAi", "typeVersion": 1.6, "position": [ 1584, 880 ] }, { "parameters": { "rules": { "values": [ { "conditions": { "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict", "version": 2 }, "conditions": [ { "leftValue": "={{ $json.message.voice.file_id }}", "rightValue": "", "operator": { "type": "string", "operation": "exists", "singleValue": true } } ], "combinator": "and" }, "renameOutput": true, "outputKey": "Voice" }, { "conditions": { "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict", "version": 2 }, "conditions": [ { "id": "8c844924-b2ed-48b0-935c-c66a8fd0c778", "leftValue": "={{ $json.message.text }}", "rightValue": "", "operator": { "type": "string", "operation": "exists", "singleValue": true } } ], "combinator": "and" }, "renameOutput": true, "outputKey": "Text" } ] }, "options": {} }, "id": "4b148a2c-4445-4d33-b7e9-3490102fc71d", "name": "Switch", "type": "n8n-nodes-base.switch", "typeVersion": 3.2, "position": [ 1248, 1024 ] }, { "parameters": { "chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}", "text": "={{ $json.output }}", "additionalFields": { "appendAttribution": false } }, "id": "073d4cd1-596d-4268-a114-41c6cc9891ab", "name": "Response", "type": "n8n-nodes-base.telegram", "typeVersion": 1.2, "position": [ 2320, 992 ], "webhookId": "682ca5ab-d30c-4ea5-bb25-c2f26206e761" }, { "parameters": { "sessionIdType": "customKey", "sessionKey": "={{ $('Telegram Trigger').item.json.message.chat.id }}" }, "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow", "typeVersion": 1.3, "position": [ 704, 928 ], "id": "ad6b5f8f-b536-4d48-b135-24b45fe9d407", "name": "Simple Memory" }, { "parameters": { "content": "# Benefits of Multi Agent System\n\n- More reusable components\n\n- Model flexibility (different models per agent)\n\n- Easier debugging and maintenance\n\n- Clearer prompt logic and better testability\n\n- Foundation for multi-turn agents or agent memory", "height": 460, "width": 540, "color": 7 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ 1248, 320 ], "id": "3536f9ff-b30e-4f90-886b-1497a50d9889", "name": "Sticky Note3" }, { "parameters": { "content": "# Email Agent", "height": 700, "width": 540 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ 416, 1248 ], "id": "1569dba3-383d-4e86-a618-dacf25c291f1", "name": "Sticky Note1" }, { "parameters": { "content": "# Calendar Agent", "height": 700, "width": 540, "color": 4 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ 976, 1248 ], "id": "5761a440-68aa-4ebe-8a5d-980f3720fea1", "name": "Sticky Note2" }, { "parameters": { "content": "# Contact Agent", "height": 700, "width": 540, "color": 5 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ 1536, 1248 ], "id": "5e56da69-e668-4997-a52a-05f99d0f1157", "name": "Sticky Note4" }, { "parameters": { "content": "# Content Creator Agent", "height": 700, "width": 540, "color": 6 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ 2096, 1248 ], "id": "af4b9abe-afda-4886-b690-c9adce87dd8f", "name": "Sticky Note5" }, { "parameters": { "content": "# 📚 Setup Guide \n*Author:* [Nate Herk](https://www.youtube.com/@nateherk)\n\n## Instructions\n1. Take the **Email Agent** and place it into a new workflow. \n2. Link the **Email Agent tool** to that new workflow you created. \n3. In that new workflow, start it with the **\"Execute Workflow\" trigger** (`When workflow is executed by another`). \n4. Repeat steps 1–3 for the **Calendar Agent**, **Contact Agent**, and **Content Creator Agent**. \n5. Ensure all agents are powered by a **Chat Model** (e.g., OpenRouter, Google, or OpenAI). \n6. Connect all necessary credentials:\n - ✅ Chat model credentials \n - ✅ Tavily API key \n - ✅ Google account \n - ✅ Airtable \n - ✅ Telegram \n---\n\nStay organized, test each agent individually, and you’ll be up and running in no time!\n", "height": 460, "width": 800 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ 416, 320 ], "id": "4fa2e9cd-cda5-44b3-bc8c-c7642f42e4a9", "name": "Sticky Note6" }, { "parameters": { "content": "## Brain/Tools", "height": 420, "width": 540, "color": 7 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ 416, 800 ], "id": "f4d0e54b-d111-432c-b424-05ef79a79977", "name": "Sticky Note7" } ], "connections": { "Send Email": { "ai_tool": [ [ { "node": "Email Agent1", "type": "ai_tool", "index": 0 } ] ] }, "Get Emails": { "ai_tool": [ [ { "node": "Email Agent1", "type": "ai_tool", "index": 0 } ] ] }, "Create Draft": { "ai_tool": [ [ { "node": "Email Agent1", "type": "ai_tool", "index": 0 } ] ] }, "Email Reply": { "ai_tool": [ [ { "node": "Email Agent1", "type": "ai_tool", "index": 0 } ] ] }, "Get Labels": { "ai_tool": [ [ { "node": "Email Agent1", "type": "ai_tool", "index": 0 } ] ] }, "Label Emails": { "ai_tool": [ [ { "node": "Email Agent1", "type": "ai_tool", "index": 0 } ] ] }, "Mark Unread": { "ai_tool": [ [ { "node": "Email Agent1", "type": "ai_tool", "index": 0 } ] ] }, "4.1-mini": { "ai_languageModel": [ [ { "node": "Email Agent1", "type": "ai_languageModel", "index": 0 } ] ] }, "Create Event with Attendee": { "ai_tool": [ [ { "node": "Calendar Agent1", "type": "ai_tool", "index": 0 } ] ] }, "Create Event": { "ai_tool": [ [ { "node": "Calendar Agent1", "type": "ai_tool", "index": 0 } ] ] }, "Get Events": { "ai_tool": [ [ { "node": "Calendar Agent1", "type": "ai_tool", "index": 0 } ] ] }, "Delete Event": { "ai_tool": [ [ { "node": "Calendar Agent1", "type": "ai_tool", "index": 0 } ] ] }, "Update Event": { "ai_tool": [ [ { "node": "Calendar Agent1", "type": "ai_tool", "index": 0 } ] ] }, "4.1-mini1": { "ai_languageModel": [ [ { "node": "Calendar Agent1", "type": "ai_languageModel", "index": 0 } ] ] }, "Get Contacts": { "ai_tool": [ [ { "node": "Contact Agent1", "type": "ai_tool", "index": 0 } ] ] }, "Add or Update Contact": { "ai_tool": [ [ { "node": "Contact Agent1", "type": "ai_tool", "index": 0 } ] ] }, "Tavily1": { "ai_tool": [ [ { "node": "Content Creator Agent1", "type": "ai_tool", "index": 0 } ] ] }, "Claude 3.7": { "ai_languageModel": [ [ { "node": "Content Creator Agent1", "type": "ai_languageModel", "index": 0 } ] ] }, "Gemini 2.0 Flash": { "ai_languageModel": [ [ { "node": "Contact Agent1", "type": "ai_languageModel", "index": 0 } ] ] }, "Ultimate Assistant": { "main": [ [ { "node": "Response", "type": "main", "index": 0 } ] ] }, "Email Agent": { "ai_tool": [ [ { "node": "Ultimate Assistant", "type": "ai_tool", "index": 0 } ] ] }, "Contact Agent": { "ai_tool": [ [ { "node": "Ultimate Assistant", "type": "ai_tool", "index": 0 } ] ] }, "Content Creator Agent": { "ai_tool": [ [ { "node": "Ultimate Assistant", "type": "ai_tool", "index": 0 } ] ] }, "Calculator": { "ai_tool": [ [ { "node": "Ultimate Assistant", "type": "ai_tool", "index": 0 } ] ] }, "Calendar Agent": { "ai_tool": [ [ { "node": "Ultimate Assistant", "type": "ai_tool", "index": 0 } ] ] }, "Think": { "ai_tool": [ [ { "node": "Ultimate Assistant", "type": "ai_tool", "index": 0 } ] ] }, "GPT 4.1": { "ai_languageModel": [ [ { "node": "Ultimate Assistant", "type": "ai_languageModel", "index": 0 } ] ] }, "Telegram Trigger": { "main": [ [ { "node": "Switch", "type": "main", "index": 0 } ] ] }, "Set 'Text'": { "main": [ [ { "node": "Ultimate Assistant", "type": "main", "index": 0 } ] ] }, "Download Voice File": { "main": [ [ { "node": "Transcribe Audio", "type": "main", "index": 0 } ] ] }, "Transcribe Audio": { "main": [ [ { "node": "Ultimate Assistant", "type": "main", "index": 0 } ] ] }, "Switch": { "main": [ [ { "node": "Download Voice File", "type": "main", "index": 0 } ], [ { "node": "Set 'Text'", "type": "main", "index": 0 } ] ] }, "Simple Memory": { "ai_memory": [ [ { "node": "Ultimate Assistant", "type": "ai_memory", "index": 0 } ] ] } }, "pinData": {}, "meta": { "templateCredsSetupCompleted": true, "instanceId": "95af7157a9451806db109e8a7c3cc6117951e08ab00a7496feef1194a6ce66f1" }}

🛑 ¿Demasiado Complejo? Te lo Instalo.

Este sistema es el "Ferrari" de las automatizaciones personales. Requiere conectar múltiples APIs (Google, Meta, OpenAI) y configurar servidores. Un error en un nodo rompe la cadena.

Si eres un ejecutivo, dueño de negocio o simplemente valoras tu tiempo y quieres este sistema funcionando "Llave en Mano" sin tocar una sola línea de código, puedo implementarlo en tu servidor privado.

🚀 Agendar Implementación de Asistente IA