{"workflow":{"id":12671,"name":"Route and categorize Gmail emails to Slack with Llama 3 via OpenRouter","views":54,"recentViews":0,"totalViews":54,"createdAt":"2026-01-13T06:25:57.204Z","description":"This n8n template from [Intuz](https://www.intuz.com/) provides a complete and automated solution to transform your team's inbox management. \n\nIt acts as an intelligent agent that reads incoming Gmail messages, uses AI to determine their category, and automatically routes them to the correct Slack channel—even creating new channels on the fly for new topics.\n\n## Who's this workflow for?\n- Customer Support Teams\n- Sales & Lead Management Teams\n- Operations & Project Management Teams\n- Any team that uses Slack as a central hub for communication and triaging tasks.\n\n## How it works\n**1. Monitor New Emails:**\nThe workflow continuously checks a specified Gmail account for new, unread emails. It automatically filters out spam, drafts, and duplicates.\n\n**2. AI Categorization:** \nEach new email's subject and body are sent to an AI model (like Llama 3 via OpenRouter). The AI analyzes the content and assigns a category based on a predefined list (e.g., sales, marketing, accounts, internal).\n\n**3. Find or Create Slack Channel:** \nThe workflow then checks your Slack workspace to see if a channel corresponding to the AI's category already exists (e.g., #sales).\n\n**4. Route the Email:**\n- If the channel exists: The workflow posts a formatted summary of the email, a link to the original message in Gmail, and a \"Reply\" button directly into the existing channel.\n- If the channel does NOT exist: The workflow automatically creates a new public channel (e.g., #new-category), invites a designated user, and then posts the email summary.\n\n## Key Requirements to Use This Template\n\n**1. n8n Instance & Required Nodes:**\n- An active n8n account (Cloud or self-hosted).\n- This workflow uses the official n8n LangChain integration (@n8n/n8n-nodes-langchain). If you are using a self-hosted version of n8n, please ensure this package is installed.\n\n**2. Gmail Account:** \nAn active Gmail account with API access enabled.\n\n**3. Slack Workspace & App:**\n- A Slack workspace where you have permission to install apps.\n- A Slack App with a Bot Token that has the following scopes: channels:read, channels:manage, chat:write, groups:write, and users:read.\n\n**4. OpenRouter Account:** \nAn account with OpenRouter to access various AI models like Llama 3. You will need an API key.\n\n## Setup Instructions\n**1. Gmail Configuration:**\n- In the \"Capture Gmail Event\" (Gmail Trigger) node, connect your Gmail account using OAuth2 credentials.\n\n**2. OpenRouter AI Configuration:**\n- In the \"OpenRouter Chat Model\" node, create a new credential and add your OpenRouter API key.\n\n**3. Slack Configuration:**\n- Create a Slack App: Go to api.slack.com/apps, create a new app, and install it to your workspace.\n- Set Permissions: In your app's \"OAuth & Permissions\" settings, add the following Bot\n- Token Scopes: channels:read, channels:manage, chat:write, groups:write, users:read. Reinstall the app to your workspace after adding them.\n- Get Bot Token: Copy the \"Bot User OAuth Token\" (it starts with xoxb-).\n- Connect in n8n: In all Slack nodes in the workflow, create a new credential and paste this Bot Token.\n- Set User to Invite: In the \"Invite a user to a channel\" node, replace the placeholder User ID (U0A6ULM7CGK) with the Slack Member ID of the user you want to be automatically invited to new channels.\n\n**4. Activate the Workflow:**\nSave the workflow and toggle the \"Active\" switch to ON. Your intelligent email routing system is now live!\n\n## Support\nIf you need help setting up this workflow or require a custom version tailored to your specific use case, please feel free to reach out to the template author:\n\n- Website: https://www.intuz.com/n8n-workflow-automation-templates\n- Email: getstarted@intuz.com\n- LinkedIn: https://www.linkedin.com/company/intuz\n- Get Started: https://n8n.partnerlinks.io/intuz\n\n## For Custom Worflow Automation\nClick here- [Get Started](https://www.intuz.com/get-started)\n","workflow":{"id":"vxEhTtXLu9gxpqkc","meta":{"instanceId":"a5925672c1c1d5613a7bfd347269edc98458b5a7e08f0bf7445ee5349c8e0d91","templateCredsSetupCompleted":true},"name":"Gmail-to-Slack Email Automation","tags":[],"nodes":[{"id":"8eec9a72-61ed-4e5d-bb82-0573e3bde047","name":"Structured Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[-208,128],"parameters":{"autoFix":true,"jsonSchemaExample":"{\n\t\"category\": \"sales\"\n}"},"typeVersion":1.3},{"id":"d3e96249-4dbe-4f64-abe6-7ce73ef63bf9","name":"Merge Category","type":"n8n-nodes-base.set","position":[368,-128],"parameters":{"options":{},"assignments":{"assignments":[{"id":"dae19e62-7814-4cfe-b746-ae011a30c74e","name":"output.category","type":"string","value":"={{ $json.output.category }}"},{"id":"23ac8d06-5336-4029-a6bd-f02c95a6290f","name":"id","type":"string","value":"={{ $('Arrange Email Data').item.json.id }}"},{"id":"d52f243e-e1eb-49f2-8175-657999ea4972","name":"text","type":"string","value":"={{ $('Arrange Email Data').item.json.text }}"},{"id":"79b26d37-635b-4551-8a46-e5c33b51bd45","name":"textAsHtml","type":"string","value":"={{ $('Arrange Email Data').item.json.textAsHtml }}"},{"id":"f79f5c7d-a94d-4591-86d1-1ccffc8b3971","name":"subject","type":"string","value":"={{ $('Arrange Email Data').item.json.subject }}"},{"id":"d7893412-bbc1-4bdb-9aa0-4e88fabc6b93","name":"date","type":"string","value":"={{ $('Arrange Email Data').item.json.date }}"},{"id":"61c1b15a-4103-4489-9898-e1cb146103b6","name":"to","type":"object","value":"={{ $('Arrange Email Data').item.json.to }}"},{"id":"063af757-8085-4cc5-b46c-ea0ade642a58","name":"from","type":"object","value":"={{ $('Arrange Email Data').item.json.from }}"},{"id":"fabdf119-1a9b-4b64-bab5-eb64bee82de8","name":"threadId","type":"string","value":"={{ $('Arrange Email Data').item.json.threadId }}"}]}},"typeVersion":3.4},{"id":"60fc0df9-fe4b-4586-9f7c-d35b33b3b1b2","name":"Invite a user to a channel","type":"n8n-nodes-base.slack","position":[2352,192],"webhookId":"3a96fc13-9cd1-4ae3-b70d-3aff21c2faec","parameters":{"userIds":"={{ [\"U0A6ULM7CGK\"] }}","resource":"channel","channelId":{"__rl":true,"mode":"id","value":"={{ $json.id }}"},"operation":"invite"},"credentials":{"slackApi":{"id":"ASwwSjm4vc3kKDYq","name":"Slack account"}},"typeVersion":2.4},{"id":"47e3d00b-ea89-4c0e-816d-90e897259d23","name":"Find Category","type":"@n8n/n8n-nodes-langchain.agent","position":[-272,-128],"parameters":{"text":"=You are an email categorization assistant.\n\nIMPORTANT DEFINITIONS:\n- \"accounts\" is ONLY for financial, billing, payments, invoices, taxes, subscriptions, or accounting-related emails.\n- Login, security, authentication, OTP, two-factor authentication (2FA), password reset, or access-related emails MUST NOT be classified as \"accounts\".\n- Security, login, or access-related emails MUST be classified as \"internal\".\n\nStep 1:\nIf the email fits one of the predefined categories, select it.\n\nPredefined categories:\n- sales        → leads, deals, demos, pricing, proposals\n- marketing    → campaigns, newsletters, promotions\n- product      → feature updates, roadmap, product feedback\n- engineering  → bugs, errors, deployments, technical issues\n- ai           → LLMs, ML models, AI tools, AI research\n- internal     → authentication, login alerts, security, OTP, 2FA, password reset, internal notifications\n- accounts     → invoices, billing, payments, subscriptions, accounting, taxes\n\nStep 2:\nIf NONE apply, propose a NEW category name.\n\nRules for new category:\n- lowercase\n- hyphen-separated\n- max 1 word\n- max 30 characters\n\nEmail subject:\n{{$json.subject}}\n\nEmail body:\n{{$json.text}}\n\nReturn ONLY valid JSON:\n{\n  \"category\": \"<category>\"\n}","options":{},"promptType":"define","hasOutputParser":true},"typeVersion":3},{"id":"9b66ffcf-edd5-41d2-a282-b8eedb525982","name":"Format Channel Data","type":"n8n-nodes-base.code","position":[1040,-128],"parameters":{"jsCode":"// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nlet data = $input.all().map(item => ({\n  \"channel_name\": item.json.name,\n  \"channel_id\": item.json.id\n}));\n\n// Remove duplicates based on channel_id\nreturn data.filter((item, index, self) => \n  index === self.findIndex(t => t.channel_id === item.channel_id)\n);"},"typeVersion":2},{"id":"cb1fcb2b-ef59-45fd-a50e-c1732f9e752e","name":"Check Channel Exist","type":"n8n-nodes-base.if","position":[1696,-128],"parameters":{"options":{},"conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"ac4d7bbf-67ad-4958-8ef9-47a7d8f60d19","operator":{"type":"boolean","operation":"equals"},"leftValue":"={{ $json.found }}","rightValue":true}]},"looseTypeValidation":true},"typeVersion":2.3},{"id":"130ed387-40e3-4d52-814b-2e48d2eae03d","name":"Arrange Email Data","type":"n8n-nodes-base.set","position":[-704,-128],"parameters":{"include":"=selected","options":{},"includeFields":"id, text, textAsHtml, subject, date, to, from, threadId"},"typeVersion":3},{"id":"8028e034-b129-4f54-8623-c6045d44c1e8","name":"OpenRouter Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[-336,128],"parameters":{"model":"meta-llama/llama-3-70b-instruct","options":{}},"credentials":{"openRouterApi":{"id":"DGQwXZXKlvHZn8Ky","name":"OpenRouter account 2"}},"typeVersion":1},{"id":"7b669536-e9e0-46bb-ab8b-e3112e9f347f","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1472,-432],"parameters":{"color":2,"width":928,"height":496,"content":"##  Gmail Intake & Data Preparation\n\n* The Gmail node runs every minute to check for newly received emails that are still in an unread state. It is configured to ignore spam and draft emails.\n\n* The Code node filters emails based on email IDs. It checks whether the email is from trusted sources and whether an unread email notification has already been sent to the Slack channel. If a notification was already sent, it passes an empty JSON to the next node.\n\n* The If node checks whether the incoming data is empty. Only if data is present does the workflow proceed further.\n\n* The Edit Fields node removes unnecessary data from the response and retains only the required fields, allowing the AI node to process the data more efficiently."},"typeVersion":1},{"id":"abebe0b8-cfe6-4501-9dbf-8e22d7e844fd","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-416,-432],"parameters":{"color":3,"width":496,"height":896,"content":"## AI Email Categorization\n\n* The AI Agent node reads the email content and determines its category (for example, Sales, Accounts, etc.).\n\n* A predefined list of categories is included in the prompt. If the email matches one of these, the corresponding category name is returned; otherwise, a new category name is generated.\n\n* The implementation uses OpenRouter’s LLaMA chat model for classification."},"typeVersion":1},{"id":"46e12fcc-e93c-43fe-89c4-7b0c659316f2","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[192,-336],"parameters":{"color":4,"width":432,"height":368,"content":"## Merge Node ( Merge Category)\n\n* This node merges the category identified by the AI agent into the main data returned by the “Arrange Email Data” node."},"typeVersion":1},{"id":"22dbf00c-c35a-44fc-86b1-16c13e6f5111","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[752,-384],"parameters":{"color":5,"width":688,"height":416,"content":"## Slack Channels\n\n* The Slack node is used to retrieve the list of Slack channels.\n* The first Code node formats the channel list data returned by the Slack node.\n* The second Code node filters the formatted channel data, removes duplicate entries, and checks for a matching channel name based on the category provided by the AI agent node.\n* If a matching channel is found, it returns found: true."},"typeVersion":1},{"id":"672c42f0-98a3-4cb5-a2ae-af01d808d487","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[1520,-352],"parameters":{"color":6,"width":432,"height":368,"content":"## Channel Existence Check\n\n* This If node checks whether a matching category was found in the previous node.\n* If found is true, it proceeds with the Existing Channel Flow.\n* Otherwise, it triggers the New Channel Creation Flow."},"typeVersion":1},{"id":"6ac9e3ac-4caf-4f1d-8954-a6cc6c6d7079","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[2064,-704],"parameters":{"color":7,"width":688,"height":400,"content":"## Existing Channel Flow\n\n* The Join Slack Channel node is used to join the app to the matched channel if it has not already joined.\n* The next Slack node posts the email details to the matched channel. The message body is structured using Block Kit (blocks) to support reply-via-button email functionality, which can be implemented through another workflow.\n* In message body pass email thread id in button block so ii will used in reply functionality"},"typeVersion":1},{"id":"ac1786b7-03b2-4ec3-9d66-0042aa4a46f3","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[2080,-80],"parameters":{"color":7,"width":688,"height":464,"content":"## New Channel Creation Flow\n\n* It first creates a Slack channel using the category name identified by the AI agent. If the category exists in the predefined category list, that name is used; otherwise, a new channel is created using the AI-generated category name.\n* Next, it invites the current user to the newly created channel so they can send and view messages.\n- Finally, a Slack node posts the email details to the channel using Block Kit (blocks) format, including a reply button, whose functionality will be implemented through a separate workflow trigger."},"typeVersion":1},{"id":"7eacc984-5ff7-4566-a37d-6343635afcf8","name":"OpenRouter Chat Model1","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[-208,288],"parameters":{"model":"meta-llama/llama-3-70b-instruct","options":{}},"credentials":{"openRouterApi":{"id":"DGQwXZXKlvHZn8Ky","name":"OpenRouter account 2"}},"typeVersion":1},{"id":"cc8882b2-b5fd-423a-88d7-477a439e6e7b","name":"Capture Gmail Event","type":"n8n-nodes-base.gmailTrigger","position":[-1408,-112],"parameters":{"simple":false,"filters":{"readStatus":"unread","includeDrafts":false,"includeSpamTrash":false},"options":{"downloadAttachments":true},"pollTimes":{"item":[{"mode":"everyMinute"}]}},"credentials":{"gmailOAuth2":{"id":"z6vPNOHWO0MPOHYP","name":"Gmail account 3"}},"typeVersion":1.3},{"id":"76ddf070-1317-4ecd-92f3-626843ef6846","name":"Filter + Deduplicate Validation","type":"n8n-nodes-base.code","position":[-1168,-112],"parameters":{"mode":"runOnceForEachItem","jsCode":"/**\n * Deduplication + Trusted Domain Filter\n */\nconst data = $getWorkflowStaticData('global');\n\nif (!data.processed) {\n  data.processed = {};\n}\n\n// ---------------- DUPLICATION CHECK ----------------\nconst headers = $json.headers || {};\nconst messageId =\n  headers['message-id']\n\nif (data.processed[messageId]) {\n  return {}; // ⛔ duplicate inbound email\n}\n\ndata.processed[messageId] = true;\n\n// ---------------- DOMAIN CHECK ----------------\nconst disposableDomains = [\n  \"yopmail.com\",\n  \"mailinator.com\",\n  \"guerrillamail.com\",\n  \"tempmail.com\",\n  \"10minutemail.com\",\n  \"getnada.com\",\n  \"trashmail.com\",\n  \"dispostable.com\"\n];\n\nconst freeEmailDomains = [\n  \"gmail.com\",\n  \"yahoo.com\",\n  \"outlook.com\",\n  \"hotmail.com\",\n  \"icloud.com\"\n];\n\nconst fromEmail = ($json.from?.email || \"\").toLowerCase();\nconst domain = fromEmail.split(\"@\")[1] || \"\";\n\n// Block disposable domains\nif (disposableDomains.includes(domain)) {\n  return {};\n}\n\n// Block free email providers (optional)\nif (freeEmailDomains.includes(domain)) {\n  return {};\n}\n\n// ✅ Passed all checks\nreturn $input.item;"},"typeVersion":2},{"id":"dcc0cc20-174f-4fdb-8484-78f08ef49a37","name":"Check Data Exist","type":"n8n-nodes-base.if","position":[-944,-112],"parameters":{"options":{},"conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"fd19658d-0297-485e-9664-f3289645ab30","operator":{"type":"object","operation":"notEmpty","singleValue":true},"leftValue":"={{ $json }}","rightValue":""}]}},"typeVersion":2.3},{"id":"a8f5a2fb-9ce8-4f45-8ac0-2129fc912288","name":"Get Channels List","type":"n8n-nodes-base.slack","position":[832,-128],"webhookId":"49e574f9-eb54-48c1-8e47-2ae4557cc052","parameters":{"filters":{},"resource":"channel","operation":"getAll"},"credentials":{"slackApi":{"id":"ASwwSjm4vc3kKDYq","name":"Slack account"}},"typeVersion":2.4},{"id":"7666c7b1-2882-43cf-9416-377bb7c476f7","name":"Join Slack Channel","type":"n8n-nodes-base.slack","position":[2112,-464],"webhookId":"f0a48168-ae21-4c7a-8922-12fbf40d3629","parameters":{"resource":"channel","channelId":{"__rl":true,"mode":"id","value":"={{ $json.matchedChannelId }}"},"operation":"join"},"credentials":{"slackApi":{"id":"ASwwSjm4vc3kKDYq","name":"Slack account"}},"typeVersion":2.4},{"id":"87e72e20-b706-4846-8989-3fec085dfeb2","name":"Post Message in Channel","type":"n8n-nodes-base.slack","position":[2576,-464],"webhookId":"d0165671-b66f-475e-a63e-856d23090eab","parameters":{"text":"=📧 New Email Received\nin {{ $json.name }} Channel","select":"channel","blocksUi":"={\n  \"blocks\": [\n    {\n      \"type\": \"section\",\n      \"text\": {\n        \"type\": \"mrkdwn\",\n        \"text\": \"*📧 New Email Received*\\n*From:* {{ $('Merge Category').first().json.from.value[0].address }}\\n*Subject:* {{ $('Merge Category').first().json.subject }}\\n\\n {{ $('Merge Category').first().json.text.slice(0, 500).replace(/[\\n\\r]/g, ' ').replace(/\"/g, '\\\\\"') }}… \\n\\n\\n 🔗 <https://mail.google.com/mail/u/0/#inbox/{{ $('Merge Category').first().json.id }}|Open in Gmail>\"\n      }\n    },\n    {\n    \"type\": \"actions\",\n    \"elements\": [\n      {\n        \"type\": \"button\",\n        \"text\": {\n          \"type\": \"plain_text\",\n          \"text\": \"Reply via Email\"\n        },\n        \"action_id\": \"reply_email\",\n        \"value\": \"{{ $('Merge Category').first().json.threadId }}\"\n      }\n    ]\n  }\n  ]\n}","channelId":{"__rl":true,"mode":"id","value":"={{ $json.id }}"},"messageType":"block","otherOptions":{"includeLinkToWorkflow":false}},"credentials":{"slackApi":{"id":"ASwwSjm4vc3kKDYq","name":"Slack account"}},"typeVersion":2.4},{"id":"3d934bb1-af42-4451-8cc1-49dd47e89d07","name":"Create Slack Channel","type":"n8n-nodes-base.slack","position":[2128,192],"webhookId":"919296d8-8f3b-4ec3-9416-d20f55df8258","parameters":{"resource":"channel","channelId":"={{ $('Merge Category').first().json.output.category }}"},"credentials":{"slackApi":{"id":"ASwwSjm4vc3kKDYq","name":"Slack account"}},"typeVersion":2.4},{"id":"7ef887f5-abdd-4d67-a7a1-e62d01eca0c3","name":"Post Message in Created Channel","type":"n8n-nodes-base.slack","position":[2592,192],"webhookId":"d0165671-b66f-475e-a63e-856d23090eab","parameters":{"text":"=📧 New Email Received\nin {{ $json.name }} Channel","select":"channel","blocksUi":"={\n  \"blocks\": [\n    {\n      \"type\": \"section\",\n      \"text\": {\n        \"type\": \"mrkdwn\",\n        \"text\": \"*📧 New Email Received*\\n*From:* {{ $('Merge Category').first().json.from.value[0].address }}\\n*Subject:* {{ $('Merge Category').first().json.subject }}\\n\\n {{ $('Merge Category').first().json.text.slice(0, 500).replace(/[\\n\\r]/g, ' ').replace(/\"/g, '\\\\\"') }}… \\n\\n\\n 🔗 <https://mail.google.com/mail/u/0/#inbox/{{ $('Merge Category').first().json.id }}|Open in Gmail>\"\n      }\n    },\n    {\n    \"type\": \"actions\",\n    \"elements\": [\n      {\n        \"type\": \"button\",\n        \"text\": {\n          \"type\": \"plain_text\",\n          \"text\": \"Reply via Email\"\n        },\n        \"action_id\": \"reply_email\",\n        \"value\": \"{{ $('Merge Category').first().json.threadId }}\"\n      }\n    ]\n  }\n  ]\n}","channelId":{"__rl":true,"mode":"id","value":"={{ $json.id }}"},"messageType":"block","otherOptions":{"includeLinkToWorkflow":false}},"credentials":{"slackApi":{"id":"ASwwSjm4vc3kKDYq","name":"Slack account"}},"typeVersion":2.4},{"id":"6862cc08-b3fb-41b4-9a7f-f12f7dc234b7","name":"Remove Duplicate Channel + Find Matched Channel","type":"n8n-nodes-base.code","position":[1264,-128],"parameters":{"jsCode":"const category = $('Merge Category').first().json.output.category;\nconst channels = $input.all() || [];\nlet matchedChannel = null;\n\nfor (const ch of channels) {\n  if (\n    ch.json.channel_name.includes(category) ||\n    category.includes(ch.json.channel_name)\n  ) {\n    matchedChannel = ch;\n    break;\n  }\n}\n\n// Return based on whether a match was found\nif (matchedChannel) {\n  return [\n    {\n      json: {\n        found: true,\n        matchedChannelName: matchedChannel.json.channel_name,\n        matchedChannelId: matchedChannel.json.channel_id\n      }\n    }\n  ];\n} else {\n  return [\n    {\n      json: {\n        found: false,\n        matchedChannelName: null,\n        matchedChannelId: null\n      }\n    }\n  ];\n}"},"typeVersion":2},{"id":"0e290919-c0ea-4cbd-a09d-033ac18fcfe4","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[-2480,-1104],"parameters":{"width":832,"height":608,"content":"## Prerequisite and Setup Guide\n\n### How it works\n* This workflow automatically monitors new unread emails in Gmail and routes them to the correct Slack channel using AI-based categorization. It starts by listening for incoming emails while ignoring spam and drafts. The email content (sender, subject, body, and metadata) is cleaned and prepared so it can be processed efficiently.\n* An AI agent analyses the email content and determines the most relevant category (such as Sales, Accounts, Support, HR, etc.) based on a predefined category list. If a valid category is detected, it is normalized and merged back into the main email data.\n* Next, the workflow fetches the list of existing Slack channels and checks whether a channel matching the detected category already exists.\n* If the channel exists, the workflow joins the app to that channel (if needed) and posts the email details.\n* If the channel does not exist, a new channel is created using the category name, the current user is invited, and the email details are posted.\n* All Slack messages are sent using Block Kit, allowing future enhancements such as reply-via-email buttons or follow-up workflows.\n\n### Setup steps\n1. Gmail Configuration\n   * Connect a Gmail account using OAuth and allow access to unread emails and metadata.\n2. AI / LLM Configuration\n   * Configure an AI provider (OpenAI or compatible) and ensure the prompt restricts output to predefined categories.\n3. Slack Configuration\n   * Create a Slack App with required scopes (channels, chat, users) and add the Bot OAuth token to n8n.\n4. Testing & Activation\n   * Activate the workflow, send test emails, and verify correct categorization, channel handling, and Slack notifications."},"typeVersion":1}],"active":true,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"468f0e6f-4c49-4e76-b8a7-e877e14bc9fa","connections":{"Find Category":{"main":[[{"node":"Merge Category","type":"main","index":0}]]},"Merge Category":{"main":[[{"node":"Get Channels List","type":"main","index":0}]]},"Check Data Exist":{"main":[[{"node":"Arrange Email Data","type":"main","index":0}]]},"Get Channels List":{"main":[[{"node":"Format Channel Data","type":"main","index":0}]]},"Arrange Email Data":{"main":[[{"node":"Find Category","type":"main","index":0}]]},"Join Slack Channel":{"main":[[{"node":"Post Message in Channel","type":"main","index":0}]]},"Capture Gmail Event":{"main":[[{"node":"Filter + Deduplicate Validation","type":"main","index":0}]]},"Check Channel Exist":{"main":[[{"node":"Join Slack Channel","type":"main","index":0}],[{"node":"Create Slack Channel","type":"main","index":0}]]},"Format Channel Data":{"main":[[{"node":"Remove Duplicate Channel + Find Matched Channel","type":"main","index":0}]]},"Create Slack Channel":{"main":[[{"node":"Invite a user to a channel","type":"main","index":0}]]},"OpenRouter Chat Model":{"ai_languageModel":[[{"node":"Find Category","type":"ai_languageModel","index":0}]]},"OpenRouter Chat Model1":{"ai_languageModel":[[{"node":"Structured Output Parser","type":"ai_languageModel","index":0}]]},"Post Message in Channel":{"main":[[]]},"Structured Output Parser":{"ai_outputParser":[[{"node":"Find Category","type":"ai_outputParser","index":0}]]},"Invite a user to a channel":{"main":[[{"node":"Post Message in Created Channel","type":"main","index":0}]]},"Filter + Deduplicate Validation":{"main":[[{"node":"Check Data Exist","type":"main","index":0}]]},"Remove Duplicate Channel + Find Matched Channel":{"main":[[{"node":"Check Channel Exist","type":"main","index":0}]]}}},"lastUpdatedBy":29,"workflowInfo":{"nodeCount":26,"nodeTypes":{"n8n-nodes-base.if":{"count":2},"n8n-nodes-base.set":{"count":2},"n8n-nodes-base.code":{"count":3},"n8n-nodes-base.slack":{"count":6},"n8n-nodes-base.stickyNote":{"count":8},"n8n-nodes-base.gmailTrigger":{"count":1},"@n8n/n8n-nodes-langchain.agent":{"count":1},"@n8n/n8n-nodes-langchain.lmChatOpenRouter":{"count":2},"@n8n/n8n-nodes-langchain.outputParserStructured":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Intuz ","username":"intuz","bio":"Intuz is a USA-based AI & workflow automation company with 16+ years of experience building custom AI-enabled workflow automations on n8n for SMBs and Enterprises. \nSpecializing in agentic AI, LLM integrations, CRM/ERP sync & multi-step automation across Healthcare, FinTech, eCommerce, Manufacturing & Real Estate.\n\nExplore our 30+ free templates or hire us for end-to-end custom automation tailored to your business.","verified":true,"links":["https://www.intuz.com/n8n-workflow-automation-templates"],"avatar":"https://gravatar.com/avatar/5c14d6f8b10db63707e763968a930b26c432e980acd00016f365bb513b213eed?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":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":40,"icon":"file:slack.svg","name":"n8n-nodes-base.slack","codex":{"data":{"alias":["human","form","wait","hitl","approval"],"resources":{"generic":[{"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/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/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/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/slack/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Slack"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgMTUwLjg1MiAxNTAuODUyIj48dXNlIHhsaW5rOmhyZWY9IiNhIiB4PSIuOTI2IiB5PSIuOTI2Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZS13aWR0aD0iMS44NTIiPjxwYXRoIGZpbGw9IiNlMDFlNWEiIHN0cm9rZT0iI2UwMWU1YSIgZD0iTTQwLjc0MSA5My41NWMwLTguNzM1IDYuNjA3LTE1Ljc3MiAxNC44MTUtMTUuNzcyczE0LjgxNSA3LjAzNyAxNC44MTUgMTUuNzcydjM4LjgyNGMwIDguNzM3LTYuNjA3IDE1Ljc3NC0xNC44MTUgMTUuNzc0cy0xNC44MTUtNy4wMzctMTQuODE1LTE1Ljc3MnoiLz48cGF0aCBmaWxsPSIjZWNiMjJkIiBzdHJva2U9IiNlY2IyMmQiIGQ9Ik05My41NSAxMDcuNDA4Yy04LjczNSAwLTE1Ljc3Mi02LjYwNy0xNS43NzItMTQuODE1czcuMDM3LTE0LjgxNSAxNS43NzItMTQuODE1aDM4LjgyNmM4LjczNSAwIDE1Ljc3MiA2LjYwNyAxNS43NzIgMTQuODE1cy03LjAzNyAxNC44MTUtMTUuNzcyIDE0LjgxNXoiLz48cGF0aCBmaWxsPSIjMmZiNjdjIiBzdHJva2U9IiMyZmI2N2MiIGQ9Ik03Ny43NzggMTUuNzcyQzc3Ljc3OCA3LjAzNyA4NC4zODUgMCA5Mi41OTMgMHMxNC44MTUgNy4wMzcgMTQuODE1IDE1Ljc3MnYzOC44MjZjMCA4LjczNS02LjYwNyAxNS43NzItMTQuODE1IDE1Ljc3MnMtMTQuODE1LTcuMDM3LTE0LjgxNS0xNS43NzJ6Ii8+PHBhdGggZmlsbD0iIzM2YzVmMSIgc3Ryb2tlPSIjMzZjNWYxIiBkPSJNMTUuNzcyIDcwLjM3MUM3LjAzNyA3MC4zNzEgMCA2My43NjMgMCA1NS41NTZzNy4wMzctMTQuODE1IDE1Ljc3Mi0xNC44MTVoMzguODI2YzguNzM1IDAgMTUuNzcyIDYuNjA3IDE1Ljc3MiAxNC44MTVzLTcuMDM3IDE0LjgxNS0xNS43NzIgMTQuODE1eiIvPjxnIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiPjxwYXRoIGZpbGw9IiNlY2IyMmQiIHN0cm9rZT0iI2VjYjIyZCIgZD0iTTc3Ljc3OCAxMzMuMzMzYzAgOC4yMDggNi42MDcgMTQuODE1IDE0LjgxNSAxNC44MTVzMTQuODE1LTYuNjA3IDE0LjgxNS0xNC44MTUtNi42MDctMTQuODE1LTE0LjgxNS0xNC44MTVINzcuNzc4eiIvPjxwYXRoIGZpbGw9IiMyZmI2N2MiIHN0cm9rZT0iIzJmYjY3YyIgZD0iTTEzMy4zMzQgNzAuMzcxaC0xNC44MTVWNTUuNTU2YzAtOC4yMDcgNi42MDctMTQuODE1IDE0LjgxNS0xNC44MTVzMTQuODE1IDYuNjA3IDE0LjgxNSAxNC44MTUtNi42MDcgMTQuODE1LTE0LjgxNSAxNC44MTV6Ii8+PHBhdGggZmlsbD0iI2UwMWU1YSIgc3Ryb2tlPSIjZTAxZTVhIiBkPSJNMTQuODE1IDc3Ljc3OEgyOS42M3YxNC44MTVjMCA4LjIwNy02LjYwNyAxNC44MTUtMTQuODE1IDE0LjgxNVMwIDEwMC44IDAgOTIuNTkzczYuNjA3LTE0LjgxNSAxNC44MTUtMTQuODE1eiIvPjxwYXRoIGZpbGw9IiMzNmM1ZjEiIHN0cm9rZT0iIzM2YzVmMSIgZD0iTTcwLjM3MSAxNC44MTVWMjkuNjNINTUuNTU2Yy04LjIwNyAwLTE0LjgxNS02LjYwNy0xNC44MTUtMTQuODE1UzQ3LjM0OCAwIDU1LjU1NiAwczE0LjgxNSA2LjYwNyAxNC44MTUgMTQuODE1eiIvPjwvZz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Slack","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"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":824,"icon":"file:gmail.svg","name":"n8n-nodes-base.gmailTrigger","codex":{"data":{"resources":{"generic":[{"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/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with 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-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/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/","icon":"💪","label":"Using Automation to Boost Productivity in the Workplace"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.gmailtrigger/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Communication"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\"]","defaults":{"name":"Gmail Trigger"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMTkzIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZmlsbD0iIzQyODVGNCIgZD0iTTU4LjE4MiAxOTIuMDVWOTMuMTRMMjcuNTA3IDY1LjA3NyAwIDQ5LjUwNHYxMjUuMDkxYzAgOS42NTggNy44MjUgMTcuNDU1IDE3LjQ1NSAxNy40NTV6Ii8+PHBhdGggZmlsbD0iIzM0QTg1MyIgZD0iTTE5Ny44MTggMTkyLjA1aDQwLjcyN2M5LjY1OSAwIDE3LjQ1NS03LjgyNiAxNy40NTUtMTcuNDU1VjQ5LjUwNWwtMzEuMTU2IDE3LjgzNy0yNy4wMjYgMjUuNzk4eiIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im01OC4xODIgOTMuMTQtNC4xNzQtMzguNjQ3IDQuMTc0LTM2Ljk4OUwxMjggNjkuODY4bDY5LjgxOC01Mi4zNjQgNC42NyAzNC45OTItNC42NyA0MC42NDRMMTI4IDE0NS41MDR6Ii8+PHBhdGggZmlsbD0iI0ZCQkMwNCIgZD0iTTE5Ny44MTggMTcuNTA0VjkzLjE0TDI1NiA0OS41MDRWMjYuMjMxYzAtMjEuNTg1LTI0LjY0LTMzLjg5LTQxLjg5LTIwLjk0NXoiLz48cGF0aCBmaWxsPSIjQzUyMjFGIiBkPSJtMCA0OS41MDQgMjYuNzU5IDIwLjA3TDU4LjE4MiA5My4xNFYxNy41MDRMNDEuODkgNS4yODZDMjQuNjEtNy42NiAwIDQuNjQ2IDAgMjYuMjN6Ii8+PC9zdmc+"},"displayName":"Gmail Trigger","typeVersion":1,"nodeCategories":[{"id":6,"name":"Communication"}]},{"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":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":1179,"icon":"fa:code","name":"@n8n/n8n-nodes-langchain.outputParserStructured","codex":{"data":{"alias":["json","zod"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserstructured/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Output Parsers"]}}},"group":"[\"transform\"]","defaults":{"name":"Structured Output Parser"},"iconData":{"icon":"code","type":"icon"},"displayName":"Structured Output Parser","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1281,"icon":"file:openrouter.svg","name":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenrouter/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"OpenRouter Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjOTRBM0I4IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iMCAwIDI0IDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjx0aXRsZT5PcGVuUm91dGVyPC90aXRsZT48cGF0aCBkPSJNMTYuODA0IDEuOTU3bDcuMjIgNC4xMDV2LjA4N0wxNi43MyAxMC4yMWwuMDE3LTIuMTE3LS44MjEtLjAzYy0xLjA1OS0uMDI4LTEuNjExLjAwMi0yLjI2OC4xMS0xLjA2NC4xNzUtMi4wMzguNTc3LTMuMTQ3IDEuMzUyTDguMzQ1IDExLjAzYy0uMjg0LjE5NS0uNDk1LjMzNi0uNjguNDU1bC0uNTE1LjMyMi0uMzk3LjIzNC4zODUuMjMuNTMuMzM4Yy40NzYuMzE0IDEuMTcuNzk2IDIuNzAxIDEuODY2IDEuMTEuNzc1IDIuMDgzIDEuMTc3IDMuMTQ3IDEuMzUybC4zLjA0NWMuNjk0LjA5MSAxLjM3NS4wOTQgMi44MjUuMDMzbC4wMjItMi4xNTkgNy4yMiA0LjEwNXYuMDg3TDE2LjU4OSAyMmwuMDE0LTEuODYyLS42MzUuMDIyYy0xLjM4Ni4wNDItMi4xMzcuMDAyLTMuMTM4LS4xNjItMS42OTQtLjI4LTMuMjYtLjkyNi00Ljg4MS0yLjA1OWwtMi4xNTgtMS41YTIxLjk5NyAyMS45OTcgMCAwMC0uNzU1LS40OThsLS40NjctLjI4YTU1LjkyNyA1NS45MjcgMCAwMC0uNzYtLjQzQzIuOTA4IDE0LjczLjU2MyAxNC4xMTYgMCAxNC4xMTZWOS44ODhsLjE0LjAwNGMuNTY0LS4wMDcgMi45MS0uNjIyIDMuODA5LTEuMTI0bDEuMDE2LS41OC40MzgtLjI3NGMuNDI4LS4yOCAxLjA3Mi0uNzI2IDIuNjg2LTEuODUzIDEuNjIxLTEuMTMzIDMuMTg2LTEuNzggNC44ODEtMi4wNTkgMS4xNTItLjE5IDEuOTc0LS4yMTMgMy44MTQtLjEzOGwuMDItMS45MDd6Ij48L3BhdGg+PC9zdmc+Cg=="},"displayName":"OpenRouter Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":41,"name":"Ticket Management"},{"id":49,"name":"AI Summarization"}],"image":[]}}