[控场AI]
· 6 分钟阅读· 3,020 字

n8n 教程:用 Aggregate 节点合并数据,告别重复邮件

n8n 教程:用 Aggregate 节点合并数据,告别重复邮件

用 n8n 的 Aggregate 节点将多条数据合并为一条,解决「发 N 封邮件」而非「发 1 封周报」的经典陷阱。

本文基于 n8n 实操教程,拆解了一个新手极易踩中的自动化陷阱:n8n 默认对每个 item 逐条执行下游节点,导致读取 6 条客户记录后会触发 6 次邮件发送,而非 1 封汇总周报。根本原因在于 n8n 的 item 机制——有多少条数据,下游动作就重复多少次。解决方案是在数据源与发送节点之间插入 Aggregate 节点,选择「聚合所有数据」,即可将 6 个 item 压缩为 1 个,Gmail 节点因此只触发一次。此外还需注意,Aggregate 输出的是 JSON 格式,无法直接塞入邮件正文,需借助 AI 生成 JavaScript 代码将其转换为可读文本或 HTML 表格。掌握这一节点,是构建周报、汇总通知等批量自动化场景的必备基础。

在用 n8n 搭建自动化工作流时,很多人都会遇到一个让人头疼的问题:明明只想发一封汇总邮件,系统却给每条数据都发了一封。这篇文章基于一则 n8n 实操教学视频(Formation n8n 系列第 17 讲),拆解 Aggregate(聚合)节点 的核心用途——把多条记录合并成一条,从而彻底解决这个经典陷阱。

问题场景:一封周报,为什么变成了 6 封邮件

教程设定了一个非常贴近真实业务的需求:每周给市场部门发送一份客户名单周报。工作流本身看起来很简单——手动触发器(Trigger Manually)连接 Google Sheets 客户数据库,再接一个 Gmail 发送节点。

配置过程并不复杂:通过 Google 账号授权连接 Sheets,读取「Formation N8N 客户数据库」文档中的工作表,拿到全部客户记录。发送节点里填好收件人地址,再把客户名和邮箱做一点排版,预览效果看上去相当不错。

邮件内容预览效果

但执行之后却是一场「灾难」。打开 Gmail 收件箱会发现,收到的不是 1 封周报,而是 6 封——恰好对应数据库里的 6 位客户。换句话说,n8n 把每一位客户都当成一次独立发送来处理了。

收到了 6 封邮件而非 1 封

作者直言这完全不是想要的结果:「如果我有 50 个客户,它就会给市场部发 50 封邮件。」在数据量更大的真实场景里,这种行为显然无法接受。

根源:n8n 的 Item 逐条执行机制

要理解问题,关键在于 n8n 的数据模型。每个节点处理的是一组 items(数据项),后续节点会对每个 item 逐条执行一次。

视频里反复强调了一个细节:节点连接线旁边标注的数字。数据库节点输出显示「6 items」,发送节点接收到的同样是「6 items」。这意味着 Gmail 节点被触发了 6 次,每次携带 1 位客户的信息,于是产生了 6 封独立邮件。

这其实不是 bug,而是 n8n 的默认设计逻辑:有多少条数据,下游动作就重复多少次。理解这一点,是写好 n8n 工作流的基础认知之一。

真正的目标应该是:把 6 条客户记录(无论将来是 10 条、20 条还是 30 条)合并成 1 个 item——也就是一个包含所有客户的单一表格,然后只触发一次发送。

这种「逐条执行」的设计思路在自动化平台中非常普遍,本质上类似编程语言中的 for 循环:对输入数组里的每个元素依次应用同一段逻辑。n8n 将这个概念显式化为「item」——每个 item 是一个独立的 JSON 对象,代表一行数据、一条记录或一个事件。当上游节点产出 N 个 items,下游节点的执行次数就是 N 次,这使得「对每位客户单独发邮件」「对每条订单分别更新数据库」之类的操作无需额外配置即可实现。

