RSS AI 新闻 Slack 自动化 v010925
中级
这是一个AI Summarization, Multimodal AI领域的自动化工作流,包含 13 个节点。主要使用 If, Code, Slack, HttpRequest, ChainLlm 等节点。 基于 DeepSeek AI 与 Slack 通知的智能 RSS 新闻提醒系统
前置要求
- •Slack Bot Token 或 Webhook URL
- •可能需要目标 API 的认证凭证
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "cZqsFsT0dT7XJO3K",
"meta": {
"instanceId": "4655497243705f66b47991d9dbe9a9222e8444b5c2782e466f572ff93867cb4c",
"templateCredsSetupCompleted": true
},
"name": "RSS AI 新闻 Slack 自动化 v010925",
"tags": [
{
"id": "7ASMGI4lVr4Eo8rL",
"name": "tuguidragos.com",
"createdAt": "2025-08-23T19:10:40.177Z",
"updatedAt": "2025-08-23T19:10:40.177Z"
},
{
"id": "KBQZBD4R6LVuuFK2",
"name": "slack-alerts",
"createdAt": "2025-09-01T16:14:22.027Z",
"updatedAt": "2025-09-01T16:14:22.027Z"
},
{
"id": "NtEM4qJBPpIvfcPu",
"name": "automation",
"createdAt": "2025-08-31T21:12:32.130Z",
"updatedAt": "2025-08-31T21:12:32.130Z"
},
{
"id": "kcwb9hV3Q0yE899g",
"name": "ai-analysis",
"createdAt": "2025-09-01T16:14:14.257Z",
"updatedAt": "2025-09-01T16:14:14.257Z"
},
{
"id": "n3yKbZ1k0G32PsQK",
"name": "rss",
"createdAt": "2025-09-01T16:14:02.175Z",
"updatedAt": "2025-09-01T16:14:02.175Z"
},
{
"id": "t2EcIvqmhXhIFZHS",
"name": "news",
"createdAt": "2025-09-01T16:14:05.043Z",
"updatedAt": "2025-09-01T16:14:05.043Z"
}
],
"nodes": [
{
"id": "1ef0840b-0b56-4f2e-911f-2c125ec88860",
"name": "DeepSeek 聊天模型",
"type": "@n8n/n8n-nodes-langchain.lmChatDeepSeek",
"position": [
1672,
-672
],
"parameters": {
"options": {}
},
"credentials": {
"deepSeekApi": {
"id": "c3q3l8gevH6a1NCj",
"name": "DeepSeek Test"
}
},
"typeVersion": 1
},
{
"id": "1bb5f3f8-d8b7-4804-a80e-4dadb448acbb",
"name": "标准化和哈希处理",
"type": "n8n-nodes-base.code",
"position": [
480,
-896
],
"parameters": {
"jsCode": "function fnv1a(str) {\n let h = 0x811c9dc5;\n for (let i = 0; i < str.length; i++) {\n h ^= str.charCodeAt(i);\n h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);\n }\n return (h >>> 0).toString(16);\n}\n\nreturn items.map(item => {\n const url = item.json.link || item.json.url || '';\n const title = item.json.title || '';\n const content = (item.json.content || item.json['content:encoded'] || item.json.contentSnippet || '').toString();\n\n const text = [title, content]\n .join('\\n')\n .replace(/<[^>]+>/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n\n item.json.url = url;\n item.json.title = title;\n item.json.text_rss = text.slice(0, 6000);\n item.json.url_hash = fnv1a(String(url).toLowerCase());\n return item;\n});"
},
"typeVersion": 2
},
{
"id": "f3f640db-0c04-42ca-9cb7-fb5e8e24a8af",
"name": "解析 HTML",
"type": "n8n-nodes-base.code",
"position": [
704,
-896
],
"parameters": {
"jsCode": "const keepDays = 14;\nconst maxEntries = 800;\nconst now = Date.now();\n\nconst store = $getWorkflowStaticData('global');\nif (!store.seen) store.seen = {};\n\nreturn items.map(item => {\n const key = item.json.url_hash;\n const isNew = !store.seen[key];\n store.seen[key] = now;\n\n for (const [k, t] of Object.entries(store.seen)) {\n if (now - t > keepDays * 86400000) delete store.seen[k];\n }\n const entries = Object.entries(store.seen);\n if (entries.length > maxEntries) {\n entries.sort((a,b) => a[1] - b[1]);\n for (let i = 0; i < entries.length - maxEntries; i++) delete store.seen[entries[i][0]];\n }\n\n item.json._isNew = isNew;\n return item;\n});"
},
"typeVersion": 2
},
{
"id": "9ce66c28-7b0e-49e9-bf49-5f0086b4a127",
"name": "新文章?",
"type": "n8n-nodes-base.if",
"position": [
928,
-896
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "1ae4fafc-43ff-41d7-8796-d26fe6ba33e7",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{$json[\"_isNew\"]}}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "880f6698-0a30-4e65-8401-7d64ac043fe4",
"name": "获取文章",
"type": "n8n-nodes-base.httpRequest",
"position": [
1152,
-896
],
"parameters": {
"url": "={{$json[\"url\"]}}",
"options": {
"timeout": 8000,
"response": {
"response": {
"responseFormat": "text"
}
}
}
},
"typeVersion": 4.2
},
{
"id": "cf2066e8-5f49-4688-a5a0-2c0d7c191d36",
"name": "使用 LLM 分析",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
1600,
-896
],
"parameters": {
"text": "=You are a precise news triager. Summarize (<=120 words), sentiment (positive|negative|neutral), up to 6 keywords, flags from [funding, acquisition, partnership, product_launch, regulation, hiring].\n\nTITLE: {{ $('parse HTML').item.json.title }}\nURL: {{ $('parse HTML').item.json.link }}\nTEXT: {{$json[\"text_for_llm\"]}}\n\nReturn JSON only:\n{\"summary\":\"\",\"sentiment\":\"\",\"keywords\":[],\"flags\":[]}",
"batching": {},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "ae6ca7e3-efac-4bb7-a161-423739d1ec83",
"name": "解析 LLM JSON",
"type": "n8n-nodes-base.code",
"position": [
1952,
-896
],
"parameters": {
"jsCode": "return items.map(item => {\n const raw = item.json.text || item.json.data || item.json.output || '';\n let o = {};\n try { o = typeof raw === 'string' ? JSON.parse(raw) : raw; } catch {}\n item.json.summary = o.summary || '';\n item.json.sentiment = (o.sentiment || 'neutral').toLowerCase();\n item.json.keywords = Array.isArray(o.keywords) ? o.keywords : [];\n item.json.flags = Array.isArray(o.flags) ? o.flags : [];\n return item;\n});"
},
"typeVersion": 2
},
{
"id": "ccec8360-a00f-486e-a3c6-ef482a04b68c",
"name": "相关内容?",
"type": "n8n-nodes-base.if",
"position": [
2176,
-896
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "ef132948-33d8-475a-b876-a7c4cf1ac302",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{$json[\"sentiment\"]}}",
"rightValue": "neutral"
},
{
"id": "dd76bbc8-a056-4f58-a75f-1d5a38220224",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{$json[\"flags\"].join(\",\")}}",
"rightValue": "acquisition"
},
{
"id": "1f015b50-723d-4e58-943e-7cda07bd25f1",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{$json[\"flags\"].join(\",\")}}",
"rightValue": "funding"
},
{
"id": "5db4476c-c8ee-475d-9d0e-1b267b362fa3",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{$json[\"flags\"].join(\",\")}}",
"rightValue": "product_launch"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "be7cd945-61aa-4512-9d3d-28f8ce4cbfad",
"name": "发送到 Slack",
"type": "n8n-nodes-base.slack",
"position": [
2400,
-896
],
"webhookId": "0ba75e6f-2e55-4b08-b7de-51f40ebcf281",
"parameters": {
"text": "=*News Alert* 📰 \n*{{ $('RSS Feed').item.json.title }}* \n{{$json[\"summary\"]}} \n\nSentiment: {{$json[\"sentiment\"]}} \nFlags: {{ $json[\"flags\"].join(\", \") || \"—\" }} \n\n<{{ $('RSS Feed').item.json.link }}>",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "ID"
},
"otherOptions": {
"includeLinkToWorkflow": false
}
},
"credentials": {
"slackApi": {
"id": "XuUwy2Lth9glqHbY",
"name": "Slack Test"
}
},
"notesInFlow": true,
"typeVersion": 2.3
},
{
"id": "44220e76-0e66-43e3-8c4d-f4b0ae6d16e1",
"name": "RSS 订阅源",
"type": "n8n-nodes-base.rssFeedReadTrigger",
"position": [
256,
-896
],
"parameters": {
"feedUrl": "https://techcrunch.com/feed/",
"pollTimes": {
"item": [
{
"hour": 9
}
]
}
},
"typeVersion": 1
},
{
"id": "80032ebb-5641-4c04-8aed-ee82e7b23f9a",
"name": "准备 LLM 输入",
"type": "n8n-nodes-base.code",
"position": [
1376,
-896
],
"parameters": {
"jsCode": "return items.map(item => {\n const html = item.json.data || item.json.body || '';\n const plain = html\n .replace(/<script[\\s\\S]*?<\\/script>/gi, ' ')\n .replace(/<style[\\s\\S]*?<\\/style>/gi, ' ')\n .replace(/<[^>]+>/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n\n const txt = (plain && plain.length > 500 ? plain : item.json.text_rss).slice(0, 9000);\n item.json.text_for_llm = txt;\n item.json.data = txt;\n return item;\n});"
},
"typeVersion": 2
},
{
"id": "bd11a1a1-ad63-46ec-89d7-f07e3fc2b501",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
256,
-1104
],
"parameters": {
"color": 4,
"width": 432,
"content": "## 工作原理"
},
"typeVersion": 1
},
{
"id": "94b2ba0e-3e3d-4a65-8ce8-276a106f4f16",
"name": "便签1",
"type": "n8n-nodes-base.stickyNote",
"position": [
256,
-736
],
"parameters": {
"color": 4,
"width": 432,
"content": "## 设置步骤"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "6fb7c8f1-01e6-4fa3-9ba6-71f70ab0d242",
"connections": {
"New?": {
"main": [
[
{
"node": "fetch article",
"type": "main",
"index": 0
}
]
]
},
"RSS Feed": {
"main": [
[
{
"node": "normalize & hash",
"type": "main",
"index": 0
}
]
]
},
"Relevant?": {
"main": [
[
{
"node": "send to Slack",
"type": "main",
"index": 0
}
]
]
},
"parse HTML": {
"main": [
[
{
"node": "New?",
"type": "main",
"index": 0
}
]
]
},
"fetch article": {
"main": [
[
{
"node": "Prepare LLM Input",
"type": "main",
"index": 0
}
]
]
},
"send to Slack": {
"main": [
[]
]
},
"parse LLM JSON": {
"main": [
[
{
"node": "Relevant?",
"type": "main",
"index": 0
}
]
]
},
"analyze with LLM": {
"main": [
[
{
"node": "parse LLM JSON",
"type": "main",
"index": 0
}
]
]
},
"normalize & hash": {
"main": [
[
{
"node": "parse HTML",
"type": "main",
"index": 0
}
]
]
},
"Prepare LLM Input": {
"main": [
[
{
"node": "analyze with LLM",
"type": "main",
"index": 0
}
]
]
},
"DeepSeek Chat Model": {
"ai_languageModel": [
[
{
"node": "analyze with LLM",
"type": "ai_languageModel",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
中级 - AI 摘要总结, 多模态 AI
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
故事锻造AI V2.09.25
使用DeepSeek、RunwayML、ElevenLabs和Creatomate将创意转换为电影
Set
Code
Wait
+13
45 节点Țugui Dragoș
内容创作
基于AI的会议研究与每日议程(Google日历、Attio CRM和Slack)
基于AI的会议研究与每日议程:使用Google日历、Attio CRM和Slack
If
Set
Code
+15
30 节点Harry Siggins
AI 摘要总结
基于 OCR、Claude AI、Slack 和 Notion DB 的自动化发票付款追踪
基于 OCR、Claude AI、Slack 和 Notion DB 的自动化发票付款追踪
If
Code
Wait
+11
92 节点Han
AI 摘要总结
使用OpenAI分析工作流错误并创建FreshDesk工单和Slack警报
使用OpenAI分析工作流错误并创建FreshDesk工单和Slack警报
Set
Code
Merge
+6
16 节点Anna Bui
AI 摘要总结
使用 JinaAI 和 Gemini-GPT 将文章转换为 Bluesky 线程帖子
使用 JinaAI 和 Gemini/GPT 将文章转换为 Bluesky 线程帖子
If
Set
Code
+11
21 节点Khairul Muhtadin
AI 摘要总结
使用 GPT-4 和 Airtable 自动记录和备份工作流
使用 GPT-4 和 Airtable 自动记录和备份工作流
If
N8n
Set
+14
38 节点Guillaume Duvernay
AI 摘要总结
工作流信息
难度等级
中级
节点数量13
分类2
节点类型8
作者
Țugui Dragoș
@tuguidragosAutomation consultant focused on revenue workflows with n8n, GoHighLevel, and AI. Specializing in voice bots, lead generation & follow-up systems.
外部链接
在 n8n.io 查看 →
分享此工作流