触发器全解
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 配置参数
- HTTP Method:GET、POST、PUT、PATCH、DELETE(推荐 POST)
- Path:自定义 URL 路径,如
/github-webhook - Authentication:可选 Basic Auth 或 Header Auth,防止未授权调用
- Response Mode:
Immediately:收到请求立即返回 200,工作流异步执行When Last Node Finishes:等待工作流执行完成后返回最后节点的输出(同步模式)
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 使用轮询方式定期检查新数据。很多内置节点集成了轮询触发能力:
- Email Trigger(IMAP):定期检查收件箱,有新邮件时触发
- RSS Feed Trigger:定期拉取 RSS 源,发现新条目时触发
- GitHub Trigger:轮询 GitHub API,检测到新 PR/Issue 时触发
- Google Sheets Trigger:监控表格变化(需要 Apps Script 配合)
轮询触发的缺点是实时性较差(通常以分钟为单位),且会产生频繁的 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 以内。