1. Webhook 节点是什么?为什么它是 n8n 的灵魂?
Webhook 节点用于 ,让 n8n 可主动响应该请求,从而触发自动化流程。
n8n Webhook 节点,涵盖定义、常见场景如支付回调与表单提交、参数配置(HTTP Method、Path、URL)、数据结构解析(Query/Body/Headers)、流程设计、测试方法及生产环境最佳实践。重点强调 Token 校验、Production URL 使用及响应超时处理,提供可导入的 Demo JSON 与踩坑指南,帮助开发者实现高效自动化集成。
Webhook 节点用于 ,让 n8n 可主动响应该请求,从而触发自动化流程。
通俗理解:
Webhook = 让 n8n 变成一个可以被'别人访问'的 API。
别人(第三方系统)可以通过 HTTP 请求来'触发'你的工作流,例如:
Webhook 的价值:
✔ 实现'被动触发'的自动化(无需轮询)
✔ 外部系统 → 主动通知 → 触发流程
✔ 替代 API Server 的轻量级方案
✔ 支持 GET/POST
✔ 传入任何 JSON / Query / Headers 数据
✔ 可用于跨系统集成
这是 n8n 最重要的'入口节点'之一。
如:
常见平台:
你的系统可以通过 POST:
POST https://n8n.example.com/webhook/order { "orderId": 123, "amount": 998 }
n8n 收到后执行内部流程。
如:
你可以把 n8n 变成一个无代码 API Server。
99% 情况下用 POST,因为可以传 JSON。
例如:
/order/create /user/notify /form/submit
最终形成完整 URL:
https://你的 n8n 域名/webhook/order/create
n8n 自动生成两个 URL:
| 类型 | 说明 |
|---|---|
| Test URL | 测试环境(需要 workflow 在 Editor 打开状态) |
| Production URL | 生产环境(部署后随时可用) |
一定要用 Production URL 做生产对接。
Webhook 可选择是否立即响应。
可以返回动态 JSON:
{ "status": "ok", "received": {{$json}} }
Webhook 会接收以下几种数据:
GET /hook?user=tom&id=55
对应数据:
{ "query": { "user": "tom", "id": "55" } }
{ "orderId": 1001, "amount": 88.5 }
Webhook 返回:
{ "body": { "orderId": 1001, "amount": 88.5 } }
包括 token、签名等。
flowchart TD
A[Webhook - 接收外部请求] --> B[IF 校验签名 / Token]
B -->|通过| C[处理数据:写数据库 / 发送消息 / 调 API]
B -->|失败| D[返回错误响应]
C --> E[Webhook Response - 返回成功 JSON]
使用 Postman / curl 发送:
POST https://你的域名/webhook/order/create
Content-Type: application/json
{ "orderId": 1001, "user": "Emilie", "amount": 99.9 }
测试返回:
{ "message": "Webhook received", "data": { "orderId": 1001, "user": "Emilie" } }
以下 Demo 包含:
可直接导入 n8n。
{
"nodes": [
{
"id": "1",
"name": "Webhook Entry",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"position": [300, 300],
"parameters": {
"httpMethod": "POST",
"path": "order/create",
"respond": true
}
},
{
"id": "2",
"name": "IF Token",
"type": "n8n-nodes-base.if",
"typeVersion": 1,
"position": [550, 300],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{$json[\"headers\"][\"x-token\"]}}",
"operation": "equal",
"value2": "123456"
}
]
}
}
},
{
"id": "3",
"name": "Set Response Success",
"type": "n8n-nodes-base.set",
"typeVersion": 2,
"position": [800, 250],
"parameters": {
"values": {
"json": [
{
"name": "message",
"value": "Webhook received"
},
{
"name": "orderId",
"value": "={{$json[\"body\"][\"orderId\"]}}"
}
]
}
}
},
{
"id": "4",
"name": "Webhook Response",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [1050, 250],
"parameters": {
"responseBody": "={{$json}}"
}
}
],
"connections": {
"Webhook Entry": {
"main": [[{"node": "IF Token", "type": "main", "index": 0}]]
},
"IF Token": {
"main": [
[{"node": "Set Response Success", "type": "main", "index": 0}],
[]
]
},
"Set Response Success": {
"main": [[{"node": "Webhook Response", "type": "main", "index": 0}]]
}
}
}
防止被随便 POST。
Test URL 在关闭编辑器后就失效。
可用 Respond Immediately → 后台处理。
如微信支付、Stripe。
避免 n8n 一次处理 1000 条订单导致崩溃。
原因:用了 Test URL,但 workflow 没保持'打开编辑器'状态。
不要在 Webhook 节点后做复杂流程。
改用:
✔ Respond immediately
✔ 后面再做逻辑
由于大小写问题,应该用:
$json["headers"]["x-token"]

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online