{"workflow":{"id":13407,"name":"Create a human-like Evolution API WhatsApp agent with Redis, PostgreSQL and Gemini","views":1865,"recentViews":7,"totalViews":1865,"createdAt":"2026-02-15T04:05:30.841Z","description":"## 🤖 Human-like Evolution API Agent with Redis & PostgreSQL\n\nThis production-ready template builds a sophisticated AI Agent using **Evolution API** that mimics human interaction patterns. Unlike standard chatbots that reply instantly to every incoming message, this workflow uses a **Smart Redis Buffering System**. It waits for the user to finish typing their full thought (text, audio, or image albums) before processing, creating a natural, conversational flow.\n\nIt features a **Hybrid Memory Architecture**: active conversations are cached in Redis for ultra-low latency, while the complete chat history is securely stored in PostgreSQL. To optimize token usage and maintain long-term coherence, a **Context Refiner Agent** summarizes the conversation history before the Main AI generates a response.\n\n### ✨ Key Features\n\n-   **Human-like Buffering:** The agent waits (configurable time) to group consecutive messages, voice notes, and media albums into a single context. This prevents fragmented replies and feels like talking to a real person.\n-   **Hybrid Memory:** Combines **Redis** (Hot Cache) for speed and **PostgreSQL** (Cold Storage) for permanent history.\n-   **Context Refinement:** A specialized AI step summarizes past interactions, allowing the Main Agent to understand long conversations without exceeding token limits or increasing costs.\n-   **Multi-Modal Support:** Natively handles text, audio transcription, and image analysis via Evolution API.\n-   **Parallel Processing:** Manages \"typing...\" status and session checks in parallel to reduce response latency.\n\n### 📋 Requirements\n\nTo use this workflow, you must configure the Evolution API correctly:\n\n1.  **Evolution API Instance:** You need a running instance of Evolution API.\n    -   [Configuration Guide](https://community.n8n.io/t/evolution-api-and-n8n-how-to-configure/96559)\n2.  **N8n Community Node:** Install the Evolution API node in your n8n instance.\n    -   [n8n-nodes-evolution-api](https://www.npmjs.com/package/n8n-nodes-evolution-api)\n3.  **Database:** A **PostgreSQL** database for chat history and a **Redis** instance for the buffer/cache.\n4.  **AI Models:** API keys for your LLM (OpenAI, Anthropic, or Google Gemini).\n\n### ⚙️ Setup Instructions\n\n1.  **Install the Node:** Go to `Settings &gt; Community Nodes` in n8n and install `n8n-nodes-evolution-api`.\n2.  **Credentials:** Configure credentials for Redis, PostgreSQL, and your AI provider (e.g., OpenAI/Gemini).\n3.  **Database Setup:** Create a `chat_history` table in PostgreSQL (columns must match the Insert node).\n4.  **Redis Connection:** Configure your Redis credentials in the workflow nodes.\n5.  **Global Variables:** Set the following in the \"Global Variables\" node:\n    -   `wait_buffer`: Seconds to wait for the user to stop typing (e.g., 5s).\n    -   `wait_conversation`: Seconds to keep the cache alive (e.g., 300s).\n    -   `max_chat_history`: Number of past messages to retrieve.\n6.  **Webhook:** Point your Evolution API instance to this workflow's Webhook URL.\n\n### 🚀 How it Works\n\n1.  **Ingestion:** Receives data via Evolution API. Detects if it's text, audio, or an album.\n2.  **Smart Buffering:** Holds the execution to collect all parts of the user's message (simulating a human reading/listening).\n3.  **Context Retrieval:** Checks Redis for the active session. If empty, fetches from PostgreSQL.\n4.  **Refinement:** The Refiner Agent summarizes the history to extract key details.\n5.  **Response:** The Main Agent generates a reply based on the refined context and current buffer, then saves it to both Redis and Postgres.\n## 💡 Need Assistance?\n\nIf you’d like help customizing or extending this workflow, feel free to reach out:  \n\n📧 Email: [johnsilva11031@gmail.com](mailto:johnsilva11031@gmail.com)  \n🔗 LinkedIn: [John Alejandro Silva Rodríguez](https://www.linkedin.com/in/john-alejandro-silva-rodriguez-48093526b/)","workflow":{"meta":{"instanceId":"f4f03bff2fcea644128ded7835e3a8cd3eaeebd8b5f3567bd2a7fe4ea7560d30","templateCredsSetupCompleted":true},"nodes":[{"id":"3068fa7a-cd7a-400e-915f-7c78dc041770","name":"Descargar Media","type":"n8n-nodes-evolution-api.evolutionApi","position":[4400,1360],"parameters":{"resource":"chat-api","messageId":"={{ $('Webhook').item.json.body.data.key.id }}","operation":"get-media-base64","instanceName":"={{ $('Webhook').item.json.body.instance }}"},"credentials":{"evolutionApi":{"id":"0sJc2jAlkS8MG13c","name":"Evolution account"}},"typeVersion":1},{"id":"27793e12-a412-418f-9836-5ff216eadf22","name":"get_message (text)","type":"n8n-nodes-base.set","position":[4400,1024],"parameters":{"options":{},"assignments":{"assignments":[{"id":"801ec600-22ad-4a94-a2b4-ae72eb271df0","name":"message","type":"string","value":"={{ $('Webhook').item.json.body.data.message.conversation }}"}]}},"typeVersion":3.4},{"id":"631fd381-296e-4434-9ae0-f13383adb95a","name":"Message Type","type":"n8n-nodes-base.switch","position":[4160,1168],"parameters":{"rules":{"values":[{"outputKey":"Texto","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"a33f66d8-1bd1-400b-b1ce-c2513f57bdb3","operator":{"type":"string","operation":"notEmpty","singleValue":true},"leftValue":"={{ $('Webhook').item.json.body.data.message.conversation }}","rightValue":""}]},"renameOutput":true},{"outputKey":"AlbumMessage","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"5b401571-7d2c-4c5e-bb2e-06e2d683402a","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $('Webhook').item.json.body.data.messageType }}","rightValue":"albumMessage"}]},"renameOutput":true}]},"options":{"fallbackOutput":"extra"}},"typeVersion":3.3},{"id":"40f61960-a240-41f3-b84c-6c29197807ba","name":"Global Variables","type":"n8n-nodes-base.set","position":[3840,1184],"parameters":{"options":{},"assignments":{"assignments":[{"id":"bf06bbd5-2ca4-4aa9-bc9a-825a570791ae","name":"number","type":"string","value":"={{ $('Webhook').item.json.body.data.key.remoteJid.split('@')[0] }}"},{"id":"d350a635-82ed-4373-9725-706c1dcf9cf5","name":"wait_buffer","type":"string","value":"5"},{"id":"ef7dd1c1-0925-416b-b73e-79ee3ee11e81","name":"wait_conversation","type":"string","value":"300"},{"id":"07b5fd03-4ef0-4e59-b4ef-a354dc2b6893","name":"max_chat_history","type":"string","value":"40"}]}},"typeVersion":3.4},{"id":"25d687a5-4ffc-405e-b56e-03013a894f0e","name":"Buffer Route","type":"n8n-nodes-base.switch","position":[6048,1712],"parameters":{"rules":{"values":[{"outputKey":"Ignore","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"f11a017f-dc64-4db4-9836-d13d164a62cf","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ JSON.parse($json.message.last()).sessionID }}","rightValue":"={{ $('Webhook').item.json.body.data.key.id }}"}]},"renameOutput":true},{"outputKey":"Continue","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"4fca4c39-e8bf-490b-8e2e-176c95d9156e","operator":{"type":"dateTime","operation":"before"},"leftValue":"={{ JSON.parse($json.message.last()).date_time }}","rightValue":"={{ $now.minus($('Global Variables').item.json.wait_buffer, 'seconds') }}"}]},"renameOutput":true}]},"options":{"fallbackOutput":"extra","renameFallbackOutput":"Wait"}},"typeVersion":3.2},{"id":"a5a4181c-f1f6-495a-a32f-f7969764adc0","name":"Push to Buffer","type":"n8n-nodes-base.redis","position":[5648,1728],"parameters":{"list":"={{  $('Global Variables').item.json.number }}","tail":true,"operation":"push","messageData":"={{ JSON.stringify({\n  message   : $json.message ? $json.message : $('get_message (media)').item.json.message,\n  sessionID : $('Webhook').item.json.body.data.key.id,\n  date_time : $node[\"Webhook\"].json.body.data.messageTimestamp.toDateTime('s')\n}) }}\n"},"credentials":{"redis":{"id":"Xzoiia7G1hwVmuT6","name":"Redis account"}},"typeVersion":1},{"id":"bccf8f52-62cb-4dc8-ba36-b001ce06848d","name":"Get From Buffer","type":"n8n-nodes-base.redis","position":[5856,1728],"parameters":{"key":"={{  $('Global Variables').item.json.number }}","options":{},"operation":"get","propertyName":"message"},"credentials":{"redis":{"id":"Xzoiia7G1hwVmuT6","name":"Redis account"}},"typeVersion":1},{"id":"6e249e0a-e145-435a-825c-0246f7091b84","name":"Delete Buffer","type":"n8n-nodes-base.redis","position":[6272,1728],"parameters":{"key":"={{  $('Global Variables').item.json.number }}","operation":"delete"},"credentials":{"redis":{"id":"Xzoiia7G1hwVmuT6","name":"Redis account"}},"typeVersion":1},{"id":"2a44f7ed-fe21-4173-9e5b-56349a996114","name":"Normalize Buffer","type":"n8n-nodes-base.set","position":[6480,1728],"parameters":{"options":{},"assignments":{"assignments":[{"id":"b594f1da-51e8-47a4-a636-7928a73b69f8","name":"message","type":"string","value":"={{ $json.message.map(m => JSON.parse(m).message).join('\\n') }}"}]}},"typeVersion":3.4},{"id":"c77dff93-f6dc-4a9f-93e1-de98605e0218","name":"No Operation, do nothing","type":"n8n-nodes-base.noOp","position":[6272,1568],"parameters":{},"typeVersion":1},{"id":"3fda8031-85c3-4301-8d8c-0e80583a5a40","name":"Push to Buffer (AlbumGroup)","type":"n8n-nodes-base.redis","position":[4400,1184],"parameters":{"list":"=Media_{{  $('Global Variables').item.json.number }}","tail":true,"operation":"push","messageData":"={{ ($('Webhook').item.json.body.data.message.albumMessage.expectedImageCount + $('Webhook').item.json.body.data.message.albumMessage.expectedVideoCount).toString() }}"},"credentials":{"redis":{"id":"Xzoiia7G1hwVmuT6","name":"Redis account"}},"typeVersion":1},{"id":"25e20eb6-c442-41bc-82dd-a594d4404010","name":"Check AlbumGroup","type":"n8n-nodes-base.redis","position":[5232,1728],"parameters":{"key":"=Media_{{  $('Global Variables').item.json.number }}","options":{},"operation":"get"},"credentials":{"redis":{"id":"Xzoiia7G1hwVmuT6","name":"Redis account"}},"typeVersion":1},{"id":"d67f6545-0abb-4037-9a03-1c2e5c4bea10","name":"Push Media to Buffer","type":"n8n-nodes-base.redis","position":[5648,1408],"parameters":{"list":"=Media_{{  $('Global Variables').item.json.number }}","tail":true,"operation":"push","messageData":"={{ $('Normalize input').item.json.message }}"},"credentials":{"redis":{"id":"Xzoiia7G1hwVmuT6","name":"Redis account"}},"typeVersion":1},{"id":"bdc2da23-51dc-4ae8-8b43-9182aaddf377","name":"Completed?","type":"n8n-nodes-base.if","position":[6048,1408],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"131b95f2-cb9f-4d8c-9c2b-ca94383322dd","operator":{"type":"number","operation":"equals"},"leftValue":"={{ $json.propertyName.length-1 }}","rightValue":"={{ parseInt($json.propertyName[0]) }}"}]}},"typeVersion":2.2},{"id":"66c2b5ea-2317-4264-8e5a-eba4a4af0ae8","name":"Delete Media Buffer","type":"n8n-nodes-base.redis","position":[6272,1392],"parameters":{"key":"=Media_{{  $('Global Variables').item.json.number }}","operation":"delete"},"credentials":{"redis":{"id":"Xzoiia7G1hwVmuT6","name":"Redis account"}},"typeVersion":1},{"id":"d4506ca4-13b6-4e05-8360-d05654217636","name":"Normalize MediaGroup Buffer","type":"n8n-nodes-base.set","position":[6480,1392],"parameters":{"options":{},"assignments":{"assignments":[{"id":"b594f1da-51e8-47a4-a636-7928a73b69f8","name":"message","type":"string","value":"={{ $json.propertyName.slice(1).join('\\n') }}"}]}},"typeVersion":3.4},{"id":"f239e9f7-df49-4594-b9c4-9eab0d2344d7","name":"Get Album From Buffer","type":"n8n-nodes-base.redis","position":[5856,1408],"parameters":{"key":"=Media_{{  $('Global Variables').item.json.number }}","options":{},"operation":"get"},"credentials":{"redis":{"id":"Xzoiia7G1hwVmuT6","name":"Redis account"}},"typeVersion":1},{"id":"bc745d6b-701a-46f7-8892-7ef1006b13a8","name":"Album?","type":"n8n-nodes-base.if","position":[5440,1552],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"9062d3ba-1151-472f-95e0-42f54cbfb929","operator":{"type":"array","operation":"notEmpty","singleValue":true},"leftValue":"={{ $json.propertyName }}","rightValue":""}]}},"typeVersion":2.2},{"id":"4b5145e3-fc86-4f75-b4cc-1f83a82f6232","name":"Get Message","type":"n8n-nodes-base.set","position":[6768,1552],"parameters":{"options":{},"assignments":{"assignments":[{"id":"f6d7accb-8ef6-4c41-9b0a-9e0b4301dffd","name":"message","type":"string","value":"={{ $json.message || $json.chatInput }}"}]}},"typeVersion":3.4},{"id":"3d184031-6dde-42e1-a491-09225e94a936","name":"Delete Buffer (chat_history)","type":"n8n-nodes-base.redis","position":[11296,1616],"parameters":{"key":"=Chats_{{  $('Global Variables').item.json.number }}","operation":"delete"},"credentials":{"redis":{"id":"Xzoiia7G1hwVmuT6","name":"Redis account"}},"typeVersion":1},{"id":"f8e13e3d-1963-42b5-af32-638221abc74f","name":"Wait For User Other Fast Message","type":"n8n-nodes-base.wait","position":[6272,1888],"webhookId":"9b345d41-1595-4bc3-bb98-64e44682aa43","parameters":{"amount":"={{ $('Global Variables').item.json.wait_buffer }}"},"typeVersion":1.1},{"id":"c04113d1-4f5f-4278-9059-471fe6bf0ed6","name":"Get chat_history","type":"n8n-nodes-base.set","position":[8544,1504],"parameters":{"options":{},"assignments":{"assignments":[{"id":"d0f3b823-dda9-42e9-936b-4ca4123026ca","name":"history","type":"string","value":"={{ $json.propertyName.slice(-$('Global Variables').item.json.max_chat_history).join('\\n') }}"}]}},"typeVersion":3.4},{"id":"d0fa7a20-9ff9-4094-ae2e-5ca4d64b3e99","name":"No Operation, do nothing1","type":"n8n-nodes-base.noOp","position":[11296,1472],"parameters":{},"typeVersion":1},{"id":"ef4c0c24-0c33-4757-bbc6-726e36570127","name":"Buffer (chat_history) Route","type":"n8n-nodes-base.switch","position":[11040,1488],"parameters":{"rules":{"values":[{"outputKey":"Ignore","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"f11a017f-dc64-4db4-9836-d13d164a62cf","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ JSON.parse($json.message.last()).sessionID }}","rightValue":"={{ $('Webhook').item.json.body.data.key.id }}"}]},"renameOutput":true},{"outputKey":"Continue","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"4fca4c39-e8bf-490b-8e2e-176c95d9156e","operator":{"type":"dateTime","operation":"before"},"leftValue":"={{ JSON.parse($json.message.last()).date_time }}","rightValue":"={{ $now.minus($('Global Variables').item.json.wait_conversation, 'seconds') }}"}]},"renameOutput":true}]},"options":{"fallbackOutput":"extra","renameFallbackOutput":"Wait"}},"typeVersion":3.2},{"id":"6256a7ad-6b16-4d37-bece-f87fc3b89eaf","name":"Wait For end of conversation","type":"n8n-nodes-base.wait","position":[11296,1792],"webhookId":"06711a97-b08d-4552-aab8-868b1b8bbc5c","parameters":{"amount":"={{ $('Global Variables').item.json.wait_conversation }}"},"typeVersion":1.1},{"id":"dbb2d1d0-18d3-4c34-a9b0-e8ba0abd1917","name":"Push to Buffer (chat_history)","type":"n8n-nodes-base.redis","position":[10608,1504],"parameters":{"list":"=Chats_buffer{{  $('Global Variables').item.json.number }}","tail":true,"operation":"push","messageData":"={{ JSON.stringify({\n  sessionID : $('Webhook').item.json.body.data.key.id,\n  date_time : $node[\"Webhook\"].json.body.data.messageTimestamp.toDateTime('s')\n}) }}\n"},"credentials":{"redis":{"id":"Xzoiia7G1hwVmuT6","name":"Redis account"}},"typeVersion":1},{"id":"5dc4db3a-4cb6-4f75-a8c6-56514137750c","name":"Get From Buffer(chat_history)","type":"n8n-nodes-base.redis","position":[10848,1504],"parameters":{"key":"=Chats_buffer{{  $('Global Variables').item.json.number }}","options":{},"operation":"get","propertyName":"message"},"credentials":{"redis":{"id":"Xzoiia7G1hwVmuT6","name":"Redis account"}},"typeVersion":1},{"id":"acdb096a-64be-473c-8bc9-9b4e01315677","name":"Google Gemini Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[8976,1696],"parameters":{"options":{"temperature":0},"modelName":"models/gemini-flash-lite-latest"},"credentials":{"googlePalmApi":{"id":"Pr8hxThM4qMjHnbs","name":"Karen"}},"typeVersion":1},{"id":"fd1118a6-8586-42c1-8f5a-178866deece5","name":"Delete Buffer (chat_history)2","type":"n8n-nodes-base.redis","position":[11488,1616],"parameters":{"key":"=Chats_buffer{{  $('Global Variables').item.json.number }}","operation":"delete"},"credentials":{"redis":{"id":"Xzoiia7G1hwVmuT6","name":"Redis account"}},"typeVersion":1},{"id":"c9a89669-a7a1-4d6e-af94-8241a993a9ca","name":"Webhook","type":"n8n-nodes-base.webhook","position":[3344,1184],"webhookId":"814266db-b844-4119-8860-4ed59ab5ea18","parameters":{"path":"a/event/messages-upsert","options":{},"httpMethod":"POST"},"typeVersion":2.1},{"id":"6c6db252-8067-4c8e-9ba2-7280e280aedb","name":"Read Messages","type":"n8n-nodes-evolution-api.evolutionApi","position":[3648,320],"parameters":{"resource":"chat-api","messageId":"={{ $json.ID }}","operation":"read-messages","remoteJid":"={{ $json.Number }}","instanceName":"={{ $json.Name }}"},"credentials":{"evolutionApi":{"id":"0sJc2jAlkS8MG13c","name":"Evolution account"}},"typeVersion":1},{"id":"0f3d5ec8-cc88-4d6d-9f1e-cd31ea4b0980","name":"Open session","type":"n8n-nodes-evolution-api.evolutionApi","position":[3648,128],"parameters":{"resource":"integrations-api","operation":"evolution-bot","remoteJid":"={{ $json.Number }}","instanceName":"={{ $json.Name }}","evolutionBotId":"={{ $json.ID }}","resourceForEvolutionBot":"changeStatusEvolutionBot"},"credentials":{"evolutionApi":{"id":"0sJc2jAlkS8MG13c","name":"Evolution account"}},"typeVersion":1},{"id":"bd1017ec-e1b3-4e75-b6c1-a2b1eea076b0","name":"Get chat_history From DataBase","type":"n8n-nodes-base.postgres","position":[7600,1776],"parameters":{"limit":"={{ $('Global Variables').item.json.max_chat_history }}","table":{"__rl":true,"mode":"list","value":"chat_history","cachedResultName":"chat_history"},"where":{"values":[{"value":"={{ $('Global Variables').item.json.number }}","column":"user_whatsapp_number"}]},"schema":{"__rl":true,"mode":"list","value":"public"},"options":{"outputColumns":["message_text"]},"operation":"select"},"credentials":{"postgres":{"id":"0mSlrLCIVfCVe5zJ","name":"Postgres account"}},"retryOnFail":true,"typeVersion":2.6,"alwaysOutputData":true},{"id":"4c8f523a-4933-4c82-892b-0c3820fdfe63","name":"Aggregate all Messges","type":"n8n-nodes-base.aggregate","position":[7792,1776],"parameters":{"options":{},"fieldsToAggregate":{"fieldToAggregate":[{"fieldToAggregate":"message_text"}]}},"typeVersion":1},{"id":"3cf1c290-c7c8-4452-a6e0-f7ac9386ab2a","name":"chat_history In Buffer?","type":"n8n-nodes-base.if","position":[7424,1552],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"761329c9-499f-4328-bc11-835edcfd003c","operator":{"type":"string","operation":"notEmpty","singleValue":true},"leftValue":"={{ $json.propertyName[0] }}","rightValue":""}]}},"typeVersion":2.2},{"id":"6ad75b38-34bd-46d2-b54b-455534e83630","name":"Writting...","type":"n8n-nodes-evolution-api.evolutionApi","position":[3856,512],"parameters":{"delay":10200,"resource":"chat-api","operation":"send-presence","remoteJid":"={{ $('When Executed by Another Workflow').item.json.Number }}","instanceName":"={{ $('When Executed by Another Workflow').item.json.Name }}"},"credentials":{"evolutionApi":{"id":"0sJc2jAlkS8MG13c","name":"Evolution account"}},"typeVersion":1},{"id":"1694ed3c-d7ed-4ddc-8912-164d18975fc1","name":"Create Table chat_history","type":"n8n-nodes-base.postgres","position":[3536,-208],"parameters":{"query":"CREATE TABLE IF NOT EXISTS chat_history (\n    -- Unique identifier for each individual message\n    message_id BIGSERIAL PRIMARY KEY,\n\n    -- Link to the user involved in the conversation\n    user_whatsapp_number VARCHAR(25) NOT NULL REFERENCES mentour_users(whatsapp_number) ON DELETE CASCADE,\n\n    -- The text content of the message\n    message_text TEXT NOT NULL,\n\n    -- The exact time the message was sent/received\n    message_timestamp TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    \n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\n\n-- Optimization: A composite index to very quickly retrieve a user's chat history in chronological order.\nCREATE INDEX IF NOT EXISTS idx_chat_history_user_timestamp \nON chat_history (user_whatsapp_number, message_timestamp);","options":{},"operation":"executeQuery"},"credentials":{"postgres":{"id":"0mSlrLCIVfCVe5zJ","name":"Postgres account"}},"typeVersion":2.6},{"id":"c8a87e0c-b693-4e2f-aebf-ceaaceb29595","name":"Send Response","type":"n8n-nodes-evolution-api.evolutionApi","position":[9856,1504],"parameters":{"resource":"messages-api","remoteJid":"={{  $('Global Variables').item.json.number }}","messageText":"={{ $json.reponse }}","instanceName":"Pruebas","options_message":{}},"credentials":{"evolutionApi":{"id":"0sJc2jAlkS8MG13c","name":"Evolution account"}},"typeVersion":1},{"id":"dc6711be-d817-4e09-b0b5-a8a663607ad2","name":"Extract from CSV","type":"n8n-nodes-base.extractFromFile","position":[3712,2160],"parameters":{"options":{}},"typeVersion":1},{"id":"9c1a51b8-b00a-46a5-b9e4-597387417af1","name":"Extract from ICS","type":"n8n-nodes-base.extractFromFile","position":[3712,2448],"parameters":{"options":{},"operation":"fromIcs"},"typeVersion":1},{"id":"91cb3721-2940-4faf-b675-3dbb2634840d","name":"Extract from JSON","type":"n8n-nodes-base.extractFromFile","position":[3712,2592],"parameters":{"options":{},"operation":"fromJson"},"typeVersion":1},{"id":"2567e452-58e8-416e-888b-9e05b9090163","name":"Extract from ODS","type":"n8n-nodes-base.extractFromFile","position":[3712,2736],"parameters":{"options":{},"operation":"ods"},"typeVersion":1},{"id":"9ee5e360-3992-4f7d-b6ae-246b78c8fa35","name":"Extract from PDF","type":"n8n-nodes-base.extractFromFile","position":[3712,2896],"parameters":{"options":{},"operation":"pdf"},"typeVersion":1},{"id":"99943307-996c-4a3b-9e62-8a2126e31819","name":"Extract from RTF","type":"n8n-nodes-base.extractFromFile","position":[3712,3200],"parameters":{"options":{},"operation":"rtf"},"typeVersion":1},{"id":"b0fe80d5-7480-4682-8387-8cd84393b32a","name":"Extract from File","type":"n8n-nodes-base.extractFromFile","position":[3712,3344],"parameters":{"options":{},"operation":"text"},"typeVersion":1},{"id":"ee2b462b-c577-41a1-8679-f6c571a09159","name":"Extract from XLSX","type":"n8n-nodes-base.extractFromFile","position":[3712,3632],"parameters":{"options":{},"operation":"xlsx"},"typeVersion":1},{"id":"b4b638ed-5b5a-4468-b4a4-b7f27b808871","name":"Analyze audio","type":"@n8n/n8n-nodes-langchain.googleGemini","position":[3712,1856],"parameters":{"text":"### IDENTITY & CORE MISSION\nYou are Auris, a world-class auditory analysis engine. Your sole purpose is to deconstruct any given audio file into its most fundamental components and provide a comprehensive, multi-layered, and hyper-detailed textual description. Your analysis must be objective, thorough, and structured according to the protocol below.\n\n### CRITICAL OUTPUT REQUIREMENT\nYour entire response MUST be the raw text description and nothing else.\n- DO NOT include preambles like \"Here is the analysis of the audio.\"\n- DO NOT use markdown formatting like headers or bolding.\n- DO NOT apologize for limitations or mention that you are an AI.\n- Your output must begin directly with the analysis.\n\n### HIERARCHICAL ANALYSIS PROTOCOL\nYou must process every audio file by following these five layers of analysis in order.\n\n**LAYER 1: TRIAGE & PROFILE IDENTIFICATION**\nFirst, silently identify the overall category of the audio to determine the primary analysis mode. Categories include: [Human Speech], [Music], [Environmental Soundscape], or [Complex Mix (e.g., film clip, podcast with music)]. State the identified category at the beginning of your description. Example: \"Category: Human Speech.\"\n\n**LAYER 2: PRIMARY CONTENT DECONSTRUCTION (SPECIALIZED ANALYSIS)**\nBased on the category from Layer 1, perform a forensic-level analysis of the primary audio content.\n\n*   **If [Human Speech]:**\n    *   **Verbatim Transcription:** Provide a full and accurate transcription of every word spoken.\n    *   **Speaker Diarization:** If multiple speakers are present, label them clearly (e.g., \"Speaker 1:\", \"Speaker 2:\").\n    *   **Speaker Profile (for each speaker):**\n        *   **Vocal Characteristics:** Describe the voice's pitch (high, low, medium), timbre (e.g., resonant, raspy, clear, breathy), and estimated age range (e.g., child, young adult, middle-aged, senior).\n        *   **Accent/Dialect:** Identify any discernible regional accent or dialect.\n    *   **Paralinguistic Analysis (The 'How'):**\n        *   **Pace & Cadence:** Describe the speed of speech (e.g., \"fast and hurried,\" \"slow and deliberate,\" \"pauses frequently\"). Estimate words per minute if possible.\n        *   **Volume & Dynamics:** Describe the volume (e.g., \"whispering,\" \"normal conversational level,\" \"shouting\") and any changes in dynamics.\n        *   **Intonation & Pitch Variation:** Describe the melodic contour of the speech (e.g., \"monotonous,\" \"highly expressive with rising and falling pitch\").\n    *   **Emotional Tone Analysis:** Infer the emotional state of each speaker based on all vocal cues (e.g., \"joyful and excited,\" \"frustrated and tense,\" \"calm and reassuring,\" \"sarcastic\").\n    *   **Intent & Pragmatics (The 'Why'):** Determine the purpose of the speech. Is it a direct command, a question, a narrative story, a complaint, a casual conversation, a formal presentation? This is the most critical analysis for agent instructions.\n\n*   **If [Music]:**\n    *   **Genre & Style:** Identify the genre with precision (e.g., \"Classical Baroque,\" \"Lo-fi Hip Hop,\" \"Industrial Metal\").\n    *   **Instrumentation:** List every audible instrument (e.g., \"acoustic guitar, 808 drum machine, electric piano, female vocals\").\n    *   **Structural Analysis:** Describe the song's structure (e.g., \"Intro, Verse 1, Chorus, Verse 2, Chorus, Bridge, Guitar Solo, Outro\").\n    *   **Musical Elements:** Detail the tempo (estimate BPM), key (major/minor), rhythm, melody, and harmony.\n    *   **Mood & Atmosphere:** Describe the feeling the music evokes (e.g., \"energetic and uplifting,\" \"melancholic and introspective,\" \"suspenseful and tense\").\n\n*   **If [Environmental Soundscape]:**\n    *   **Location Identification:** Infer the physical location from the sounds (e.g., \"Busy downtown street corner during rush hour,\" \"Quiet forest with birdsong,\" \"Crowded indoor cafe\").\n    *   **Sound Source Catalog:** Systematically list and describe every distinct sound. Be specific about its characteristics and spatial position (e.g., \"Distant siren moving from left to right,\" \"Footsteps on wet pavement approaching,\" \"The clinking of ceramic mugs and a nearby espresso machine hiss\").\n\n**LAYER 3: ACOUSTIC ENVIRONMENT ANALYSIS**\nDescribe the \"room\" or space where the audio was recorded.\n*   **Background Noise (Noise Floor):** Identify any constant, low-level sounds (e.g., \"60Hz electrical hum,\" \"HVAC system running,\" \"computer fan,\" \"distant traffic rumble\").\n*   **Ambient Sounds:** Detail any intermittent, secondary sounds that are not part of the primary content (e.g., \"a distant dog bark,\" \"a cough from the speaker,\" \"a phone notification chime\").\n*   **Reverberation & Space:** Describe the acoustic properties of the space. Is it a \"dry\" sound (small, acoustically treated room) or a \"wet\" sound with a long decay (large, empty hall, church, or cave)?\n\n**LAYER 4: TECHNICAL PRODUCTION ANALYSIS**\nDeconstruct the audio file as a recording.\n*   **Recording Quality:** Describe the fidelity (e.g., \"high-fidelity studio recording,\" \"mid-quality phone voice memo,\" \"low-fidelity, compressed audio\").\n*   **Stereo Field:** Is the recording in mono or stereo? If stereo, describe the placement of sounds in the left-right field.\n*   **Dynamic Range:** Is the volume compressed and consistently loud, or is there a natural range between quiet and loud parts?\n*   **Artifacts & Imperfections:** Identify any technical flaws (e.g., \"audible clipping/distortion on peaks,\" \"digital compression artifacts,\" \"hiss from a low-quality microphone,\" \"plosives ('p' and 'b' sounds popping)\").\n\n**LAYER 5: INFERENCE & SYNTHESIS**\nConclude with a brief synthesis of all layers. What is the overall story, context, or purpose of this audio?\n*   **Example (Speech):** \"This is a voice command recorded by a user in a moving car, evidenced by the engine hum and road noise. The user sounds slightly rushed and is giving a direct instruction to the agent.\"\n*   **Example (Music):** \"This is a professionally produced instrumental track intended for a film score, designed to create a sense of mystery and anticipation.\"\n*   **Example (Environment):** \"This audio captures the ambient atmosphere of a public library, intended for relaxation or study.\"","modelId":{"__rl":true,"mode":"list","value":"models/gemini-2.5-flash","cachedResultName":"models/gemini-2.5-flash"},"options":{},"resource":"audio","inputType":"binary","operation":"analyze"},"credentials":{"googlePalmApi":{"id":"Pr8hxThM4qMjHnbs","name":"Karen"}},"typeVersion":1},{"id":"27d98d0d-58b8-443d-9d34-f1d0fb9a4516","name":"get_message (File message)","type":"n8n-nodes-base.set","position":[4544,2576],"parameters":{"options":{},"assignments":{"assignments":[{"id":"d8935452-fe20-469d-a68d-1aad056cb8dd","name":"message","type":"string","value":"={{ $('Descargar Media').item.json.data?.caption ? \"Captions: \" + $('Descargar Media').item.json.data.caption : \"\" }}\nFile name:{{ $('Descargar Media').item.json.data.fileName }}\nFile type:{{ $('Get Mime Type').item.json.fileTypeCategory }}\nExtracted data from file:\n{{ $json.data }}"}]}},"typeVersion":3.4},{"id":"f765c4c8-d702-470b-b810-7f3004d9fa08","name":"Aggregate","type":"n8n-nodes-base.aggregate","position":[3888,2160],"parameters":{"options":{},"aggregate":"aggregateAllItemData"},"typeVersion":1},{"id":"e502ef06-bca0-453a-8894-0affaff2fa3e","name":"get_error_message","type":"n8n-nodes-base.set","position":[3712,3792],"parameters":{"options":{},"assignments":{"assignments":[{"id":"d8935452-fe20-469d-a68d-1aad056cb8dd","name":"message","type":"string","value":"=It was not possible to process the file.File type not supported."}]}},"typeVersion":3.4},{"id":"9d472f84-1ef1-40cb-82e7-719fd7000fcb","name":"HTML Extract Generic1","type":"n8n-nodes-base.html","position":[3712,2304],"parameters":{"options":{"cleanUpText":true},"operation":"extractHtmlContent","sourceData":"binary","extractionValues":{"values":[{"key":"pageTitle","cssSelector":"title"},{"key":"metaDescription","cssSelector":"meta[name=\"description\"]"},{"key":"fullBodyText","cssSelector":"body","returnValue":"html"}]}},"typeVersion":1.2},{"id":"82f4508c-aca2-4b74-b7e7-61641c2449a2","name":"Get ODS data","type":"n8n-nodes-base.code","position":[3888,2736],"parameters":{"jsCode":"// Get the first item from the input array.\nconst firstItem = items[0];\n\n// Create a new object that has a single key: \"data\".\n// The value of \"data\" will be the entire json object from the input.\n// This gathers all fields (First Name, Last Name, Age, etc.) dynamically.\nconst result = {\n  data: firstItem.json\n};\n\n// Return the newly structured object.\n// It will be outputted as a single item with a 'json' property\n// containing the 'data' object.\nreturn result;"},"typeVersion":2},{"id":"d8f16a0d-0273-41c9-89ad-14a9a21a4875","name":"Normalize ODS","type":"n8n-nodes-base.set","position":[4048,2736],"parameters":{"options":{},"assignments":{"assignments":[{"id":"24b93984-e305-4c11-a856-5fa0bfaaaa79","name":"data","type":"string","value":"={{ $json.data }}"}]}},"typeVersion":3.4},{"id":"e940c6a8-f313-4ee5-aa4e-02dcc7168d44","name":"Normalize CSV","type":"n8n-nodes-base.set","position":[4048,2160],"parameters":{"options":{},"assignments":{"assignments":[{"id":"24b93984-e305-4c11-a856-5fa0bfaaaa79","name":"data","type":"string","value":"={{ $json.data }}"}]}},"typeVersion":3.4},{"id":"71f490ba-61a1-4737-875c-e1fdb3d15154","name":"Normalize HTML","type":"n8n-nodes-base.set","position":[3888,2304],"parameters":{"options":{},"assignments":{"assignments":[{"id":"b4ab7227-9db9-4c74-aa17-80071ee0a7f0","name":"data","type":"string","value":"=Page title:  {{ $json.pageTitle}}\nMeta description: {{ $json.metaDescription }}\nbody: {{ $json.fullBodyText }}"}]}},"typeVersion":3.4},{"id":"e2c39585-31a4-48f1-ab2e-d127e55601b2","name":"Normalize ICS","type":"n8n-nodes-base.set","position":[3888,2448],"parameters":{"options":{},"assignments":{"assignments":[{"id":"24b93984-e305-4c11-a856-5fa0bfaaaa79","name":"data","type":"string","value":"={{ $json.data }}"}]}},"typeVersion":3.4},{"id":"b58a311a-94f0-4098-a8a6-170c140bd8b3","name":"Normalize JSON","type":"n8n-nodes-base.set","position":[3888,2592],"parameters":{"options":{},"assignments":{"assignments":[{"id":"24b93984-e305-4c11-a856-5fa0bfaaaa79","name":"data","type":"string","value":"={{ $json.data }}"}]}},"typeVersion":3.4},{"id":"acd71229-d42f-465d-94bf-7dfb778703d1","name":"Normalize PDF","type":"n8n-nodes-base.set","position":[4048,2880],"parameters":{"options":{},"assignments":{"assignments":[{"id":"24b93984-e305-4c11-a856-5fa0bfaaaa79","name":"data","type":"string","value":"={{ $json.text }}"}]}},"typeVersion":3.4},{"id":"b42370d0-8168-49e6-afd8-d46c90cf9241","name":"Normalize RTF","type":"n8n-nodes-base.set","position":[4048,3200],"parameters":{"options":{},"assignments":{"assignments":[{"id":"24b93984-e305-4c11-a856-5fa0bfaaaa79","name":"data","type":"string","value":"={{ $json.data }}"}]}},"typeVersion":3.4},{"id":"b136b15b-bd61-4588-a38e-20cb4a5da56a","name":"Normalize text file","type":"n8n-nodes-base.set","position":[3888,3344],"parameters":{"options":{},"assignments":{"assignments":[{"id":"24b93984-e305-4c11-a856-5fa0bfaaaa79","name":"data","type":"string","value":"={{ $json.data }}"}]}},"typeVersion":3.4},{"id":"61f3aba5-20af-4b05-bebd-4f30489d0700","name":"Normalize XML","type":"n8n-nodes-base.set","position":[3888,3488],"parameters":{"options":{},"assignments":{"assignments":[{"id":"24b93984-e305-4c11-a856-5fa0bfaaaa79","name":"data","type":"string","value":"={{ $json.data }}"}]}},"typeVersion":3.4},{"id":"b88503f3-3acf-43ee-b44c-f9410ca75453","name":"Extract from XML","type":"n8n-nodes-base.extractFromFile","position":[3712,3488],"parameters":{"options":{},"operation":"xml"},"typeVersion":1},{"id":"1fc00f6e-ad2b-464b-b42f-9b5cc6b71e2b","name":"Normalize XLSX","type":"n8n-nodes-base.set","position":[4048,3632],"parameters":{"options":{},"assignments":{"assignments":[{"id":"24b93984-e305-4c11-a856-5fa0bfaaaa79","name":"data","type":"string","value":"={{ $json.data }}"}]}},"typeVersion":3.4},{"id":"74de89ed-af3f-47bb-9b9c-b994a316f9e3","name":"Get RTF data","type":"n8n-nodes-base.code","position":[3888,3200],"parameters":{"jsCode":"// Get the first item from the input array.\nconst firstItem = items[0];\n\n// Create a new object that has a single key: \"data\".\n// The value of \"data\" will be the entire json object from the input.\n// This gathers all fields (First Name, Last Name, Age, etc.) dynamically.\nconst result = {\n  data: firstItem.json\n};\n\n// Return the newly structured object.\n// It will be outputted as a single item with a 'json' property\n// containing the 'data' object.\nreturn result;"},"typeVersion":2},{"id":"6f62da6c-32ba-4acc-8bea-4643a7fe3eba","name":"Get RTF data1","type":"n8n-nodes-base.code","position":[3888,3632],"parameters":{"jsCode":"// Get the first item from the input array.\nconst firstItem = items[0];\n\n// Create a new object that has a single key: \"data\".\n// The value of \"data\" will be the entire json object from the input.\n// This gathers all fields (First Name, Last Name, Age, etc.) dynamically.\nconst result = {\n  data: firstItem.json\n};\n\n// Return the newly structured object.\n// It will be outputted as a single item with a 'json' property\n// containing the 'data' object.\nreturn result;"},"typeVersion":2},{"id":"a3824f70-80fd-44c8-be70-e32cf6d2c26d","name":"Text?","type":"n8n-nodes-base.if","position":[3888,2896],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"333a436f-c087-4250-a181-40657874959b","operator":{"type":"string","operation":"notEmpty","singleValue":true},"leftValue":"={{ $json.text }}","rightValue":""}]}},"typeVersion":2.2},{"id":"3b1dc9af-f87b-48a9-ba64-c23460b43cc3","name":"Analyze document","type":"@n8n/n8n-nodes-langchain.googleGemini","position":[3888,3040],"parameters":{"text":"### IDENTITY & CORE MISSION\nYou are Codex, a world-class document analysis engine. Your sole purpose is to deconstruct any given PDF file into its structural, textual, visual, and metadata components, providing a single, comprehensive, and hyper-detailed textual description. Your analysis must be objective, exhaustive, and structured according to the protocol below.\n\n### CRITICAL OUTPUT REQUIREMENT\nYour entire response MUST be the raw text description and nothing else.\n- DO NOT include preambles like \"Here is the analysis of the PDF.\"\n- DO NOT use markdown formatting like headers or bolding unless specifically required for a table transcription.\n- DO NOT apologize for limitations or mention that you are an AI.\n- Your output must begin directly with the analysis.\n\n### HIERARCHICAL ANALYSIS PROTOCOL\nYou must process every PDF file by following these five layers of analysis in order.\n\n**LAYER 1: DOCUMENT TRIAGE & PROFILE IDENTIFICATION**\nFirst, silently identify the overall category of the document to determine the primary analysis mode. Categories include: [Invoice/Receipt], [Academic Paper/Report], [Marketing Brochure/Flyer], [Legal Contract], [Fillable Form], [Presentation Slides], [Book/Manual]. State the identified category at the beginning of your description. Example: \"Category: Invoice/Receipt.\"\n\n**LAYER 2: COMPREHENSIVE CONTENT EXTRACTION**\nThis is the core data extraction phase. Process the document page by page.\n\n*   **A. Verbatim Text Extraction & Structuring:**\n    *   Extract all textual content from the document.\n    *   Preserve the semantic structure. Do not output a single wall of text. Use line breaks to separate paragraphs, headings, and list items as they appear in the original document.\n    *   Prefix major sections with clear labels (e.g., \"HEADING:\", \"PARAGRAPH:\", \"LIST_ITEM:\").\n\n*   **B. Structured Data Analysis (Tables & Forms):**\n    *   **Table Extraction:** If any tables are present, identify them and transcribe their content into a machine-readable format like Markdown. Announce each table clearly.\n        **Format Example:**\n        `--- TABLE 1: PRODUCT DETAILS ---`\n        `| Product ID | Description      | Quantity | Unit Price | Total Price |`\n        `|------------|------------------|----------|------------|-------------|`\n        `| SKU-101    | Blue Widget      | 2        | $10.00     | $20.00      |`\n        `| SKU-203    | Red Gadget       | 5        | $5.50      | $27.50      |`\n        `--- END TABLE 1 ---`\n    *   **Form Field Identification:** If the document is a form, list all fillable fields and their labels (e.g., \"FORM_FIELD: Full Name\", \"FORM_FIELD: Date of Birth\", \"CHECKBOX: I agree to the terms\").\n\n*   **C. Visual Element Deconstruction:**\n    *   For every embedded image, chart, or significant graphic, provide a detailed description.\n    *   Announce each visual element with its page number and a label.\n    *   **Format Example:**\n        `--- VISUAL ELEMENT (Page 3): Bar Chart ---`\n        `Description: A vertical bar chart titled \"Quarterly Sales Growth\". The X-axis represents quarters Q1 to Q4. The Y-axis represents sales in millions. Q3 shows the highest sales at approximately $4.5M. The chart uses a blue and green color palette.`\n        `--- END VISUAL ---`\n\n**LAYER 3: DOCUMENT STRUCTURE & LAYOUT ANALYSIS**\nAnalyze the overall design and organization of the document.\n*   **Document Outline:** If there is a table of contents or clear hierarchical structure (e.g., Chapter 1, Section 1.1), reproduce it as a simple outline.\n*   **Layout & Typography:** Describe the visual presentation.\n    *   **Layout:** Note the number of columns, use of headers, footers, and page numbering.\n    *   **Typography:** Describe the primary font styles used (e.g., \"serif font for body text, sans-serif for headings\"), font sizes, and use of bolding or italics for emphasis.\n    *   **Color Scheme:** Identify the dominant colors used for text, backgrounds, and graphical elements.\n\n**LAYER 4: METADATA & FILE FORENSICS**\nExtract the non-visible, technical information embedded within the PDF file.\n*   **File Metadata:** List all available metadata fields.\n    *   `Title: [Extracted Title]`\n    *   `Author: [Extracted Author]`\n    *   `Subject: [Extracted Subject]`\n    *   `Keywords: [Extracted Keywords]`\n    *   `Creator Application: [e.g., Microsoft Word, Adobe InDesign CC]`\n    *   `PDF Producer: [e.g., Adobe PDF Library]`\n    *   `Creation Date: [Extracted Date]`\n    *   `Modification Date: [Extracted Date]`\n*   **File Properties:**\n    *   `Page Count: [Total number of pages]`\n    *   `Page Size: [e.g., 8.5 x 11 inches (US Letter), A4]`\n    *   `Text Status: [e.g., \"Native/Selectable Text\" or \"Image-based/Scanned Document\"]`\n    *   `Security: [e.g., \"No restrictions,\" \"Password protected,\" \"Printing not allowed\"]`\n\n**LAYER 5: INFERENCE & SYNTHESIS**\nConclude with a holistic synthesis of all layers. What is the document's primary purpose, intended audience, and key message?\n*   **Example (Invoice):** \"This is a standard commercial invoice generated by an automated accounting system. Its purpose is to bill a client for services rendered. The audience is the client's accounts payable department.\"\n*   **Example (Report):** \"This is a formal, professionally formatted annual report intended for company stakeholders. Its purpose is to present financial performance and strategic direction using a combination of detailed text, data tables, and illustrative charts.\"\n*   **Example (Brochure):** \"This is a visually-driven marketing brochure designed to attract new customers. It uses high-quality images, minimal text, and a vibrant color scheme to create an appealing brand image.\"","modelId":{"__rl":true,"mode":"list","value":"models/gemini-2.5-flash-lite","cachedResultName":"models/gemini-2.5-flash-lite"},"options":{},"resource":"document","inputType":"binary"},"credentials":{"googlePalmApi":{"id":"Pr8hxThM4qMjHnbs","name":"Karen"}},"typeVersion":1},{"id":"34a65725-8005-446f-98da-4d6068a1eaf3","name":"Normalize PDF (AI)","type":"n8n-nodes-base.set","position":[4048,3040],"parameters":{"options":{},"assignments":{"assignments":[{"id":"24b93984-e305-4c11-a856-5fa0bfaaaa79","name":"data","type":"string","value":"={{ $json.content.parts[0].text }}"}]}},"typeVersion":3.4},{"id":"2188e2ae-bb96-44b1-baa6-9ac055fc7cda","name":"Merge","type":"n8n-nodes-base.merge","position":[3712,3040],"parameters":{"mode":"chooseBranch","useDataOfInput":2},"typeVersion":3.2},{"id":"8877af77-2336-48f8-b6be-9f426df22e25","name":"Normalize input","type":"n8n-nodes-base.set","position":[5040,1728],"parameters":{"options":{},"assignments":{"assignments":[{"id":"eb807b26-c415-42d2-9cef-707825d6fa82","name":"message","type":"string","value":"={{ $json.message }}"}]}},"typeVersion":3.4},{"id":"a70cf6e8-1fff-4065-af6e-9d1f79c66324","name":"Convert to File","type":"n8n-nodes-base.convertToFile","position":[3040,2720],"parameters":{"options":{},"operation":"toBinary","sourceProperty":"data.base64"},"typeVersion":1.1},{"id":"4083d78a-775c-4085-97a8-710c51e8d0a5","name":"Analyze video","type":"@n8n/n8n-nodes-langchain.googleGemini","position":[3712,2016],"parameters":{"text":"### IDENTITY & CORE MISSION\nYou are Scrutator, a world-class multimedia analysis engine. Your sole purpose is to deconstruct any given video file into its most fundamental visual, auditory, and temporal components, providing a single, comprehensive, and hyper-detailed textual description. Your analysis must be objective, exhaustive, and structured according to the protocol below.\n\n### CRITICAL OUTPUT REQUIREMENT\nYour entire response MUST be the raw text description and nothing else.\n- DO NOT include preambles like \"Here is the analysis of the video.\"\n- DO NOT use markdown formatting like headers or bolding.\n- DO NOT apologize for limitations or mention that you are an AI.\n- Your output must begin directly with the analysis.\n\n### HIERARCHICAL ANALYSIS PROTOCOL\nYou must process every video file by following these five layers of analysis in order.\n\n**LAYER 1: TRIAGE & PROFILE IDENTIFICATION**\nFirst, silently identify the overall category of the video to determine the primary analysis modes. Categories include: [User Instruction/Vlog], [Document Scan/Presentation], [Food/Cooking Demo], [Cinematic/Narrative Clip], [Event Recording], [Environmental Scene]. State the identified category at the beginning of your description. Example: \"Category: User Instruction/Vlog.\"\n\n**LAYER 2: DUAL-STREAM DECONSTRUCTION (VISUAL & AUDITORY)**\nAnalyze the visual and audio streams in parallel, noting their interplay.\n\n**A. VISUAL STREAM ANALYSIS:**\nApply the full image analysis protocol to the video's visual content. Describe how these elements **evolve or change throughout the video's duration**.\n*   **Primary Subject(s):** Identify and analyze the main subjects (e.g., a person, a plate of food, a document).\n    *   **If Food:** Identify the dish, all ingredients, cooking methods, and portion size. Describe any actions performed on the food (e.g., \"slicing,\" \"sautéing,\" \"plating\").\n    *   **If Document/Receipt:** State that a document is present and that a full OCR transcription will follow in the audio stream analysis if the user reads it, or in the temporal analysis if it's held up to the camera.\n    *   **If Person:** Describe demographics, appearance, clothing, and actions.\n*   **Background & Context:** Detail the environment, secondary objects, and their spatial relationships.\n\n**B. AUDITORY STREAM ANALYSIS:**\nApply the full audio analysis protocol to the video's soundtrack.\n*   **Primary Content:**\n    *   **If Human Speech:** Provide a **verbatim transcription** with speaker diarization (\"Speaker 1:\", \"Speaker 2:\"). Analyze each speaker's vocal profile, emotional tone, and pragmatic intent (e.g., \"The user's intent is to issue a direct command to the agent\").\n    *   **If Music:** Identify genre, instrumentation, and mood.\n    *   **If Environmental Sounds:** Catalog all distinct sound sources.\n*   **Acoustic Environment & Technical Quality:** Describe background noise, reverberation, and recording quality.\n\n**LAYER 3: TEMPORAL & MOTION ANALYSIS (THE NARRATIVE OF CHANGE)**\nThis is the most critical layer for video. Deconstruct the sequence of events over time.\n*   **Scene & Shot Log:** Create a chronological log of events. Use timestamps to denote significant changes in action, subject, or camera angle.\n    *   **Format Example:**\n        `[00:00-00:03] - Close-up shot of a hand holding a grocery receipt. The camera is slightly shaky.`\n        `[00:04-00:09] - The user (Speaker 1) begins reading the items from the receipt aloud. The camera pans down the list of items.`\n        `[00:10-00:12] - Cut to a wide shot of the kitchen counter, showing the grocery items mentioned.`\n        `[00:13-00:15] - The user points to a carton of orange juice and asks a question.`\n*   **Object & Subject Tracking:** Describe the movement and actions of the primary subjects. (e.g., \"The user walks from the left to the right of the frame, placing a milk carton on the table.\").\n*   **Camera Work:** Describe all camera movements (e.g., \"static tripod shot,\" \"handheld with noticeable shake,\" \"slow pan left,\" \"quick zoom-in on the product label\").\n*   **Editing & Post-Production:** Identify editing techniques. Describe the pacing (e.g., \"fast-paced with quick cuts,\" \"long, uninterrupted take\"), transitions (e.g., \"hard cut,\" \"fade to black,\" \"dissolve\"), and any on-screen graphics, text overlays, or subtitles.\n\n**LAYER 4: TECHNICAL FILE ANALYSIS**\nBriefly describe the technical characteristics of the video file itself.\n*   **Video Quality:** Infer the resolution and clarity (e.g., \"High-definition 1080p,\" \"Standard-definition 480p,\" \"low-resolution, heavily compressed\").\n*   **Frame Rate:** Describe the motion smoothness (e.g., \"smooth 30/60fps,\" \"choppy/low frame rate\").\n*   **Audio-Visual Sync:** Confirm if the audio and video are properly synchronized.\n\n**LAYER 5: INFERENCE & SYNTHESIS**\nConclude with a holistic synthesis of all layers. What is the overall story, context, and purpose of this video?\n*   **Example (User Instruction):** \"This is a user-generated instructional video, recorded on a smartphone. The user is providing a multi-modal command by both showing a receipt and verbally asking the agent to process specific items from it. The intent is direct and task-oriented.\"\n*   **Example (Cooking Demo):** \"This is a segment from a well-edited cooking tutorial. The combination of close-up shots, clear vocal instructions, and background music is designed to be educational and engaging.\"\n*   **Example (Event Recording):** \"This is an amateur, handheld recording of a live music performance in a small, crowded venue, capturing both the performance and the audience's reaction.\"","modelId":{"__rl":true,"mode":"list","value":"models/gemini-2.5-flash","cachedResultName":"models/gemini-2.5-flash"},"options":{},"resource":"video","inputType":"binary","operation":"analyze"},"credentials":{"googlePalmApi":{"id":"Pr8hxThM4qMjHnbs","name":"Karen"}},"typeVersion":1},{"id":"6d3c8aed-82e3-4522-9788-91aa7389f160","name":"get_message (Video)","type":"n8n-nodes-base.set","position":[3888,2016],"parameters":{"options":{},"assignments":{"assignments":[{"id":"d8935452-fe20-469d-a68d-1aad056cb8dd","name":"data","type":"string","value":"=Media Message Transcription:{{ $json.candidates?.[0]?.content?.parts?.[0]?.text || $json.content?.parts?.[0]?.text }}"}]}},"typeVersion":3.4},{"id":"52ca5378-0bfa-439d-849e-ea7151930686","name":"get_message (Audio)","type":"n8n-nodes-base.set","position":[3888,1856],"parameters":{"options":{},"assignments":{"assignments":[{"id":"d8935452-fe20-469d-a68d-1aad056cb8dd","name":"data","type":"string","value":"=Media Message Transcription:{{ $json.candidates?.[0]?.content?.parts?.[0]?.text || $json.content?.parts?.[0]?.text }}"}]}},"typeVersion":3.4},{"id":"0912e7ec-818f-4ccf-b29e-4fb01bf70660","name":"get_message (Image)","type":"n8n-nodes-base.set","position":[3888,1696],"parameters":{"options":{},"assignments":{"assignments":[{"id":"d8935452-fe20-469d-a68d-1aad056cb8dd","name":"data","type":"string","value":"=Media description: {{ $json.content.parts[0].text }}"}]}},"typeVersion":3.4},{"id":"6a66a1b2-1eef-453e-ae79-ad1d806f6cd3","name":"Get Mime Type","type":"n8n-nodes-base.code","position":[3248,2720],"parameters":{"jsCode":"const results = [];\n\nfor (const item of $input.all()) {\n  // --- IMPORTANTE ---\n  // Asumimos que el MIME type está en esta ruta.\n  // ¡Verifica que 'item.json.data.mimetype' es correcto para tus datos!\n  // Podría ser 'item.json.mimetype' o similar.\n  const mimetype = $('Descargar Media').first().json.data.mimetype || '';\n\n  let fileTypeCategory = 'other'; // Valor por defecto para tipos no reconocidos\n\n  // Usamos switch(true) para evaluar diferentes condiciones basadas en el mimetype\n  switch (true) {\n    // === Imágenes ===\n    case mimetype.startsWith('image/'):\n      fileTypeCategory = 'image';\n      break;\n\n    // === Audio ===\n    // Incluye mp3 ('audio/mpeg'), ogg, wav, etc.\n    case mimetype.startsWith('audio/'):\n      fileTypeCategory = 'audio';\n      break;\n\n    // === Video ===\n    // Incluye mp4, webm, mov ('video/quicktime'), etc.\n    case mimetype.startsWith('video/'):\n      fileTypeCategory = 'video';\n      break;\n\n    // === Documentos de Texto y Ofimática ===\n    case mimetype === 'application/pdf':\n      fileTypeCategory = 'pdf';\n      break;\n    \n    // Spreadsheets (Excel, ODS, etc.)\n    case mimetype === 'application/vnd.ms-excel':\n    case mimetype === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':\n    case mimetype === 'application/vnd.oasis.opendocument.spreadsheet':\n      fileTypeCategory = 'spreadsheet';\n      break;\n\n    // Word Documents\n    case mimetype === 'application/msword':\n    case mimetype === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':\n      fileTypeCategory = 'document';\n      break;\n    \n    // Archivos de texto plano (txt, md, log)\n    case mimetype === 'text/plain':\n      fileTypeCategory = 'text';\n      break;\n\n    case mimetype === 'text/csv':\n      fileTypeCategory = 'csv';\n      break;\n\n    case mimetype === 'text/html':\n      fileTypeCategory = 'html';\n      break;\n    \n    case mimetype === 'application/rtf':\n      fileTypeCategory = 'rtf';\n      break;\n\n    // === Datos Estructurados ===\n    case mimetype === 'application/json':\n      fileTypeCategory = 'json';\n      break;\n\n    case mimetype === 'application/xml':\n    case mimetype === 'text/xml':\n      fileTypeCategory = 'xml';\n      break;\n\n    // === Otros ===\n    case mimetype === 'text/calendar': // para .ics\n      fileTypeCategory = 'ics';\n      break;\n  }\n\n  // Añadimos la nueva propiedad 'fileTypeCategory' al objeto json del item\n  item.json.fileTypeCategory = fileTypeCategory;\n  \n  // Añadimos el item modificado al array de resultados\n  results.push(item);\n}\n\n// Devolvemos el array con todos los items modificados\nreturn results;"},"typeVersion":2},{"id":"b45c9a72-3b1c-41b2-9caf-5ee10b5ebfcf","name":"Media Type","type":"n8n-nodes-base.switch","position":[3440,2528],"parameters":{"rules":{"values":[{"outputKey":"image","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"1919febf-c06b-41d1-a02c-1082f2e444e4","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.fileTypeCategory }}","rightValue":"image"}]},"renameOutput":true},{"outputKey":"audio","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"51250085-0cb5-4442-b711-d7ef71c3c927","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.fileTypeCategory }}","rightValue":"audio"}]},"renameOutput":true},{"outputKey":"video","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"886256b8-5fa1-470a-a161-24a3d9d28285","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.fileTypeCategory }}","rightValue":"video"}]},"renameOutput":true},{"outputKey":"csv","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"f1aefe24-17fb-4bf8-84fb-949a6802b66e","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.fileTypeCategory }}","rightValue":"csv"}]},"renameOutput":true},{"outputKey":"html","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"b09d29b5-b263-4115-963d-d6879de78649","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.fileTypeCategory }}","rightValue":"html"}]},"renameOutput":true},{"outputKey":"ics","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"2a7822f4-889b-41d3-8a1c-7f4405eacb42","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.fileTypeCategory }}","rightValue":"ics"}]},"renameOutput":true},{"outputKey":"json","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"f09cd376-96df-4f3d-9218-6a918715335a","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.fileTypeCategory }}","rightValue":"json"}]},"renameOutput":true},{"outputKey":"ods","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"1bf5c1f9-38a9-4bc5-8757-b85f98441579","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.fileTypeCategory }}","rightValue":"ods"}]},"renameOutput":true},{"outputKey":"pdf","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"4988d14f-4e3f-4494-96b0-a1a9d70a2787","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.fileTypeCategory }}","rightValue":"pdf"}]},"renameOutput":true},{"outputKey":"rtf","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"f5bc921e-c083-4b12-8167-86a24e39fe5c","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.fileTypeCategory }}","rightValue":"rtf"}]},"renameOutput":true},{"outputKey":"text file","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"29251fca-c611-419c-85a2-a9e1ad6bd102","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.fileTypeCategory }}","rightValue":"text file"}]},"renameOutput":true},{"outputKey":"xml","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"fd1cbb91-f3c6-4b20-91dc-2e490f77fe96","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.fileTypeCategory }}","rightValue":"xml"}]},"renameOutput":true},{"outputKey":"spreadsheet","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"16fc2a80-c341-4a5d-9d50-a1856ffb5242","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.fileTypeCategory }}","rightValue":"spreadsheet"}]},"renameOutput":true}]},"options":{"fallbackOutput":"extra"}},"typeVersion":3.2},{"id":"6ee06090-67f3-4514-8797-5bb62f136826","name":"Analyze Image","type":"@n8n/n8n-nodes-langchain.googleGemini","position":[3712,1696],"parameters":{"modelId":{"__rl":true,"mode":"list","value":"models/gemini-2.5-flash-lite","cachedResultName":"models/gemini-2.5-flash-lite"},"options":{},"resource":"image","inputType":"binary","operation":"analyze"},"credentials":{"googlePalmApi":{"id":"Pr8hxThM4qMjHnbs","name":"Karen"}},"typeVersion":1},{"id":"2178effc-f7d2-4a20-b0c5-499c89352877","name":"When clicking ‘Execute workflow’","type":"n8n-nodes-base.manualTrigger","position":[3360,-208],"parameters":{},"typeVersion":1},{"id":"6387dd8e-69ed-46a1-b391-3ef1b95a70e4","name":"Agent Response","type":"n8n-nodes-base.set","position":[9680,1504],"parameters":{"options":{},"assignments":{"assignments":[{"id":"0f4cdb2c-9407-4783-83c6-4440faa74f00","name":"reponse","type":"string","value":"={{ $json.output }}"}]}},"typeVersion":3.4},{"id":"46a48d70-bf20-47c8-b770-979e89eb34fa","name":"AI Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[9376,1504],"parameters":{"text":"=# INPUTS\n<RETRIEVED_CONTEXT>\n{{ $json.text }}\n</RETRIEVED_CONTEXT>\n\n<USER_MESSAGE>\n{{ $('Get Message').item.json.message }}\n</USER_MESSAGE>","options":{"systemMessage":"=# ROLE\nYou are an intelligent Assistant capable of reasoning and answering complex queries.\n\n# INPUT DATA\nYou will receive two distinct inputs:\n1. <RETRIEVED_CONTEXT>: Factual background information provided by an internal memory system (NOT the user).\n2. <USER_MESSAGE>: The actual message sent by the user right now.\n\n# INSTRUCTIONS\n1. **Analyze User Intent:** Read <USER_MESSAGE> to understand what the user is asking or commenting on.\n2. **Consult Context:**\n   - If <RETRIEVED_CONTEXT> contains \"NO_CONTEXT\", ignore it completely and answer based on your general knowledge.\n   - If <RETRIEVED_CONTEXT> contains factual data (summaries, file contents, previous names), use this information as the absolute truth to construct your answer.\n3. **Synergy Check:** specifically look for extracted file data in the context. If the context says \"File name: X\" and \"Extracted data: Y\", treat \"Y\" as the content of the document the user is asking about.\n4. **Formulate Response:**\n   - Answer the <USER_MESSAGE> directly.\n   - **DETECT LANGUAGE:** Reply in the EXACT same language and tone as the <USER_MESSAGE>.\n   - Integrate the context naturally. Do NOT say \"According to the context...\" or \" The memory says...\". Just say the information as if you already knew it.\n\n# SAFETY & BEHAVIOR\n- If the Context contradicts the User Message regarding a fact (e.g., User says \"My name is X\" but Context proves \"Name is Y\"), politely correct or clarify based on the context.\n- Be helpful, concise, and professional.\n- Never reveal that you are receiving a context summary from another bot."},"promptType":"define"},"typeVersion":3.1},{"id":"eb0d0e55-1d6d-41a3-bffd-2c5e3d2d31f3","name":"Context Refiner","type":"@n8n/n8n-nodes-langchain.chainLlm","position":[8976,1504],"parameters":{"text":"=<Chat_History>\n{{ $json.history }}\n</Chat_History>\n\n<Current_User_Input>\n{{ $('Get Message').item.json.message }}\n</Current_User_Input>","batching":{},"messages":{"messageValues":[{"message":"=# SYSTEM ROLE\nYou are a \"Context Retrieval Processor\". You are a backend system, NOT a conversational assistant. You have NO personality.\n\n# INPUTS PROVIDED\n1. <CHAT_HISTORY>: Previous messages and structured file data (JSON, metadata, captions).\n2. <CURRENT_INPUT>: The latest message from the user.\n\n# CORE OBJECTIVE\nCompare the <CURRENT_INPUT> against the <CHAT_HISTORY>. Extract ONLY the factual information required to answer the current input.\n\n# PROCESSING RULES (Follow Strictly)\n\n1. **ANALYZE INTENT:** Read <CURRENT_INPUT>. Is the user asking a question, asking for a summary, or referencing a file?\n   - IF the input is just a greeting (e.g., \"Hola\", \"Hello\", \"Are you there?\") OR a generic compliment -> RETURN \"NO_CONTEXT\".\n   - IF the input requires information from the past -> PROCEED to Step 2.\n\n2. **DECODE STRUCTURED DATA:**\n   - Look for patterns like `File name:`, `Captions:`, and `Extracted data:`.\n   - **CRITICAL:** Connect the \"File name\" to its \"Extracted data\".\n   - *Example:* If history has \"File: invoice.pdf\" and \"Extracted: Total $50\", and user asks \"How much?\", you must extract: \"File invoice.pdf shows a total of $50\".\n\n3. **RESOLVE PRONOUNS:**\n   - If user asks \"What does **it** say?\" or \"Who is **he**?\", look in the <CHAT_HISTORY> to identify what \"it\" or \"he\" refers to. Extract that specific reference.\n\n4. **FILTERING:**\n   - Ignore polite conversation in history (e.g., \"Thank you\", \"Good morning\").\n   - Ignore metadata that is not requested (e.g., MIME types or raw variable names like `$json`) unless specifically asked for.\n\n# OUTPUT RULES\n- Output **ONLY** the facts.\n- Do NOT use conversational filler words (e.g., \"I found this...\", \"The context is...\").\n- Do NOT output markdown code blocks unless the extracted data is code.\n- If no relevant facts are found for the specific input -> RETURN \"NO_CONTEXT\".\n\n# FINAL RESPONSE\n(Output only the extracted facts or NO_CONTEXT)"}]},"promptType":"define"},"typeVersion":1.7},{"id":"47a4fe06-7a45-44fe-92bc-79cda433b549","name":"Push to chat_history","type":"n8n-nodes-base.redis","position":[8208,1680],"parameters":{"list":"=Chats_{{ $('Global Variables').item.json.number }}","tail":true,"operation":"push","messageData":"={{ $json.message_text.join('\\n') }}"},"credentials":{"redis":{"id":"Xzoiia7G1hwVmuT6","name":"Redis account"}},"typeVersion":1},{"id":"98c4bba6-775a-4d38-9c83-64b25bf83932","name":"Push first message to chat_history","type":"n8n-nodes-base.redis","position":[8208,1872],"parameters":{"list":"=Chats_{{ $('Global Variables').item.json.number }}","tail":true,"operation":"push","messageData":"=."},"credentials":{"redis":{"id":"Xzoiia7G1hwVmuT6","name":"Redis account"}},"typeVersion":1},{"id":"525f488e-5066-4c84-bd08-0959fdb3c33c","name":"Get chat_history1","type":"n8n-nodes-base.redis","position":[7184,1552],"parameters":{"key":"=Chats_{{  $('Global Variables').item.json.number }}","options":{},"operation":"get"},"credentials":{"redis":{"id":"Xzoiia7G1hwVmuT6","name":"Redis account"}},"typeVersion":1},{"id":"08497094-b7cd-4d03-8c0e-197360542870","name":"Push message chat_history (User And Agent)","type":"n8n-nodes-base.redis","position":[10032,1504],"parameters":{"list":"=Chats_{{ $('Global Variables').item.json.number }}","tail":true,"operation":"push","messageData":"=User: {{ $('Get Message').item.json.message }}\nAgent: {{ $('Agent Response').item.json.reponse }}"},"credentials":{"redis":{"id":"Xzoiia7G1hwVmuT6","name":"Redis account"}},"typeVersion":1},{"id":"92b3ffab-fb04-4575-855a-cb1ab75adb57","name":"Add Messages to chat_history (User And Agent)","type":"n8n-nodes-base.postgres","position":[10240,1504],"parameters":{"table":{"__rl":true,"mode":"list","value":"chat_history","cachedResultName":"chat_history"},"schema":{"__rl":true,"mode":"list","value":"public"},"columns":{"value":{"message_text":"=User: {{ $('Get Message').item.json.message }}\nAgent: {{ $('Agent Response').item.json.reponse }}","user_whatsapp_number":"={{ $('Global Variables').item.json.number }}"},"schema":[{"id":"message_id","type":"number","display":true,"removed":true,"required":false,"displayName":"message_id","defaultMatch":false,"canBeUsedToMatch":true},{"id":"user_whatsapp_number","type":"string","display":true,"required":true,"displayName":"user_whatsapp_number","defaultMatch":false,"canBeUsedToMatch":true},{"id":"message_text","type":"string","display":true,"required":true,"displayName":"message_text","defaultMatch":false,"canBeUsedToMatch":true},{"id":"message_timestamp","type":"dateTime","display":true,"removed":true,"required":false,"displayName":"message_timestamp","defaultMatch":false,"canBeUsedToMatch":true},{"id":"created_at","type":"dateTime","display":true,"removed":true,"required":false,"displayName":"created_at","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"credentials":{"postgres":{"id":"0mSlrLCIVfCVe5zJ","name":"Postgres account"}},"typeVersion":2.6},{"id":"a23a94ca-0c81-48d5-bace-738af244c867","name":"When Executed by Another Workflow","type":"n8n-nodes-base.executeWorkflowTrigger","position":[3408,336],"parameters":{"workflowInputs":{"values":[{"name":"Name"},{"name":"Number"},{"name":"ID"}]}},"typeVersion":1.1},{"id":"6e538c6a-1865-4784-a565-dac1ab16545e","name":"Parallel Writing status","type":"n8n-nodes-base.executeWorkflow","onError":"continueRegularOutput","position":[3504,960],"parameters":{"mode":"each","options":{"waitForSubWorkflow":false},"workflowId":{"__rl":true,"mode":"list","value":"YRqVfB8oZ54SRjUC","cachedResultUrl":"/workflow/YRqVfB8oZ54SRjUC","cachedResultName":"Mentour AI copy"},"workflowInputs":{"value":{"ID":"={{ $('Webhook').item.json.body.data.key.id }}","Name":"={{ $('Webhook').item.json.body.instance }}","Number":"={{ $('Webhook').item.json.body.data.key.remoteJid }}"},"schema":[{"id":"Name","type":"string","display":true,"removed":false,"required":false,"displayName":"Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Number","type":"string","display":true,"removed":false,"required":false,"displayName":"Number","defaultMatch":false,"canBeUsedToMatch":true},{"id":"ID","type":"string","display":true,"removed":false,"required":false,"displayName":"ID","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":true}},"typeVersion":1.3},{"id":"444d3835-f5d1-43dd-a7d1-7b9a2ada6610","name":"Google Gemini Chat Model1","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[9376,1696],"parameters":{"options":{},"modelName":"models/gemini-3-flash-preview"},"credentials":{"googlePalmApi":{"id":"Pr8hxThM4qMjHnbs","name":"Karen"}},"typeVersion":1},{"id":"eb8e098b-7c6b-4cde-bae9-fe4143122bb6","name":"Wait","type":"n8n-nodes-base.wait","position":[3648,512],"webhookId":"65187612-7e5b-4a76-8465-7bd694e3e172","parameters":{},"typeVersion":1.1},{"id":"1920d4a8-78c2-41f1-8179-a912b43d38b9","name":"chat_history in DataBase?","type":"n8n-nodes-base.if","position":[8000,1776],"parameters":{"options":{},"conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"18946671-190b-43d9-a88f-810184127ed2","operator":{"type":"array","operation":"notEmpty","singleValue":true},"leftValue":"={{ $json.message_text }}","rightValue":""}]}},"typeVersion":2.3},{"id":"3f6f770b-3b44-4675-b538-33ae53d39597","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[3280,-336],"parameters":{"color":7,"width":512,"height":320,"content":"## 1. Database Setup\nCreates the `chat_history` table in PostgreSQL. Execute this node manually **once** before activating the workflow."},"typeVersion":1},{"id":"4b6f4dff-5454-407f-be33-4bd779f0b381","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[3280,32],"parameters":{"color":7,"width":832,"height":688,"content":"## 2. Parallel UX Handling\nManages user experience (Read receipts, 'Typing...' status) in parallel using a sub-workflow to avoid adding latency to the main AI processing logic."},"typeVersion":1},{"id":"bd72d726-84ed-4434-95b7-173b24c82ca0","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[3280,768],"parameters":{"color":7,"width":1440,"height":752,"content":"## 3. Webhook & Configuration\nReceives the Evolution API payload and defines global variables (Buffer wait time, Cache duration, History limit)."},"typeVersion":1},{"id":"9e9ea3aa-852a-432c-bc26-ee13552f8dab","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[2896,1584],"parameters":{"color":7,"width":1840,"height":2400,"content":"## 4. Media Normalization\nDetects media types (Images, Audio, Documents) and downloads/converts them into a format compatible with the AI Agent."},"typeVersion":1},{"id":"3ddc5983-ec8a-496b-b21d-d02cac687e9b","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[4928,1184],"parameters":{"color":7,"width":2080,"height":1072,"content":"## 5. Smart Input Buffering\nUses Redis to:\n1. Group **Album files** into a single input.\n2. Debounce **Text messages** (waits X seconds) to prevent fragmented AI responses."},"typeVersion":1},{"id":"4dc66b66-9a03-43a5-ad23-1dffd23659b8","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[7120,1376],"parameters":{"color":7,"width":1600,"height":720,"content":"## 6. Hybrid Memory Retrieval\nOptimized fetch strategy: Checks Redis (fast cache) for recent history first. If empty, falls back to PostgreSQL (permanent storage)."},"typeVersion":1},{"id":"163ace07-b710-43fb-a754-c5ed15556a83","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","position":[8848,1360],"parameters":{"color":7,"width":1600,"height":608,"content":"## 7. Context Refinement & Generation\n1. **Refiner Agent:** Summarizes chat history to save tokens and reduce context rot.\n2. **Main Agent:** Generates the final response.\n3. **Sync:** Saves the interaction to both PostgreSQL and the Redis buffer."},"typeVersion":1},{"id":"fb24f4eb-c334-4aa1-b247-c8a72cf1d247","name":"Sticky Note9","type":"n8n-nodes-base.stickyNote","position":[10528,1360],"parameters":{"color":7,"width":1184,"height":640,"content":"## 8. Cache Lifecycle Manager\nKeeps the conversation active in Redis for a specific duration (e.g., 300s) after the last message to ensure high-speed retrieval."},"typeVersion":1},{"id":"52b4fc49-49bc-4fc3-a231-8377cd367344","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[3680,896],"parameters":{"color":3,"width":400,"height":464,"content":"## ⚠️ Core Configuration\nControl the buffering and memory logic here:\n\n*   **wait_buffer**: The debounce window (in seconds). The workflow waits this long for subsequent text messages to group them into a single AI prompt.\n*   **wait_conversation**: Redis TTL (in seconds). How long the active conversation stays in the \"Hot Cache\" after the last message.\n*   **max_chat_history**: The hard limit of past messages to fetch from PostgreSQL (Cold Storage) when the cache is empty."},"typeVersion":1},{"id":"99b522bd-49bf-4041-928c-91660c46c4cc","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[2800,-336],"parameters":{"width":388,"height":1070,"content":"## Advanced Evolution API Agent with Redis Buffering & Context Refinement\n\nThis production-ready template builds a high-performance WhatsApp chatbot using Evolution API. It solves common AI bot issues—latency, fragmented messages, and token costs—by implementing a hybrid memory architecture (Redis + PostgreSQL) and a multi-stage AI pipeline.\n\n### How it works\n1. **Parallel Ingestion:** The workflow triggers on new messages via Evolution API. A parallel branch immediately handles \"typing...\" status and read receipts to optimize perceived latency.\n2. **Intelligent Buffering:** Incoming messages are routed to Redis buffers. The system distinguishes between **Media Albums** (waiting for all files) and **Rapid Texts** (debouncing inputs for 5s) to consolidate user intent into a single prompt.\n3. **Hybrid Memory Retrieval:** Chat history is fetched from Redis (hot cache) for speed. If the cache expires, it falls back to PostgreSQL (persistent storage).\n4. **Context Optimization:** A fast \"Context Refiner\" model distills the chat history, passing only relevant context to the Main Agent. This prevents \"context rot\" and reduces token costs.\n5. **Execution & Sync:** The Main Agent generates the response. Finally, the conversation is saved to PostgreSQL and refreshed in the Redis cache.\n\n### Setup\n- [ ] **Install the Node:** Go to `Settings &gt; Community Nodes` in n8n and install `n8n-nodes-evolution-api`.\n- [ ] **Credentials:** Configure credentials for Redis, PostgreSQL, and your AI provider (e.g., OpenAI/Gemini).\n- [ ] **Database:** Execute the \"Create Table\" node once to initialize the `chat_history` table in PostgreSQL.\n- [ ] **Evolution API:** Set your `instanceName` and `apikey` in the Webhook node.\n- [ ] **Configuration:** Adjust parameters in the \"Global Variables\" node (Buffer Wait Time, Cache TTL, History Limit).\n- [ ] **Models:** Select a fast model for the Context Refiner and a capable model for the Main Agent."},"typeVersion":1},{"id":"252dc60c-71df-49ae-bbb0-ed561843872a","name":"Sticky Note15","type":"n8n-nodes-base.stickyNote","position":[4160,512],"parameters":{"color":2,"width":368,"height":208,"content":"## 💡 Need Assistance?\n\nIf you’d like help customizing or extending this workflow, feel free to reach out:  \n\n📧 Email: [johnsilva11031@gmail.com](mailto:johnsilva11031@gmail.com)  \n🔗 LinkedIn: [John Alejandro Silva Rodríguez](https://www.linkedin.com/in/john-alejandro-silva-rodriguez-48093526b/)"},"typeVersion":1}],"pinData":{"Webhook":[{"body":{"data":{"key":{"id":"A55E09C1326A8A08C11A6922E0313F3A","fromMe":false,"remoteJid":"573209174369@s.whatsapp.net","remoteJidAlt":"573209174369@s.whatsapp.net"},"source":"android","status":"DELIVERY_ACK","message":{"conversation":"hoka","messageContextInfo":{"messageSecret":{"0":178,"1":168,"2":247,"3":5,"4":202,"5":92,"6":201,"7":181,"8":198,"9":97,"10":73,"11":222,"12":207,"13":97,"14":114,"15":140,"16":162,"17":99,"18":169,"19":124,"20":71,"21":217,"22":103,"23":71,"24":209,"25":100,"26":40,"27":124,"28":184,"29":221,"30":232,"31":137},"deviceListMetadata":{"senderKeyHash":{"0":91,"1":194,"2":68,"3":237,"4":141,"5":206,"6":60,"7":101,"8":199,"9":45},"senderTimestamp":1770020339,"recipientKeyHash":{"0":21,"1":67,"2":24,"3":252,"4":254,"5":192,"6":71,"7":84,"8":133,"9":51},"senderKeyIndexes":[],"recipientTimestamp":1769672977,"recipientKeyIndexes":[]},"deviceListMetadataVersion":2}},"pushName":"Alejandro","instanceId":"af3e7d99-a42f-4729-b6b7-c4045cd43889","messageType":"conversation","messageTimestamp":1770957515},"event":"messages.upsert","apikey":"73F93794B632-426D-9513-479B9965C3CB","sender":"573123488826@s.whatsapp.net","instance":"Pruebas","date_time":"2026-02-13T01:38:35.287Z","server_url":"https://evolution.mentour.lat","destination":"https://n8n.mentour.lat/webhook/a/event"},"query":{},"params":{},"headers":{"host":"n8n.mentour.lat","accept":"application/json, text/plain, */*","cf-ray":"9cd1a3175d926ade-FRA","cdn-loop":"cloudflare; loops=1","x-real-ip":"172.70.251.70","cf-visitor":"{\"scheme\":\"https\"}","user-agent":"axios/1.12.2","cf-ipcountry":"FR","content-type":"application/json","content-length":"1303","accept-encoding":"gzip, br","x-forwarded-for":"172.70.251.70","cf-connecting-ip":"38.242.250.228","x-forwarded-host":"n8n.mentour.lat","x-forwarded-port":"443","x-forwarded-proto":"https","x-forwarded-server":"6a55b281ded1"},"webhookUrl":"https://n8n.mentour.lat/webhook/a/event/messages-upsert","executionMode":"production"}]},"connections":{"Wait":{"main":[[{"node":"Writting...","type":"main","index":0}]]},"Merge":{"main":[[{"node":"Analyze document","type":"main","index":0}]]},"Text?":{"main":[[{"node":"Normalize PDF","type":"main","index":0}],[{"node":"Merge","type":"main","index":0}]]},"Album?":{"main":[[{"node":"Push Media to Buffer","type":"main","index":0}],[{"node":"Push to Buffer","type":"main","index":0}]]},"Webhook":{"main":[[{"node":"Global Variables","type":"main","index":0},{"node":"Parallel Writing status","type":"main","index":0}]]},"AI Agent":{"main":[[{"node":"Agent Response","type":"main","index":0}]]},"Aggregate":{"main":[[{"node":"Normalize CSV","type":"main","index":0}]]},"Completed?":{"main":[[{"node":"Delete Media Buffer","type":"main","index":0}],[{"node":"No Operation, do nothing","type":"main","index":0}]]},"Media Type":{"main":[[{"node":"Analyze Image","type":"main","index":0}],[{"node":"Analyze audio","type":"main","index":0}],[{"node":"Analyze video","type":"main","index":0}],[{"node":"Extract from CSV","type":"main","index":0}],[{"node":"HTML Extract Generic1","type":"main","index":0}],[{"node":"Extract from ICS","type":"main","index":0}],[{"node":"Extract from JSON","type":"main","index":0}],[{"node":"Extract from ODS","type":"main","index":0}],[{"node":"Extract from PDF","type":"main","index":0},{"node":"Merge","type":"main","index":1}],[{"node":"Extract from RTF","type":"main","index":0}],[{"node":"Extract from File","type":"main","index":0}],[{"node":"Extract from XML","type":"main","index":0}],[{"node":"Extract from XLSX","type":"main","index":0}],[{"node":"get_error_message","type":"main","index":0}]]},"Get Message":{"main":[[{"node":"Get chat_history1","type":"main","index":0}]]},"Buffer Route":{"main":[[{"node":"No Operation, do nothing","type":"main","index":0}],[{"node":"Delete Buffer","type":"main","index":0}],[{"node":"Wait For User Other Fast Message","type":"main","index":0}]]},"Get ODS data":{"main":[[{"node":"Normalize ODS","type":"main","index":0}]]},"Get RTF data":{"main":[[{"node":"Normalize RTF","type":"main","index":0}]]},"Message Type":{"main":[[{"node":"get_message (text)","type":"main","index":0}],[{"node":"Push to Buffer (AlbumGroup)","type":"main","index":0}],[{"node":"Descargar Media","type":"main","index":0}]]},"Open session":{"main":[[]]},"Analyze Image":{"main":[[{"node":"get_message (Image)","type":"main","index":0}]]},"Analyze audio":{"main":[[{"node":"get_message (Audio)","type":"main","index":0}]]},"Analyze video":{"main":[[{"node":"get_message (Video)","type":"main","index":0}]]},"Delete Buffer":{"main":[[{"node":"Normalize Buffer","type":"main","index":0}]]},"Get Mime Type":{"main":[[{"node":"Media Type","type":"main","index":0}]]},"Get RTF data1":{"main":[[{"node":"Normalize XLSX","type":"main","index":0}]]},"Normalize CSV":{"main":[[{"node":"get_message (File message)","type":"main","index":0}]]},"Normalize ICS":{"main":[[{"node":"get_message (File message)","type":"main","index":0}]]},"Normalize ODS":{"main":[[{"node":"get_message (File message)","type":"main","index":0}]]},"Normalize PDF":{"main":[[{"node":"get_message (File message)","type":"main","index":0}]]},"Normalize RTF":{"main":[[{"node":"get_message (File message)","type":"main","index":0}]]},"Normalize XML":{"main":[[{"node":"get_message (File message)","type":"main","index":0}]]},"Read Messages":{"main":[[]]},"Send Response":{"main":[[{"node":"Push message chat_history (User And Agent)","type":"main","index":0}]]},"Agent Response":{"main":[[{"node":"Send Response","type":"main","index":0}]]},"Normalize HTML":{"main":[[{"node":"get_message (File message)","type":"main","index":0}]]},"Normalize JSON":{"main":[[{"node":"get_message (File message)","type":"main","index":0}]]},"Normalize XLSX":{"main":[[{"node":"get_message (File message)","type":"main","index":0}]]},"Push to Buffer":{"main":[[{"node":"Get From Buffer","type":"main","index":0}]]},"Context Refiner":{"main":[[{"node":"AI Agent","type":"main","index":0}]]},"Convert to File":{"main":[[{"node":"Get Mime Type","type":"main","index":0}]]},"Descargar Media":{"main":[[{"node":"Convert to File","type":"main","index":0}]]},"Get From Buffer":{"main":[[{"node":"Buffer Route","type":"main","index":0}]]},"Normalize input":{"main":[[{"node":"Check AlbumGroup","type":"main","index":0}]]},"Analyze document":{"main":[[{"node":"Normalize PDF (AI)","type":"main","index":0}]]},"Check AlbumGroup":{"main":[[{"node":"Album?","type":"main","index":0}]]},"Extract from CSV":{"main":[[{"node":"Aggregate","type":"main","index":0}]]},"Extract from ICS":{"main":[[{"node":"Normalize ICS","type":"main","index":0}]]},"Extract from ODS":{"main":[[{"node":"Get ODS data","type":"main","index":0}]]},"Extract from PDF":{"main":[[{"node":"Text?","type":"main","index":0}]]},"Extract from RTF":{"main":[[{"node":"Get RTF data","type":"main","index":0}]]},"Extract from XML":{"main":[[{"node":"Normalize XML","type":"main","index":0}]]},"Get chat_history":{"main":[[{"node":"Context Refiner","type":"main","index":0}]]},"Global Variables":{"main":[[{"node":"Message Type","type":"main","index":0}]]},"Normalize Buffer":{"main":[[{"node":"Get Message","type":"main","index":0}]]},"Extract from File":{"main":[[{"node":"Normalize text file","type":"main","index":0}]]},"Extract from JSON":{"main":[[{"node":"Normalize JSON","type":"main","index":0}]]},"Extract from XLSX":{"main":[[{"node":"Get RTF data1","type":"main","index":0}]]},"Get chat_history1":{"main":[[{"node":"chat_history In Buffer?","type":"main","index":0}]]},"get_error_message":{"main":[[{"node":"Normalize input","type":"main","index":0}]]},"Normalize PDF (AI)":{"main":[[{"node":"get_message (File message)","type":"main","index":0}]]},"get_message (text)":{"main":[[{"node":"Push to Buffer","type":"main","index":0}]]},"Delete Media Buffer":{"main":[[{"node":"Normalize MediaGroup Buffer","type":"main","index":0}]]},"Normalize text file":{"main":[[{"node":"get_message (File message)","type":"main","index":0}]]},"get_message (Audio)":{"main":[[{"node":"get_message (File message)","type":"main","index":0}]]},"get_message (Image)":{"main":[[{"node":"get_message (File message)","type":"main","index":0}]]},"get_message (Video)":{"main":[[{"node":"get_message (File message)","type":"main","index":0}]]},"Push Media to Buffer":{"main":[[{"node":"Get Album From Buffer","type":"main","index":0}]]},"Push to chat_history":{"main":[[{"node":"Get chat_history","type":"main","index":0}]]},"Aggregate all Messges":{"main":[[{"node":"chat_history in DataBase?","type":"main","index":0}]]},"Get Album From Buffer":{"main":[[{"node":"Completed?","type":"main","index":0}]]},"HTML Extract Generic1":{"main":[[{"node":"Normalize HTML","type":"main","index":0}]]},"chat_history In Buffer?":{"main":[[{"node":"Get chat_history","type":"main","index":0}],[{"node":"Get chat_history From DataBase","type":"main","index":0}]]},"Google Gemini Chat Model":{"ai_languageModel":[[{"node":"Context Refiner","type":"ai_languageModel","index":0}]]},"Google Gemini Chat Model1":{"ai_languageModel":[[{"node":"AI Agent","type":"ai_languageModel","index":0}]]},"chat_history in DataBase?":{"main":[[{"node":"Push to chat_history","type":"main","index":0}],[{"node":"Push first message to chat_history","type":"main","index":0}]]},"get_message (File message)":{"main":[[{"node":"Normalize input","type":"main","index":0}]]},"Buffer (chat_history) Route":{"main":[[{"node":"No Operation, do nothing1","type":"main","index":0}],[{"node":"Delete Buffer (chat_history)","type":"main","index":0}],[{"node":"Wait For end of conversation","type":"main","index":0}]]},"Normalize MediaGroup Buffer":{"main":[[{"node":"Get Message","type":"main","index":0}]]},"Delete Buffer (chat_history)":{"main":[[{"node":"Delete Buffer (chat_history)2","type":"main","index":0}]]},"Wait For end of conversation":{"main":[[{"node":"Get From Buffer(chat_history)","type":"main","index":0}]]},"Get From Buffer(chat_history)":{"main":[[{"node":"Buffer (chat_history) Route","type":"main","index":0}]]},"Push to Buffer (chat_history)":{"main":[[{"node":"Get From Buffer(chat_history)","type":"main","index":0}]]},"Get chat_history From DataBase":{"main":[[{"node":"Aggregate all Messges","type":"main","index":0}]]},"Wait For User Other Fast Message":{"main":[[{"node":"Get From Buffer","type":"main","index":0}]]},"When Executed by Another Workflow":{"main":[[{"node":"Open session","type":"main","index":0},{"node":"Read Messages","type":"main","index":0},{"node":"Wait","type":"main","index":0}]]},"Push first message to chat_history":{"main":[[{"node":"Get chat_history","type":"main","index":0}]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"Create Table chat_history","type":"main","index":0}]]},"Push message chat_history (User And Agent)":{"main":[[{"node":"Add Messages to chat_history (User And Agent)","type":"main","index":0}]]},"Add Messages to chat_history (User And Agent)":{"main":[[{"node":"Push to Buffer (chat_history)","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":103,"nodeTypes":{"n8n-nodes-base.if":{"count":5},"n8n-nodes-base.set":{"count":24},"n8n-nodes-base.code":{"count":4},"n8n-nodes-base.html":{"count":1},"n8n-nodes-base.noOp":{"count":2},"n8n-nodes-base.wait":{"count":3},"n8n-nodes-base.merge":{"count":1},"n8n-nodes-base.redis":{"count":16},"n8n-nodes-base.switch":{"count":4},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.postgres":{"count":3},"n8n-nodes-base.aggregate":{"count":2},"n8n-nodes-base.stickyNote":{"count":11},"n8n-nodes-base.convertToFile":{"count":1},"n8n-nodes-base.manualTrigger":{"count":1},"@n8n/n8n-nodes-langchain.agent":{"count":1},"n8n-nodes-base.executeWorkflow":{"count":1},"n8n-nodes-base.extractFromFile":{"count":9},"@n8n/n8n-nodes-langchain.chainLlm":{"count":1},"n8n-nodes-evolution-api.evolutionApi":{"count":5},"@n8n/n8n-nodes-langchain.googleGemini":{"count":4},"n8n-nodes-base.executeWorkflowTrigger":{"count":1},"@n8n/n8n-nodes-langchain.lmChatGoogleGemini":{"count":2}}},"status":"published","readyToDemo":null,"user":{"name":"John Alejandro SIlva","username":"alejandro-silva","bio":"Detail-oriented professional with a dual degree in Systems Engineering and Business Administration and international experience in technology and process improvement. I specialize in workflow automation with n8n, API integration, programming, and data analysis. Known for strong analytical skills and clear technical documentation.","verified":true,"links":["https://www.linkedin.com/in/john-alejandro-silva-rodriguez-48093526b/"],"avatar":"https://gravatar.com/avatar/aa8238738621b087e2ccf2dd45995f8ce0d4a279dd32aac466de486d5b823ec7?r=pg&d=retro&size=200"},"nodes":[{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":24,"icon":"file:merge.svg","name":"n8n-nodes-base.merge","codex":{"data":{"alias":["Join","Concatenate","Wait"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-sync-data-between-two-systems/","icon":"🏬","label":"How to synchronize data between two systems (one-way vs. two-way sync"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Merge"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTc3XzUxOCkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgNDhDMCAyMS40OTAzIDIxLjQ5MDMgMCA0OCAwSDExMkMxMzguNTEgMCAxNjAgMjEuNDkwMyAxNjAgNDhWNTZIMTk2LjI1MkMyNDAuNDM1IDU2IDI3Ni4yNTIgOTEuODE3MiAyNzYuMjUyIDEzNlYxOTJDMjc2LjI1MiAyMTQuMDkxIDI5NC4xNjEgMjMyIDMxNi4yNTIgMjMySDM1MlYyMjRDMzUyIDE5Ny40OSAzNzMuNDkgMTc2IDQwMCAxNzZINDY0QzQ5MC41MSAxNzYgNTEyIDE5Ny40OSA1MTIgMjI0VjI4OEM1MTIgMzE0LjUxIDQ5MC41MSAzMzYgNDY0IDMzNkg0MDBDMzczLjQ5IDMzNiAzNTIgMzE0LjUxIDM1MiAyODhWMjgwSDMxNi4yNTJDMjk0LjE2MSAyODAgMjc2LjI1MiAyOTcuOTA5IDI3Ni4yNTIgMzIwVjM3NkMyNzYuMjUyIDQyMC4xODMgMjQwLjQzNSA0NTYgMTk2LjI1MiA0NTZIMTYwVjQ2NEMxNjAgNDkwLjUxIDEzOC41MSA1MTIgMTEyIDUxMkg0OEMyMS40OTAzIDUxMiAwIDQ5MC41MSAwIDQ2NFY0MDBDMCAzNzMuNDkgMjEuNDkwMyAzNTIgNDggMzUySDExMkMxMzguNTEgMzUyIDE2MCAzNzMuNDkgMTYwIDQwMFY0MDhIMTk2LjI1MkMyMTMuOTI1IDQwOCAyMjguMjUyIDM5My42NzMgMjI4LjI1MiAzNzZWMzIwQzIyOC4yNTIgMjk0Ljc4NCAyMzguODU5IDI3Mi4wNDQgMjU1Ljg1MyAyNTZDMjM4Ljg1OSAyMzkuOTU2IDIyOC4yNTIgMjE3LjIxNiAyMjguMjUyIDE5MlYxMzZDMjI4LjI1MiAxMTguMzI3IDIxMy45MjUgMTA0IDE5Ni4yNTIgMTA0SDE2MFYxMTJDMTYwIDEzOC41MSAxMzguNTEgMTYwIDExMiAxNjBINDhDMjEuNDkwMyAxNjAgMCAxMzguNTEgMCAxMTJWNDhaTTEwNCA0OEMxMDguNDE4IDQ4IDExMiA1MS41ODE3IDExMiA1NlYxMDRDMTEyIDEwOC40MTggMTA4LjQxOCAxMTIgMTA0IDExMkg1NkM1MS41ODE3IDExMiA0OCAxMDguNDE4IDQ4IDEwNFY1NkM0OCA1MS41ODE3IDUxLjU4MTcgNDggNTYgNDhIMTA0Wk00NTYgMjI0QzQ2MC40MTggMjI0IDQ2NCAyMjcuNTgyIDQ2NCAyMzJWMjgwQzQ2NCAyODQuNDE4IDQ2MC40MTggMjg4IDQ1NiAyODhINDA4QzQwMy41ODIgMjg4IDQwMCAyODQuNDE4IDQwMCAyODBWMjMyQzQwMCAyMjcuNTgyIDQwMy41ODIgMjI0IDQwOCAyMjRINDU2Wk0xMTIgNDA4QzExMiA0MDMuNTgyIDEwOC40MTggNDAwIDEwNCA0MDBINTZDNTEuNTgxNyA0MDAgNDggNDAzLjU4MiA0OCA0MDhWNDU2QzQ4IDQ2MC40MTggNTEuNTgxNyA0NjQgNTYgNDY0SDEwNEMxMDguNDE4IDQ2NCAxMTIgNDYwLjQxOCAxMTIgNDU2VjQwOFoiIGZpbGw9IiM1NEI4QzkiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTc3XzUxOCI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Merge","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":26,"icon":"fa:arrow-right","name":"n8n-nodes-base.noOp","codex":{"data":{"alias":["nothing"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.noop/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"organization\"]","defaults":{"name":"No Operation, do nothing","color":"#b0b0b0"},"iconData":{"icon":"arrow-right","type":"icon"},"displayName":"No Operation, do nothing","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":30,"icon":"file:postgres.svg","name":"n8n-nodes-base.postgres","codex":{"data":{"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"url":"https://n8n.io/blog/why-i-chose-n8n-over-zapier-in-2020/","icon":"😍","label":"Why I chose n8n over Zapier in 2020"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.postgres/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/postgres/"}]},"categories":["Development","Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Postgres"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNzkgODEiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZD0iTTc3LjM5MSA0Ny45MjJjLS40NjYtMS40MTItMS42ODgtMi4zOTYtMy4yNjgtMi42MzItLjc0NS0uMTExLTEuNTk4LS4wNjQtMi42MDguMTQ0LTEuNzYuMzYzLTMuMDY1LjUwMS00LjAxOC41MjggMy41OTYtNi4wNzIgNi41MjEtMTIuOTk3IDguMjA0LTE5LjUxNSAyLjcyMi0xMC41NCAxLjI2OC0xNS4zNDEtLjQzMi0xNy41MTNDNzAuNzcgMy4xODUgNjQuMjA2LjA5NyA1Ni4yODcuMDAyYy00LjIyNC0uMDUyLTcuOTMzLjc4Mi05Ljg2NyAxLjM4MmEzNyAzNyAwIDAgMC01Ljc3LS41MjhjLTMuODA5LS4wNjEtNy4xNzQuNzctMTAuMDUgMi40NzZhNDYgNDYgMCAwIDAtNy4wOTgtMS43ODJDMTYuNTYxLjQxMSAxMC45NjggMS4yOTkgNi44NzYgNC4xOSAxLjkyMiA3LjY4OS0uMzc1IDEzLjc3LjA1IDIyLjI2MmMuMTM1IDIuNjk2IDEuNjQzIDEwLjkgNC4wMTggMTguNjggMS4zNjUgNC40NzIgMi44MiA4LjE4NSA0LjMyNiAxMS4wMzggMi4xMzUgNC4wNDYgNC40MTkgNi40MjggNi45ODQgNy4yODQgMS40MzguNDc5IDQuMDQ5LjgxNCA2Ljc5Ny0xLjQ3M2E2IDYgMCAwIDAgMS40MjkgMS4yM2MuNzgzLjQ5NCAxLjc0Ljg5NyAyLjY5NiAxLjEzNiAzLjQ0Ni44NjIgNi42NzQuNjQ2IDkuNDI3LS41NjFsLjA0MSAxLjM2Mi4wNiAxLjg5OWMuMTYzIDQuMDY0LjQ0IDcuMjIzIDEuMjU5IDkuNDM0LjA0NS4xMjIuMTA1LjMwNy4xNjkuNTAzLjQwOSAxLjI1MSAxLjA5MiAzLjM0NiAyLjgzIDQuOTg3IDEuOCAxLjY5OSAzLjk3OCAyLjIyIDUuOTcyIDIuMjIgMSAwIDEuOTU1LS4xMzEgMi43OTItLjMxMSAyLjk4NC0uNjM5IDYuMzczLTEuNjE0IDguODI0LTUuMTA0IDIuMzE4LTMuMyAzLjQ0NC04LjI3IDMuNjQ4LTE2LjEwMWwuMDc0LS42MzQuMDQ4LS40MTQuNTQ2LjA0OC4xNDEuMDFjMy4wMzkuMTM4IDYuNzU1LS41MDYgOS4wMzctMS41NjYgMS44MDMtLjgzNyA3LjU4Mi0zLjg4OCA2LjIyMS04LjAwNyIvPjxwYXRoIGZpbGw9IiMzMzY3OTEiIGQ9Ik03Mi4xOTUgNDguNzIzYy05LjAzNiAxLjg2NC05LjY1Ny0xLjE5NS05LjY1Ny0xLjE5NSA5LjU0MS0xNC4xNTcgMTMuNTI5LTMyLjEyNyAxMC4wODctMzYuNTI1QzYzLjIzNS0uOTk0IDQ2Ljk4MSA0LjY4IDQ2LjcxIDQuODI3bC0uMDg3LjAxNmMtMS43ODUtLjM3MS0zLjc4My0uNTkxLTYuMDI5LS42MjgtNC4wODktLjA2Ny03LjE5IDEuMDcyLTkuNTQ0IDIuODU3IDAgMC0yOC45OTUtMTEuOTQ1LTI3LjY0NyAxNS4wMjMuMjg3IDUuNzM3IDguMjIzIDQzLjQxIDE3LjY4OSAzMi4wMzEgMy40Ni00LjE2MSA2LjgwMy03LjY3OSA2LjgwMy03LjY3OSAxLjY2IDEuMTAzIDMuNjQ4IDEuNjY2IDUuNzMyIDEuNDYzbC4xNjItLjEzN2E2LjMgNi4zIDAgMCAwIC4wNjUgMS42MmMtMi40MzkgMi43MjUtMS43MjIgMy4yMDMtNi41OTcgNC4yMDYtNC45MzMgMS4wMTctMi4wMzUgMi44MjYtLjE0MyAzLjI5OSAyLjI5NC41NzQgNy42IDEuMzg2IDExLjE4NS0zLjYzM2wtLjE0My41NzNjLjk1Ni43NjUgMS42MjYgNC45NzggMS41MTQgOC43OTdzLS4xODggNi40NDEuNTY1IDguNDg5IDEuNTAzIDYuNjU2IDcuOTEyIDUuMjgyYzUuMzU1LTEuMTQ4IDguMTMtNC4xMjEgOC41MTYtOS4wODEuMjc0LTMuNTI2Ljg5NC0zLjAwNS45MzMtNi4xNThsLjQ5Ny0xLjQ5M2MuNTczLTQuNzguMDkxLTYuMzIyIDMuMzktNS42MDVsLjgwMi4wN2MyLjQyOC4xMSA1LjYwNi0uMzkxIDcuNDcxLTEuMjU3IDQuMDE2LTEuODY0IDYuMzk4LTQuOTc2IDIuNDM4LTQuMTU4Ii8+PHBhdGggZD0iTTMyLjc0NyAyNC42NmMtLjgxNC0uMTEzLTEuNTUyLS4wMDgtMS45MjUuMjc0YS43LjcgMCAwIDAtLjI5Mi40N2MtLjA0Ny4zMzYuMTg4LjcwNy4zMzMuODk4LjQwOS41NDIgMS4wMDYuOTE1IDEuNTk4Ljk5N2EyIDIgMCAwIDAgLjI1Ni4wMThjLjk4NiAwIDEuODgzLS43NjggMS45NjItMS4zMzUuMDk5LS43MS0uOTMyLTEuMTgzLTEuOTMxLTEuMzIybTI2Ljk3NS4wMjJjLS4wNzgtLjU1Ni0xLjA2OC0uNzE1LTIuMDA3LS41ODRzLTEuODQ4LjU1NC0xLjc3MiAxLjExMmMuMDYxLjQzNC44NDQgMS4xNzQgMS43NzEgMS4xNzRxLjExNyAwIC4yMzctLjAxNmMuNjE5LS4wODYgMS4wNzMtLjQ3OSAxLjI4OC0uNzA1LjMyOS0uMzQ1LjUxOC0uNzMuNDg0LS45OG0xNS40NzcgMjMuODI4Yy0uMzQ1LTEuMDQyLTEuNDUzLTEuMzc3LTMuMjk2LS45OTctNS40NzEgMS4xMjktNy40My4zNDctOC4wNzMtLjEyNyA0LjI1Mi02LjQ3OCA3Ljc1LTE0LjMwOCA5LjYzNy0yMS42MTQuODk0LTMuNDYxIDEuMzg4LTYuNjc1IDEuNDI4LTkuMjk0LjA0NS0yLjg3Ni0uNDQ1LTQuOTg4LTEuNDU1LTYuMjc5LTQuMDcyLTUuMjAzLTEwLjA0OC03Ljk5NC0xNy4yODMtOC4wNy00Ljk3My0uMDU2LTkuMTc1IDEuMjE3LTkuOTkgMS41NzVhMjUgMjUgMCAwIDAtNS42MjItLjcyMmMtMy43MzQtLjA2LTYuOTYxLjgzNC05LjYzMyAyLjY1NWE0MyA0MyAwIDAgMC03LjgyOC0yLjA1MmMtNi4zNDItMS4wMjEtMTEuMzgxLS4yNDgtMTQuOTc4IDIuMy00LjI5MSAzLjA0LTYuMjcyIDguNDc1LTUuODg4IDE2LjE1Mi4xMjkgMi41ODMgMS42MDEgMTAuNTI5IDMuOTIzIDE4LjEzOSAzLjA1NyAxMC4wMTYgNi4zOCAxNS42ODYgOS44NzcgMTYuODUyYTQuNCA0LjQgMCAwIDAgMS40MDIuMjMyYzEuMjc2IDAgMi44MzktLjU3NSA0LjQ2Ni0yLjUzMWExNjEgMTYxIDAgMCAxIDYuMTU2LTYuOTY2IDkuOSA5LjkgMCAwIDAgNC40MjkgMS4xOTFsLjAxLjEyMWMtLjMxLjM2OC0uNTY0LjY5LS43ODEuOTY1LTEuMDcgMS4zNTgtMS4yOTMgMS42NDEtNC43MzggMi4zNTEtLjk4LjIwMi0zLjU4Mi43MzgtMy42MiAyLjU2My0uMDQxIDEuOTkzIDMuMDc2IDIuODMgMy40MzEgMi45MTkgMS4yMzguMzEgMi40My40NjMgMy41NjguNDYzIDIuNzY2IDAgNS4yLS45MDkgNy4xNDUtMi42NjgtLjA2IDcuMTA2LjIzNiAxNC4xMDcgMS4wODkgMTYuMjQxLjY5OSAxLjc0NiAyLjQwNiA2LjAxNCA3Ljc5OCA2LjAxNC43OTEgMCAxLjY2Mi0uMDkyIDIuNjItLjI5NyA1LjYyNy0xLjIwNyA4LjA3MS0zLjY5NCA5LjAxNi05LjE3Ny41MDYtMi45MyAxLjM3NC05LjkyOCAxLjc4Mi0xMy42ODIuODYyLjI2OSAxLjk3MS4zOTIgMy4xNy4zOTIgMi41MDEgMCA1LjM4Ny0uNTMxIDcuMTk3LTEuMzcyIDIuMDMzLS45NDQgNS43MDItMy4yNjEgNS4wMzctNS4yNzR6TTYxLjggMjMuMTQ3Yy0uMDE5IDEuMTA4LS4xNzEgMi4xMTQtLjMzMyAzLjE2NC0uMTc0IDEuMTI5LS4zNTQgMi4yOTctLjM5OSAzLjcxNS0uMDQ1IDEuMzc5LjEyOCAyLjgxNC4yOTQgNC4yLjMzNyAyLjgwMS42ODIgNS42ODUtLjY1NSA4LjUzMWExMSAxMSAwIDAgMS0uNTkyLTEuMjE4Yy0uMTY2LS40MDMtLjUyNy0xLjA1LTEuMDI3LTEuOTQ2LTEuOTQ0LTMuNDg3LTYuNDk3LTExLjY1Mi00LjE2Ny0xNC45ODQuNjk0LS45OTIgMi40NTYtMi4wMTEgNi44NzktMS40NjN6TTU2LjQzOSA0LjM3NGM2LjQ4Mi4xNDMgMTEuNjA5IDIuNTY4IDE1LjI0IDcuMjA3IDIuNzg0IDMuNTU4LS4yODIgMTkuNzQ5LTkuMTU4IDMzLjcxNmwtLjI2OS0uMzM5LS4xMTItLjE0YzIuMjk0LTMuNzg4IDEuODQ1LTcuNTM2IDEuNDQ2LTEwLjg1OS0uMTY0LTEuMzY0LS4zMTktMi42NTItLjI4LTMuODYxLjA0MS0xLjI4My4yMS0yLjM4Mi4zNzQtMy40NDYuMjAyLTEuMzExLjQwNy0yLjY2Ny4zNS00LjI2NWExLjggMS44IDAgMCAwIC4wMzctLjYwMWMtLjE0NC0xLjUzMy0xLjg5NC02LjEyLTUuNDYyLTEwLjI3My0xLjk1MS0yLjI3MS00Ljc5Ny00LjgxMy04LjY4Mi02LjUyN2EyOS4zIDI5LjMgMCAwIDEgNi41MTUtLjYxMnpNMjAuMTY3IDUzLjI5OGMtMS43OTMgMi4xNTUtMy4wMzEgMS43NDItMy40MzggMS42MDctMi42NTMtLjg4NS01LjczLTYuNDkxLTguNDQ0LTE1LjM4Mi0yLjM0OC03LjY5My0zLjcyLTE1LjQyOC0zLjgyOS0xNy41OTctLjM0My02Ljg2IDEuMzItMTEuNjQxIDQuOTQzLTE0LjIxIDUuODk2LTQuMTgxIDE1LjU4OS0xLjY3OSAxOS40ODQtLjQwOWwtLjE3LjE2M2MtNi4zOTEgNi40NTUtNi4yNCAxNy40ODMtNi4yMjQgMTguMTU3YTIyIDIyIDAgMCAwIC4wNTEgMS4xMzVjLjExIDEuODU1LjMxNSA1LjMwNy0uMjMyIDkuMjE3LS41MDggMy42MzMuNjEyIDcuMTg5IDMuMDcyIDkuNzU2cS4zODMuMzk4Ljc5NS43NWExNjQgMTY0IDAgMCAwLTYuMDA4IDYuODE0em02LjgzLTkuMTEzYy0xLjk4My0yLjA2OS0yLjg4NC00Ljk0Ny0yLjQ3MS03Ljg5Ni41NzctNC4xMy4zNjQtNy43MjcuMjUtOS42NTlsLS4wMzktLjY5NGMuOTM0LS44MjggNS4yNjEtMy4xNDYgOC4zNDYtMi40MzkgMS40MDguMzIzIDIuMjY2IDEuMjgxIDIuNjIzIDIuOTMxIDEuODQ2IDguNTM5LjI0NCAxMi4wOTgtMS4wNDMgMTQuOTU3LS4yNjUuNTg5LS41MTYgMS4xNDYtLjczIDEuNzIybC0uMTY2LjQ0NWMtLjQyIDEuMTI2LS44MTEgMi4xNzMtMS4wNTMgMy4xNjctMi4xMDgtLjAwNi00LjE1OS0uOTA3LTUuNzE4LTIuNTM0em0uMzI0IDExLjUxNmE1IDUgMCAwIDEtMS40OTQtLjY0MmMuMjcxLS4xMjguNzU0LS4zMDEgMS41OTEtLjQ3NCA0LjA1Mi0uODM0IDQuNjc4LTEuNDIzIDYuMDQ1LTMuMTU4LjMxMy0uMzk4LjY2OS0uODQ5IDEuMTYtMS4zOTguNzMzLS44MjEgMS4wNjgtLjY4MiAxLjY3Ni0uNDMuNDkzLjIwNC45NzIuODIxIDEuMTY3IDEuNTAxLjA5Mi4zMjEuMTk1LjkzLS4xNDMgMS40MDQtMi44NTUgMy45OTctNy4wMTUgMy45NDYtMTAuMDAzIDMuMTk4em0yMS4yMDcgMTkuNzM1Yy00Ljk1NyAxLjA2Mi02LjcxMy0xLjQ2Ny03Ljg2OS00LjM1OS0uNzQ3LTEuODY3LTEuMTEzLTEwLjI4NS0uODUzLTE5LjU4MmExLjEgMS4xIDAgMCAwLS4wNDgtLjM1NiA1IDUgMCAwIDAtLjEzOS0uNjU3Yy0uMzg3LTEuMzUzLTEuMzMxLTIuNDg0LTIuNDYyLTIuOTUzLS40NS0uMTg2LTEuMjc1LS41MjgtMi4yNjctLjI3NC4yMTItLjg3MS41NzgtMS44NTUuOTc2LTIuOTIxbC4xNjctLjQ0OGMuMTg4LS41MDUuNDIzLTEuMDI5LjY3My0xLjU4MyAxLjM0Ny0yLjk5MiAzLjE5Mi03LjA5MSAxLjE5LTE2LjM1LS43NS0zLjQ2OC0zLjI1NC01LjE2MS03LjA1LTQuNzY4LTIuMjc2LjIzNS00LjM1OCAxLjE1NC01LjM5NiAxLjY4cS0uMzM0LjE2OS0uNjE4LjMyOWMuMjktMy40OTQgMS4zODUtMTAuMDI0IDUuNDgxLTE0LjE1NiAyLjU3OS0yLjYwMSA2LjAxNC0zLjg4NiAxMC4xOTktMy44MTcgOC4yNDYuMTM1IDEzLjUzNCA0LjM2NyAxNi41MTggNy44OTMgMi41NzEgMy4wMzkgMy45NjQgNi4xIDQuNTIgNy43NTEtNC4xNzktLjQyNS03LjAyMi40LTguNDYzIDIuNDYtMy4xMzUgNC40ODEgMS43MTUgMTMuMTc4IDQuMDQ2IDE3LjM1OC40MjcuNzY2Ljc5NiAxLjQyOC45MTIgMS43MDkuNzU5IDEuODM5IDEuNzQyIDMuMDY3IDIuNDU5IDMuOTY0LjIyLjI3NS40MzMuNTQxLjU5Ni43NzQtMS4yNjYuMzY1LTMuNTM5IDEuMjA4LTMuMzMyIDUuNDIyLS4xNjcgMi4xMTUtMS4zNTYgMTIuMDE2LTEuOTU5IDE1LjUxNC0uNzk3IDQuNjIxLTIuNDk3IDYuMzQzLTcuMjc5IDcuMzY4em0yMC42OTMtMjMuNjhjLTEuMjk0LjYwMS0zLjQ2IDEuMDUyLTUuNTE4IDEuMTQ4LTIuMjczLjEwNy0zLjQzLS4yNTUtMy43MDItLjQ3Ny0uMTI4LTIuNjI2Ljg1LTIuOTAxIDEuODg0LTMuMTkxLjE2My0uMDQ2LjMyMS0uMDkuNDc0LS4xNDRhNCA0IDAgMCAwIC4zMTMuMjNjMS44MjcgMS4yMDYgNS4wODUgMS4zMzYgOS42ODUuMzg2bC4wNS0uMDFjLS42Mi41OC0xLjY4MiAxLjM1OS0zLjE4NyAyLjA1OHoiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Postgres","typeVersion":3,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":5,"name":"Development"}]},{"id":33,"icon":"file:redis.svg","name":"n8n-nodes-base.redis","codex":{"data":{"resources":{"generic":[{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.redis/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/redis/"}]},"categories":["Development","Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Redis"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiNBNDFFMTEiIGQ9Ik01Ny42NTYgNDMuOTljLTMuMjAxIDEuNjgzLTE5Ljc4NyA4LjU2MS0yMy4zMTggMTAuNDE3cy01LjQ5NCAxLjgzOC04LjI4My40OTRjLTIuNzktMS4zNDMtMjAuNDQ5LTguNTM1LTIzLjYyOS0xMC4wNjdDLjgzNCA0NC4wNjYuMDAyIDQzLjQyMi4wMDIgNDIuODExdi02LjExN3MyMi45OC01LjA0NSAyNi42OS02LjM4OCA0Ljk5NS0xLjM5IDguMTU0LS4yMjVjMy4xNiAxLjE2NSAyMi4wMzUgNC42MDMgMjUuMTU0IDUuNzU2djYuMDMyYzAgLjYwNS0uNzIgMS4yODMtMi4zNSAyLjEyNHoiLz48cGF0aCBmaWxsPSIjRDgyQzIwIiBkPSJNNTcuNjU2IDM3Ljg3MmMtMy4yMDEgMS42ODUtMTkuNzg3IDguNTYtMjMuMzE4IDEwLjQxN3MtNS40OTQgMS44MzgtOC4yODMuNDk0Yy0yLjc5LTEuMzQzLTIwLjQ0OS04LjUzNC0yMy42My0xMC4wNjhzLTMuMjQzLTIuNTg4LS4xMjItMy44MmwyNC4zODgtOS41MmMzLjcxLTEuMzQgNC45OTQtMS4zOSA4LjE1My0uMjI1czE5LjY0MyA3Ljc4IDIyLjc0NyA4Ljk1MWMzLjEwMyAxLjE3IDMuMjQgMi4wODYuMDM3IDMuNzg2eiIvPjxwYXRoIGZpbGw9IiNBNDFFMTEiIGQ9Ik01Ny42NTYgMzQuMDE1Yy0zLjIwMSAxLjY4My0xOS43ODcgOC41NjEtMjMuMzE4IDEwLjQxN3MtNS40OTQgMS44MzgtOC4yODMuNDk1Yy0yLjc5LTEuMzQ0LTIwLjQ0OS04LjUzNi0yMy42MjktMTAuMDY3Qy44MzQgMzQuMDkyLjAwMiAzMy40NDcuMDAyIDMyLjgzNlYyNi43MnMyMi45OC01LjA0NSAyNi42OS02LjM4N2MzLjcxMS0xLjM0MyA0Ljk5NS0xLjM5IDguMTU0LS4yMjUgMy4xNiAxLjE2NSAyMi4wMzUgNC42MDIgMjUuMTU0IDUuNzU2djYuMDMyYzAgLjYwNS0uNzIgMS4yODMtMi4zNSAyLjEyM3oiLz48cGF0aCBmaWxsPSIjRDgyQzIwIiBkPSJNNTcuNjU2IDI3Ljg5OGMtMy4yMDEgMS42ODUtMTkuNzg3IDguNTYxLTIzLjMxOCAxMC40MTdzLTUuNDk0IDEuODM4LTguMjgzLjQ5NWMtMi43OS0xLjM0NC0yMC40NDktOC41MzQtMjMuNjMtMTAuMDY3LTMuMTgtMS41MzQtMy4yNDMtMi41ODgtLjEyMi0zLjgybDI0LjM4OC05LjUyYzMuNzEtMS4zNDMgNC45OTQtMS4zOSA4LjE1My0uMjI1IDMuMTYgMS4xNjYgMTkuNjQ0IDcuNzg1IDIyLjc2NSA4LjkzNXMzLjI0IDIuMDg1LjAzOCAzLjc4NXoiLz48cGF0aCBmaWxsPSIjQTQxRTExIiBkPSJNNTcuNjU2IDIzLjY3MWMtMy4yMDEgMS42ODMtMTkuNzg3IDguNTYxLTIzLjMxOCAxMC40MTlzLTUuNDk0IDEuODM4LTguMjgzLjQ5NWMtMi43OS0xLjM0NC0yMC40NDktOC41MzUtMjMuNjI5LTEwLjA2OS0xLjU5Mi0uNzY1LTIuNDI0LTEuNDExLTIuNDI0LTIuMDJ2LTYuMTFzMjIuOTgtNS4wNDUgMjYuNjktNi4zODggNC45OTUtMS4zOSA4LjE1NC0uMjI1YzMuMTYgMS4xNjUgMjIuMDM1IDQuNTkxIDI1LjE1NCA1Ljc0NXY2LjAzMmMwIC42MDUtLjcyIDEuMjgzLTIuMzUgMi4xMjN6Ii8+PHBhdGggZmlsbD0iI0Q4MkMyMCIgZD0iTTU3LjY1NiAxNy41NTNjLTMuMjAxIDEuNjg1LTE5Ljc4NyA4LjU2MS0yMy4zMTggMTAuNDE3cy01LjQ5NCAxLjgzOC04LjI4My40OTVjLTIuNzktMS4zNDQtMjAuNDQ5LTguNTM0LTIzLjYzLTEwLjA2OHMtMy4yNDMtMi41ODctLjEyMi0zLjgybDI0LjM4OC05LjUyYzMuNzEtMS4zNDMgNC45OTQtMS4zOSA4LjE1My0uMjI2IDMuMTYgMS4xNjUgMTkuNjQzIDcuNzg1IDIyLjc2NSA4LjkzNnMzLjI0IDIuMDg1LjAzOCAzLjc4NXoiLz48cGF0aCBmaWxsPSIjRkZGIiBkPSJtMzEuNDk3IDE1LjAzMi0xLjg4LTMuMTUzLTYuMDAyLS41NDUgNC40OC0xLjYzTDI2Ljc1IDcuMmw0LjE5MiAxLjY1MyAzLjk1NS0xLjMwNS0xLjA3IDIuNTg2IDQuMDMyIDEuNTI0LTUuMTk4LjU0NnptLTEwLjAxNCA2LjI3NSAxMy45MDMtMi4xNTMtNC4yIDYuMjExem0tMTEuMTctNS4xNjdjMC0xLjYxIDMuMzE0LTIuOTA2IDcuNDMxLTIuOTA2IDQuMTE4IDAgNy40MzIgMS4yOTYgNy40MzIgMi45MDZzLTMuMzE0IDIuOTA1LTcuNDMyIDIuOTA1Yy00LjExNyAwLTcuNDMxLTEuMjk1LTcuNDMxLTIuOTA1Ii8+PHBhdGggZmlsbD0iIzdBMEMwMCIgZD0ibTUyLjIzMyAxNS43MTQtOC4yMjQgMy4yNzYtLjAwNy02LjU1NnoiLz48cGF0aCBmaWxsPSIjQUQyMTE1IiBkPSJtNDQuMDEgMTguOTkxLS44OS4zNTMtOC4yMTctMy4yNzYgOS4wOTQtMy42M3oiLz48L2c+PC9zdmc+"},"displayName":"Redis","typeVersion":1,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":5,"name":"Development"}]},{"id":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":111,"icon":"fa:sign-in-alt","name":"n8n-nodes-base.executeWorkflow","codex":{"data":{"alias":["n8n","call","sub","workflow","sub-workflow","subworkflow"],"details":"The Execute Workflow node can be used when you want your workflow to treat another workflow as a step in your flow. It allows you to modularize your workflows and have a single source of truth for series of actions you perform often. ","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.executeworkflow/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"Execute Workflow","color":"#ff6d5a"},"iconData":{"icon":"sign-in-alt","type":"icon"},"displayName":"Execute Sub-workflow","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":112,"icon":"fa:map-signs","name":"n8n-nodes-base.switch","codex":{"data":{"alias":["Router","If","Path","Filter","Condition","Logic","Branch","Case"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"Switch","color":"#506000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"Switch","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":514,"icon":"fa:pause-circle","name":"n8n-nodes-base.wait","codex":{"data":{"alias":["pause","sleep","delay","timeout"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.wait/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Wait","color":"#804050"},"iconData":{"icon":"pause-circle","type":"icon"},"displayName":"Wait","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":837,"icon":"fa:sign-out-alt","name":"n8n-nodes-base.executeWorkflowTrigger","codex":{"data":{"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.executeworkflowtrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"When Executed by Another Workflow","color":"#ff6d5a"},"iconData":{"icon":"sign-out-alt","type":"icon"},"displayName":"Execute Workflow Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":838,"icon":"fa:mouse-pointer","name":"n8n-nodes-base.manualTrigger","codex":{"data":{"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.manualworkflowtrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\"]","defaults":{"name":"When clicking ‘Execute workflow’","color":"#909298"},"iconData":{"icon":"mouse-pointer","type":"icon"},"displayName":"Manual Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":842,"icon":"file:html.svg","name":"n8n-nodes-base.html","codex":{"data":{"alias":["extract","template","table"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.html/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"HTML"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTguNjQwNjIgMEgxMC40Mzc1VjEuNzgxMjVIMTIuMDkzN1YwSDEzLjg5MDZWNS4zOTA2MkgxMi4wOTM3VjMuNTkzNzVIMTAuNDUzMVY1LjM5MDYySDguNjQwNjJNMTYuMjY1NiAxLjc5Njg3SDE0LjY3OTdWMEgxOS42NTYyVjEuNzk2ODdIMTguMDYyNVY1LjM5MDYySDE2LjI2NTZNMjAuNDQ1MyAwSDIyLjMyODFMMjMuNDg0NCAxLjg5ODQ0TDI0LjY0MDYgMEgyNi41MjM0VjUuMzkwNjJIMjQuNzI2NlYyLjcxODc1TDIzLjQ2ODcgNC42NTYyNUwyMi4yMTA5IDIuNzE4NzVWNS4zOTA2MkgyMC40NDUzTTI3LjQxNDEgMEgyOS4yMTA5VjMuNjA5MzdIMzEuNzU3OFY1LjM5MDYySDI3LjQxNDEiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik04LjU3ODEyIDM2Ljc5NjlMNiA3Ljg1OTM4SDM0LjM0MzdMMzEuNzY1NiAzNi43ODEyTDIwLjE0ODQgNDAiIGZpbGw9IiNFNDREMjYiLz4KPHBhdGggZD0iTTIwLjE3MTkgMzcuNTM5MVYxMC4yMzQ0SDMxLjc1NzhMMjkuNTQ2OSAzNC45MjE5IiBmaWxsPSIjRjE2NTI5Ii8+CjxwYXRoIGQ9Ik0xMS4yNjU2IDEzLjc3MzRIMjAuMTcxOVYxNy4zMjAzSDE1LjE1NjJMMTUuNDg0NCAyMC45NTMxSDIwLjE3MTlWMjQuNDkyMkgxMi4yMzQ0TTEyLjM5MDYgMjYuMjczNEgxNS45NTMxTDE2LjIwMzEgMjkuMTA5NEwyMC4xNzE5IDMwLjE3MTlWMzMuODc1TDEyLjg5MDYgMzEuODQzNyIgZmlsbD0iI0VCRUJFQiIvPgo8cGF0aCBkPSJNMjkuMDQ2OSAxMy43NzM0SDIwLjE1NjJWMTcuMzIwM0gyOC43MTg3TTI4LjM5ODQgMjAuOTUzMUgyMC4xNTYyVjI0LjVIMjQuNTMxMkwyNC4xMTcyIDI5LjEwOTRMMjAuMTU2MiAzMC4xNzE5VjMzLjg1OTRMMjcuNDIxOSAzMS44NDM3IiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K"},"displayName":"HTML","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1119,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agent","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1123,"icon":"fa:link","name":"@n8n/n8n-nodes-langchain.chainLlm","codex":{"data":{"alias":["LangChain"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Chains","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"Basic LLM Chain","color":"#909298"},"iconData":{"icon":"link","type":"icon"},"displayName":"Basic LLM Chain","typeVersion":2,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1234,"icon":"file:convertToFile.svg","name":"n8n-nodes-base.convertToFile","codex":{"data":{"alias":["CSV","Spreadsheet","Excel","xls","xlsx","ods","tabular","encode","encoding","Move Binary Data","Binary","File","JSON","HTML","ICS","iCal","RTF","64","Base64"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.converttofile/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Files","Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Convert to File"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEzLjc2MTkgMkMxMy4yNDM3IDIgMTIuODIzNiAyLjQyMDA5IDEyLjgyMzYgMi45MzgzMVYxNS4yNTI2QzEzLjMxOTkgMTUuNDY0MyAxMy43ODUxIDE1Ljc3MiAxNC4xOTEgMTYuMTc1N0wyMS4yMjgzIDIzLjE3MzlDMjIuMDU0OCAyMy45OTU4IDIyLjUxOTUgMjUuMTEzMiAyMi41MTk1IDI2LjI3ODhDMjIuNTE5NSAyNy40NDQzIDIyLjA1NDggMjguNTYxOCAyMS4yMjgzIDI5LjM4MzdMMTQuMTkxIDM2LjM4MTlDMTMuNzg1IDM2Ljc4NTYgMTMuMzE5OSAzNy4wOTMyIDEyLjgyMzYgMzcuMzA1VjM3LjM1MjdDMTIuODIzNiAzNy44NzA5IDEzLjI0MzcgMzguMjkxIDEzLjc2MTkgMzguMjkxSDM5LjA2MTdDMzkuNTc5OSAzOC4yOTEgNDAgMzcuODcwOSA0MCAzNy4zNTI3TDQwIDE1Ljc5NEgyNy4xNDQzQzI2LjYyNjEgMTUuNzk0IDI2LjIwNiAxNS4zNzM5IDI2LjIwNiAxNC44NTU3VjJIMTMuNzYxOVoiIGZpbGw9IiMzQTQyRTkiLz4KPHBhdGggZD0iTTI4Ljg2NDUgMkMyOC43NzgxIDIgMjguNzA4MSAyLjA3MDAyIDI4LjcwODEgMi4xNTYzOVYxMi44MjI3QzI4LjcwODEgMTMuMDgxOCAyOC45MTgyIDEzLjI5MTkgMjkuMTc3MyAxMy4yOTE5SDM5Ljg0MzZDMzkuOTMgMTMuMjkxOSA0MCAxMy4yMjE5IDQwIDEzLjEzNTVMNDAgMTIuNjI2M0M0MCAxMi4zNzc4IDM5LjkwMTQgMTIuMTM5NSAzOS43MjYgMTEuOTYzNkwzMC4wNjEgMi4yNzU2MUMyOS44ODUgMi4wOTkxNiAyOS42NDYgMiAyOS4zOTY3IDJIMjguODY0NVoiIGZpbGw9IiMzQTQyRTkiLz4KPHBhdGggZD0iTTkuNzcyNjggMzQuNjAwM0M5LjA0MTg2IDMzLjg2NTQgOS4wNDUxNyAzMi42NzcyIDkuNzgwMDcgMzEuOTQ2NEwxMy42MzE1IDI4LjExNjNMMC45MzgzMTEgMjguMTE2M0MwLjQyMDA5NiAyOC4xMTYzIC0yLjI2NTE5ZS0wOCAyNy42OTYyIDAgMjcuMTc4TDguMjAyOTdlLTA4IDI1LjMwMTRDMS4wNDY4MmUtMDcgMjQuNzgzMiAwLjQyMDA5NSAyNC4zNjMxIDAuOTM4MzExIDI0LjM2MzFIMTMuNTUyOUw5Ljc4MDA3IDIwLjYxMTJDOS4wNDUxNyAxOS44ODA0IDkuMDQxODYgMTguNjkyMiA5Ljc3MjY4IDE3Ljk1NzNDMTAuNTAzNSAxNy4yMjI0IDExLjY5MTcgMTcuMjE5MSAxMi40MjY2IDE3Ljk0OTlMMTkuNDYzOSAyNC45NDgxQzE5LjgxODEgMjUuMzAwNCAyMC4wMTczIDI1Ljc3OTMgMjAuMDE3MyAyNi4yNzg4QzIwLjAxNzMgMjYuNzc4MyAxOS44MTgxIDI3LjI1NzIgMTkuNDYzOSAyNy42MDk1TDEyLjQyNjYgMzQuNjA3N0MxMS42OTE3IDM1LjMzODUgMTAuNTAzNSAzNS4zMzUyIDkuNzcyNjggMzQuNjAwM1oiIGZpbGw9IiMzQTQyRTkiLz4KPC9zdmc+Cg=="},"displayName":"Convert to File","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1235,"icon":"file:extractFromFile.svg","name":"n8n-nodes-base.extractFromFile","codex":{"data":{"alias":["CSV","Spreadsheet","Excel","xls","xlsx","ods","tabular","decode","decoding","Move Binary Data","Binary","File","PDF","JSON","HTML","ICS","iCal","txt","Text","RTF","XML","64","Base64","Convert"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.extractfromfile/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Files","Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Extract from File"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAuOTM3NSAyQzAuNDE5NzMzIDIgMCAyLjQxOTczIDAgMi45Mzc1VjM3LjMyMjFDMCAzNy44Mzk5IDAuNDE5NzMzIDM4LjI1OTYgMC45Mzc1IDM4LjI1OTZIMjYuMjE1NEMyNi43MzMyIDM4LjI1OTYgMjcuMTUyOSAzNy44Mzk5IDI3LjE1MjkgMzcuMzIyMUwyNy4xNTI5IDMwLjY3MTlMMTYuNzk2OSAzMC42NzE5QzE0Ljg5ODQgMzAuNjcxOSAxMy4zNTk0IDI5LjEzMjkgMTMuMzU5NCAyNy4yMzQ0VjI1LjM1OTRDMTMuMzU5NCAyMy40NjA5IDE0Ljg5ODQgMjEuOTIxOSAxNi43OTY5IDIxLjkyMTlIMjcuMTUyOUwyNy4xNTI5IDE1Ljc4MjFIMTQuMzA4M0MxMy43OTA2IDE1Ljc4MjEgMTMuMzcwOCAxNS4zNjI0IDEzLjM3MDggMTQuODQ0NlYySDAuOTM3NVoiIGZpbGw9IiMzNTNGNkUiLz4KPHBhdGggZD0iTTE2LjAyNzEgMkMxNS45NDA4IDIgMTUuODcwOCAyLjA2OTk2IDE1Ljg3MDggMi4xNTYyNVYxMi44MTM0QzE1Ljg3MDggMTMuMDcyMyAxNi4wODA3IDEzLjI4MjEgMTYuMzM5NiAxMy4yODIxSDI2Ljk5NjdDMjcuMDgzIDEzLjI4MjEgMjcuMTUyOSAxMy4yMTIyIDI3LjE1MjkgMTMuMTI1OUwyNy4xNTI5IDEyLjYxNzFDMjcuMTUyOSAxMi4zNjg4IDI3LjA1NDUgMTIuMTMwNyAyNi44NzkxIDExLjk1NUwxNy4yMjI1IDIuMjc1MzhDMTcuMDQ2NiAyLjA5OTA4IDE2LjgwNzkgMiAxNi41NTg4IDJIMTYuMDI3MVoiIGZpbGw9IiMzNTNGNkUiLz4KPHBhdGggZD0iTTI5Ljc2NDIgMzQuNjUwM0MyOS4wMzQgMzMuOTE2IDI5LjAzNzQgMzIuNzI4OCAyOS43NzE2IDMxLjk5ODZMMzMuNjE5NyAyOC4xNzE5TDE2Ljc5NjkgMjguMTcxOUMxNi4yNzkxIDI4LjE3MTkgMTUuODU5NCAyNy43NTIxIDE1Ljg1OTQgMjcuMjM0NFYyNS4zNTk0QzE1Ljg1OTQgMjQuODQxNiAxNi4yNzkxIDI0LjQyMTkgMTYuNzk2OSAyNC40MjE5TDMzLjU0MTIgMjQuNDIxOUwyOS43NzE2IDIwLjY3MzNDMjkuMDM3NCAxOS45NDMxIDI5LjAzNCAxOC43NTU5IDI5Ljc2NDIgMTguMDIxNkMzMC40OTQ0IDE3LjI4NzQgMzEuNjgxNiAxNy4yODQgMzIuNDE1OSAxOC4wMTQyTDM5LjQ0NzEgMjUuMDA2NEMzOS44MDEgMjUuMzU4MyA0MCAyNS44MzY4IDQwIDI2LjMzNTlDNDAgMjYuODM1IDM5LjgwMSAyNy4zMTM1IDM5LjQ0NzEgMjcuNjY1NUwzMi40MTU5IDM0LjY1NzZDMzEuNjgxNiAzNS4zODc4IDMwLjQ5NDQgMzUuMzg0NSAyOS43NjQyIDM0LjY1MDNaIiBmaWxsPSIjMzUzRjZFIi8+Cjwvc3ZnPgo="},"displayName":"Extract from File","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1236,"icon":"file:aggregate.svg","name":"n8n-nodes-base.aggregate","codex":{"data":{"alias":["Aggregate","Combine","Flatten","Transform","Array","List","Item"],"details":"","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.aggregate/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Aggregate"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48ZyBmaWxsPSIjRkY2RDVBIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTMyIDE0OGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDE0NmM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjI0YzAgNi42MjctNS4zNzMgMTItMTIgMTJINDRjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6bTAgOTZjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxNDZjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyNGMwIDYuNjI3LTUuMzczIDEyLTEyIDEySDQ0Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEyem0wIDk2YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTQ2YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkg0NGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGQ9Ik03NCA3NmMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDExNi4yMTdjMTcuNjczIDAgMzIgMTQuMzI3IDMyIDMydjU2YzAgMjYuOTc4IDEwLjI3MiA1MS41NTcgMjcuMTE5IDcwLjAzOSA1LjA1NSA1LjU0NSA1LjA1NSAxNC4zNzcgMCAxOS45MjItMTYuODQ3IDE4LjQ4Mi0yNy4xMTkgNDMuMDYxLTI3LjExOSA3MC4wMzl2NTZjMCAxNy42NzMtMTQuMzI3IDMyLTMyIDMySDg2Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTE2LjIxN2M0NC4xODMgMCA4MC0zNS44MTcgODAtODB2LTU2YzAtMzAuOTI4IDI1LjA3Mi01NiA1Ni01NmE1Ljc4MyA1Ljc4MyAwIDAgMCA1Ljc4My01Ljc4M3YtMzYuNDM0YTUuNzgzIDUuNzgzIDAgMCAwLTUuNzgzLTUuNzgzYy0zMC45MjggMC01Ni0yNS4wNzItNTYtNTZ2LTU2YzAtNDQuMTgzLTM1LjgxNy04MC04MC04MEg4NmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zNzYgMjQ0YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTEyYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkgzODhjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDUxMnY1MTJIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4="},"displayName":"Aggregate","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1262,"icon":"file:google.svg","name":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatgooglegemini/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"Google Gemini Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNDggNDgiPjxkZWZzPjxwYXRoIGlkPSJhIiBkPSJNNDQuNSAyMEgyNHY4LjVoMTEuOEMzNC43IDMzLjkgMzAuMSAzNyAyNCAzN2MtNy4yIDAtMTMtNS44LTEzLTEzczUuOC0xMyAxMy0xM2MzLjEgMCA1LjkgMS4xIDguMSAyLjlsNi40LTYuNEMzNC42IDQuMSAyOS42IDIgMjQgMiAxMS44IDIgMiAxMS44IDIgMjRzOS44IDIyIDIyIDIyYzExIDAgMjEtOCAyMS0yMiAwLTEuMy0uMi0yLjctLjUtNCIvPjwvZGVmcz48Y2xpcFBhdGggaWQ9ImIiPjx1c2UgeGxpbms6aHJlZj0iI2EiIG92ZXJmbG93PSJ2aXNpYmxlIi8+PC9jbGlwUGF0aD48cGF0aCBmaWxsPSIjRkJCQzA1IiBkPSJNMCAzN1YxMWwxNyAxM3oiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im0wIDExIDE3IDEzIDctNi4xTDQ4IDE0VjBIMHoiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiMzNEE4NTMiIGQ9Im0wIDM3IDMwLTIzIDcuOSAxTDQ4IDB2NDhIMHoiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiM0Mjg1RjQiIGQ9Ik00OCA0OCAxNyAyNGwtNC0zIDM1LTEweiIgY2xpcC1wYXRoPSJ1cmwoI2IpIi8+PC9zdmc+"},"displayName":"Google Gemini Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1309,"icon":"file:gemini.svg","name":"@n8n/n8n-nodes-langchain.googleGemini","codex":{"data":{"alias":["LangChain","video","document","audio","transcribe","assistant"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-langchain.googlegemini/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Miscellaneous","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"Google Gemini"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iX2Zvb3RlclNwYXJrXzk4dWR0XzE1MSIgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiB2aWV3Qm94PSIwIDAgNjQgNjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTU3LjA2NjcgMjguNjEwM0M1Mi4xMzU5IDI2LjQ4NzggNDcuODIxNyAyMy41NzYgNDQuMTIyMyAxOS44Nzg0QzQwLjQyNDcgMTYuMTgwOCAzNy41MTI4IDExLjg2NDkgMzUuMzkwMiA2LjkzNDJDMzQuNTc1NCA1LjA0NDQ5IDMzLjkyMDYgMy4xMDIwNCAzMy40MTg2IDEuMTEwNDlDMzMuMjU0OSAwLjQ1OTM2OCAzMi42NzExIDAuMDAxMDM3NiAzMiAwLjAwMTAzNzZDMzEuMzI4OCAwLjAwMTAzNzYgMzAuNzQ1IDAuNDU5MzY4IDMwLjU4MTMgMS4xMTA0OUMzMC4wNzkzIDMuMTAyMDQgMjkuNDI0NiA1LjA0MjY3IDI4LjYwOTcgNi45MzQyQzI2LjQ4NzIgMTEuODY0OSAyMy41NzUzIDE2LjE4MDggMTkuODc3NyAxOS44Nzg0QzE2LjE4IDIzLjU3NiAxMS44NjQgMjYuNDg3OCA2LjkzMzI3IDI4LjYxMDNDNS4wNDM1MyAyOS40MjUxIDMuMTAxMDUgMzAuMDc5OSAxLjEwOTQ3IDMwLjU4MTlDMC40NTgzMzggMzAuNzQ1NiAwIDMxLjMyOTQgMCAzMi4wMDA1QzAgMzIuNjcxNiAwLjQ1ODMzOCAzMy4yNTU1IDEuMTA5NDcgMzMuNDE5MUMzLjEwMTA1IDMzLjkyMTEgNS4wNDE3MiAzNC41NzU5IDYuOTMzMjcgMzUuMzkwN0MxMS44NjQgMzcuNTEzMiAxNi4xNzgyIDQwLjQyNTEgMTkuODc3NyA0NC4xMjI2QzIzLjU3NzEgNDcuODIwMiAyNi40ODcyIDUyLjEzNjEgMjguNjA5NyA1Ny4wNjY4QzI5LjQyNDYgNTguOTU2NSAzMC4wNzkzIDYwLjg5OSAzMC41ODEzIDYyLjg5MDVDMzAuNzQ1IDYzLjU0MTYgMzEuMzI4OCA2NCAzMiA2NEMzMi42NzExIDY0IDMzLjI1NDkgNjMuNTQxNiAzMy40MTg2IDYyLjg5MDVDMzMuOTIwNiA2MC44OTkgMzQuNTc1NCA1OC45NTgzIDM1LjM5MDIgNTcuMDY2OEMzNy41MTI4IDUyLjEzNjEgNDAuNDI0NyA0Ny44MjIgNDQuMTIyMyA0NC4xMjI2QzQ3LjgxOTkgNDAuNDI1MSA1Mi4xMzU5IDM3LjUxMzIgNTcuMDY2NyAzNS4zOTA3QzU4Ljk1NjQgMzQuNTc1OSA2MC44OTg5IDMzLjkyMTEgNjIuODkwNSAzMy40MTkxQzYzLjU0MTYgMzMuMjU1NSA2NCAzMi42NzE2IDY0IDMyLjAwMDVDNjQgMzEuMzI5NCA2My41NDE2IDMwLjc0NTYgNjIuODkwNSAzMC41ODE5QzYwLjg5ODkgMzAuMDc5OSA1OC45NTgyIDI5LjQyNTEgNTcuMDY2NyAyOC42MTAzWiIgZmlsbD0id2hpdGUiPjwvcGF0aD48bWFzayBpZD0ibWFzazBfMTA4NTlfNDg5NCIgc3R5bGU9Im1hc2stdHlwZTphbHBoYSIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iMCIgeT0iMCIgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0Ij48cGF0aCBkPSJNMzIgMEMzMi42NzExIDEuMTQ0ZS0wNSAzMy4yNTUzIDAuNDU4MjYzIDMzLjQxODkgMS4xMDkzOEMzMy45MjA5IDMuMTAwOTMgMzQuNTc1OCA1LjA0Mzg5IDM1LjM5MDYgNi45MzM1OUMzNy41MTMxIDExLjg2MzkgNDAuNDI0NyAxNi4xNzk2IDQ0LjEyMjEgMTkuODc3QzQ3LjgyMTUgMjMuNTc0NSA1Mi4xMzU3IDI2LjQ4NjkgNTcuMDY2NCAyOC42MDk0QzU4Ljk1OCAyOS40MjQyIDYwLjg5OSAzMC4wNzkxIDYyLjg5MDYgMzAuNTgxMUM2My41NDE1IDMwLjc0NDggNjMuOTk5OCAzMS4zMjgxIDY0IDMxLjk5OUM2NCAzMi42NzAxIDYzLjU0MTcgMzMuMjU0MiA2Mi44OTA2IDMzLjQxOEM2MC44OTkgMzMuOTE5OSA1OC45NTYxIDM0LjU3NDggNTcuMDY2NCAzNS4zODk2QzUyLjEzNTggMzcuNTEyMSA0Ny44MTk2IDQwLjQyMzcgNDQuMTIyMSA0NC4xMjExQzQwLjQyNDYgNDcuODIwNCAzNy41MTMxIDUyLjEzNDkgMzUuMzkwNiA1Ny4wNjU0QzM0LjU3NTggNTguOTU3IDMzLjkyMDkgNjAuODk4MSAzMy40MTg5IDYyLjg4OTZDMzMuMjU1MiA2My41NDA3IDMyLjY3MTEgNjMuOTk5IDMyIDYzLjk5OUMzMS4zMjg5IDYzLjk5OSAzMC43NDQ4IDYzLjU0MDcgMzAuNTgxMSA2Mi44ODk2QzMwLjA3OTEgNjAuODk4MSAyOS40MjQyIDU4Ljk1NTEgMjguNjA5NCA1Ny4wNjU0QzI2LjQ4NjkgNTIuMTM0OSAyMy41NzczIDQ3LjgxODYgMTkuODc3OSA0NC4xMjExQzE2LjE3ODYgNDAuNDIzNyAxMS44NjQyIDM3LjUxMjEgNi45MzM1OSAzNS4zODk2QzUuMDQyMDQgMzQuNTc0OCAzLjEwMDk2IDMzLjkxOTkgMS4xMDkzOCAzMy40MThDMC40NTgzMDkgMzMuMjU0MiAwIDMyLjY3MDEgMCAzMS45OTlDMC4wMDAyMDE1NDggMzEuMzI4MSAwLjQ1ODQ2MyAzMC43NDQ4IDEuMTA5MzggMzAuNTgxMUMzLjEwMDk2IDMwLjA3OTEgNS4wNDM4NiAyOS40MjQyIDYuOTMzNTkgMjguNjA5NEMxMS44NjQzIDI2LjQ4NjkgMTYuMTgwNCAyMy41NzQ1IDE5Ljg3NzkgMTkuODc3QzIzLjU3NTMgMTYuMTc5NiAyNi40ODY5IDExLjg2MzkgMjguNjA5NCA2LjkzMzU5QzI5LjQyNDIgNS4wNDIwNyAzMC4wNzkxIDMuMTAwOTMgMzAuNTgxMSAxLjEwOTM4QzMwLjc0NDggMC40NTgyNiAzMS4zMjg5IDAgMzIgMFoiIGZpbGw9ImJsYWNrIj48L3BhdGg+PHBhdGggZD0iTTMyIDBDMzIuNjcxMSAxLjE0NGUtMDUgMzMuMjU1MyAwLjQ1ODI2MyAzMy40MTg5IDEuMTA5MzhDMzMuOTIwOSAzLjEwMDkzIDM0LjU3NTggNS4wNDM4OSAzNS4zOTA2IDYuOTMzNTlDMzcuNTEzMSAxMS44NjM5IDQwLjQyNDcgMTYuMTc5NiA0NC4xMjIxIDE5Ljg3N0M0Ny44MjE1IDIzLjU3NDUgNTIuMTM1NyAyNi40ODY5IDU3LjA2NjQgMjguNjA5NEM1OC45NTggMjkuNDI0MiA2MC44OTkgMzAuMDc5MSA2Mi44OTA2IDMwLjU4MTFDNjMuNTQxNSAzMC43NDQ4IDYzLjk5OTggMzEuMzI4MSA2NCAzMS45OTlDNjQgMzIuNjcwMSA2My41NDE3IDMzLjI1NDIgNjIuODkwNiAzMy40MThDNjAuODk5IDMzLjkxOTkgNTguOTU2MSAzNC41NzQ4IDU3LjA2NjQgMzUuMzg5NkM1Mi4xMzU4IDM3LjUxMjEgNDcuODE5NiA0MC40MjM3IDQ0LjEyMjEgNDQuMTIxMUM0MC40MjQ2IDQ3LjgyMDQgMzcuNTEzMSA1Mi4xMzQ5IDM1LjM5MDYgNTcuMDY1NEMzNC41NzU4IDU4Ljk1NyAzMy45MjA5IDYwLjg5ODEgMzMuNDE4OSA2Mi44ODk2QzMzLjI1NTIgNjMuNTQwNyAzMi42NzExIDYzLjk5OSAzMiA2My45OTlDMzEuMzI4OSA2My45OTkgMzAuNzQ0OCA2My41NDA3IDMwLjU4MTEgNjIuODg5NkMzMC4wNzkxIDYwLjg5ODEgMjkuNDI0MiA1OC45NTUxIDI4LjYwOTQgNTcuMDY1NEMyNi40ODY5IDUyLjEzNDkgMjMuNTc3MyA0Ny44MTg2IDE5Ljg3NzkgNDQuMTIxMUMxNi4xNzg2IDQwLjQyMzcgMTEuODY0MiAzNy41MTIxIDYuOTMzNTkgMzUuMzg5NkM1LjA0MjA0IDM0LjU3NDggMy4xMDA5NiAzMy45MTk5IDEuMTA5MzggMzMuNDE4QzAuNDU4MzA5IDMzLjI1NDIgMCAzMi42NzAxIDAgMzEuOTk5QzAuMDAwMjAxNTQ4IDMxLjMyODEgMC40NTg0NjMgMzAuNzQ0OCAxLjEwOTM4IDMwLjU4MTFDMy4xMDA5NiAzMC4wNzkxIDUuMDQzODYgMjkuNDI0MiA2LjkzMzU5IDI4LjYwOTRDMTEuODY0MyAyNi40ODY5IDE2LjE4MDQgMjMuNTc0NSAxOS44Nzc5IDE5Ljg3N0MyMy41NzUzIDE2LjE3OTYgMjYuNDg2OSAxMS44NjM5IDI4LjYwOTQgNi45MzM1OUMyOS40MjQyIDUuMDQyMDcgMzAuMDc5MSAzLjEwMDkzIDMwLjU4MTEgMS4xMDkzOEMzMC43NDQ4IDAuNDU4MjYgMzEuMzI4OSAwIDMyIDBaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMTA4NTlfNDg5NCkiPjwvcGF0aD48L21hc2s+PGcgbWFzaz0idXJsKCNtYXNrMF8xMDg1OV80ODk0KSI+PGcgZmlsdGVyPSJ1cmwoI2ZpbHRlcjBfZl8xMDg1OV80ODk0KSI+PGVsbGlwc2UgY3g9IjE0LjIwODQiIGN5PSIxNi43MTY0IiByeD0iMTQuMjA4NCIgcnk9IjE2LjcxNjQiIHRyYW5zZm9ybT0ibWF0cml4KDAuOTQyMzQzIDAuMzM0NjQ5IC0wLjMzNDY1NiAwLjk0MjM0IC03Ljk3OSAxMy43NzM1KSIgZmlsbD0iI0ZGRTQzMiI+PC9lbGxpcHNlPjwvZz48ZyBmaWx0ZXI9InVybCgjZmlsdGVyMV9mXzEwODU5XzQ4OTQpIj48ZWxsaXBzZSBjeD0iMjcuMDU0MyIgY3k9IjIuNTUxMTQiIHJ4PSIxOC4zOTQ0IiByeT0iMTguNzk4NSIgZmlsbD0iI0ZDNDEzRCI+PC9lbGxpcHNlPjwvZz48ZyBmaWx0ZXI9InVybCgjZmlsdGVyMl9mXzEwODU5XzQ4OTQpIj48ZWxsaXBzZSBjeD0iMTkuMjI0NSIgY3k9IjI0LjkwNDIiIHJ4PSIxOS4yMjQ1IiByeT0iMjQuOTA0MiIgdHJhbnNmb3JtPSJtYXRyaXgoMC45OTg4MDcgLTAuMDQ4ODI1NCAwLjA0ODgyNjYgMC45OTg4MDcgLTEuNzI3NzggMzIuNjU3MykiIGZpbGw9IiMwMEI5NUMiPjwvZWxsaXBzZT48L2c+PGcgZmlsdGVyPSJ1cmwoI2ZpbHRlcjNfZl8xMDg1OV80ODk0KSI+PGVsbGlwc2UgY3g9IjE5LjIyNDUiIGN5PSIyNC45MDQyIiByeD0iMTkuMjI0NSIgcnk9IjI0LjkwNDIiIHRyYW5zZm9ybT0ibWF0cml4KDAuOTk4ODA3IC0wLjA0ODgyNTQgMC4wNDg4MjY2IDAuOTk4ODA3IC0xLjcyNzc4IDMyLjY1NzMpIiBmaWxsPSIjMDBCOTVDIj48L2VsbGlwc2U+PC9nPjxnIGZpbHRlcj0idXJsKCNmaWx0ZXI0X2ZfMTA4NTlfNDg5NCkiPjxlbGxpcHNlIGN4PSIxOC44NDI5IiBjeT0iMjAuNzQ0MSIgcng9IjE4Ljg0MjkiIHJ5PSIyMC43NDQxIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg1NDMwMSAtMC41MTk3NzkgMC41MTk3OSAwLjg1NDI5NCAtNy4xMzU3NCA0Ny41MDc4KSIgZmlsbD0iIzAwQjk1QyI+PC9lbGxpcHNlPjwvZz48ZyBmaWx0ZXI9InVybCgjZmlsdGVyNV9mXzEwODU5XzQ4OTQpIj48ZWxsaXBzZSBjeD0iNjYuNDYxNyIgY3k9IjI0Ljk3NyIgcng9IjE4LjA5MzMiIHJ5PSIxNy40MjI5IiBmaWxsPSIjMzE4NkZGIj48L2VsbGlwc2U+PC9nPjxnIGZpbHRlcj0idXJsKCNmaWx0ZXI2X2ZfMTA4NTlfNDg5NCkiPjxlbGxpcHNlIGN4PSIyMC45MjkyIiBjeT0iMjIuMDc1MiIgcng9IjIwLjkyOTIiIHJ5PSIyMi4wNzUyIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjc5NTk5IDAuNjA1MzEgLTAuNjA1MzIgMC43OTU5ODIgLTIuODE4ODUgLTcuNDMzMjMpIiBmaWxsPSIjRkJCQzA0Ij48L2VsbGlwc2U+PC9nPjxnIGZpbHRlcj0idXJsKCNmaWx0ZXI3X2ZfMTA4NTlfNDg5NCkiPjxlbGxpcHNlIGN4PSIyNC4xMzExIiBjeT0iMjIuMjkxOSIgcng9IjI0LjEzMTEiIHJ5PSIyMi4yOTE5IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjgyNDAzNyAwLjU2NjUzNiAtMC41NjY1NDYgMC44MjQwMyAzOS42MzM4IDAuMzEwNjA4KSIgZmlsbD0iIzMxODZGRiI+PC9lbGxpcHNlPjwvZz48ZyBmaWx0ZXI9InVybCgjZmlsdGVyOF9mXzEwODU5XzQ4OTQpIj48cGF0aCBkPSJNNTQuMjI1NSAtMi4zMDQwM0M1Ny4wMTk1IDEuNDk0NjIgNTMuNDI5NCA4Ljg4MDQgNDYuMjA2OCAxNC4xOTI2QzM4Ljk4NDIgMTkuNTA0OCAzMC44NjQyIDIwLjczMTggMjguMDcwMiAxNi45MzMxQzI1LjI3NjIgMTMuMTM0NSAyOC44NjYzIDUuNzQ4NjcgMzYuMDg4OSAwLjQzNjQ4NkM0My4zMTE1IC00Ljg3NTcgNTEuNDMxNSAtNi4xMDI2NyA1NC4yMjU1IC0yLjMwNDAzWiIgZmlsbD0iIzc0OUJGRiI+PC9wYXRoPjwvZz48ZyBmaWx0ZXI9InVybCgjZmlsdGVyOV9mXzEwODU5XzQ4OTQpIj48ZWxsaXBzZSBjeD0iMjcuNTg1MyIgY3k9IjE3LjE0NzgiIHJ4PSIyNy41ODUzIiByeT0iMTcuMTQ3OCIgdHJhbnNmb3JtPSJtYXRyaXgoMC43MzMxNjYgLTAuNjgwMDQ5IDAuNjgwMDYxIDAuNzMzMTU1IC0xMi4yNTgzIDkuNDk2OTUpIiBmaWxsPSIjRkM0MTNEIj48L2VsbGlwc2U+PC9nPjxnIGZpbHRlcj0idXJsKCNmaWx0ZXIxMF9mXzEwODU5XzQ4OTQpIj48ZWxsaXBzZSBjeD0iMTQuNzgxOSIgY3k9IjguNTk2MzciIHJ4PSIxNC43ODE5IiByeT0iOC41OTYzNyIgdHJhbnNmb3JtPSJtYXRyaXgoMC44MTMxODYgMC41ODIwMDQgLTAuNTgyMDE2IDAuODEzMTc3IDYuMzc4NDIgMzAuNTExKSIgZmlsbD0iI0ZGRUU0OCI+PC9lbGxpcHNlPjwvZz48L2c+PGRlZnM+PGZpbHRlciBpZD0iZmlsdGVyMF9mXzEwODU5XzQ4OTQiIHg9Ii0xOS42MTgiIHk9IjEyLjkwMjciIHdpZHRoPSIzOC44NjgxIiBoZWlnaHQ9IjQyLjc1NjIiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCI+PC9mZUZsb29kPjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIj48L2ZlQmxlbmQ+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMi40NTk2NSIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzEwODU5XzQ4OTQiPjwvZmVHYXVzc2lhbkJsdXI+PC9maWx0ZXI+PGZpbHRlciBpZD0iZmlsdGVyMV9mXzEwODU5XzQ4OTQiIHg9Ii0xNS4xMjIzIiB5PSItNDAuMDI5NiIgd2lkdGg9Ijg0LjM1MzMiIGhlaWdodD0iODUuMTYxNSIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ij48L2ZlRmxvb2Q+PGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiPjwvZmVCbGVuZD48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxMS44OTExIiByZXN1bHQ9ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXJfMTA4NTlfNDg5NCI+PC9mZUdhdXNzaWFuQmx1cj48L2ZpbHRlcj48ZmlsdGVyIGlkPSJmaWx0ZXIyX2ZfMTA4NTlfNDg5NCIgeD0iLTIwLjc2ODIiIHk9IjExLjQ4MzUiIHdpZHRoPSI3OC45MTYxIiBoZWlnaHQ9IjkwLjIxOTYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCI+PC9mZUZsb29kPjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIj48L2ZlQmxlbmQ+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTAuMTA4NiIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzEwODU5XzQ4OTQiPjwvZmVHYXVzc2lhbkJsdXI+PC9maWx0ZXI+PGZpbHRlciBpZD0iZmlsdGVyM19mXzEwODU5XzQ4OTQiIHg9Ii0yMC43NjgyIiB5PSIxMS40ODM1IiB3aWR0aD0iNzguOTE2MSIgaGVpZ2h0PSI5MC4yMTk2IiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiPjwvZmVGbG9vZD48ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSI+PC9mZUJsZW5kPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEwLjEwODYiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8xMDg1OV80ODk0Ij48L2ZlR2F1c3NpYW5CbHVyPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImZpbHRlcjRfZl8xMDg1OV80ODk0IiB4PSItMTkuODUiIHk9IjE0Ljk2NjQiIHdpZHRoPSI3OS4xODg2IiBoZWlnaHQ9IjgwLjkzNzgiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCI+PC9mZUZsb29kPjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIj48L2ZlQmxlbmQ+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTAuMTA4NiIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzEwODU5XzQ4OTQiPjwvZmVHYXVzc2lhbkJsdXI+PC9maWx0ZXI+PGZpbHRlciBpZD0iZmlsdGVyNV9mXzEwODU5XzQ4OTQiIHg9IjI5LjE1NjEiIHk9Ii0xMS42NTgyIiB3aWR0aD0iNzQuNjExMSIgaGVpZ2h0PSI3My4yNzAzIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiPjwvZmVGbG9vZD48ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSI+PC9mZUJsZW5kPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjkuNjA2MTMiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8xMDg1OV80ODk0Ij48L2ZlR2F1c3NpYW5CbHVyPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImZpbHRlcjZfZl8xMDg1OV80ODk0IiB4PSItMzguMjkxIiB5PSItMTYuMjY4NyIgd2lkdGg9Ijc3LjUzOCIgaGVpZ2h0PSI3OC4xNTEzIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiPjwvZmVGbG9vZD48ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSI+PC9mZUJsZW5kPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjguNzA1OTEiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8xMDg1OV80ODk0Ij48L2ZlR2F1c3NpYW5CbHVyPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImZpbHRlcjdfZl8xMDg1OV80ODk0IiB4PSI3Ljc4MDM4IiB5PSItNi4wOTgxIiB3aWR0aD0iNzguMjE4MSIgaGVpZ2h0PSI3Ni44OTgyIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiPjwvZmVGbG9vZD48ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSI+PC9mZUJsZW5kPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjcuNzc0NzMiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8xMDg1OV80ODk0Ij48L2ZlR2F1c3NpYW5CbHVyPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImZpbHRlcjhfZl8xMDg1OV80ODk0IiB4PSIxMy4yMDgyIiB5PSItMTguNDI1IiB3aWR0aD0iNTUuODc5MyIgaGVpZ2h0PSI1MS40NzkxIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiPjwvZmVGbG9vZD48ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSI+PC9mZUJsZW5kPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjYuOTU2OTQiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8xMDg1OV80ODk0Ij48L2ZlR2F1c3NpYW5CbHVyPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImZpbHRlcjlfZl8xMDg1OV80ODk0IiB4PSItMTUuNDczOSIgeT0iLTMxLjAyNzIiIHdpZHRoPSI3MC4yMDM0IiBoZWlnaHQ9IjY4LjY3MzUiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCI+PC9mZUZsb29kPjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIj48L2ZlQmxlbmQ+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNS44NzU5OCIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzEwODU5XzQ4OTQiPjwvZmVHYXVzc2lhbkJsdXI+PC9maWx0ZXI+PGZpbHRlciBpZD0iZmlsdGVyMTBfZl8xMDg1OV80ODk0IiB4PSItMTQuMTczIiB5PSIyMC40NzQiIHdpZHRoPSI1NS4xMzczIiBoZWlnaHQ9IjUxLjI2MSIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ij48L2ZlRmxvb2Q+PGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiPjwvZmVCbGVuZD48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI3LjI3MjUzIiByZXN1bHQ9ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXJfMTA4NTlfNDg5NCI+PC9mZUdhdXNzaWFuQmx1cj48L2ZpbHRlcj48bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMTA4NTlfNDg5NCIgeDE9IjE4LjE5MzEiIHkxPSI0Mi44MjEiIHgyPSI1MS40MzM1IiB5Mj0iMTQuNzk1OSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM0ODkzRkMiPjwvc3RvcD48c3RvcCBvZmZzZXQ9IjAuMjciIHN0b3AtY29sb3I9IiM0ODkzRkMiPjwvc3RvcD48c3RvcCBvZmZzZXQ9IjAuNzc2OTgxIiBzdG9wLWNvbG9yPSIjOTY5REZGIj48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjQkQ5OUZFIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PC9zdmc+Cg=="},"displayName":"Google Gemini","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":40,"name":"Support Chatbot"},{"id":48,"name":"AI RAG"}],"image":[]}}