Workflow: Gmail AI auto-responder: create draft replies to incoming emails
Integrations: gmail, gmailTrigger, if, noOp, stickyNote, stopAndError

{"id": "aOQANirVMuWrH0ZD", "meta": {"instanceId": "workflow-c8238308", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:45.172315", "updatedAt": "2025-09-29T07:07:45.172355", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "name": "Gmail AI auto-responder: create draft replies to incoming emails", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "nodes": [{"id": "2a9ff08f-919a-41a8-980b-8c2bca3059e4", "name": "Gmail Trigger", "type": "n8n-nodes-base.gmailTrigger", "position": [-332.809175564116, 566.0845437534399], "parameters": {"simple": false, "filters": {"q": "-from:me"}, "options": {}, "pollTimes": {"item": [{"mode": "everyMinute"}]}}, "credentials": {"gmailOAuth2": {"id": "ofvBTX8A0aWfQb2O", "name": "Gmail account"}}, "typeVersion": 1, "notes": "This gmailTrigger node performs automated tasks as part of the workflow."}, {"id": "3ef14615-0045-404f-a21b-2c65a52f4be8", "name": "If Needs Reply", "type": "n8n-nodes-base.if", "position": [240, 560], "parameters": {"options": {}, "conditions": {"options": {"leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "53849246-ad32-4845-9976-9f9688f5a6f2", "operator": {"type": "boolean", "operation": "true", "singleValue": true}, "leftValue": "={{ $json.needsReply }}", "rightValue": "true"}]}}, "typeVersion": 2, "notes": "This if node performs automated tasks as part of the workflow."}, {"id": "36968dd5-8d51-4184-a05a-587b6c95aa82", "name": "JSON Parser", "type": "n8n-nodes-base.noOp", "position": [100, 720], "parameters": {"jsonSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"needsReply\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"needsReply\"]\n}\n"}, "typeVersion": 1, "notes": "This outputParserStructured node performs automated tasks as part of the workflow."}, {"id": "2a64dce8-e2f0-475e-a366-a02084293aad", "name": "OpenAI Chat", "type": "n8n-nodes-base.noOp", "position": [-92.809175564116, 726.0845437534399], "parameters": {"model": "gpt-4o", "options": {"temperature": 0, "responseFormat": "json_object"}}, "credentials": {"openAiApi": {"id": "13ffkrNMlQMfvbZy", "name": "OpenAi account"}}, "typeVersion": 1, "notes": "This lmChatOpenAi node performs automated tasks as part of the workflow."}, {"id": "be892ff8-0981-4b34-9c93-7674ddd90360", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [-429.809175564116, 461.08454375343996], "parameters": {"width": 304.10628068244364, "height": 394.42512272977456, "content": "## When I receive an Email\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "9d92839a-9ff2-436c-8abb-2f43e07c1ace", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [-112.809175564116, 460.08454375343996], "parameters": {"width": 556, "height": 397, "content": "## ... that Needs a Reply\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "3cd77609-684c-44e2-9cdc-9479cfd836bd", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [460, 460], "parameters": {"width": 333.19082443588354, "height": 400.08454375343996, "content": "## Generate a Reply"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "b123cf31-767d-48bb-a0ba-79a69f6da585", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [807.190824435884, 461.08454375343996], "parameters": {"width": 326, "height": 395, "content": "## ...as a Draft in the conversation"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "1a87c416-6b1c-4526-a2b6-20468c95ea0e", "name": "OpenAI Chat Model", "type": "n8n-nodes-base.noOp", "position": [480, 680], "parameters": {"model": "gpt-4-turbo", "options": {}}, "credentials": {"openAiApi": {"id": "13ffkrNMlQMfvbZy", "name": "OpenAi account"}}, "typeVersion": 1, "notes": "This lmChatOpenAi node performs automated tasks as part of the workflow."}, {"id": "84b4d516-252e-444e-b998-2d4aa0f89653", "name": "Gmail - Create Draft", "type": "n8n-nodes-base.gmail", "position": [900, 560], "parameters": {"message": "={{ $json.text.replace(/\\n/g, \"<br />\\n\") }}", "options": {"sendTo": "={{ $('Gmail Trigger').item.json.headers.from }}", "threadId": "={{ $('Gmail Trigger').item.json.threadId }}"}, "subject": "=Re: {{ $('Gmail Trigger').item.json.headers.subject }}", "resource": "draft", "emailType": "html"}, "credentials": {"gmailOAuth2": {"id": "ofvBTX8A0aWfQb2O", "name": "Gmail account"}}, "typeVersion": 2.1, "notes": "This gmail node performs automated tasks as part of the workflow."}, {"id": "86017ff4-9c57-4b2a-9cd9-f62571a05ffd", "name": "Assess if message needs a reply", "type": "n8n-nodes-base.noOp", "position": [-92.809175564116, 566.0845437534399], "parameters": {"prompt": "=Subject: {{ $json.subject }}\nMessage:\n{{ $json.textAsHtml }} ", "messages": {"messageValues": [{"message": "Your task is to assess if the message requires a response. Return in JSON format true if it does, false otherwise.\nMarketing emails don't require a response."}]}}, "typeVersion": 1.3, "notes": "This chainLlm node performs automated tasks as part of the workflow."}, {"id": "cab1e7e5-93dc-4850-a471-e285cdbe2058", "name": "Generate email reply", "type": "n8n-nodes-base.noOp", "position": [500, 520], "parameters": {"text": "=Subject: {{ $('Gmail Trigger').item.json.subject }}\nMessage: {{ $('Gmail Trigger').item.json.textAsHtml }}", "messages": {"messageValues": [{"message": "You're a helpful personal assistant and your task is to draft replies on my behalf to my incoming emails. Whenever I provide some text from an email, return an appropriate draft reply for it and nothing else.\nEnsure that the reply is suitable for a professional email setting and addresses the topic in a clear, structured, and detailed manner.\nDo not make things up.\n\nDetailed instructions:\n- Be concise and maintain a business casual tone.\n- Start with \"Hello,\", and end with \"Best,\"\n- When replying to yes-no questions, draft 2 responses: one affirmative and one negative separated by \" - - - - - - - OR - - - - - - - \"\n- If you don't know an answer, you can leave placeholders like \"[YOUR_ANSWER_HERE]\".\n- Don't use any special formatting, only plain text.\n- Reply in the same language as the inbound email."}]}, "promptType": "define"}, "typeVersion": 1.4, "notes": "This chainLlm node performs automated tasks as part of the workflow."}, {"id": "error-91438703", "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": "c4448c34-1f75-4479-805e-20d8a69a7e00", "connections": {"2a64dce8-e2f0-475e-a366-a02084293aad": {"main": [[{"node": "error-handler-2a64dce8-e2f0-475e-a366-a02084293aad-31185dd2", "type": "main", "index": 0}]]}, "1a87c416-6b1c-4526-a2b6-20468c95ea0e": {"main": [[{"node": "error-handler-1a87c416-6b1c-4526-a2b6-20468c95ea0e-628962d2", "type": "main", "index": 0}]]}}, "description": "Automated workflow: Gmail AI auto-responder: create draft replies to incoming emails. This workflow integrates 8 different services: stickyNote, gmailTrigger, chainLlm, outputParserStructured, stopAndError. It contains 14 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: Gmail AI auto-responder: create draft replies to incoming emails. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}