然而,这也正是「汇总报表」场景的天然障碍:报表本质上是把 N 条记录压缩成 1 份文档的操作,与逐条执行的方向完全相反。因此,任何需要「先收集、再统一处理」的场景——周报、日汇总、批量通知——都必须在工作流中显式加入一个「收拢」步骤,Aggregate 节点正是为此而生。

解决方案:加入 Aggregate 节点

解决办法只有一步——在客户数据库和邮件发送节点之间,插入一个 Aggregate 节点。整个工作流的其余三个模块配置完全不变,差别仅在于中间多了这个聚合环节。

添加过程非常简单:在节点搜索框输入「aggr」即可找到 Aggregate 节点。双击进入配置后,选择「聚合所有数据」(Aggregate all item data),其余什么都不用动。

Aggregate 节点执行结果

执行后效果立竿见影:输入端依然是 6 items,而输出端变成了 1 item。这个单一 item 内部是一个把 6 条记录打包在一起的数组。作者用了一个形象的比喻:把像五根手指一样散开的多个 item 聚拢,最终攥成一个点、输出成唯一的一条。

从「6 items 到 1 item」正是 Aggregate 的核心价值——下游的 Gmail 节点因此只会被触发一次,只发出一封邮件。

别忽略的坑:JSON 不能直接塞进邮件正文

聚合完成后还有一个容易踩的坑。Aggregate 输出的是 JSON 格式的数据数组,而 Gmail 这类邮件服务期待的是纯文本。

直接硬塞 JSON 数据会报错

如果直接把这段 JSON「生拉硬拽」地粘进邮件正文字段,execute step 会直接失败。作者给出的实用建议是:借助 AI 完成格式转换。无论是 ChatGPT、Claude、Gemini 还是 Copilot,都可以把这段 JSON 丢给它,让它生成一小段 JavaScript,将数据转换成邮件可读的文本(例如一个排版整齐的表格)。

作者正是用这种方式,让 AI 写出 JavaScript 代码,把聚合后的客户数据渲染成一张表格。最终邮件标题是「客户周报」,正文是一张包含所有客户姓名和邮箱的清单——而且收件箱里只有一封邮件。

Aggregate 节点输出的数据结构大致形如 { "data": [ { "姓名": "张三", "邮箱": "a@b.com" }, ... ] },这是机器友好但人类阅读体验极差的格式,直接粘入邮件正文还会因为字段引用类型不匹配而报错。

在 n8n 中处理此类格式转换,常见做法有两种:一是在 Aggregate 之后插入一个 Code 节点(支持 JavaScript/Python),手写循环逻辑将数组拼接成 HTML 表格或纯文本列表;二是如文中建议的那样,把 JSON 结构描述丢给 AI,让它生成转换代码后粘入 Code 节点。对于不熟悉编程的用户,后者门槛更低。如果目标格式是 HTML 邮件,还可以让 AI 直接生成带 <table> 标签的模板字符串,Gmail 节点支持 HTML 内容,视觉效果会更整洁。

小结:Aggregate 是自动化报表的必备工具

这个案例虽然基础,却揭示了 n8n 新手最常见的误区。要点可以归纳为:

  • n8n 默认对每个 item 逐条执行下游节点,多条数据会导致多次动作;
  • Aggregate 节点能把多个 item 合并成单个 item,适合汇总报表、批量通知等场景;
  • 聚合后的 JSON 数据需要先转成文本,才能被邮件服务正常发送;
  • 当手动写 JavaScript 转换格式有难度时,直接让 AI 代劳是高效的做法。

掌握 Aggregate,意味着你能把「每条数据发一次」的笨拙流程,变成「所有数据汇总一次性发送」的优雅自动化。对于需要定期生成客户名单、销售汇总、库存清单等周期性报表的团队来说,这是一个绕不开的核心节点。

分享:

相关推荐