Workflow: (G) - Email Classification
Integrations: gmail, gmailTrigger, noOp, stickyNote, stopAndError

{"id": "m8gr0YZgCx5Qrsia", "meta": {"instanceId": "workflow-07af2144", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:45.172978", "updatedAt": "2025-09-29T07:07:45.172989", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "name": "(G) - Email Classification", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "nodes": [{"id": "0226578d-4741-42f2-8a7b-c750f75be78d", "name": "Gmail Trigger", "type": "n8n-nodes-base.gmailTrigger", "position": [0, 0], "parameters": {"simple": false, "filters": {}, "options": {}, "pollTimes": {"item": [{"mode": "everyMinute"}]}}, "credentials": {"gmailOAuth2": {"id": "YNdPYS7HyXbJjy7l", "name": "Gmail account (jkp@kajonkietsuksa.ac.th)"}}, "typeVersion": 1.2, "notes": "This gmailTrigger node performs automated tasks as part of the workflow."}, {"id": "48d0ee27-d4d6-4db4-843c-d9c18b934945", "name": "Google Gemini Chat Model", "type": "n8n-nodes-base.noOp", "position": [220, 320], "parameters": {"options": {}, "modelName": "models/gemini-2.0-flash-001"}, "credentials": {"googlePalmApi": {"id": "ZK3aD9k31PG9XVBd", "name": "Guitar's Gemini (babystoreroom@gmail.com)"}}, "typeVersion": 1, "notes": "This lmChatGoogleGemini node performs automated tasks as part of the workflow."}, {"id": "d7e8bed4-cadc-41e3-b793-cc8affb177cc", "name": "AI Agent", "type": "n8n-nodes-base.noOp", "disabled": true, "position": [1420, 60], "parameters": {"text": "=Here's the email context: {{ $('Classification Agent').item.json.text }}", "options": {"systemMessage": "You are my personal assistant for Kajonkietsuksa School.\nYour role is to help me with any work-related tasks.\nOne of your main responsibilities is to write professional and polite reply emails whenever I receive an email in my inbox. Act as me, don't include something like \"here's a potential reply email or other\"\n\nWhen writing a reply email:\n\nStart by acknowledging the sender's message.\n\nAnswer their questions or address their requests clearly and directly.\n\nMaintain a polite, professional, and helpful tone.\n\nKeep the language simple and easy to understand.\n\nIf additional action is required from me, mention that I will get back to them soon.\n\nAlways end the email with a courteous closing line, such as \"Thank you\" or \"Best regards.\"\n\nKeep your writing style consistent with a warm yet formal communication style that reflects the reputation of Kajonkietsuksa School.\n\n"}, "promptType": "define"}, "typeVersion": 1.8, "notes": "This agent node performs automated tasks as part of the workflow."}, {"id": "3b5cabb7-346f-4b69-b3f4-c61e78e2d8c7", "name": "Groq Chat Model", "type": "n8n-nodes-base.noOp", "disabled": true, "position": [1440, 180], "parameters": {"model": "meta-llama/llama-4-scout-17b-16e-instruct", "options": {}}, "credentials": {"groqApi": {"id": "ssFnosV0K9CllUnY", "name": "(G) Groq account (jkp@kajonkietsuksa.ac.th)"}}, "typeVersion": 1, "notes": "This lmChatGroq node performs automated tasks as part of the workflow."}, {"id": "43984fb2-7a26-4e13-95ee-c29f0d9f2f24", "name": "Gmail3", "type": "n8n-nodes-base.gmail", "disabled": true, "position": [1780, 60], "webhookId": "64df877a-5475-447d-860b-b62d4418d841", "parameters": {"message": "={{ $json.output }}", "options": {}, "subject": "=Re: {{ $('Gmail Trigger').item.json.headers.subject }}", "resource": "draft"}, "credentials": {"gmailOAuth2": {"id": "YNdPYS7HyXbJjy7l", "name": "Gmail account (jkp@kajonkietsuksa.ac.th)"}}, "typeVersion": 2.1, "notes": "This gmail node performs automated tasks as part of the workflow."}, {"id": "c269ec5e-f882-4458-ab52-46b719731309", "name": "Classification Agent", "type": "n8n-nodes-base.noOp", "position": [240, 0], "parameters": {"options": {"systemPromptTemplate": "Please classify the text provided by the user into one of the following categories: {categories}, and use the provided formatting instructions below. Don't explain, and only output the json."}, "inputText": "={{ $json.text || $json.html }}", "categories": {"categories": [{"category": "High Priority", "description": "Emails requiring immediate attention or action, typically from key stakeholders, clients, or decision-makers. These emails often contain time-sensitive requests, deadlines, or escalated issues. Keywords: urgent, ASAP, immediate, deadline, action required, high priority"}, {"category": "KS Work Related", "description": "Anything related to my school or education. Keyword: Kajonkietsuksa School, Kajonkietsuksa, School"}, {"category": "Promotion", "description": "Anything related to updating on promotions. Keywords: newsletter, promotion, offer, sale, campaign, marketing, launch"}, {"category": "Other", "description": "If you don't know what category is this email."}]}}, "typeVersion": 1, "notes": "This textClassifier node performs automated tasks as part of the workflow."}, {"id": "17be38df-c225-4d19-81ec-e205ff4b9f3c", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [60, 260], "parameters": {"color": 4, "width": 300, "height": 80, "content": "### 2) Change to your desire LLMs"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "3e8ac267-c2ac-49cb-ad53-536510faa1a4", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [-80, -60], "parameters": {"color": 4, "content": "### 1) Change to your gmail's credential"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "f5e2c92d-3335-4ed0-915e-f7edeb0b5a92", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [220, -380], "parameters": {"color": 4, "width": 340, "content": "### 3) Login to your gmail inbox\n* Create a label with \"+\" icon\n* Change the color of your choice"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "4a8a7424-f9dd-42b1-b803-5d0dbe076956", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [220, -160], "parameters": {"color": 4, "width": 320, "content": "### 4) Agent instruction\n* Input the category name that you just created in gmail.\n* Description = Tell agent about how should it classify your email. Keywords can be useful to let your agent classify the email context."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "24c7ef4e-7a68-4240-980b-02b994300084", "name": "Add Label Promotion", "type": "n8n-nodes-base.gmail", "position": [700, 200], "webhookId": "4e089f5f-58ea-4c8d-8870-3d155a81f0b7", "parameters": {"labelIds": ["Label_4917715854276709190"], "messageId": "={{ $json.id }}", "operation": "addLabels"}, "credentials": {"gmailOAuth2": {"id": "YNdPYS7HyXbJjy7l", "name": "Gmail account (jkp@kajonkietsuksa.ac.th)"}}, "typeVersion": 2.1, "notes": "This gmail node performs automated tasks as part of the workflow."}, {"id": "759f8cbe-4674-49e5-a52b-2acf208ffb22", "name": "Add Label (KS Work Related)", "type": "n8n-nodes-base.gmail", "position": [700, 0], "webhookId": "4e089f5f-58ea-4c8d-8870-3d155a81f0b7", "parameters": {"labelIds": ["Label_4956837555783205638"], "messageId": "={{ $json.id }}", "operation": "addLabels"}, "credentials": {"gmailOAuth2": {"id": "YNdPYS7HyXbJjy7l", "name": "Gmail account (jkp@kajonkietsuksa.ac.th)"}}, "typeVersion": 2.1, "notes": "This gmail node performs automated tasks as part of the workflow."}, {"id": "d07fe962-16c0-401a-b194-5ce7e6ad9746", "name": "Add Label (High Priority)", "type": "n8n-nodes-base.gmail", "position": [700, -200], "webhookId": "4e089f5f-58ea-4c8d-8870-3d155a81f0b7", "parameters": {"labelIds": ["Label_3750994713301985229"], "messageId": "={{ $json.id }}", "operation": "addLabels"}, "credentials": {"gmailOAuth2": {"id": "YNdPYS7HyXbJjy7l", "name": "Gmail account (jkp@kajonkietsuksa.ac.th)"}}, "typeVersion": 2.1, "notes": "This gmail node performs automated tasks as part of the workflow."}, {"id": "7d0c9bd5-6150-4afa-9344-8bb3c1a6b01c", "name": "Sticky Note4", "type": "n8n-nodes-base.stickyNote", "position": [660, -320], "parameters": {"color": 4, "width": 320, "content": "### 5) Add Label Nodes\n* In this option \"Label Names or IDs\" -> Select the category to match with the Classification Agent Node."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "d57ecacb-a479-4bf7-b9b4-b9e14e30dcd7", "name": "Sticky Note5", "type": "n8n-nodes-base.stickyNote", "position": [980, 60], "parameters": {"color": 4, "width": 220, "content": "### 6) Add-on\n* You can add more category of your choice!"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "error-7a8240ad", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [1000, 400], "parameters": {"message": "Workflow execution error", "options": {}}}], "active": true, "pinData": {}, "settings": {"executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "versionId": "c94df4ec-be75-449f-82fa-4e1f8878104a", "connections": {"48d0ee27-d4d6-4db4-843c-d9c18b934945": {"main": [[{"node": "error-handler-48d0ee27-d4d6-4db4-843c-d9c18b934945-15c6209c", "type": "main", "index": 0}]]}}, "description": "Automated workflow: (G) - Email Classification. This workflow integrates 8 different services: textClassifier, stickyNote, gmailTrigger, agent, lmChatGoogleGemini. It contains 16 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: (G) - Email Classification. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}