AutomationFlowsSlack & Telegram › Generate Funny Excuses from Emails

Generate Funny Excuses from Emails

Original n8n title: Nathan Your N8n Personal Assistant

Nathan Your N8N Personal Assistant. Uses emailReadImap, readBinaryFile, spreadsheetFile, emailSend. Manual trigger; 9 nodes.

Manual trigger★★★★☆ complexity9 nodesEmail Read ImapRead Binary FileSpreadsheet FileEmail SendSlack
Slack & Telegram Trigger: Manual Nodes: 9 Complexity: ★★★★☆ Added:

This workflow follows the Emailreadimap → Emailsend 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
{
  "nodes": [
    {
      "name": "Read Harvey's Email",
      "type": "n8n-nodes-base.emailReadImap",
      "position": [
        270,
        390
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "imap": "<your credential>"
      },
      "typeVersion": 1
    },
    {
      "name": "Who Is The Email From?",
      "type": "n8n-nodes-base.switch",
      "position": [
        460,
        390
      ],
      "parameters": {
        "rules": {
          "rules": [
            {
              "value2": "Louis Litt <louis_litt_1970@yahoo.com>"
            }
          ]
        },
        "value1": "={{$node[\"Read Harvey's Email\"].json[\"from\"]}}",
        "dataType": "string",
        "fallbackOutput": 3
      },
      "typeVersion": 1,
      "alwaysOutputData": false
    },
    {
      "name": "Read Excuses File",
      "type": "n8n-nodes-base.readBinaryFile",
      "position": [
        670,
        230
      ],
      "parameters": {
        "filePath": "/home/n8n/Excuse_Generator.xlsx"
      },
      "typeVersion": 1
    },
    {
      "name": "Retrieve Excuses Spreadsheet Data",
      "type": "n8n-nodes-base.spreadsheetFile",
      "position": [
        860,
        230
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "name": "Generate Excuse",
      "type": "n8n-nodes-base.function",
      "position": [
        1040,
        230
      ],
      "parameters": {
        "functionCode": "var leadinmax = 24;\nvar perpmax = 25;\nvar delaymax = 23;\nvar leadin = Math.floor((Math.random() * leadinmax ) + 1);\nvar perp = Math.floor((Math.random() * perpmax ) + 1);\nvar delay = Math.floor((Math.random() * delaymax) + 1);\n\nvar excuse = items[leadin].json.Leadin + \" \" + items[perp].json.Perpetrator + \" \" + items[delay].json.Delay;\n\nitems = [{json:{}}];\n\nitems[0].json.excuse = excuse;\nreturn items;\n"
      },
      "typeVersion": 1
    },
    {
      "name": "Merge Excuse and Mail Data",
      "type": "n8n-nodes-base.merge",
      "position": [
        1230,
        330
      ],
      "parameters": {
        "mode": "mergeByIndex"
      },
      "typeVersion": 1
    },
    {
      "name": "Send Email",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1460,
        250
      ],
      "parameters": {
        "text": "= {{$node[\"Merge Excuse and Mail Data\"].json[\"excuse\"]}}\n\nMaybe next time.\n\nHarvey",
        "options": {},
        "subject": "=RE: {{$node[\"Merge Excuse and Mail Data\"].json[\"subject\"]}}",
        "toEmail": "={{$node[\"Merge Excuse and Mail Data\"].json[\"from\"]}}",
        "fromEmail": "={{$node[\"Merge Excuse and Mail Data\"].json[\"to\"]}}"
      },
      "credentials": {
        "smtp": "<your credential>"
      },
      "typeVersion": 1
    },
    {
      "name": "Slack (Louis)",
      "type": "n8n-nodes-base.slack",
      "position": [
        1470,
        410
      ],
      "parameters": {
        "text": "=Here is what Louis emailed you:\n```\n{{$node[\"Merge Excuse and Mail Data\"].json[\"textPlain\"]}}\n```\n\nHere is how \"you\" responded:\n> {{$node[\"Merge Excuse and Mail Data\"].json[\"excuse\"]}}\n\n:+1: *You're Welcome!* :smirk:",
        "channel": "private",
        "attachments": [],
        "otherOptions": {
          "mrkdwn": true
        }
      },
      "credentials": {
        "slackApi": "<your credential>"
      },
      "typeVersion": 1
    },
    {
      "name": "Slack (General)",
      "type": "n8n-nodes-base.slack",
      "position": [
        890,
        470
      ],
      "parameters": {
        "text": "You've just received an email. You may wish to check it out.",
        "channel": "private",
        "attachments": [],
        "otherOptions": {
          "mrkdwn": true
        }
      },
      "credentials": {
        "slackApi": "<your credential>"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Generate Excuse": {
      "main": [
        [
          {
            "node": "Merge Excuse and Mail Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Excuses File": {
      "main": [
        [
          {
            "node": "Retrieve Excuses Spreadsheet Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Harvey's Email": {
      "main": [
        [
          {
            "node": "Who Is The Email From?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Who Is The Email From?": {
      "main": [
        [
          {
            "node": "Read Excuses File",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge Excuse and Mail Data",
            "type": "main",
            "index": 1
          }
        ],
        [
          {
            "node": "Slack (General)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Excuse and Mail Data": {
      "main": [
        [
          {
            "node": "Send Email",
            "type": "main",
            "index": 0
          },
          {
            "node": "Slack (Louis)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Retrieve Excuses Spreadsheet Data": {
      "main": [
        [
          {
            "node": "Generate Excuse",
            "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

Nathan Your N8N Personal Assistant. Uses emailReadImap, readBinaryFile, spreadsheetFile, emailSend. Manual trigger; 9 nodes.

Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →

More Slack & Telegram workflows → · Browse all categories →

Related workflows

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

Slack & Telegram

Parse DMARC reports. Uses emailReadImap, dateTime, mySql, renameKeys. Manual trigger; 20 nodes.

Email Read Imap, MySQL, Compression +3
Slack & Telegram

Bet Assistant - Monitoring i Alerty Systemu. Uses httpRequest, slack, emailSend. Scheduled trigger; 10 nodes.

HTTP Request, Slack, Email Send
Slack & Telegram

Course Import Workflow. Uses readBinaryFile, spreadsheetFile, httpRequest, slack. Scheduled trigger; 8 nodes.

Read Binary File, Spreadsheet File, HTTP Request +2
Slack & Telegram

Automates website downtime detection and notifications using UptimeRobot. Triggers alerts via Slack, WhatsApp, or Email when a website goes down. Creates a task in Notion and tags the responsible engi

Slack, Email Send, Notion +1
Slack & Telegram

Advanced Slackbot With N8N. Uses slack, httpRequest, stickyNote, executeWorkflow. Webhook trigger; 34 nodes.

Slack, HTTP Request, Execute Workflow Trigger +1