2026-09-09 · 原文发布日
每周自动编一期AI新闻HTML邮件简报
每周定时从可配置的RSS源和官方sitemap目录抓取AI与自动化新闻,归一化后按新鲜度过滤并用Data Table按链接去重,再对候选打分、排序并平衡各来源占比,取前30条抓正文和配图作为证据,由OpenAI选题并写成多故事简报;发送前校验产出、复查每条配图可用性,不合格就拦下并推Telegram告警,合格才经Gmail发出并记录已发链接。
原文要点
原模板每周定时运行,从可配置来源目录抓取RSS与官方sitemap,归一化后做新鲜度过滤,并用n8n Data Table按规范URL去重;随后打分、排序、平衡各来源占比,保留前30条再抓正文与配图作为证据,交由OpenAI(作者标注GPT-4o-mini)选题并写多故事简报;发送前校验AI产出、复查配图可用性,不合格则拦下并推Telegram告警,合格才经Gmail发出并回写已发链接。需配置OpenAI、Gmail OAuth2、Telegram三类凭据及Data Table表ID。
这次做成什么
照此思路搭一条'每周AI新闻HTML简报'流水线:定时抓取→归一化→去重→排序→AI撰写→校验分支→邮件发送。因未提供可导入的工作流文件,以下是本站按原文描述独立设计的节点清单与配置方案,需在n8n中自行连线并核对原模板细节。
准备什么
- 一个自托管或云端n8n实例,支持Schedule Trigger与Data Table功能
- OpenAI API凭据(作者标注使用GPT-4o-mini,模型可能另收费)
- Gmail OAuth2凭据与一个收件邮箱地址
- Telegram机器人凭据及用于告警的chat ID
- 一个n8n Data Table,含canonicalUrl与sentAt两列用于去重审计
具体怎么做
配置来源目录与定时器
新建Schedule Trigger设为每周一09:00(时区按需调整);接一个Code节点作为'Source Catalogue',输出JSON数组,每项含name、type(rss|sitemap)、url、active字段,并附全局配置outputLanguage、storiesPerDigest、discoveryLookbackHours、freshnessDecayHours(本站练习值分别为zh、8、72、48)。
抓取并归一化
用Split In Batches遍历active来源:RSS源用RSS Read节点,sitemap源用HTTP Request拉XML后用XML节点解析;两路汇合进一个Code节点统一为{title,url,publishedAt,source,summary}结构,过滤掉publishedAt超出discoveryLookbackHours或字段不完整的条目。
去重与排序
对每个url做规范化(去锚点、去utm参数)得到canonicalUrl,用Data Table节点的查询操作检查是否已存在;未发送的候选进入Code节点打分:score=新鲜度衰减值+来源权重,再按来源分组轮询取样,平衡占比后截断前30条。
抓正文配图并交由AI撰写
对30条候选逐条HTTP Request抓页面,Code节点提取正文片段与og:image;把标题+证据文本打包发给OpenAI节点,使用下方简报撰写提示词,要求其输出JSON:{stories:[{title,summary,whyItMatters,url,imageUrl}]},条数等于storiesPerDigest。
校验分支与发送
用IF节点校验:JSON可解析、stories数量≥3、每条imageUrl非空且HTTP HEAD返回200;不合格走Telegram节点推送告警文本并终止;合格则Code节点拼装HTML,经Gmail节点发送到收件邮箱,随后Data Table逐条插入已发canonicalUrl与sentAt。
可直接复制的材料
来源目录配置(Code节点内JSON)
本站独立编写的示例目录;URL与权重为虚构练习值,请替换为你订阅的真实RSS与sitemap地址;字段名需与原模板核对。
{
"settings": {
"outputLanguage": "zh",
"storiesPerDigest": 8,
"discoveryLookbackHours": 72,
"freshnessDecayHours": 48
},
"sources": [
{"name": "OpenAI Blog", "type": "rss", "url": "https://openai.com/blog/rss.xml", "active": true, "weight": 3},
{"name": "ExampleAILab", "type": "rss", "url": "https://example-lab.dev/feed.xml", "active": true, "weight": 2},
{"name": "AutoWeekly", "type": "sitemap", "url": "https://autoweekly.example.com/sitemap.xml", "active": false, "weight": 1}
]
}简报撰写提示词(OpenAI节点)
本站独立撰写;{{storiesPerDigest}}与{{candidates}}为占位,请在n8n表达式中替换为实际变量。
你是一份中文AI行业周报的主编。下面是本周候选新闻的JSON数组,每项含title、url、source、evidence(正文摘录)。
任务:
1. 选出最有行业价值的{{storiesPerDigest}}条,避免同一事件重复报道;
2. 为每条撰写:title(中文标题,20字内)、summary(80-120字中文摘要,只依据evidence,不得编造数据)、whyItMatters(一句话说明对从业者的意义);
3. 保留原url与imageUrl字段原样输出。
只输出一个JSON对象,格式:{"stories":[{"title":"","summary":"","whyItMatters":"","url":"","imageUrl":""}]},不要输出任何其他文字。
候选新闻:
{{candidates}}去重测试数据(归一化后候选)
本站虚构测试数据,用于验证去重与打分逻辑。
[
{"title":"某开源模型发布新版本","url":"https://example-lab.dev/news/v2?utm_source=feed#top","canonicalUrl":"https://example-lab.dev/news/v2","publishedAt":"2026-09-08T10:00:00Z","source":"ExampleAILab","summary":"模型能力升级"},
{"title":"自动化平台新增连接器","url":"https://autoweekly.example.com/p/conn","canonicalUrl":"https://autoweekly.example.com/p/conn","publishedAt":"2026-09-07T08:00:00Z","source":"AutoWeekly","summary":"新增多个集成"},
{"title":"某开源模型发布新版本(转载)","url":"https://mirror.example.com/v2","canonicalUrl":"https://mirror.example.com/v2","publishedAt":"2026-09-08T12:00:00Z","source":"MirrorSite","summary":"同一事件转载"}
]输入与输出示例
本站虚构演示,非原作者运行结果;得分为示例逻辑推演。
输入
以上测试数据中第1条canonicalUrl已存在于Data Table(上周已发送),第3条与第1条报道同一事件,storiesPerDigest设为2对应输出
去重后剩第2、3条;打分排序假设第3条得分更高但因与已发第1条同事件,AI撰写环节只选第2条及新候选;最终校验分支输出示例:{"stories":[{"title":"自动化平台新增连接器","summary":"AutoWeekly报道该平台本周上线多个新集成,覆盖常见办公与开发工具,官方称可减少手工数据搬运。","whyItMatters":"自动化从业者可评估新连接器是否替代现有自研脚本。","url":"https://autoweekly.example.com/p/conn","imageUrl":"https://autoweekly.example.com/p/conn/cover.png"}]}(仅1条,低于下限3,触发Telegram告警分支,不发邮件)做完检查这些
- Data Table中已存在的canonicalUrl不再进入候选,发送成功后新链接被回写
- 候选排序时同一来源不会连续占据前30条中的大部分席位
- 任一最终条目imageUrl的HEAD请求非200时,流程走Telegram告警而非Gmail发送
- OpenAI输出无法解析为JSON或stories数量不足时被IF节点拦下
容易卡住的地方
- Gmail OAuth2需要Google Cloud项目配置,凭据过期会导致发送节点失败
- sitemap抓取可能返回大量旧页面,必须按lastmod配合discoveryLookbackHours过滤,否则超时
- 原文未给出具体打分公式,本方案的权重与衰减值是本站设定,需按你的来源数量调整
- Data Table表ID必须与工作流中节点配置一致,换环境后需重新指向
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Send a curated AI tech news digest from RSS and sitemaps with OpenAI and Gmail
- 原作者
- Luiz Junior
- 原始发布日期
- 2026-09-08T18:19:25.486Z
- 来源
- https://n8n.io/workflows/19408