AI PLAY玩法更新持续收录
← 回到更新流

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两列用于去重审计

具体怎么做

  1. 配置来源目录与定时器

    新建Schedule Trigger设为每周一09:00(时区按需调整);接一个Code节点作为'Source Catalogue',输出JSON数组,每项含name、type(rss|sitemap)、url、active字段,并附全局配置outputLanguage、storiesPerDigest、discoveryLookbackHours、freshnessDecayHours(本站练习值分别为zh、8、72、48)。

  2. 抓取并归一化

    用Split In Batches遍历active来源:RSS源用RSS Read节点,sitemap源用HTTP Request拉XML后用XML节点解析;两路汇合进一个Code节点统一为{title,url,publishedAt,source,summary}结构,过滤掉publishedAt超出discoveryLookbackHours或字段不完整的条目。

  3. 去重与排序

    对每个url做规范化(去锚点、去utm参数)得到canonicalUrl,用Data Table节点的查询操作检查是否已存在;未发送的候选进入Code节点打分:score=新鲜度衰减值+来源权重,再按来源分组轮询取样,平衡占比后截断前30条。

  4. 抓正文配图并交由AI撰写

    对30条候选逐条HTTP Request抓页面,Code节点提取正文片段与og:image;把标题+证据文本打包发给OpenAI节点,使用下方简报撰写提示词,要求其输出JSON:{stories:[{title,summary,whyItMatters,url,imageUrl}]},条数等于storiesPerDigest。

  5. 校验分支与发送

    用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