{"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"},"notes":"Excellent quality workflow: Rssfeedread Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}