第 3 章

第一个自动化工作流

Ch03 第一个自动化工作流

理论学够了,是时候动手了。本章将从零开始搭建一个真实可用的工作流:每天自动抓取 Hacker News 热门文章,通过 OpenAI 生成中文摘要,发送到你的邮箱。整个过程覆盖 n8n 工作流搭建的完整流程,帮你建立肌肉记忆。

工作流整体设计

这个工作流由 5 个节点串联而成:

  1. Schedule Trigger — 每天早 8:00 自动触发
  2. HTTP Request — 调用 Hacker News API 获取 Top 10 文章
  3. Code — 过滤掉分数低于 100 的文章
  4. OpenAI — 为每篇文章生成中文摘要
  5. Gmail — 将摘要汇总发送到邮箱

Step 1:添加 Schedule Trigger 节点

打开 n8n,点击 New Workflow,在空白画布上点击 + 按钮搜索 "Schedule",选择 Schedule Trigger 节点。

配置参数:

保存节点。此时画布上出现第一个节点,它会每天早上 8 点触发工作流。

测试技巧: 开发阶段不要等定时触发——点击节点右上角的 Execute Node 按钮可以立即手动触发单个节点,查看其输出数据。

Step 2:HTTP Request 获取 Hacker News 数据

从 Schedule Trigger 节点拉出连线,添加 HTTP Request 节点。

配置:

执行后,你会看到返回一个包含 500 个文章 ID 的数组。我们只需要前 10 个,所以在第二个 HTTP Request 节点中获取每篇文章的详情:

注意:这里的 {{ $json }} 表示当前 item 的值(即文章 ID)。由于上游输出了 500 个 ID,这个节点会被调用 500 次。为了限制只处理前 10 条,在 Settings 中设置 Batch Size 为 10。

Step 3:Code 节点过滤文章

添加 Code 节点,过滤分数低于 100 的文章:

// 过滤低质量文章,只保留分数 >= 100 的
const filtered = items.filter(item => {
  const score = item.json.score || 0;
  const title = item.json.title || '';
  // 过滤掉没有 URL 的(如 Ask HN、Show HN 等)
  return score >= 100 && item.json.url;
});

// 按分数降序排列
filtered.sort((a, b) => b.json.score - a.json.score);

// 只取前 10 篇
return filtered.slice(0, 10);

Step 4:OpenAI 节点生成摘要

添加 OpenAI 节点(需要先在 Credentials 中添加 OpenAI API Key)。

配置:

System: 你是一个技术内容助手,专门将英文科技文章标题翻译成中文并生成简洁摘要。

User: 请对以下 Hacker News 文章生成一段 50 字以内的中文摘要:
标题:{{ $json.title }}
链接:{{ $json.url }}
分数:{{ $json.score }} 分

请直接输出摘要,不需要任何前缀。

Step 5:Merge + Gmail 发送汇总邮件

在所有文章的摘要生成后,添加 Aggregate 节点将所有 items 合并为一个,然后通过 Code 节点格式化邮件内容:

// 生成 HTML 格式的邮件正文
const articles = items.map((item, index) => {
  return `
    <div style="margin-bottom: 20px; padding: 15px; border-left: 3px solid #ff6600;">
      <h3 style="margin: 0 0 8px;">
        <a href="${item.json.url}">${index + 1}. ${item.json.title}</a>
      </h3>
      <p style="margin: 0 0 8px; color: #666;">分数:${item.json.score} | 
         <a href="https://news.ycombinator.com/item?id=${item.json.id}">HN 评论</a>
      </p>
      <p style="margin: 0; color: #333;">${item.json.summary}</p>
    </div>
  `;
}).join('');

const emailBody = `
  <h2 style="color: #ff6600;">🚀 今日 Hacker News Top 10(${new Date().toLocaleDateString('zh-CN')})</h2>
  ${articles}
  <p style="color: #999; font-size: 12px;">由 n8n 自动生成</p>
`;

return [{ json: { body: emailBody } }];

最后添加 Gmail 节点(需要在 Credentials 中添加 Gmail OAuth2 凭证):

完整工作流测试

点击右上角 Execute Workflow 手动触发一次完整流程,观察每个节点的执行情况。如果某个节点出错,点击该节点查看详细的错误信息。

测试通过后,点击右上角的 Active 开关激活工作流,n8n 会从明天早上 8 点开始自动执行。

常见问题: 如果 OpenAI 节点超时,可以将 Batch Size 从 10 改为 5,减少并发请求数量。如果 Gmail 节点报授权错误,需要重新在 Google Cloud Console 配置 OAuth2 凭证。

工作流优化建议

本章评分
4.8  / 5  (77 评分)

💬 留言讨论