AutomationFlowsSlack & Telegram › GitHub RSS to Telegram Notifications

GitHub RSS to Telegram Notifications

Original n8n title: Github to Tg

GitHub To TG. Uses start, rssFeedRead, telegram. Manual trigger; 6 nodes.

Manual trigger★★★★☆ complexity6 nodesStartRSS Feed ReadTelegram
Slack & Telegram Trigger: Manual Nodes: 6 Complexity: ★★★★☆ Added:

This workflow follows the RSS Feed Read → 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": "GitHub To TG",
  "nodes": [
    {
      "parameters": {},
      "name": "Start",
      "type": "n8n-nodes-base.start",
      "typeVersion": 1,
      "position": [
        240,
        300
      ]
    },
    {
      "parameters": {
        "url": "https://github.com/pseudoyu.atom"
      },
      "name": "RSS Feed Read",
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1,
      "position": [
        240,
        580
      ]
    },
    {
      "parameters": {
        "functionCode": "/* only return new items */\nconst staticData = getWorkflowStaticData('global');\nconst lastItemId = staticData.lastItemId;\n\nconsole.log('lastItemId', lastItemId);\nconst firstItem = items[0];\nlet newItems = [];\n\nfunction getId(item) {\n  return item.json.guid;\n}\n\nif (lastItemId) {\n  for (const item of items) {\n    if (getId(item) === lastItemId) {\n      break;\n    }\n    newItems.push(item)\n  }\n} else {\n  newItems = [firstItem]\n}\n\nstaticData.lastItemId = getId(firstItem)\nreturn newItems.reverse();"
      },
      "name": "Function",
      "type": "n8n-nodes-base.function",
      "typeVersion": 1,
      "position": [
        620,
        600
      ]
    },
    {
      "parameters": {
        "chatId": "@pseudoyulife",
        "text": "={{$json[\"tgTitle\"]}}\n\n{{$json[\"link\"]}}",
        "additionalFields": {
          "parse_mode": "HTML"
        }
      },
      "name": "Telegram",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1,
      "position": [
        800,
        460
      ],
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "interval": 10,
        "unit": "minutes"
      },
      "name": "Interval",
      "type": "n8n-nodes-base.interval",
      "typeVersion": 1,
      "position": [
        -40,
        620
      ]
    },
    {
      "parameters": {
        "functionCode": "/* filter items */\nconst newItems = [];\n\nconst regexes = {\n  'star': /^pseudoyu starred/,\n  'pull-request': /^pseudoyu opened a pull request/,\n  'issue': /^pseudoyu opened an issue/,\n}\nconst tagSymbols = {\n  'star': '\ud83c\udf1f',\n  'pull-request': '\u2934\ufe0f',\n  'issue': '\u26a1\ufe0f'\n}\n\nfor (const item of items) {\n  const title = item.json.title\n  let tag = ''\n\n  for (const key in regexes) {\n    const regex = regexes[key]\n    if (regex.test(title)) {\n      tag = key\n      break\n    }\n  }\n  if (tag !== '') {\n    item.json.tag = tag\n    item.json.tgTitle = `${tagSymbols[tag]} ${title.replace(/^pseudoyu /, '')} #github #${tag}`\n    item.json.guid = item.json.id\n    newItems.push(item)\n  }\n}\n\nreturn newItems"
      },
      "name": "Function filter",
      "type": "n8n-nodes-base.function",
      "typeVersion": 1,
      "position": [
        440,
        440
      ]
    }
  ],
  "connections": {
    "RSS Feed Read": {
      "main": [
        [
          {
            "node": "Function filter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Function": {
      "main": [
        [
          {
            "node": "Telegram",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Interval": {
      "main": [
        [
          {
            "node": "RSS Feed Read",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Function filter": {
      "main": [
        [
          {
            "node": "Function",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {
    "saveExecutionProgress": "DEFAULT",
    "errorWorkflow": "9"
  },
  "id": 3,
  "tags": []
}

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

GitHub To TG. Uses start, rssFeedRead, telegram. Manual trigger; 6 nodes.

Source: https://github.com/caioross/n8n_Workflows/blob/1686b66af0462dfce267af508b0a487aa5f41e18/workflows/GitHub_To_TG.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

Douban To TG. Uses start, rssFeedRead, telegram. Manual trigger; 6 nodes.

Start, RSS Feed Read, Telegram
Slack & Telegram

Blog To TG. Uses start, rssFeedRead, telegram. Manual trigger; 5 nodes.

Start, RSS Feed Read, Telegram
Slack & Telegram

News Digest Bot - Multi-User (Postgres). Uses telegramTrigger, postgres, telegram, rssFeedRead. Event-driven trigger; 45 nodes.

Telegram Trigger, Postgres, Telegram +3
Slack & Telegram

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

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

Graceful Content Sparks — RSS → Notion (n8n)

RSS Feed Read, Notion, Email Send +2