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

2026-10-07 · 原文发布日

订阅欢迎信与版本发布通知一条龙流程

这个n8n流程把newsletter订阅管理和发版通知合在一起:webhook收到邮箱后校验格式、在Data Table查重、存为新订阅者并发HTML欢迎信;发版时从GitHub README提取指定版本的changelog,过滤内部维护类条目后,可选交给OpenAI生成主题、导语和亮点文案,AI失败则回退到确定性模板直接拼装,最后经SMTP逐个群发并附短暂延时。含语义化版本号和SEND_EMAIL=YES双重发送保险。

原文要点

原模板为Paolo Ronco发布的免费n8n工作流:订阅webhook接收并小写化邮箱、校验格式、查Data Table防重复、发HTML欢迎信;发版支持手动或生产webhook触发,必须提供合法语义化版本号且SEND_EMAIL恰为YES才放行;可从GitHub README按版本号抽取changelog或用手工提供的changelog,过滤内部维护类条目;可选OpenAI结构化输出生成主题、导语、亮点与收尾,失败则用确定性模板拼装;随后循环读取全部订阅者经SMTP逐封发送并加短暂等待,webhook回执包含版本、收件人数与所用生成路径。

这次做成什么

在自有n8n搭建订阅查重与欢迎信流程;发版时必须同时提供合法版本号和SEND_EMAIL=YES,才按README或手工changelog生成通知。先复制工作流并把订阅表限制为本人测试邮箱,再验证发送与回执。

准备什么

  • 可访问公网的n8n实例且支持Data Tables功能
  • 一组SMTP凭据和已通过验证的发件邮箱地址
  • OpenAI API凭据(仅启用AI文案分支时必需)
  • Header Auth凭据,用于保护订阅与发版两个webhook
  • 一个HTTP可达的GitHub raw README或changelog文件

具体怎么做

  1. 导入工作流并建订阅者表

    把模板JSON导入n8n,新建一个Data Table(至少含email字段),记下其ID;在所有节点中把REPLACE_WITH_YOUR_NEWSLETTER_DATA_TABLE_ID替换为该ID。

  2. 配置凭据与发件信息

    为订阅/发版webhook配置Header Auth;在欢迎信与发版信两个邮件节点填入SMTP凭据;把newsletter@example.com换成你的验证发件地址;在Build Welcome Email节点里改产品名、欢迎文案、法律页脚与退订说明。

  3. 配置changelog来源

    在Read README from GitHub节点把示例raw GitHub地址换成你项目的README或changelog地址;在Extract Requested Release Versions节点内更新示例官网与发版说明URL。

  4. 接入OpenAI并测试

    复制工作流,用只含本人测试邮箱的独立Data Table,确认Read Subscribers读的就是该表,再接入OpenAI凭据。按模板错误处理设置测试AI文案与确定性兜底;不能只删凭据就假定必然走到兜底节点。

  5. 用合成请求激活验证

    向测试订阅webhook POST本人邮箱,核对大小写查重与欢迎信。发送测试前再次核对表内只有本人邮箱,再向发版webhook提交合法版本及SEND_EMAIL=YES。检查实际回执中的版本、收件数和生成路径,字段名以模板输出为准。

可直接复制的材料

发版webhook测试请求体(合成)

本站独立编写的测试字段示意;原文确认版本、changelog与SEND_EMAIL语义,字段结构须先与导入模板核对,不能直接向生产端点试发。

{
  "versions": ["1.4.0"],
  "SEND_EMAIL": "YES",
  "changelog": "## 1.4.0\n- 新增:仪表盘支持导出CSV\n- 修复:列表页分页偶发跳页\n- 内部:升级构建脚本依赖"
}

AI发版文案提示词(本站示例)

原模板含OpenAI结构化输出分支,但原文未给出提示词全文;此为本站按其描述独立编写的示例,字段名需与原模板structured output的schema核对后再用。

你是产品newsletter编辑。根据以下changelog,输出JSON,字段为subject(不超过30字的邮件主题)、intro(80字内导语,说明本次更新价值)、highlights(数组,仅保留面向用户的条目,每条一句话,忽略内部维护类条目)、closing(一句收尾并引导查看完整发版说明)。语气专业、具体,不夸大。changelog如下:{{ $json.changelog }}

订阅测试POST命令(替换占位配置)

本站独立编写的完整请求示例;URL、认证头和值由导入模板的测试webhook配置取得,邮箱换成本人测试地址。占位域名无法真实投递。

export N8N_SUBSCRIPTION_WEBHOOK="https://your-n8n.example.invalid/webhook/subscription-test"
export AUTH_HEADER_NAME="REPLACE_WITH_CONFIGURED_HEADER_NAME"
export AUTH_HEADER_VALUE="REPLACE_WITH_CONFIGURED_TEST_VALUE"
# email必须换成本人实际可收信的测试邮箱;请求会触发欢迎信。
curl --fail-with-body --request POST "$N8N_SUBSCRIPTION_WEBHOOK" \
  --header "Content-Type: application/json" \
  --header "$AUTH_HEADER_NAME: $AUTH_HEADER_VALUE" \
  --data '{"email":"Test.User@example.invalid"}'

输入与输出示例

本站合成输入与预期结果,未真实发信;AI故障分支是否成功兜底、实际回执和投递状态须在本人测试邮箱核对。

输入

复制的测试工作流连接只含本人测试邮箱的订阅表;请求合法版本1.4.0、SEND_EMAIL=YES及本站合成changelog:新增CSV导出、修复分页、内部升级构建依赖。具体JSON字段先与模板核对。

对应输出

预期本人测试邮箱收到面向用户的发版信,亮点只含CSV导出与分页修复;内部构建依赖被过滤。回执应表达已通知版本1.4.0、实际收件人数1及所用内容生成路径。原文没有给出这些回执的精确字段名,不据此虚构announcedVersions等接口。

做完检查这些

  • 重复POST同一邮箱(大小写不同)时,Data Table只新增一行且只发一次欢迎信
  • POST缺少合法语义化版本号或SEND_EMAIL不是YES时,流程在硬校验处停止、不发送任何邮件
  • 在复制工作流按原模板的错误处理方式模拟AI分支失败,确认进入兜底且只向本人测试邮箱发送
  • README中能按请求版本号只抽取对应小节,不混入其他版本内容
  • 核对Wait间隔、实际回执与本人收到的邮件;默认查询全部行,测试表必须只含本人邮箱

容易卡住的地方

  • 模板内的产品名、域名、发件地址、法律文案全是占位示例,漏替换会把example.com发到真实用户
  • 默认订阅查询返回Data Table全部行;自行加退订功能后必须同步改Read Subscribers的过滤条件
  • README抽取依赖语义化版本格式,项目用其它版本格式时需扩展抽取逻辑
  • SMTP服务商有发送频率限制时,Wait间隔不足可能触发退信或封号
  • 真实收集邮箱涉及隐私与营销合规,上线前需确认同意与退订机制

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Send newsletter welcomes and release announcements with GitHub, OpenAI and SMTP
原作者
Paolo Ronco
原始发布日期
2026-10-07T14:01:46.663Z
来源
https://n8n.io/workflows/20636