AutomationFlowsSlack & Telegram › Workflow 2: Daily Alert System (cloud Friendly)

Workflow 2: Daily Alert System (cloud Friendly)

Workflow 2: Daily Alert System (Cloud Friendly). Uses httpRequest, telegram, emailSend. Scheduled trigger; 7 nodes.

Cron / scheduled trigger★★★★☆ complexity7 nodesHTTP RequestTelegramEmail Send
Slack & Telegram Trigger: Cron / scheduled Nodes: 7 Complexity: ★★★★☆ Added:

This workflow follows the Emailsend → HTTP Request 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
{
  "name": "Workflow 2: Daily Alert System (Cloud Friendly)",
  "nodes": [
    {
      "parameters": {
        "values": {
          "string": [
            {
              "name": "BACKEND_URL",
              "value": "https://your-backend.onrender.com"
            },
            {
              "name": "INTERNAL_API_SECRET",
              "value": "your_generated_secret_here"
            },
            {
              "name": "SMTP_FROM_EMAIL",
              "value": "your-email@gmail.com"
            }
          ]
        },
        "options": {}
      },
      "id": "config",
      "name": "Cloud Config",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.2,
      "position": [
        0,
        300
      ]
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 9 * * *"
            }
          ]
        }
      },
      "id": "daily-cron",
      "name": "Daily at 9AM",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        150,
        300
      ]
    },
    {
      "parameters": {
        "url": "={{ $('Cloud Config').first().json.BACKEND_URL }}/api/user/all",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "x-api-secret",
              "value": "={{ $('Cloud Config').first().json.INTERNAL_API_SECRET }}"
            }
          ]
        },
        "options": {}
      },
      "id": "fetch-users",
      "name": "Fetch All Users",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.12,
      "position": [
        400,
        200
      ]
    },
    {
      "parameters": {
        "url": "={{ $('Cloud Config').first().json.BACKEND_URL }}/api/opportunities",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "x-api-secret",
              "value": "={{ $('Cloud Config').first().json.INTERNAL_API_SECRET }}"
            }
          ]
        },
        "options": {}
      },
      "id": "fetch-opps",
      "name": "Fetch All Opportunities",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.12,
      "position": [
        400,
        400
      ]
    },
    {
      "parameters": {
        "jsCode": "const users = $('Fetch All Users').first().json.users || [];\nconst opps = $('Fetch All Opportunities').first().json.opportunities || [];\nconst now = new Date();\nconst results = [];\n\nfor (const user of users) {\n  if (!user.telegramChatId && !user.email) continue;\n\n  const matched = opps.filter(opp => {\n    const deadline = new Date(opp.deadline);\n    const daysLeft = Math.ceil((deadline - now) / (1000 * 60 * 60 * 24));\n    if (daysLeft < 0 || daysLeft > 3) return false;\n    if (user.interests?.length > 0 && !opp.tags?.some(t => user.interests.includes(t))) return false;\n    return true;\n  });\n\n  for (const opp of matched) {\n    const deadline = new Date(opp.deadline);\n    const daysLeft = Math.ceil((deadline - now) / (1000 * 60 * 60 * 24));\n    const deadlineStr = deadline.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });\n\n    results.push({\n      json: {\n        telegramChatId: user.telegramChatId,\n        email: user.email,\n        title: opp.title,\n        link: opp.link,\n        deadline: deadlineStr,\n        daysLeft,\n        message: `\ud83d\ude80 *Opportunity: ${opp.title}*\\n\u23f0 Deadline: ${deadlineStr} (${daysLeft} days left)\\n\ud83d\udd17 Apply: ${opp.link}`\n      }\n    });\n  }\n}\nreturn results;"
      },
      "id": "match-users",
      "name": "Match Users",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        650,
        300
      ]
    },
    {
      "parameters": {
        "chatId": "={{ $json.telegramChatId }}",
        "text": "={{ $json.message }}",
        "additionalFields": {
          "parse_mode": "Markdown"
        }
      },
      "id": "send-telegram",
      "name": "Send Telegram",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        850,
        200
      ],
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "fromEmail": "={{ $('Cloud Config').first().json.SMTP_FROM_EMAIL }}",
        "toEmail": "={{ $json.email }}",
        "subject": "\ud83d\ude80 Alert: {{ $json.title }}",
        "emailFormat": "html",
        "html": "<h3>\ud83d\ude80 {{ $json.title }}</h3><p>Deadline: {{ $json.deadline }} ({{ $json.daysLeft }} days left)</p><a href=\"{{ $json.link }}\">Apply Now</a>",
        "options": {}
      },
      "id": "send-email",
      "name": "Send Email",
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 2.1,
      "position": [
        850,
        400
      ],
      "credentials": {
        "smtp": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "Daily at 9AM": {
      "main": [
        [
          {
            "node": "Cloud Config",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Cloud Config": {
      "main": [
        [
          {
            "node": "Fetch All Users",
            "type": "main",
            "index": 0
          },
          {
            "node": "Fetch All Opportunities",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch All Users": {
      "main": [
        [
          {
            "node": "Match Users",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch All Opportunities": {
      "main": [
        [
          {
            "node": "Match Users",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Match Users": {
      "main": [
        [
          {
            "node": "Send Telegram",
            "type": "main",
            "index": 0
          },
          {
            "node": "Send Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  }
}

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

Workflow 2: Daily Alert System (Cloud Friendly). Uses httpRequest, telegram, emailSend. Scheduled trigger; 7 nodes.

Source: https://github.com/abtimist/CampusConcierge/blob/8a8e9e1ea8c730a040102527df5c30218d41a8f9/n8n/workflow2_alerts.json — 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

Get ==Instant== Alerts When Your Website Goes Down — Using ==n8n== as ==Website Downtime Checker Robot==

HTTP Request, Telegram, Email Send
Slack & Telegram

This workflow is ideal for marketers, product managers, competitive intelligence teams, and anyone who needs to track changes on web pages — whether it's competitor pricing, job postings, policy updat

HTTP Request, Google Sheets, Telegram +1
Slack & Telegram

This automated n8n workflow monitors real-time cryptocurrency prices using CoinGecko API and sends smart alerts when price conditions are met. It supports multi-coin tracking, dynamic conditions, and

Google Sheets, HTTP Request, Email Send +2
Slack & Telegram

Monitor Indian (NSE/BSE) and US stock markets with intelligent price alerts, cooldown periods, and multi-channel notifications (Email + Telegram). Automatically tracks price movements and sends alerts

Google Sheets, HTTP Request, Email Send +1
Slack & Telegram

⚠️ Heads up: this is satire. The "Hell Yeah!" workflow is a parody of "automate your whole life with AI agents" grindset content. The API endpoints are fictional and the function nodes are illustrativ

HTTP Request, Salesforce, Telegram +4