8
n8n 中文网amn8n.com

智能 RSS 源监控:AI 过滤、Baserow 存储与 Slack 提醒

高级

这是一个Market Research, AI Summarization领域的自动化工作流,包含 28 个节点。主要使用 Xml, Code, Slack, Baserow, SplitOut 等节点。 具备 AI 过滤、Baserow 存储和 Slack 提醒的智能 RSS 源监控

前置要求
  • Slack Bot Token 或 Webhook URL
  • 可能需要目标 API 的认证凭证
  • OpenAI API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "meta": {
    "instanceId": "26f5531eecf6499e7c422aeb73185f0be958efc5f46695f90de5f82808ede6ac"
  },
  "nodes": [
    {
      "id": "8fb7a0bb-cb4e-43ed-a07c-b21f918331b9",
      "name": "Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        800,
        272
      ],
      "webhookId": "16638567-cb86-46f1-8922-ecca04819257",
      "parameters": {
        "text": "=Title : {{ $('Clean JSON').item.json.title }}\nContent : {{ $('Clean JSON').item.json.content }}\nLink : {{ $('Clean JSON').item.json.link }}",
        "select": "channel",
        "blocksUi": "={{ $json }}",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C091X7ZNW4V",
          "cachedResultName": "upwork"
        },
        "messageType": "block",
        "otherOptions": {}
      },
      "typeVersion": 2.3
    },
    {
      "id": "66b6cfe0-5709-459b-9695-1d3828856402",
      "name": "AI 代理",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        64,
        272
      ],
      "parameters": {
        "text": "=\n\n\n\nYou receive a JSON object with two properties:\n\n- input: an array of articles. Each article has the following properties: title, link, guid, and content.\n- alreadyProcessedGuids: an array containing the guids of the articles that have already been processed.\n\nHere is the object to process:\n{{ JSON.stringify($json) }}\n\n🎯 Your task:\nLoop through the input array and return only the articles whose guid is **not** included in alreadyProcessedGuids: \n{{ JSON.stringify($json.alreadyProcessedGuids) }}\n📤 Output format:\nReturn a **valid JSON array** (not a string) containing only the new, unprocessed articles, with only these properties: title, link, guid, and content.\n\nIf all articles were already processed, return exactly: `[]`\n\n❌ Do NOT return anything else: \nNo text, no explanation, no markdown, no key like `\"output\"`, no wrapping object.\n\n⚠️ The output must be raw JSON and must end with `}]`, not `}]}`.\n\nExample of correct output:\n[\n  {\n    \"title\": \"Sample title\",\n    \"link\": \"https://example.com\",\n    \"guid\": \"https://example.com\",\n    \"content\": \"Some text\"\n  }\n]\n\n❌ Example of wrong output:\n[{...}]}\n{\"output\": \"[{...}]\"}\n",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2,
      "alwaysOutputData": true
    },
    {
      "id": "b2c24cce-ccb3-4126-a654-e77f8edb34f4",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -16,
        432
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "4c60efd4-9834-4f4c-9a5d-1306ae7b0b93",
      "name": "简单记忆",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        112,
        400
      ],
      "parameters": {
        "sessionKey": "=alreadyProcessedGuids",
        "sessionIdType": "customKey",
        "contextWindowLength": 50
      },
      "typeVersion": 1.3
    },
    {
      "id": "a2fb91ac-6793-4b0e-b333-73029195ccce",
      "name": "结构化输出解析器",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        288,
        464
      ],
      "parameters": {
        "jsonSchemaExample": "\n{\n\"title\": \n\"\",\n\"link\": \n\"\",\n\"guid\": \n\"\",\n  \"content\":\"\"\n}"
      },
      "typeVersion": 1.2
    },
    {
      "id": "81cf4f31-2552-48e3-b76c-9f8f564fb056",
      "name": "拆分输出",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        320,
        0
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "rssLink"
      },
      "typeVersion": 1
    },
    {
      "id": "13724965-1d7a-42e9-873f-8a467e2b892a",
      "name": "读取 RSS 链接",
      "type": "n8n-nodes-base.baserow",
      "position": [
        160,
        0
      ],
      "parameters": {
        "tableId": 579115,
        "returnAll": true,
        "databaseId": 243547,
        "additionalOptions": {}
      },
      "executeOnce": true,
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "92e9980c-b0dc-4b0b-890f-5805f02b3349",
      "name": "保存已查看产品",
      "type": "n8n-nodes-base.baserow",
      "position": [
        608,
        272
      ],
      "parameters": {
        "tableId": 578089,
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": 4655790,
              "fieldValue": "={{ $json.link }}"
            }
          ]
        },
        "operation": "create",
        "databaseId": 243547
      },
      "typeVersion": 1
    },
    {
      "id": "f05017f3-7f71-45a5-b5b3-fc411d18feda",
      "name": "清理 JSON",
      "type": "n8n-nodes-base.code",
      "position": [
        400,
        272
      ],
      "parameters": {
        "jsCode": "// Step 1: Get the raw JSON string from the input\nconst raw = $input.first().json.output;\n\nlet articles;\n\n  articles = JSON.parse(raw);\n\n\n// Step 3: Return each article as a separate item in n8n format\nreturn articles.map(article => ({ json: article }));"
      },
      "typeVersion": 2
    },
    {
      "id": "6a4d7f50-3e4e-480b-a4a5-e918bf479272",
      "name": "编辑数据结构",
      "type": "n8n-nodes-base.code",
      "position": [
        1040,
        0
      ],
      "parameters": {
        "jsCode": "/**\nreturn $('XML Converter').first().json.rss.channel.item;\n */\n\n\nconst articles = $('XML Converter').first().json.rss.channel.item.map(item => ({\n  title: item.title,\n  link: item.link,\n  content: item.description\n}));\n\n// Pour l'exemple, on définit ici un tableau d'alreadyProcessedGuids\n// En vrai, récupère ce tableau depuis ta mémoire, ta base ou un autre noeud\nconst alreadyProcessedGuids = $input.all().map(item => item.json.Nom);\n\n// Retourner un objet contenant les deux tableaux\nreturn [\n  {\n    json: {\n      input: articles,\n      alreadyProcessedGuids:alreadyProcessedGuids\n    }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "a2d81bd3-53e9-4b35-8e5c-96d40c3a36ab",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1120,
        -736
      ],
      "parameters": {
        "color": 5,
        "width": 1008,
        "height": 2384,
        "content": "# 📰 RSS 源到 Slack 通知器工作流"
      },
      "typeVersion": 1
    },
    {
      "id": "9dbfcd34-071d-48f1-9d28-f29960f0297a",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        128,
        -96
      ],
      "parameters": {
        "color": 5,
        "width": 150,
        "height": 80,
        "content": "从 Baserow 表中检索所有 RSS 源 URL。"
      },
      "typeVersion": 1
    },
    {
      "id": "beb101f3-4f5d-41ce-8c2c-0ff12cdc4981",
      "name": "便签 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        304,
        -128
      ],
      "parameters": {
        "color": 5,
        "width": 150,
        "height": 112,
        "content": "获取“读取 Rss 链接”的输出,并将每一行拆分为单独的项目。"
      },
      "typeVersion": 1
    },
    {
      "id": "8da80169-36d4-4b07-9559-d120ef4a37f1",
      "name": "获取HTML",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        480,
        0
      ],
      "parameters": {
        "url": "={{ $json.rssLink }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "fb0fa089-3062-42bd-ad41-1a060834b3dd",
      "name": "便签 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        464,
        -112
      ],
      "parameters": {
        "color": 5,
        "width": 150,
        "height": 96,
        "content": "从每个 RSS 源 URL 获取原始 XML 内容。"
      },
      "typeVersion": 1
    },
    {
      "id": "4a972c2e-0256-487f-8375-d385c5730896",
      "name": "XML 转换器",
      "type": "n8n-nodes-base.xml",
      "position": [
        640,
        0
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "f0a38201-e008-44c2-b164-2450f20fb00c",
      "name": "便签 4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        624,
        -112
      ],
      "parameters": {
        "color": 5,
        "width": 150,
        "height": 96,
        "content": "将原始 XML 内容解析为结构化的 JSON 对象。"
      },
      "typeVersion": 1
    },
    {
      "id": "a38d4bc8-f76b-4461-a376-840f52220c10",
      "name": "便签 5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        784,
        -112
      ],
      "parameters": {
        "color": 5,
        "width": 150,
        "height": 96,
        "content": "从 Baserow 表中检索所有先前已查看的文章链接。"
      },
      "typeVersion": 1
    },
    {
      "id": "80173c28-db72-4657-bee6-7867de66cedc",
      "name": "获取已查看产品",
      "type": "n8n-nodes-base.baserow",
      "position": [
        800,
        0
      ],
      "parameters": {
        "tableId": 578089,
        "returnAll": true,
        "databaseId": 243547,
        "additionalOptions": {}
      },
      "executeOnce": true,
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "6743d642-91a1-4dfb-bee3-8f59a7f893ba",
      "name": "便签6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1008,
        -144
      ],
      "parameters": {
        "color": 5,
        "width": 150,
        "height": 128,
        "content": "通过构建新文章和先前已查看的文章 GUID 来为 AI Agent 准备数据。"
      },
      "typeVersion": 1
    },
    {
      "id": "30e955c8-ee4f-42bb-88e9-ea6efc2171f3",
      "name": "便签7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        80,
        176
      ],
      "parameters": {
        "color": 5,
        "width": 230,
        "height": 80,
        "content": "使用 AI 过滤新文章,仅返回之前未查看过的文章。"
      },
      "typeVersion": 1
    },
    {
      "id": "94ee1b33-9bb1-49fc-840e-099eea2c5330",
      "name": "便签8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        256,
        608
      ],
      "parameters": {
        "color": 5,
        "width": 150,
        "height": 112,
        "content": "确保 AI Agent 的输出符合预定义的 JSON 结构。"
      },
      "typeVersion": 1
    },
    {
      "id": "b43d5393-405d-4928-9979-0b95d598393a",
      "name": "### 替换 Airtable 连接",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        384,
        416
      ],
      "parameters": {
        "color": 5,
        "width": 150,
        "height": 80,
        "content": "解析 AI Agent 的 JSON 字符串输出。"
      },
      "typeVersion": 1
    },
    {
      "id": "a860323f-31fb-4555-949d-9cb4b9e63491",
      "name": "便签10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        592,
        432
      ],
      "parameters": {
        "color": 5,
        "width": 150,
        "height": 112,
        "content": "将新处理文章的链接保存到 Baserow 的“已查看产品”表中。"
      },
      "typeVersion": 1
    },
    {
      "id": "7fe68866-da49-4545-a7d0-d757932508e1",
      "name": "便签11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        784,
        432
      ],
      "parameters": {
        "color": 5,
        "width": 150,
        "height": 96,
        "content": "向 Slack 频道发送包含新文章详情的通知。"
      },
      "typeVersion": 1
    },
    {
      "id": "448de534-bb3b-4548-8419-3c8e53f2700a",
      "name": "点击开始",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        0,
        0
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "5eca38d7-de00-4231-bb50-5ce0a7b9fe9d",
      "name": "便签12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -32,
        -96
      ],
      "parameters": {
        "color": 5,
        "width": 150,
        "height": 80,
        "content": "触发工作流。"
      },
      "typeVersion": 1
    },
    {
      "id": "998a48c5-b88c-4fc9-ba9e-b9e689562571",
      "name": "便签13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        560
      ],
      "parameters": {
        "color": 5,
        "width": 150,
        "height": 80,
        "content": "为 Agent 提供 AI 模型。"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "AI Agent": {
      "main": [
        [
          {
            "node": "Clean JSON",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "Fetch HTML",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Clean JSON": {
      "main": [
        [
          {
            "node": "Save seen products",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch HTML": {
      "main": [
        [
          {
            "node": "XML Converter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Rss Link": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "XML Converter": {
      "main": [
        [
          {
            "node": "Get Seen Products",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Click to Start": {
      "main": [
        [
          {
            "node": "Read Rss Link",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Seen Products": {
      "main": [
        [
          {
            "node": "Edit data structure",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Save seen products": {
      "main": [
        [
          {
            "node": "Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit data structure": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

高级 - 市场调研, AI 摘要总结

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
高级
节点数量28
分类2
节点类型12
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

作者
Daniel Shashko

Daniel Shashko

@tomax

AI automation specialist and a marketing enthusiast. More than 6 years of experience in SEO/GEO. Senior SEO at Bright Data.

外部链接
在 n8n.io 查看

分享此工作流