{ "nodes": [ { "name": "RSS Feed Read", "type": "n8n-nodes-base.rssFeedRead", "position": [ 420, -20 ], "parameters": { "url": "{{ $env.BASE_URL }}" }, "typeVersion": 1, "id": "4a6d3143-34b5-4110-8a94-32c435f57c34", "notes": "This rssFeedRead node performs automated tasks as part of the workflow." }, { "name": "SplitInBatches", "type": "n8n-nodes-base.splitInBatches", "position": [ 200, -20 ], "parameters": { "options": {}, "batchSize": 1 }, "typeVersion": 1, "id": "338f9b13-4261-49aa-90df-c4043e0c53fc", "notes": "This splitInBatches node performs automated tasks as part of the workflow." }, { "name": "Cron", "type": "n8n-nodes-base.cron", "position": [ -240, -20 ], "parameters": { "triggerTimes": { "item": [ { "mode": "everyX", "unit": "minutes", "value": 10 } ] } }, "typeVersion": 1, "id": "0b1e3879-2dbc-468b-991b-e12b734cde2b", "notes": "This cron node performs automated tasks as part of the workflow." }, { "name": "only get new RSS", "type": "n8n-nodes-base.function", "position": [ 640, -20 ], "parameters": { "functionCode": "const staticData = getWorkflowStaticData('global');\nconst newRSSIds = items.map(item => item.json[\"isoDate\"]);\nconst oldRSSIds = staticData.oldRSSIds; \n\nif (!oldRSSIds) {\n staticData.oldRSSIds = newRSSIds;\n return items;\n}\n\n\nconst actualNewRSSIds = newRSSIds.filter((id) => !oldRSSIds.includes(id));\nconst actualNewRSS = items.filter((data) => actualNewRSSIds.includes(data.json['isoDate']));\nstaticData.oldRSSIds = [...actualNewRSSIds, ...oldRSSIds];\n\nreturn actualNewRSS;\n" }, "typeVersion": 1, "id": "47c3a14d-86e0-4659-b486-884d916af352", "notes": "This function node performs automated tasks as part of the workflow." }, { "name": "Telegram_IT", "type": "n8n-nodes-base.telegram", "position": [ 1220, 460 ], "parameters": { "text": "={{$json[\"title\"]}}\n{{$json[\"link\"]}}", "chatId": "TelegramID", "additionalFields": {} }, "credentials": { "telegramApi": { "id": "{{ $credentials.telegramApi.id }}", "name": "IT_RSS" } }, "typeVersion": 1, "id": "4412b413-986c-448c-9ecf-8e7f7c6535d5", "notes": "This telegram node performs automated tasks as part of the workflow." }, { "name": "Telegram_Security", "type": "n8n-nodes-base.telegram", "position": [ 1220, 220 ], "parameters": { "text": "={{$json[\"title\"]}}\n{{$json[\"link\"]}}", "chatId": "TelegramID", "additionalFields": {} }, "credentials": { "telegramApi": { "id": "{{ $credentials.telegramApi.id }}", "name": "Security_RSS" } }, "typeVersion": 1, "id": "07cec636-2dfc-4cca-9ab0-e48c42500ac1", "notes": "This telegram node performs automated tasks as part of the workflow." }, { "name": "RSS Source", "type": "n8n-nodes-base.function", "position": [ -20, -20 ], "parameters": { "functionCode": "return [\n {\n json: {\n url: '{{ $env.WEBHOOK_URL }}',\n }\n },\n {\n json: {\n url: '{{ $env.WEBHOOK_URL }}',\n }\n },\n {\n json: {\n url: '{{ $env.WEBHOOK_URL }}',\n }\n },\n {\n json: {\n url: '{{ $env.WEBHOOK_URL }}',\n }\n },\n {\n json: {\n url: '{{ $env.WEBHOOK_URL }}',\n }\n }\n];" }, "typeVersion": 1, "id": "c5f00868-71d6-44e2-b132-4d601c15d49b", "notes": "This function node performs automated tasks as part of the workflow." }, { "name": "Telegram_M365", "type": "n8n-nodes-base.telegram", "position": [ 1220, -40 ], "parameters": { "text": "={{$json[\"title\"]}}\n{{$json[\"link\"]}}", "chatId": "TelegramID", "additionalFields": {} }, "credentials": { "telegramApi": { "id": "{{ $credentials.telegramApi.id }}", "name": "M365_RSS" } }, "typeVersion": 1, "id": "2091845d-edbf-4720-8ab1-02a99db4ff55", "notes": "This telegram node performs automated tasks as part of the workflow." }, { "name": "IF-2", "type": "n8n-nodes-base.if", "position": [ 880, 240 ], "parameters": { "conditions": { "string": [ { "value1": "={{$json[\"title\"]}}", "value2": "資安|資訊安全|安全|外洩|監控|威脅|漏洞|封鎖|修補|攻擊|入侵|個資|隱私|私密|騙|社交工程|釣魚|駭|Security|security|Secure|secure", "operation": "regex" } ] }, "combineOperation": "any" }, "typeVersion": 1, "id": "4585ac13-b2bd-4617-8507-e08c79ad54fb", "notes": "This if node performs automated tasks as part of the workflow." }, { "name": "IF-1", "type": "n8n-nodes-base.if", "position": [ 880, -20 ], "parameters": { "conditions": { "string": [ { "value1": "={{$json[\"link\"]}}", "value2": "techcommunity.microsoft.com", "operation": "contains" } ] } }, "typeVersion": 1, "id": "f32f7ee3-10bd-4022-bc08-608a169a3adb", "notes": "This if node performs automated tasks as part of the workflow." }, { "name": "Clear Function", "type": "n8n-nodes-base.function", "position": [ -20, -180 ], "parameters": { "functionCode": "// Get the global workflow static data\nconst staticData = getWorkflowStaticData('global');\n// Update its data\nstaticData.oldRSSIds = new Date().getTime();\n// Delete data\ndelete staticData.oldRSSIds;\n\nreturn [\n {\n json: {}\n }\n]" }, "typeVersion": 1, "id": "0f7d21e4-1fca-4e15-9e2f-59da6020af47", "notes": "This function node performs automated tasks as part of the workflow." }, { "id": "error-747f6257", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [ 1000, 400 ], "parameters": { "message": "Workflow execution error", "options": {} } } ], "connections": {}, "name": "Rssfeedread Workflow", "description": "Automated workflow: Rssfeedread Workflow. This workflow processes data and performs automated tasks.", "settings": { "executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000 }, "meta": { "instanceId": "workflow-6af1366e", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:51.805535", "updatedAt": "2025-09-29T07:07:51.805666", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production" }, "tags": [ "automation", "n8n", "production-ready", "excellent", "optimized" ], "notes": "Excellent quality workflow: Rssfeedread Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation." }