{
  "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": []
}