AutomationFlowsAI & RAG › RSS Summary

RSS Summary

RSS Summary. Uses github, discord, openAi, httpRequest. Scheduled trigger; 26 nodes.

Cron / scheduled trigger★★★★☆ complexityAI-powered26 nodesGitHubDiscordOpenAIHTTP RequestRSS Feed ReadGoogle Gemini
AI & RAG Trigger: Cron / scheduled Nodes: 26 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow follows the Discord → 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": "RSS Summary",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 7
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        -3696,
        -464
      ],
      "id": "3095d78f-75ed-4683-817d-e544e7048e71",
      "name": "Schedule Trigger"
    },
    {
      "parameters": {
        "jsCode": "function isDayBefore(dateString, day = 0) {\n  const inputDate = new Date(dateString);\n  const today = new Date();\n\n  const exceptDay = new Date(today);\n  exceptDay.setDate(today.getDate() - day);\n\n  return (\n    inputDate.getFullYear() === exceptDay.getFullYear() &&\n    inputDate.getMonth() === exceptDay.getMonth() &&\n    inputDate.getDate() === exceptDay.getDate()\n  );\n}\n\n// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nconst DAY_BEFORE_COUNT = 0;\nconst result = [];\nfor (const item of $input.all()) {\n  const itemPubDate = item.json.pubDate;\n  if(isDayBefore(itemPubDate, DAY_BEFORE_COUNT)){\n    result.push(item)\n  }\n}\n\nreturn result;"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -2224,
        -448
      ],
      "id": "5d3a4716-8cc7-4438-b306-f55c5703b480",
      "name": "FilterByPubDate",
      "alwaysOutputData": true,
      "notesInFlow": true,
      "notes": "TODO: improve date control by node instead value in script"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "a38f3172-8a9b-40d1-b1e1-de3491ee5027",
              "name": "contentSnippet",
              "value": "={{ $json['content:encodedSnippet'] }}",
              "type": "string"
            }
          ]
        },
        "includeOtherFields": true,
        "include": "selected",
        "includeFields": "title,link,pubDate,contentSnippet",
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -1520,
        -544
      ],
      "id": "edc26071-c588-439a-82f1-199702cc208e",
      "name": "MappingWithEncodeContent"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": []
        },
        "includeOtherFields": true,
        "include": "selected",
        "includeFields": "title,link,pubDate,contentSnippet",
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -1520,
        -368
      ],
      "id": "cbabbd1b-2b72-432b-ab70-9e1820d4738e",
      "name": "MappingContent"
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3.2,
      "position": [
        -1296,
        -448
      ],
      "id": "8994ed5c-1344-4ec0-9fc0-44b8e6ef0542",
      "name": "Merge1"
    },
    {
      "parameters": {
        "operation": "toText",
        "sourceProperty": "choices[0].message.content",
        "options": {
          "fileName": "=tech-summary-{{$today.minus(1,'day').format('yyyy-MM-dd')}}.md"
        }
      },
      "type": "n8n-nodes-base.convertToFile",
      "typeVersion": 1.1,
      "position": [
        -560,
        -448
      ],
      "id": "309ebd50-a6e6-49c0-a792-077e11c00b29",
      "name": "Convert to File1",
      "retryOnFail": true,
      "alwaysOutputData": true
    },
    {
      "parameters": {
        "resource": "file",
        "owner": {
          "__rl": true,
          "value": "ZLRWeb",
          "mode": "list",
          "cachedResultName": "ZLRWeb",
          "cachedResultUrl": "https://github.com/ZLRWeb"
        },
        "repository": {
          "__rl": true,
          "value": "zlrweb.github.io",
          "mode": "list",
          "cachedResultName": "zlrweb.github.io",
          "cachedResultUrl": "https://github.com/ZLRWeb/zlrweb.github.io"
        },
        "filePath": "=blog/tech-info/summary_{{ $today.format('yyyy-MM-dd') }}.md",
        "binaryData": true,
        "commitMessage": "=feat: add summary_{{ $today.format('yyyy-MM-dd') }}.md"
      },
      "type": "n8n-nodes-base.github",
      "typeVersion": 1.1,
      "position": [
        -400,
        -448
      ],
      "id": "8c1e0fe5-9b7c-4f3a-87ab-65d26f92f93c",
      "name": "GitHub1",
      "alwaysOutputData": true,
      "retryOnFail": true,
      "credentials": {
        "githubApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "authentication": "webhook",
        "content": "\u4eca\u65e5\u6c92\u6709\u65b0\u6587\u7ae0\uff01",
        "options": {
          "username": "RSS_Summary",
          "wait": true
        }
      },
      "type": "n8n-nodes-base.discord",
      "typeVersion": 2,
      "position": [
        -1520,
        -176
      ],
      "id": "391e4798-eece-4ce1-91c6-6c49de1c5e87",
      "name": "Discord",
      "alwaysOutputData": true,
      "retryOnFail": true,
      "credentials": {
        "discordWebhookApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "authentication": "webhook",
        "content": "=\u4eca\u65e5\u7e3d\u7d50\uff1ahttps://notes.zerolr.net/tech-info/tech-summary-{{$today.minus(1,'day').format('yyyy-MM-dd') }}",
        "options": {
          "username": "RSS_Summary",
          "wait": true
        }
      },
      "type": "n8n-nodes-base.discord",
      "typeVersion": 2,
      "position": [
        -240,
        -448
      ],
      "id": "24fae270-c42c-4fdc-bfaf-16fce4298ca5",
      "name": "Discord1",
      "alwaysOutputData": true,
      "retryOnFail": true,
      "credentials": {
        "discordWebhookApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "modelId": {
          "__rl": true,
          "value": "gpt-4.1-nano",
          "mode": "list",
          "cachedResultName": "GPT-4.1-NANO"
        },
        "messages": {
          "values": [
            {
              "content": "\u8acb\u6839\u64da\u4ee5\u4e0b\u6307\u793a\u751f\u6210 Markdown \u6280\u8853\u6458\u8981\uff1a\n\n1. \u5168\u6587\u4ee5\u7e41\u9ad4\u4e2d\u6587\u64b0\u5beb\uff0c\u4e26\u5728\u958b\u982d\u8a2d\u7f6e\u6b63\u78ba\u7684 YAML Frontmatter\uff08slug\u3001title\u3001authors: openai\u3001\u4f9d\u64da\u5167\u5bb9\u81ea\u52d5\u751f\u6210\u82f1\u6587 tags\uff09\u3002\n2. \u6bcf\u500b\u4e3b\u984c\u4ee5\u4e8c\u7d1a\u6a19\u984c\uff08##\uff09\u5448\u73fe\uff0c\u6a19\u984c\u9700\u7cbe\u7c21\u660e\u78ba\u3002\n3. \u6bcf\u500b\u4e3b\u984c\u6bb5\u843d\u524d\u52a0\u5165\u9069\u5408\u8a72\u5167\u5bb9\u7684 emoji\uff0c\u8b93\u5206\u6bb5\u66f4\u6e05\u6670\u3002\n4. \u6bcf\u500b\u4e3b\u984c\u4e0b\u65b9\u52a0\u5165\u4f86\u6e90\u7db2\u5740\uff08**Source:**\uff09\uff0c\u4e26\u4ee5\u689d\u5217\u5f0f\u7e3d\u7d50\u8a72\u6bb5\u5167\u5bb9\u91cd\u9ede\u3002\u7e3d\u7d50\u9700\u6db5\u84cb\u90e8\u5206\u539f\u59cb\u7bc4\u4f8b\u7684\u4e0a\u4e0b\u6587\uff0c\u5305\u62ec\u7a0b\u5f0f\u78bc\u7247\u6bb5\u548c\u5716\u7247\uff08\u4ee5 Markdown \u8a9e\u6cd5\u63d2\u5165\uff09\u3002\n5. \u689d\u5217\u91cd\u9ede\u9700\u5177\u9ad4\u3001\u7c21\u660e\uff0c\u5305\u542b\u6280\u8853\u4eae\u9ede\u3001\u7bc4\u4f8b\u61c9\u7528\u3001\u5be6\u4f5c\u6d41\u7a0b\u7b49\u3002\n6. summary \u5167\u5bb9\u4fdd\u7559\u90e8\u5206\u7bc4\u4f8b\u4e0a\u4e0b\u6587\u3001\u7a0b\u5f0f\u78bc\u53ca\u5716\u7247\u3002\n7. \u6bcf\u7bc7\u6587\u7ae0\u6700\u5f8c\u4e00\u6bb5\u9700\u7528 `<!-- truncate -->` \u6a19\u7c64\u5206\u9694\uff0c\u4e4b\u5f8c\u518d\u5217\u51fa\u5f8c\u7e8c\u4e3b\u984c\u3002\n8. tags \u5fc5\u9808\u4f9d\u64da\u6bcf\u500b\u4e3b\u984c\u5167\u5bb9\u81ea\u52d5\u751f\u6210\uff0c\u4e26\u4ee5\u82f1\u6587\u8868\u793a\u3002\n9. \u8acb\u4f9d\u64da\u4ee5\u4e0b\u7bc4\u4f8b\u683c\u5f0f\u8f38\u51fa(\u4e0d\u5305\u542b ```markdown)\uff1a\n\n```markdown\n---\nslug: tech-summary-2025-06-16\ntitle: TechSummary 2025-06-16\nauthors: openai\ntags: [AI, Technology, Summary]\n---\n\n# TechSummary 2025-06-16\n\n## \u6a19\u984c\u4e00 \ud83d\ude80\n\n**Source:** https://example.com\n\n- \u91cd\u9ede1\n- \u7bc4\u4f8b\u7a0b\u5f0f\u78bc\u7247\u6bb5\n  ```python\n  print(\"Hello World\")\n  ```\n- \u5716\u7247\u8aaa\u660e ![image1](image1)\n\n<!-- truncate -->\n\n## \u6a19\u984c\u4e8c \ud83d\udca1\n\n**Source:** https://example.com\n\n- \u91cd\u9ede2\n- \u76f8\u95dc\u6280\u8853\u89e3\u6790\n- \u5be6\u4f5c\u5efa\u8b70\n```\n\n**What Changed:**  \n\u2022 \u660e\u78ba\u5206\u6b65\u8aaa\u660e\uff0c\u6613\u65bc\u7406\u89e3\u8207\u64cd\u4f5c  \n\u2022 \u7d71\u4e00\u683c\u5f0f\u8207\u689d\u5217\u5f0f\u91cd\u9ede\uff0c\u6a19\u6e96\u5316 emoji \u5206\u6bb5  \n\u2022 \u5f37\u5316 tags \u8207 Frontmatter \u81ea\u52d5\u5316\u751f\u6210\u908f\u8f2f  \n\u2022 \u660e\u78ba\u8981\u6c42\u7bc4\u4f8b\u7a0b\u5f0f\u78bc\u53ca\u5716\u7247\u5d4c\u5165  \n\u2022 \u689d\u5217\u5f0f\u5448\u73fe summary\uff0c\u63d0\u5347\u91cd\u9ede\u805a\u7126  \n\u2022 \u56b4\u8b39\u7d50\u69cb\uff0c\u4fbf\u65bc\u591a\u4e3b\u984c\u62d3\u5c55\u8207\u5f8c\u7e8c\u7dad\u8b77\n\n**Techniques Applied:**  \n\u2022 Constraint-based structuring  \n\u2022 Output spec layering  \n\u2022 Example-rich, context-preserving formatting\n\n**Pro Tip:**  \n\u53ef\u76f4\u63a5\u7528\u65bc ChatGPT \u6216 Claude\uff0c\u8b93 AI \u81ea\u52d5\u5316\u751f\u6210\u9ad8\u54c1\u8cea\u7e41\u4e2d\u6280\u8853\u6458\u8981\uff0c\u9069\u5408\u5468\u5831\u3001\u6280\u8853\u90e8\u843d\u683c\u3001\u7522\u54c1\u66f4\u65b0\u7b49\u5834\u666f\u3002",
              "role": "system"
            },
            {
              "content": "- \u4f60\u662f\u4e00\u4f4d\u5c08\u696d\u4e14\u7d93\u9a57\u8c50\u5bcc\u7684 Tech Leader\n- \u64c5\u9577\u4ee5\u689d\u5217\u5f0f\u65b9\u5f0f\u6574\u7406\u6587\u7ae0\n- \u64c5\u9577\u4ee5\u8868\u683c\u4f86\u6bd4\u8f03\u4e0d\u540c\u5dee\u7570\n- \u6703\u5f9e\u5176\u4ed6\u9762\u5411\u601d\u8003\u554f\u984c\n- \u6703\u6839\u64da\u6587\u7ae0\u5167\u5bb9\uff0c\u7522\u751f\u6a19\u984c\n- \u6703\u5728\u6587\u7ae0\u958b\u982d\u6703\u5beb\u4e00\u5c0f\u6bb5\u5167\u5bb9\u7c21\u4ecb\n- \u6703\u5728\u6587\u7ae0\u672b\u7aef\u52a0\u4e0a\u81ea\u5df1\u7684\u770b\u6cd5\n- \u6703\u5728\u6587\u7ae0\u672b\u7aef\u52a0\u4e0a\u53c3\u8003\u4f86\u6e90\u9023\u7d50",
              "role": "assistant"
            },
            {
              "content": "={{ $json.toJsonString() }}"
            }
          ]
        },
        "simplify": false,
        "options": {
          "maxToolsIterations": 5
        }
      },
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.8,
      "position": [
        -880,
        -448
      ],
      "id": "fb5db581-f123-4dca-b978-d88de8cd512e",
      "name": "SummaryAssistant",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "url": "=https://raw.githubusercontent.com/ZLRWeb/zlrweb.github.io/refs/heads/main/blog/tech-info/summary_{{ $today.format('yyyy-MM-dd') }}.md",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        -3456,
        -464
      ],
      "id": "9898f2fe-83a7-4212-987f-f828d42d3fcf",
      "name": "CheckIsSummaryExists",
      "alwaysOutputData": false,
      "retryOnFail": false,
      "executeOnce": true,
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "authentication": "webhook",
        "content": "\u4eca\u65e5\u6587\u7ae0\u5df2\u5b58\u5728\uff01",
        "options": {
          "username": "RSS_Summary",
          "wait": true
        }
      },
      "type": "n8n-nodes-base.discord",
      "typeVersion": 2,
      "position": [
        -2608,
        -864
      ],
      "id": "e23f78a1-3c85-4c89-adbc-db9e49fae04b",
      "name": "Discord2",
      "alwaysOutputData": true,
      "retryOnFail": true,
      "credentials": {
        "discordWebhookApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "7155d172-e49c-43aa-b0fe-f9bf7e9075fb",
              "leftValue": "={{ $json.error.status }}",
              "rightValue": 404,
              "operator": {
                "type": "number",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        -2976,
        -464
      ],
      "id": "8a6eabf5-2c86-40a2-b2d2-89f629444ffd",
      "name": "IsSummaryNotFound",
      "alwaysOutputData": true
    },
    {
      "parameters": {
        "authentication": "webhook",
        "content": "=\u672a\u77e5\u932f\u8aa4: {{$json.toJsonString()}}",
        "options": {
          "username": "RSS_Summary",
          "wait": true
        }
      },
      "type": "n8n-nodes-base.discord",
      "typeVersion": 2,
      "position": [
        -2608,
        -704
      ],
      "id": "47e49e99-33db-4e2d-b7b0-80e6f36b5899",
      "name": "Discord3",
      "alwaysOutputData": true,
      "retryOnFail": true,
      "credentials": {
        "discordWebhookApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "resource": "file",
        "operation": "delete",
        "owner": {
          "__rl": true,
          "value": "ZLRWeb",
          "mode": "list",
          "cachedResultName": "ZLRWeb",
          "cachedResultUrl": "https://github.com/ZLRWeb"
        },
        "repository": {
          "__rl": true,
          "value": "zlrweb.github.io",
          "mode": "list",
          "cachedResultName": "zlrweb.github.io",
          "cachedResultUrl": "https://github.com/ZLRWeb/zlrweb.github.io"
        },
        "filePath": "=blog/tech-info/summary_{{ $today.format('yyyy-MM-dd') }}.md",
        "commitMessage": "=chore: remove summary_{{ $today.format('yyyy-MM-dd') }}.md"
      },
      "type": "n8n-nodes-base.github",
      "typeVersion": 1.1,
      "position": [
        -3360,
        -144
      ],
      "id": "b90ea7bf-9142-43ad-ace3-7b47893f8c33",
      "name": "GitHub",
      "credentials": {
        "githubApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "authentication": "webhook",
        "content": "\u5df2\u522a\u9664\u4eca\u65e5\u6587\u7ae0\uff01",
        "options": {
          "username": "RSS_Summary",
          "wait": true
        }
      },
      "type": "n8n-nodes-base.discord",
      "typeVersion": 2,
      "position": [
        -3168,
        -144
      ],
      "id": "5ea5cf4b-ff4e-4ce0-8e05-754531f91118",
      "name": "Discord4",
      "alwaysOutputData": true,
      "retryOnFail": true,
      "credentials": {
        "discordWebhookApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "let result = \"\";\nconst now = new Date();\nconst tody = `${now.getFullYear()}-${now.getMonth()+1}-${now.getDate()}`;\nresult += `# TechSummary ${tody}\\n\\n`\n\n// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n  const json = item.json;\n  const title = json.title;\n  const link = json.link;\n  const contentSnippet = json.contentSnippet;\n\n  result += `## ${title}\\n\\n`;\n  result += `**Source:** ${link}\\n\\n`;\n  result += `**Content:** ${contentSnippet}\\n\\n`;\n}\n\nreturn [{data: result}]"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -1104,
        -448
      ],
      "id": "bdc3b86a-da55-4ac2-9c5d-ea2ef4ab4ae1",
      "name": "MarkdownFormat"
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "leftValue": "={{ $json.keys() }}",
                    "rightValue": "content:encoded",
                    "operator": {
                      "type": "array",
                      "operation": "contains",
                      "rightType": "any"
                    },
                    "id": "6e846b77-ff26-43d2-aefe-1e90fc7a77f5"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "content:encoded"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "04159c84-cfd4-4f51-a2a9-584142e65e69",
                    "leftValue": "={{ $json.keys() }}",
                    "rightValue": "content",
                    "operator": {
                      "type": "array",
                      "operation": "contains",
                      "rightType": "any"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "content"
            }
          ]
        },
        "options": {
          "fallbackOutput": "extra"
        }
      },
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.2,
      "position": [
        -1856,
        -448
      ],
      "id": "273ca944-f7de-410f-b227-759ee12ab696",
      "name": "Switch"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "a96d1df6-c62a-4915-bee9-4b2a988b8e57",
              "leftValue": "={{ $json.error.keys() }}",
              "rightValue": "status",
              "operator": {
                "type": "array",
                "operation": "contains",
                "rightType": "any"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        -3200,
        -464
      ],
      "id": "e9b27db3-ddbf-489d-bcd5-226f6821507a",
      "name": "hasErrorStatus",
      "alwaysOutputData": false
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "4a9de9c0-9c3c-421b-a1cb-5b739a054ba4",
              "leftValue": "={{ $json.isEmpty() }}",
              "rightValue": "",
              "operator": {
                "type": "boolean",
                "operation": "false",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        -2064,
        -448
      ],
      "id": "2fb1bf20-f2f5-4803-9dc3-0bbeb79f12c9",
      "name": "hasItem"
    },
    {
      "parameters": {
        "fieldToSplitOut": "body.rss",
        "options": {}
      },
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        -2608,
        -288
      ],
      "id": "b4f4904f-7428-4cb0-87c1-290e3e021d63",
      "name": "Split Out"
    },
    {
      "parameters": {
        "url": "https://raw.githubusercontent.com/zeroLR/rss-summary-workflow/refs/heads/main/rss/feed.json",
        "options": {
          "response": {
            "response": {
              "fullResponse": true,
              "responseFormat": "json"
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        -2816,
        -288
      ],
      "id": "15ab4d3b-d7bf-448a-b528-caa55a57cd0f",
      "name": "GetMyRssList",
      "alwaysOutputData": false,
      "retryOnFail": false,
      "executeOnce": true,
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "url": "={{$json['body.rss']}}",
        "options": {}
      },
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1.1,
      "position": [
        -2400,
        -288
      ],
      "id": "5cb662e0-4855-4c76-acd0-d7d5261c7c81",
      "name": "RSS",
      "alwaysOutputData": true,
      "retryOnFail": true
    },
    {
      "parameters": {
        "authentication": "webhook",
        "content": "=GetGithubRssListResponse: {{ $json.toJsonString() }}",
        "options": {
          "username": "RSS_Summary",
          "wait": true
        }
      },
      "type": "n8n-nodes-base.discord",
      "typeVersion": 2,
      "position": [
        -2608,
        -448
      ],
      "id": "52e989eb-9f82-4df7-a727-e88d93da93f7",
      "name": "Discord6",
      "alwaysOutputData": true,
      "retryOnFail": true,
      "credentials": {
        "discordWebhookApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "modelId": {
          "__rl": true,
          "value": "models/gemini-2.5-flash",
          "mode": "list",
          "cachedResultName": "models/gemini-2.5-flash"
        },
        "messages": {
          "values": [
            {
              "content": "\u8acb\u6839\u64da\u4ee5\u4e0b\u6307\u793a\u751f\u6210 Markdown \u6280\u8853\u6458\u8981\uff1a\n\n1. \u5168\u6587\u4ee5\u7e41\u9ad4\u4e2d\u6587\u64b0\u5beb\uff0c\u4e26\u5728\u958b\u982d\u8a2d\u7f6e\u6b63\u78ba\u7684 YAML Frontmatter\uff08slug\u3001title\u3001authors: gemini\u3001\u4f9d\u64da\u5167\u5bb9\u81ea\u52d5\u751f\u6210\u82f1\u6587 tags\uff09\u3002\n2. \u6bcf\u500b\u4e3b\u984c\u4ee5\u4e8c\u7d1a\u6a19\u984c\uff08##\uff09\u5448\u73fe\uff0c\u6a19\u984c\u9700\u7cbe\u7c21\u660e\u78ba\u3002\n3. \u6bcf\u500b\u4e3b\u984c\u6bb5\u843d\u524d\u52a0\u5165\u9069\u5408\u8a72\u5167\u5bb9\u7684 emoji\uff0c\u8b93\u5206\u6bb5\u66f4\u6e05\u6670\u3002\n4. \u6bcf\u500b\u4e3b\u984c\u4e0b\u65b9\u52a0\u5165\u4f86\u6e90\u7db2\u5740\uff08**Source:**\uff09\uff0c\u4e26\u4ee5\u689d\u5217\u5f0f\u7e3d\u7d50\u8a72\u6bb5\u5167\u5bb9\u91cd\u9ede\u3002\u7e3d\u7d50\u9700\u6db5\u84cb\u90e8\u5206\u539f\u59cb\u7bc4\u4f8b\u7684\u4e0a\u4e0b\u6587\uff0c\u5305\u62ec\u7a0b\u5f0f\u78bc\u7247\u6bb5\uff08\u4ee5 Markdown \u8a9e\u6cd5\u63d2\u5165\uff09\u3002\n5. \u689d\u5217\u91cd\u9ede\u9700\u5177\u9ad4\u3001\u7c21\u660e\uff0c\u5305\u542b\u6280\u8853\u4eae\u9ede\u3001\u7bc4\u4f8b\u61c9\u7528\u3001\u5be6\u4f5c\u6d41\u7a0b\u7b49\u3002\n6. summary \u5167\u5bb9\u4fdd\u7559\u90e8\u5206\u7bc4\u4f8b\u4e0a\u4e0b\u6587\u3001\u7a0b\u5f0f\u78bc\u53ca\u5716\u7247\u3002\n7. \u6bcf\u7bc7\u6587\u7ae0\u6700\u5f8c\u4e00\u6bb5\u9700\u7528 `<!-- truncate -->` \u6a19\u7c64\u5206\u9694\uff0c\u4e4b\u5f8c\u518d\u5217\u51fa\u5f8c\u7e8c\u4e3b\u984c\u3002\n8. tags \u5fc5\u9808\u4f9d\u64da\u6bcf\u500b\u4e3b\u984c\u5167\u5bb9\u81ea\u52d5\u751f\u6210\uff0c\u4e26\u4ee5\u82f1\u6587\u8868\u793a\u3002\n9. \u8acb\u4f9d\u64da\u4ee5\u4e0b\u7bc4\u4f8b\u683c\u5f0f\u8f38\u51fa(\u4e0d\u5305\u542b ```markdown)\uff1a\n\n---\nslug: tech-summary-2025-06-16\ntitle: TechSummary 2025-06-16\nauthors: gemini\ntags: [AI, Technology, Summary]\n---\n\n# TechSummary 2025-06-16\n\n## \u6a19\u984c\u4e00 \ud83d\ude80\n\n**Source:** https://example.com\n\n- \u91cd\u9ede1\n- \u7bc4\u4f8b\u7a0b\u5f0f\u78bc\u7247\u6bb5\n  ```python\n  print(\"Hello World\")\n  ```\n\n<!-- truncate -->\n\n## \u6a19\u984c\u4e8c \ud83d\udca1\n\n**Source:** https://example.com\n\n- \u91cd\u9ede2\n- \u76f8\u95dc\u6280\u8853\u89e3\u6790\n- \u5be6\u4f5c\u5efa\u8b70\n```\n\n**What Changed:**  \n\u2022 \u660e\u78ba\u5206\u6b65\u8aaa\u660e\uff0c\u6613\u65bc\u7406\u89e3\u8207\u64cd\u4f5c  \n\u2022 \u7d71\u4e00\u683c\u5f0f\u8207\u689d\u5217\u5f0f\u91cd\u9ede\uff0c\u6a19\u6e96\u5316 emoji \u5206\u6bb5  \n\u2022 \u5f37\u5316 tags \u8207 Frontmatter \u81ea\u52d5\u5316\u751f\u6210\u908f\u8f2f  \n\u2022 \u660e\u78ba\u8981\u6c42\u7bc4\u4f8b\u7a0b\u5f0f\u78bc\n\u2022 \u689d\u5217\u5f0f\u5448\u73fe summary\uff0c\u63d0\u5347\u91cd\u9ede\u805a\u7126  \n\u2022 \u56b4\u8b39\u7d50\u69cb\uff0c\u4fbf\u65bc\u591a\u4e3b\u984c\u62d3\u5c55\u8207\u5f8c\u7e8c\u7dad\u8b77\n\n**Techniques Applied:**  \n\u2022 Constraint-based structuring  \n\u2022 Output spec layering  \n\u2022 Example-rich, context-preserving formatting\n\n**Pro Tip:**  \n\u53ef\u76f4\u63a5\u7528\u65bc Gemini \u6216 Claude\uff0c\u8b93 AI \u81ea\u52d5\u5316\u751f\u6210\u9ad8\u54c1\u8cea\u7e41\u4e2d\u6280\u8853\u6458\u8981\uff0c\u9069\u5408\u5468\u5831\u3001\u6280\u8853\u90e8\u843d\u683c\u3001\u7522\u54c1\u66f4\u65b0\u7b49\u5834\u666f\u3002",
              "role": "model"
            },
            {
              "content": "={{ $json.toJsonString() }}"
            }
          ]
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "typeVersion": 1,
      "position": [
        -880,
        -240
      ],
      "id": "fd495b15-1cbf-4b31-8c5d-17511b72f6fb",
      "name": "Message a model",
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "toText",
        "sourceProperty": "content.parts[0].text",
        "options": {
          "fileName": "=tech-summary-{{$today.minus(1,'day').format('yyyy-MM-dd')}}.md"
        }
      },
      "type": "n8n-nodes-base.convertToFile",
      "typeVersion": 1.1,
      "position": [
        -560,
        -240
      ],
      "id": "418cff46-06b3-4ce7-b6af-b643bbf57ce4",
      "name": "Convert to File",
      "retryOnFail": true,
      "alwaysOutputData": true
    }
  ],
  "connections": {
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "CheckIsSummaryExists",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "FilterByPubDate": {
      "main": [
        [
          {
            "node": "hasItem",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "MappingWithEncodeContent": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "MappingContent": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Convert to File1": {
      "main": [
        [
          {
            "node": "GitHub1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge1": {
      "main": [
        [
          {
            "node": "MarkdownFormat",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GitHub1": {
      "main": [
        [
          {
            "node": "Discord1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "SummaryAssistant": {
      "main": [
        [
          {
            "node": "Convert to File1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CheckIsSummaryExists": {
      "main": [
        [
          {
            "node": "Discord2",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "hasErrorStatus",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IsSummaryNotFound": {
      "main": [
        [
          {
            "node": "GetMyRssList",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Discord3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GitHub": {
      "main": [
        [
          {
            "node": "Discord4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "MarkdownFormat": {
      "main": [
        [
          {
            "node": "Message a model",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch": {
      "main": [
        [
          {
            "node": "MappingWithEncodeContent",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "MappingContent",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Discord",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "hasErrorStatus": {
      "main": [
        [
          {
            "node": "IsSummaryNotFound",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Discord3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "hasItem": {
      "main": [
        [
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Discord",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "RSS",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GetMyRssList": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          },
          {
            "node": "Discord6",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Discord3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "RSS": {
      "main": [
        [
          {
            "node": "FilterByPubDate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Message a model": {
      "main": [
        [
          {
            "node": "Convert to File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert to File": {
      "main": [
        [
          {
            "node": "GitHub1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "7dd2f5d2-c28c-42bc-a1de-2663f888b638",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "id": "SrSPrfrl8FV5qzD3",
  "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

RSS Summary. Uses github, discord, openAi, httpRequest. Scheduled trigger; 26 nodes.

Source: https://github.com/zeroLR/rss-summary-workflow/blob/4b9c0c768e99df7cf40472a154dae1b159496a7d/rss_summary_workflow.json — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

AI Institutional Stock Valuation Engine with Risk Scoring & Scenario Targets

Google Sheets, XML, HTTP Request +3
AI & RAG

Overview This is a production-grade, fully automated stock analysis system built entirely in n8n. It combines institutional-level financial analysis, dual AI model consensus, and a self-improving back

Google Sheets, XML, HTTP Request +3
AI & RAG

This comprehensive n8n automation template orchestrates a complete end-to-end workflow for generating engaging short-form Point-of-View (POV) style videos using multiple AI services and automatically

HTTP Request, OpenAI, Google Drive +4
AI & RAG

A professional AI equity analysis automation built on n8n that transforms structured financial data and real-time news into disciplined, risk-adjusted price targets and actionable BUY/HOLD/SELL signal

Google Sheets, OpenAI, XML +3
AI & RAG

This workflow helps you repurpose your YouTube videos across multiple social media platforms with zero manual effort. It’s designed for creators, businesses, and marketers who want to maximize reach w

HTTP Request, RSS Feed Read, Discord +4