AutomationFlowsAI & RAG › Automated Email Replies with Gpt-4o, Outlook, and Gotohuman Approval

Automated Email Replies with Gpt-4o, Outlook, and Gotohuman Approval

ByRobert Breen @rbreen on n8n.io

This n8n workflow reads emails from your Outlook inbox, drafts AI-powered replies using OpenAI, and routes them through the gotoHuman node for human approval before replying automatically. Reads Outlook emails from today only (excluding those from your own address). AI-generated…

Event trigger★★★★☆ complexityAI-powered15 nodesTool ThinkOutput Parser StructuredOpenAI ChatAgentMicrosoft Outlook@Gotohuman/N8N Nodes Gotohuman
AI & RAG Trigger: Event Nodes: 15 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → OpenAI Chat 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
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "db46a99c-a87d-4203-925f-f94fed274bbe",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        120,
        0
      ],
      "parameters": {
        "color": 5,
        "width": 1200,
        "height": 760,
        "content": "### 4. **Generate AI Response**\n- Text prompt to OpenAI:  \n  ```\n  subject: {{ $json.subject }}  \n  body: {{ $json.body.content }}\n  ```\n\n- System prompt:  \n  > You are a personal assistant helping respond to emails. I am an AI automation expert specializing in helping small and medium-size businesses automate processes. Create a short response to the email. Sign the email as Robert Breen.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "2b29c366-caf6-41e5-bf09-a6f60ab9d315",
      "name": "Tool: Inject Creativity",
      "type": "@n8n/n8n-nodes-langchain.toolThink",
      "position": [
        600,
        520
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "df07d826-251e-4b9f-927f-637280847891",
      "name": "Parser: Extract JSON from Idea",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        800,
        480
      ],
      "parameters": {
        "jsonSchemaExample": "[\n  {\n    \"body\": \"\"\n  }\n]\n"
      },
      "typeVersion": 1.2
    },
    {
      "id": "3f7eeefc-a208-4020-8b6a-7dc536126daa",
      "name": "openai",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        480,
        500
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o",
          "cachedResultName": "gpt-4o"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "c1d3fd0d-b84e-4346-aa2e-3c3b8cf358e3",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -880,
        0
      ],
      "parameters": {
        "width": 980,
        "height": 760,
        "content": "### 1. **Trigger**  \nUse the Manual Trigger to test or schedule execution with a cron node.\n\n### 2. **Filter Emails from Today**\nA Code node outputs today's date in the proper `yyyy-mm-dd` format.\n\n```javascript\nconst today = new Date();\ntoday.setHours(0, 0, 0, 0);\nreturn [{ json: { searchQuery: `received:${today.toISOString().split('T')[0]}` } }];\n```\n\n### 3. **Search and Filter Outlook Messages**\n- Uses the Outlook node with a search query like:  \n  `received:2025-08-06 -from:rbreen@ynteractive.com` (Update to your email address)"
      },
      "typeVersion": 1
    },
    {
      "id": "af0105d8-5b95-4d82-8735-acb6358f607b",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1340,
        0
      ],
      "parameters": {
        "color": 3,
        "width": 760,
        "height": 760,
        "content": "### 5. **Review with gotoHuman**\n- Submit AI output for human approval using the `gotoHuman` node.\n- The output schema should match the Review Template fields (e.g., \"email\", \"OriginalEmail\").\n\n### 6. **IF Node Decision**\n- If status is `approved`, send reply\n- If not, return to loop for revision or skip\n\n---"
      },
      "typeVersion": 1
    },
    {
      "id": "be573205-24d6-49e7-924e-d9bfd1879505",
      "name": "Test",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -800,
        420
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "807aecbb-fdc0-4a6b-9fbb-186aefdad240",
      "name": "Output Today's Date",
      "type": "n8n-nodes-base.code",
      "position": [
        -520,
        560
      ],
      "parameters": {
        "jsCode": "const today = new Date();\ntoday.setHours(0, 0, 0, 0); // Normalize to start of day\n\nconst formattedDate = today.toISOString().split('T')[0]; // \"2025-08-06\"\n\nreturn [\n  {\n    json: {\n      searchQuery: `received:${formattedDate}`\n    }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "b4d9154b-c7e8-437b-b6d8-ed22327bfccf",
      "name": "AI Agent: Create caption for linkedin",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        560,
        300
      ],
      "parameters": {
        "text": "=subject: {{ $json.subject }} Body: {{ $json.body.content }}",
        "options": {
          "systemMessage": "=You are a personal assistant helping respond to emails. I am an ai automation expert specializing in helping small and medium size businesses automate processes. Create a short response to the email that you are analyzing. \n\nThe email that you write should be written to the sender who sent the email to us. \n\nSign the email as Robert Breen\n\noutput the data like this. \n\n[\n  {\n    \"body\": \"\"\n  }\n]\n"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.9
    },
    {
      "id": "41d1ebef-9808-4d0b-ae30-2e8cd0ae597a",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -880,
        -240
      ],
      "parameters": {
        "color": 6,
        "width": 2980,
        "height": 200,
        "content": "# \ud83e\udd16AI-Powered Outlook Email Assistant with GoToHuman Approval Workflow\n## \ud83d\udcec Need Help?\n\nMessage me on [LinkedIn](https://www.linkedin.com/in/robert-breen-29429625/) \nor email me at **robert@ynteractive.com**\n"
      },
      "typeVersion": 1
    },
    {
      "id": "a27db7b8-96b1-425e-98d9-e1dc5f939478",
      "name": "Microsoft Outlook",
      "type": "n8n-nodes-base.microsoftOutlook",
      "position": [
        -280,
        420
      ],
      "parameters": {
        "limit": 2,
        "output": "raw",
        "options": {},
        "filtersUI": {
          "values": {
            "search": "={{ $json.searchQuery }} -from:rbreen@ynteractive.com\n",
            "filterBy": "search"
          }
        },
        "operation": "getAll"
      },
      "credentials": {
        "microsoftOutlookOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "3830b457-613f-4709-b70a-ae5d089d8a83",
      "name": "gotoHuman",
      "type": "@gotohuman/n8n-nodes-gotohuman.gotoHuman",
      "position": [
        1460,
        300
      ],
      "parameters": {
        "fields": {
          "value": {
            "email": "={{ $json.output[0].body }}",
            "OriginalEmail": "={{ $('Microsoft Outlook').item.json.body.content }}"
          },
          "schema": [
            {
              "id": "email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "email (text)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "OriginalEmail",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "OriginalEmail (emailHtml)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "email"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "additionalFields": {},
        "reviewTemplateID": {
          "__rl": true,
          "mode": "list",
          "value": "7nYfIV9vrefvuHcccGEB",
          "cachedResultName": "Email Responses (7nYfIV9vrefvuHcccGEB)"
        }
      },
      "credentials": {
        "gotoHumanApi": {
          "name": "<your credential>"
        }
      },
      "executeOnce": true,
      "typeVersion": 1
    },
    {
      "id": "6484d15f-94d2-4078-93de-beee1985e085",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -40,
        560
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "07ef9661-0df9-41a9-b412-3f2af84bba43",
      "name": "Microsoft Outlook1",
      "type": "n8n-nodes-base.microsoftOutlook",
      "position": [
        1920,
        520
      ],
      "parameters": {
        "message": "={{ $json.responseValues.email.value }}",
        "options": {},
        "messageId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Microsoft Outlook').item.json.id }}"
        },
        "operation": "reply"
      },
      "credentials": {
        "microsoftOutlookOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "5b6f8868-ac73-44f0-9eaa-64250abab4d6",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        1700,
        300
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "8516d970-6327-47de-83ab-1945acd928b2",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.response }}",
              "rightValue": "approved"
            }
          ]
        }
      },
      "typeVersion": 2.2
    }
  ],
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Microsoft Outlook1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Test": {
      "main": [
        [
          {
            "node": "Output Today's Date",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "openai": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent: Create caption for linkedin",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "gotoHuman": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "AI Agent: Create caption for linkedin",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Microsoft Outlook": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Microsoft Outlook1": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Output Today's Date": {
      "main": [
        [
          {
            "node": "Microsoft Outlook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Tool: Inject Creativity": {
      "ai_tool": [
        [
          {
            "node": "AI Agent: Create caption for linkedin",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Parser: Extract JSON from Idea": {
      "ai_outputParser": [
        [
          {
            "node": "AI Agent: Create caption for linkedin",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent: Create caption for linkedin": {
      "main": [
        [
          {
            "node": "gotoHuman",
            "type": "main",
            "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

This n8n workflow reads emails from your Outlook inbox, drafts AI-powered replies using OpenAI, and routes them through the gotoHuman node for human approval before replying automatically. Reads Outlook emails from today only (excluding those from your own address). AI-generated…

Source: https://n8n.io/workflows/7049/ — 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

🎯 Create viral TikToks, Shorts, Reels, podcasts, and ASMR videos in minutes — all on autopilot.

OpenAI, HTTP Request, Form Trigger +7
AI & RAG

Generate AI viral videos with NanoBanana & VEO3, shared on socials via Blotato 2. Uses @blotato/n8n-nodes-blotato, googleSheets, lmChatOpenAi, toolThink. Event-driven trigger; 94 nodes.

@Blotato/N8N Nodes Blotato, Google Sheets, OpenAI Chat +9
AI & RAG

Generate AI video clips to promote products, services or events on social media. Use gotoHuman as an interface to control and supervise each step of the workflow to create content that's actually wort

Agent, OpenAI Chat, Tool Think +3
AI & RAG

This template is designed for marketers, content creators, and e-commerce brands who want to automate the creation of professional ad videos at scale. It’s ideal for teams looking to generate consiste

Telegram, Telegram Trigger, Google Drive +8
AI & RAG

This n8n template automates B2B lead research and enrichment for Attio CRM. It combines data from Apollo.io, LinkedIn scraping, and news sources with AI-powered analysis to generate actionable sales i

HTTP Request, N8N Nodes Scrape Creators, @Tavily/N8N Nodes Tavily +5