AutomationFlowsAI & RAG › AI Email & Calendar Assistant with Gmail and Google Calendar

AI Email & Calendar Assistant with Gmail and Google Calendar

Original n8n title: Automate Email & Calendar Management with Gmail, Google Calendar & Gpt-4o AI

ByAOE Agent Lab @aoepeople on n8n.io

Boost your productivity with this AI-powered email and calendar assistant:

Chat trigger trigger★★★★★ complexityAI-powered38 nodesChat TriggerOpenAI ChatMemory Buffer WindowExecute Workflow TriggerGmail ToolGoogle Calendar ToolGmailOpenAI Embeddings
AI & RAG Trigger: Chat trigger Nodes: 38 Complexity: ★★★★★ AI nodes: yes Added:

This workflow corresponds to n8n.io template #4366 — we link there as the canonical source.

This workflow follows the Agent → Chat Trigger recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "leftLsw8mj6dIDBp",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "[AOE]  Inbox & Calendar Management Agent",
  "tags": [],
  "nodes": [
    {
      "id": "2b6b584a-db48-414e-9469-0134dff9ebce",
      "name": "When chat message received",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        120,
        240
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "61207c74-2086-4ee1-8bdf-96056534e509",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        720,
        420
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o",
          "cachedResultName": "gpt-4o"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "c6e43767-eb96-4557-88ac-f5a5ca9f00cc",
      "name": "Window Buffer Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        880,
        420
      ],
      "parameters": {
        "sessionKey": "={{ $('sessionId-master').item.json.sessionId }}",
        "sessionIdType": "customKey",
        "contextWindowLength": 10
      },
      "typeVersion": 1.3
    },
    {
      "id": "912b82ce-e8c1-45bd-9ddf-d6b269de94c3",
      "name": "When Executed by Another Workflow",
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "position": [
        120,
        80
      ],
      "parameters": {
        "workflowInputs": {
          "values": [
            {
              "name": "sessionId"
            },
            {
              "name": "chatInput"
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "fdb327a9-dcce-41ee-b6e8-d84a3d6ef9b9",
      "name": "sessionId-master",
      "type": "n8n-nodes-base.noOp",
      "position": [
        600,
        240
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "2d3c1764-fc33-4142-ad56-da4eb3231090",
      "name": "Get last emails",
      "type": "n8n-nodes-base.gmailTool",
      "position": [
        540,
        760
      ],
      "parameters": {
        "limit": "={{ $fromAI(\"limit\", \"The maximal number of mails to receive.\", \"number\") }}",
        "filters": {
          "q": "in:inbox"
        },
        "operation": "getAll",
        "descriptionType": "manual",
        "toolDescription": "Consume the Gmail API to get the last emails"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "b3f00e8e-4354-43fe-8ee2-b8a86a79a1ea",
      "name": "Get calendar events",
      "type": "n8n-nodes-base.googleCalendarTool",
      "position": [
        1160,
        800
      ],
      "parameters": {
        "limit": "={{ $fromAI('limit','the amount of event',\"number\") }}",
        "options": {},
        "timeMax": "={{ $fromAI('end','end date in format \"2017-07-01T13:00:00+02:00\"') }}",
        "timeMin": "={{ $fromAI('start','start date in format \"2017-07-01T13:00:00+02:00\"') }}",
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": "user@example.com",
          "cachedResultName": "user@example.com"
        },
        "operation": "getAll",
        "descriptionType": "manual",
        "toolDescription": "Consume Google Calendar API to receive a list of calendar events between \"start\" and \"end\". Make sure to pass datetime."
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "acfd68ec-4c61-437c-a0e4-95d676d995e6",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        100,
        -860
      ],
      "parameters": {
        "width": 1500,
        "height": 720,
        "content": "## Email Sorting Agent\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e9526541-84cd-4b98-a24e-9c7e5d8d3d0d",
      "name": "When clicking \u2018Test workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        1840,
        -760
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "22156318-e308-41a9-aa9e-df1fc40a85b5",
      "name": "Gmail - get recent Threads",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2140,
        -560
      ],
      "parameters": {
        "filters": {},
        "resource": "thread"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "c26da13c-8d94-48fc-a62e-05c21340ca06",
      "name": "Gmail1",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2360,
        -560
      ],
      "parameters": {
        "options": {},
        "resource": "thread",
        "threadId": "={{ $json.id }}",
        "operation": "get"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "7d69096c-6a05-4ad3-9428-1cef0d76205c",
      "name": "Embeddings OpenAI",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        2780,
        -240
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "583787f7-b378-43f7-9737-189b2fd29855",
      "name": "Default Data Loader",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        3020,
        -380
      ],
      "parameters": {
        "options": {
          "metadata": {
            "metadataValues": [
              {
                "name": "threadId",
                "value": "={{ $json.id }}"
              }
            ]
          }
        },
        "jsonData": "={{ $json.emailSummary }}",
        "jsonMode": "expressionData"
      },
      "typeVersion": 1
    },
    {
      "id": "d889a564-d810-430f-8470-eecac9717d7a",
      "name": "Token Splitter",
      "type": "@n8n/n8n-nodes-langchain.textSplitterTokenSplitter",
      "position": [
        3040,
        -240
      ],
      "parameters": {
        "chunkSize": 2000
      },
      "typeVersion": 1
    },
    {
      "id": "38842f34-bbd4-40d2-a636-3b42b51f3566",
      "name": "Code - Summarize Email Thread as Text",
      "type": "n8n-nodes-base.code",
      "position": [
        2580,
        -560
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "const result = {}\n\nfunction summarizeConversation(messages) {\n  return messages.map(msg => {\n    const date = new Date(Number(msg.internalDate)).toISOString();\n    return `\n\n\ud83d\udcc5 ${date}\n\ud83d\udce8 From: ${msg.From}\n\ud83d\udce5 To: ${msg.To}\n\ud83d\udccc Subject: ${msg.Subject}\n\n${msg.snippet}\n`.trim();\n  }).join(\"\\n\\n-----------------------\\n\\n\");\n}\n\n$json.emailSummary = summarizeConversation($json.messages);\n\nreturn $json;"
      },
      "typeVersion": 2
    },
    {
      "id": "6dde2109-42ca-4cf9-885e-5d928949b9ad",
      "name": "Embeddings OpenAI1",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        1800,
        960
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "fd638fb0-db5f-43fc-816d-6c5462204982",
      "name": "OpenAI Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        2080,
        760
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "18985af7-84c9-4c86-9e9f-a42f2b0bc216",
      "name": "Delete an email",
      "type": "n8n-nodes-base.gmailTool",
      "position": [
        900,
        780
      ],
      "parameters": {
        "messageId": "={{ $fromAI('Message_ID', ``, 'string') }}",
        "operation": "delete",
        "descriptionType": "manual",
        "toolDescription": "Call the Gmail API to delete an email. Always request the email message id before calling this tool."
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "e59a937e-7392-4348-a7d3-1973c69f1d2f",
      "name": "Create an Email Draft as response to a thread",
      "type": "n8n-nodes-base.gmailTool",
      "position": [
        580,
        920
      ],
      "parameters": {
        "message": "={{ $fromAI('Message', `The Text that should be send in reply`, 'string') }}",
        "options": {
          "sendTo": "={{ $fromAI('To_Email', `The email adress of the sender`, 'string') }}",
          "threadId": "={{ $fromAI('thread-ID', `The ID of the thread. Need to be received from the Email Tool Response. Use the exact ID and better call the Get Email Tool again`, 'string') }}"
        },
        "subject": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Subject', ``, 'string') }}",
        "resource": "draft",
        "descriptionType": "manual",
        "toolDescription": "Call Gmail API to create a Draft message as Reply To an existing email or email thread. Pass the correct Thread-Id of the message. To get the Thread ID call the Get Email Tool before."
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "7002b9d3-01b2-4dd0-8a33-258c17836330",
      "name": "Create an New Email Draft",
      "type": "n8n-nodes-base.gmailTool",
      "position": [
        740,
        760
      ],
      "parameters": {
        "message": "={{ $fromAI('Message', `The Text that should be send in reply`, 'string') }}",
        "options": {
          "sendTo": "={{ $fromAI('To_Email', `The email adress of the sender`, 'string') }}"
        },
        "subject": "={{ $fromAI('Subject', ``, 'string') }}",
        "resource": "draft",
        "descriptionType": "manual",
        "toolDescription": "Call Gmail API to create a New outgoing Draft message."
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "350497b8-4acb-49e2-ad26-e55cd51c30f3",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        500,
        660
      ],
      "parameters": {
        "width": 520,
        "height": 460,
        "content": "## Email Access Tools"
      },
      "typeVersion": 1
    },
    {
      "id": "56ba48de-1190-4fc2-bac0-1d2a3eac6cb6",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1100,
        660
      ],
      "parameters": {
        "color": 6,
        "width": 520,
        "height": 460,
        "content": "## Calender Access Tools"
      },
      "typeVersion": 1
    },
    {
      "id": "86aaa5cf-47e3-4a31-9116-2f09d98ed559",
      "name": "Add an calender entry",
      "type": "n8n-nodes-base.googleCalendarTool",
      "position": [
        1360,
        800
      ],
      "parameters": {
        "end": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('End', ``, 'string') }}",
        "start": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Start', ``, 'string') }}",
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": "user@example.com",
          "cachedResultName": "user@example.com"
        },
        "descriptionType": "manual",
        "toolDescription": "Consume Google Calendar API to add a new event or meeting to the calender",
        "additionalFields": {
          "summary": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Summary', ``, 'string') }}",
          "description": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Description', ``, 'string') }}"
        }
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "14bfc40d-0efb-4b00-a77b-917166a278a1",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1700,
        500
      ],
      "parameters": {
        "color": 5,
        "width": 520,
        "height": 620,
        "content": "## Knowlede about past email conversations"
      },
      "typeVersion": 1
    },
    {
      "id": "83470865-9e68-4ee9-ba7d-5f6130a71b4d",
      "name": "Gmail Trigger",
      "type": "n8n-nodes-base.gmailTrigger",
      "position": [
        240,
        -540
      ],
      "parameters": {
        "filters": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        }
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "00b10246-a5a3-4ea5-a570-e109821e6b8d",
      "name": "OpenAI Chat Model2",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        560,
        -300
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "7ed7143e-4e63-40cc-bfd2-82405057ef79",
      "name": "Gmail label as kunde",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1200,
        -640
      ],
      "parameters": {
        "labelIds": [
          "Label_4725571417728382593"
        ],
        "messageId": "={{ $json.id }}",
        "operation": "addLabels"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "8d2ffc73-3fe3-48ed-a4b4-e4e9707435ff",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1740,
        -900
      ],
      "parameters": {
        "color": 4,
        "width": 1680,
        "height": 780,
        "content": "## Email Thread Knowledge adder"
      },
      "typeVersion": 1
    },
    {
      "id": "1b6b3558-6bd5-49c6-85b5-d8661f204f26",
      "name": "Get an email by MessageID",
      "type": "n8n-nodes-base.gmailTool",
      "position": [
        800,
        940
      ],
      "parameters": {
        "messageId": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Message_ID', ``, 'string') }}",
        "operation": "get",
        "descriptionType": "manual",
        "toolDescription": "Consume the Gmail API to receive an email by message-id"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "bbdfdfd9-f35d-4e02-aa31-6ad39ba27b4d",
      "name": "Research context and infos in previous conversations",
      "type": "@n8n/n8n-nodes-langchain.toolVectorStore",
      "position": [
        1840,
        560
      ],
      "parameters": {
        "description": "Can answer questions and do research in previous email conversations. Use this tool whenever you need more context about past conversations to an email. \nFor better retrieval and more context always pass the email-adresses to the query!\n"
      },
      "typeVersion": 1.1
    },
    {
      "id": "f52a8a15-2a2c-4191-ad87-2a1a1a714896",
      "name": "Gmail - Label as Colleges",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1200,
        -800
      ],
      "parameters": {
        "labelIds": [
          "Label_749967+1234567890"
        ],
        "messageId": "={{ $json.id }}",
        "operation": "addLabels"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "72bf9803-02ce-48a9-bf6a-e64ab211ddf6",
      "name": "EMail Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1060,
        240
      ],
      "parameters": {
        "text": "={{ $json.chatInput }}",
        "options": {
          "systemMessage": "=# AI Assistant Prompt \u2013 Inbox & Calendar\n\n## Role  \nYou are my personal AI assistant for email and calendar management.  \nI am Daniel P\u00f6tzinger, CTO of AOE.  \nYou support me in organizing my Gmail inbox, keeping track of important topics, handling emails, and managing appointments efficiently.  \nYou provide suggestions and analyses, and act autonomously when retrieving information using the available tools.\n\n---\n\n## Scope  \nYou analyze emails and calendar data, identify relevant information, prioritize, and assist in processing.  \nYou can access email content, draft responses, suggest calendar entries, and identify available time slots \u2013 based on the tools provided. Use the tools proactively.\n\n> Today is `{{ $now }}` in timezone +2.  \n> The user is in timezone +2.\n\n---\n\n## Command\n\n- Regularly provide an overview of current and prioritized emails.  \n- Detect requests, invitations, or to-dos in emails and suggest appropriate actions or scheduling.  \n- Propose meaningful draft replies suitable to the context.  \n- Monitor the calendar for upcoming appointments, conflicts, or free time slots.  \n- Suggest daily or weekly structures based on calendar availability.  \n- Support planning and coordination directly from the context of emails.  \n- When suggesting appointments, always check availability in the calendar.  \n- Note that calendar timestamps are in UTC and must be converted before evaluation and display.  \n- When handling emails and using the corresponding tools, remember the `MessageID` so it can be passed to other tools.  \n  Always show the `MessageID` to the user so it remains accessible in your conversation history.\n\n---\n\n## Format\n\n- Clear, structured presentation of suggestions (e.g., lists, tables, bullet points).  \n- Draft replies must always be **friendly and professional** \u2013 respectful, clear, without unnecessary phrasing.  \n- Calendar and time suggestions must be easy to read (e.g., \u201cnext Tuesday at 2:00 PM\u201d).\n\n---\n\n## Constraints\n\n- Only send emails or create appointments after confirmation from the user.  \n- Always act in the spirit of **relief, clarity, and efficiency**.\n"
        },
        "promptType": "define"
      },
      "typeVersion": 1.7
    },
    {
      "id": "76fa4e5c-110f-48b1-86f0-7fc7302b7f66",
      "name": "Classify Emails",
      "type": "@n8n/n8n-nodes-langchain.textClassifier",
      "onError": "continueErrorOutput",
      "position": [
        560,
        -680
      ],
      "parameters": {
        "options": {
          "fallback": "other"
        },
        "inputText": "=Email Subject: {{ $json.Subject }}\n\nEMail From: {{ $json.From }}\n\n------\n##Email Snippet: \n{{ $json.snippet }}\n\n",
        "categories": {
          "categories": [
            {
              "category": "Kollegen",
              "description": "any email from colleagues with the sender @example.com"
            },
            {
              "category": "Kunden",
              "description": "Every email with an existing contact in the CRM or that sounds like a customer.|Also mails that sound like a customer inquiry and mails that show a project reference."
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c6bb5664-fa45-4f80-af22-97786da79deb",
      "name": "Write - Threads History Vector Store",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory",
      "position": [
        2900,
        -560
      ],
      "parameters": {
        "mode": "insert",
        "clearStore": true
      },
      "typeVersion": 1.1
    },
    {
      "id": "62cb4909-8dd1-4a5e-b0c8-cc8a6e708433",
      "name": "Read- Threads History Vector Store",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory",
      "position": [
        2820,
        -760
      ],
      "parameters": {
        "mode": "load",
        "topK": 100,
        "prompt": "workshop"
      },
      "typeVersion": 1.1
    },
    {
      "id": "e0e0b246-0091-4cef-97ea-18f1b48d9dd9",
      "name": "Threads History Vector Store",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory",
      "position": [
        1780,
        780
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "c3cff5e3-24a0-4272-9e43-ea781784f64d",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -460,
        0
      ],
      "parameters": {
        "color": 3,
        "width": 480,
        "height": 440,
        "content": "## Main Inbox Assistance Agent\n\n### Before Using\n** Modify the classifier agent for your needs. Add the Labels in GMail before, if you want to assign labels.\n** Add proper credentials\n** Modify the Prompts (e.g. give more context about your role and company)\n\n### More on professional Agents:\n** From [AOE AI Lab](https://ai-radar.aoe.com/)"
      },
      "typeVersion": 1
    },
    {
      "id": "ef343339-b6c5-4cde-bf74-89e6e254a337",
      "name": "Determine the name of the day of the week",
      "type": "n8n-nodes-base.dateTimeTool",
      "position": [
        1240,
        960
      ],
      "parameters": {
        "date": "={{ $fromAI('Date', ``, 'string') }}",
        "format": "custom",
        "options": {},
        "operation": "formatDate",
        "customFormat": "EEEE dd MM ",
        "descriptionType": "manual",
        "outputFieldName": "=formattedDate",
        "toolDescription": "Formats the date in the name of the day of the week. Always use this before you output weekdays."
      },
      "typeVersion": 2
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "221a80b7-bc6f-4443-afe8-07806d453809",
  "connections": {
    "Gmail1": {
      "main": [
        [
          {
            "node": "Code - Summarize Email Thread as Text",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "EMail Agent": {
      "main": [
        []
      ]
    },
    "Gmail Trigger": {
      "main": [
        [
          {
            "node": "Classify Emails",
            "type": "main",
            "index": 0
          },
          {
            "node": "Gmail - get recent Threads",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Token Splitter": {
      "ai_textSplitter": [
        [
          {
            "node": "Default Data Loader",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    },
    "Classify Emails": {
      "main": [
        [
          {
            "node": "Gmail - Label as Colleges",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Gmail label as kunde",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Delete an email": {
      "ai_tool": [
        [
          {
            "node": "EMail Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Get last emails": {
      "ai_tool": [
        [
          {
            "node": "EMail Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "sessionId-master": {
      "main": [
        [
          {
            "node": "EMail Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings OpenAI": {
      "ai_embedding": [
        [
          {
            "node": "Read- Threads History Vector Store",
            "type": "ai_embedding",
            "index": 0
          },
          {
            "node": "Write - Threads History Vector Store",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "EMail Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings OpenAI1": {
      "ai_embedding": [
        [
          {
            "node": "Threads History Vector Store",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "Research context and infos in previous conversations",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model2": {
      "ai_languageModel": [
        [
          {
            "node": "Classify Emails",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Default Data Loader": {
      "ai_document": [
        [
          {
            "node": "Write - Threads History Vector Store",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "Get calendar events": {
      "ai_tool": [
        [
          {
            "node": "EMail Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Window Buffer Memory": {
      "ai_memory": [
        [
          {
            "node": "EMail Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Add an calender entry": {
      "ai_tool": [
        [
          {
            "node": "EMail Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Create an New Email Draft": {
      "ai_tool": [
        [
          {
            "node": "EMail Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Get an email by MessageID": {
      "ai_tool": [
        [
          {
            "node": "EMail Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Gmail - get recent Threads": {
      "main": [
        [
          {
            "node": "Gmail1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When chat message received": {
      "main": [
        [
          {
            "node": "sessionId-master",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Threads History Vector Store": {
      "ai_vectorStore": [
        [
          {
            "node": "Research context and infos in previous conversations",
            "type": "ai_vectorStore",
            "index": 0
          }
        ]
      ]
    },
    "When Executed by Another Workflow": {
      "main": [
        [
          {
            "node": "sessionId-master",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Test workflow\u2019": {
      "main": [
        [
          {
            "node": "Gmail - get recent Threads",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code - Summarize Email Thread as Text": {
      "main": [
        [
          {
            "node": "Write - Threads History Vector Store",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Determine the name of the day of the week": {
      "ai_tool": [
        [
          {
            "node": "EMail Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Create an Email Draft as response to a thread": {
      "ai_tool": [
        [
          {
            "node": "EMail Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Research context and infos in previous conversations": {
      "ai_tool": [
        [
          {
            "node": "EMail Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Boost your productivity with this AI-powered email and calendar assistant:

Source: https://n8n.io/workflows/4366/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

This workflow acts as a 24/7 sales agent, engaging leads across WhatsApp, Instagram, Facebook, Telegram, and your website. It intelligently transcribes audio messages, answers questions using a knowle

Chat Trigger, Memory Postgres Chat, Tool Workflow +20
AI & RAG

• Create a Google Drive folder to watch. • Connect your Google Drive account in n8n and authorize access. • Point the Google Drive Trigger node to this folder (new/modified files trigger the flow).

Agent, Chat Trigger, Memory Buffer Window +14
AI & RAG

Advanced Ai Demo Presented At Ai Developers 14 Meetup. Uses slack, stickyNote, textSplitterRecursiveCharacterTextSplitter, embeddingsOpenAi. Chat trigger; 39 nodes.

Slack, Text Splitter Recursive Character Text Splitter, OpenAI Embeddings +14
AI & RAG

Advanced Ai Demo (Presented At Ai Developers #14 Meetup). Uses slack, stickyNote, textSplitterRecursiveCharacterTextSplitter, embeddingsOpenAi. Chat trigger; 39 nodes.

Slack, Text Splitter Recursive Character Text Splitter, OpenAI Embeddings +14
AI & RAG

Workflow 2358. Uses slack, textSplitterRecursiveCharacterTextSplitter, embeddingsOpenAi, documentDefaultDataLoader. Chat trigger; 39 nodes.

Slack, Text Splitter Recursive Character Text Splitter, OpenAI Embeddings +14