AutomationFlowsSlack & Telegram › Daily Morning Digest via Telegram

Daily Morning Digest via Telegram

Original n8n title: Morning Digest

10 - Morning Digest. Uses httpRequest, telegram. Scheduled trigger; 7 nodes.

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

This workflow follows the HTTP Request → Telegram 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": "Morning Digest",
  "nodes": [
    {
      "id": "trig-sched-001",
      "name": "Daily 10:00 UTC",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        0,
        0
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 10 * * *"
            }
          ]
        }
      }
    },
    {
      "id": "cmd-read-01",
      "name": "Read Agent Log",
      "type": "n8n-nodes-base.executeCommand",
      "typeVersion": 1,
      "position": [
        220,
        0
      ],
      "parameters": {
        "command": "cat /home/node/.n8n/agent_log.jsonl 2>/dev/null || true"
      }
    },
    {
      "id": "code-digest-01",
      "name": "Build Digest",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        440,
        0
      ],
      "parameters": {
        "jsCode": "\nconst stdout = String($input.first().json.stdout || '');\nconst lines = stdout.split('\\n').map(l => l.trim()).filter(Boolean);\nconst entries = [];\nfor (const line of lines) { try { entries.push(JSON.parse(line)); } catch (e) {} }\nconst counts = { 'urgent': 0, 'reply-needed': 0, 'ignore': 0 };\nfor (const e of entries) { const c = e.category || 'reply-needed'; counts[c] = (counts[c] || 0) + 1; }\nlet text = 'MORNING DIGEST \u2014 ' + new Date().toISOString().slice(0, 10) + '\\n';\ntext += 'Processed ' + entries.length + ' emails: ' + (counts['urgent']||0) + ' urgent, ' + (counts['reply-needed']||0) + ' reply-needed, ' + (counts['ignore']||0) + ' ignored\\n\\n';\nif (entries.length === 0) text += 'No new emails processed since the last digest.';\nfor (const e of entries) {\n  text += '[' + String(e.category || '?').toUpperCase() + '] ' + (e.subject || '(no subject)') + ' \u2014 ' + (e.summary || '') + '\\n';\n  if (e.suggested_reply) text += '   > Suggested reply: ' + e.suggested_reply + '\\n';\n}\nif (text.length > 3900) text = text.slice(0, 3900) + '\\n...(truncated)';\nreturn [{ json: { digest: text, count: entries.length } }];\n"
      }
    },
    {
      "id": "tg-digest-01",
      "name": "Telegram Digest",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        660,
        0
      ],
      "parameters": {
        "operation": "sendMessage",
        "chatId": "YOUR_CHAT_ID",
        "text": "={{ $json.digest }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "notes": "Attach your Telegram bot token credential here, and put your own chat ID in the 'Chat ID' field -- see guide-telegram-bot.md"
    },
    {
      "id": "cmd-arch-01",
      "name": "Archive Log",
      "type": "n8n-nodes-base.executeCommand",
      "typeVersion": 1,
      "position": [
        880,
        0
      ],
      "parameters": {
        "command": "[ -f /home/node/.n8n/agent_log.jsonl ] && mv /home/node/.n8n/agent_log.jsonl \"/home/node/.n8n/agent_log.$(date +%Y%m%d_%H%M%S).processed\" || true"
      }
    }
  ],
  "connections": {
    "Daily 10:00 UTC": {
      "main": [
        [
          {
            "node": "Read Agent Log",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Agent Log": {
      "main": [
        [
          {
            "node": "Build Digest",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Digest": {
      "main": [
        [
          {
            "node": "Telegram Digest",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Telegram Digest": {
      "main": [
        [
          {
            "node": "Archive Log",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {}
}

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

10 - Morning Digest. Uses httpRequest, telegram. Scheduled trigger; 7 nodes.

Source: https://github.com/rohankag/ronkbot/blob/db03432335532bdeb4ebcee0c72d9109e04b466f/n8n-workflows/10-morning-digest.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

Auto Hunt. Uses httpRequest, googleSheets, rssFeedRead, telegram. Scheduled trigger; 78 nodes.

HTTP Request, Google Sheets, RSS Feed Read +1
Slack & Telegram

Auto-Hunt. Uses httpRequest, googleSheets, rssFeedRead, telegram. Scheduled trigger; 78 nodes.

HTTP Request, Google Sheets, RSS Feed Read +1
Slack & Telegram

This workflow runs daily at 9 AM, uses Perplexity to compile vaping industry news, optionally captures article screenshots via Browserless, and generates a HeyGen avatar video from a template. It then

Telegram, Google Drive, HTTP Request
Slack & Telegram

. Uses googleSheets, telegram, httpRequest, wise. Scheduled trigger; 36 nodes.

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

GNCA AI News Pipeline. Uses rssFeedRead, httpRequest, telegram, errorTrigger. Scheduled trigger; 31 nodes.

RSS Feed Read, HTTP Request, Telegram +1