第 5 章

触发器全解

Ch05 触发器全解

触发器(Trigger)是工作流的起点,决定"什么时候"执行自动化。n8n 提供三大类触发器:定时触发(Schedule)、事件触发(Webhook/Event)和轮询触发(Polling)。选对触发器类型,直接影响工作流的实时性和资源消耗。本章深入讲解每种触发器的配置细节,并重点解析 Cron 表达式——这是大多数生产级定时任务的基础。

Schedule Trigger:定时触发器

Schedule Trigger 是最常用的触发器类型,支持两种配置模式:

简单模式:通过下拉菜单选择触发间隔(每分钟、每小时、每天等),适合简单的定期任务。

Cron 表达式模式:使用 Unix Cron 语法精确控制触发时间,适合复杂的调度需求(如"每周一到周五早上 9 点"、"每月第一个工作日")。

Cron 表达式语法

n8n 的 Cron 表达式由 5 个字段组成(不含秒字段):

分钟  小时  日期  月份  星期
  |     |     |     |     |
  *     *     *     *     *
字段 取值范围 特殊字符
分钟 0-59 * , - /
小时 0-23 * , - /
日期 1-31 * , - / ?
月份 1-12 * , - /
星期 0-7 (0和7都代表周日) * , - / ?

常用 Cron 表达式示例:

表达式 含义
0 8 * * * 每天早上 8:00
0 8 * * 1-5 周一到周五早上 8:00
*/15 * * * * 每 15 分钟
0 9,18 * * * 每天 9:00 和 18:00
0 0 1 * * 每月 1 日 0:00
30 8 * * 1 每周一早上 8:30

时区设置: Schedule Trigger 使用 n8n 实例的系统时区(由 GENERIC_TIMEZONE 环境变量控制)。国内服务器记得设置 GENERIC_TIMEZONE=Asia/Shanghai,否则定时任务会在 UTC 时间执行,与预期相差 8 小时。

Webhook Trigger:HTTP 事件接收

Webhook Trigger 为工作流创建一个唯一的 HTTP 端点 URL,外部系统通过向这个 URL 发送 HTTP 请求来触发工作流。这是实现实时事件驱动自动化的核心机制。

Webhook 配置参数

Webhook 节点生成的 URL 格式:

https://your-n8n.com/webhook/[工作流激活后的唯一ID]

开发模式(工作流未激活)使用测试 URL:

https://your-n8n.com/webhook-test/[唯一ID]

常见 Webhook 使用场景

GitHub Webhook:当 PR 被合并时自动通知飞书、创建 Jira 工单

表单提交:网站联系表单提交后自动发邮件 + 写入 CRM

支付回调:支付宝/微信支付成功回调后更新订单状态

AI 助手集成:飞书机器人消息 → n8n Webhook → LLM 处理 → 回复

Webhook 安全:签名验证

对于来自 GitHub、GitLab、Stripe 等平台的 Webhook,需要验证请求签名防止伪造。以 GitHub 为例:

// 在 Webhook 节点后添加 Code 节点进行签名验证
const crypto = require('crypto');

const secret = $vars.GITHUB_WEBHOOK_SECRET;
const payload = $input.first().json.body;
const signature = $input.first().headers['x-hub-signature-256'];

// 计算期望签名
const expectedSignature = 'sha256=' + crypto
  .createHmac('sha256', secret)
  .update(JSON.stringify(payload))
  .digest('hex');

// 比对签名
if (signature !== expectedSignature) {
  throw new Error('Invalid webhook signature - request rejected');
}

return $input.all();

Polling Trigger:轮询触发

对于不支持 Webhook 推送的服务,n8n 使用轮询方式定期检查新数据。很多内置节点集成了轮询触发能力:

轮询触发的缺点是实时性较差(通常以分钟为单位),且会产生频繁的 API 调用。对于支持 Webhook 的服务,优先使用 Webhook 而非轮询。

触发器选型决策

触发场景 推荐触发器 说明
定时报表、定时数据同步 Schedule Trigger 最可靠,零依赖
接收第三方平台推送 Webhook Trigger 实时性最好
监控收件箱新邮件 Email Trigger 内置 IMAP 轮询
监控 RSS 内容更新 RSS Feed Trigger 自动去重已读条目
监控 GitHub 活动 GitHub Trigger 支持多种事件类型
被另一个工作流调用 Execute Workflow Trigger 子工作流专用

SQL Trigger(PostgreSQL / MySQL)

部分高级场景需要在数据库有新记录时立即触发工作流。n8n 的 PostgreSQL Trigger 利用 LISTEN/NOTIFY 机制实现真正的实时触发,无需轮询:

-- 在 PostgreSQL 中创建触发器函数
CREATE OR REPLACE FUNCTION notify_new_order()
RETURNS TRIGGER AS $$
BEGIN
  PERFORM pg_notify('new_order', row_to_json(NEW)::text);
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- 将触发器绑定到 orders 表
CREATE TRIGGER orders_after_insert
  AFTER INSERT ON orders
  FOR EACH ROW EXECUTE FUNCTION notify_new_order();

n8n 的 PostgreSQL Trigger 节点监听 new_order 频道,每当有新订单插入时立即触发工作流,延迟通常在 100ms 以内。

本章评分
4.9  / 5  (59 评分)

💬 留言讨论