|
|
|
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
示例场景:
-
Webhook:用户提交表单后立即发送通知邮件 -
轮询:每天凌晨同步昨天的订单数据
1.3 n8n 中的 Webhook 节点n8n 提供了强大的 Webhook 节点,让我们无需编写代码就能接收外部请求。在n8n中使用Webhook非常简单:
-
添加Webhook节点: 在工作流编辑器中搜索「Webhook」并添加, 它通常作为第一个节点(触发器)。

-
配置路径: 设置一个唯一的路径,如 /my-webhook
-
选择HTTP方法: 最常用的是 POST
(用于接收数据体)和GET
(用于从URL参数获取数据)。 -
获取URL: n8n会自动生成完整的Webhook URL
核心配置项:
-
Path:Webhook 的路径 -
HTTP Method:支持 GET、POST、PUT、DELETE 等 -
Authentication:安全验证方式, 为了安全,建议设置认证方式,如 Header Auth
。 -
Respond:响应模式选择:立即响应,节点执行完毕,Webhook响应节点
1.4 Test Webhook 和 Production Webhook

这是 n8n 初学者最容易混淆的点, n8n为每个Webhook节点生成两个URL:
-
TestURL(测试URL): -
URL:URL包含 /webhook-test/
-
用途:在开发和测试工作流时使用。 -
激活方式:点击节点面板上的「Listen for Test Event」按钮后激活,通常会等待120秒,关闭编辑器后立即失效。 -
特点:当测试URL接收到请求后,数据会直接显示在n8n的编辑器界面中,方便您实时查看数据结构并进行调试。每次测试后需要重新点击监听。 -
ProductionURL(生产URL): -
URL: URL 包含 /webhook/
-
用途:当工作流开发完成并准备正式投入使用时,应使用此URL。 -
激活方式:工作流被激活(右上角开关打开)后,此URL会持续生效,即使关闭编辑器也能接收请求。 -
特点:生产环境中,通过此URL触发的工作流会在后台自动运行。您无法在编辑器中直接看到实时数据,但可以在「Executions」历史记录中查看每次运行的详细情况。
重要提示:
-
测试时使用 Test URL,但部署前一定要记录 Production URL -
工作流必须激活(Activate)后,Production Webhook 才能正常工作
二、接收和处理数据2.1 如何获取 Webhook URL在Webhook节点的配置面板中,n8n会自动生成测试和生产URL。我们只需要点击生成出来的地址即可完整复制。

步骤:
-
创建工作流,添加Webhook 节点 -
点击节点,在右侧配置面板查看 -
开发阶段使用 「Test URL」,点击 「Listen for Test Event」 -
生产环境使用 「Production URL」(激活工作流后生效)
2.2 接收 POST/GET 请求n8n的Webhook节点支持所有标准HTTP方法:
-
GET 请求: 通常用于从URL的查询参数(Query Parameters)中获取少量数据。例如 http://localhost:5678/webhook-test/my-webhook?name=张三&age=25
。 -
POST 请求: 常用于发送更复杂或更大量的结构化数据,这些数据通常包含在请求体(Request Body)中,例如JSON格式的数据。
我们需要在Webhook节点中设置正确的「HTTP Method」来匹配发送方的请求类型。GET请求示例:适合简单的通知和数据查询http://localhost:5678/webhook-test/my-webhook?name=张三&age=25
POST请求示例:适合提交表单和复杂数据bashcurl -X POST http://localhost:5678/webhook-test/my-webhook \
-H"Content-Type: application/json"\
-d'{
"name": "张三",
"email": "zhangsan@example.com",
"message": "这是一条测试消息"
}'
2.3 解析请求数据当Webhook节点接收到请求后,会将接收到的数据自动解析成结构化格式,并存放在一个JSON对象中,主要包含三个部分:
-
Body (请求体)
-
位置: {{ $json.body }}
-
内容: POST请求的主体数据 -
示例:
{
"body": {
"name":"张三",
"email":"zhangsan@example.com"
}
}
-
Query(查询参数)
-
位置: {{ $json.query }}
-
内容: URL中的参数 -
示例: URL是 /webhook-test/my-webhook?name=张三&age=25
{
"query": {
"name":"张三",
"age":25
}
}
-
Headers (请求头)
-
位置: {{ $json.headers }}
-
内容: HTTP请求头信息 -
示例:
{
"headers": {
"content-type":"application/json",
"user-agent":"Mozilla/5.0...",
"authorization":"Bearer token123"
}
}
假设接收到这样的 POST 请求:{
"body": {
"username":"张三",
"email":"zhangsan@example.com",
"message":"这是一条测试消息"
},
"headers": {
"content-type":"application/json"
}
}
在后续节点中使用:// 提取用户名
{{ $json.body.username }} // 输出:张三
// 提取邮箱
{{ $json.body.email }} // 输出:zhangsan@example.com
// 提取消息
{{ $json.body.message }} // 输出:咨询产品价格
2.4 简单的数据转换收到数据后,通常需要进行一些转换。可以使用「Set」或「Code」节点对从Webhook接收到的数据进行转换和处理场景: 接收表单提交,提取关键信息
-
Webhook节点: 接收数据 -
Set节点: 转换数据
在Set节点中配置:字段1:
- Name: userName
- Value: {{ $json.body.name }}
字段2:
- Name: userEmail
- Value: {{ $json.body.email }}
字段3:
- Name: submittedAt
- Value: {{ $now.toISO() }}
转换后的数据:json{
"userName":"张三",
"userEmail":"zhangsan@example.com",
"submittedAt":"2025-10-09T10:30:00.000Z"
}
三、响应定制在Webhook节点中,有一个关键设置「Respond」,它决定了何时向调用方返回响应:
-
Immediately
-
收到请求后立即返回固定响应 -
工作流继续在后台执行 -
调用方不会等待处理结果 -
适合:异步处理、不需要返回处理结果
-
When Last Node Finishes
-
等待最后一个节点执行完 -
自动返回最后节点的数据 -
不推荐使用,建议用第1种方式
-
Using ‘Respond to Webhook’ Node
-
工作流不会自动响应 -
必须使用Respond to Webhook节点来返回响应 -
可以完全控制响应的时机和内容 -
适合:需要处理完所有逻辑后再响应
Respond to Webhook 节点详解核心概念:
-
这是一个专用响应节点,只能与Webhook节点配合使用 -
可以在工作流的任何位置添加,一旦执行就会返回响应 -
一个工作流中可以有多个Respond to Webhook 节点(不同分支) -
执行后,调用方立即收到响应,但工作流仍可继续执行

返回成功/失败状态我们通过实际例子来理解下,如何使用:示例1:基础响应Webhook节点配置:
-
Path: submit
-
Method: POST
-
Respond: Using 'Respond to Webhook' Node
Respond to Webhook节点配置:
-
Respond With: JSON
-
Response Code: 200
-
Response Body:
{
"success":true,
"message":"数据处理成功",
"data": {
"timestamp":"{{ $now.toISO() }}"
}
}
示例2:条件响应(不同状态码)可使用 IF 节点根据不同的条件,后面对接上不同的 Respond to Webhook 节点。成功分支的Respond配置:
-
Response Code: 200
-
Response Body:
{
"success":true,
"message":"订单创建成功"
}
失败分支的Respond配置:
-
Response Code: 400
-
Response Body:
{
"success":false,
"error":"数据验证失败",
"details": {
"field":"email",
"message":"邮箱格式不正确"
}
}
高级响应技巧
-
动态响应内容
根据前面节点的处理结果,动态生成响应:{
"status":"{{ $('IF').item.json.validated ? 'success' : 'error' }}",
"data": {
"recordId":"{{ $('保存数据').item.json.id }}",
"itemCount":"{{ $('处理数据').all().length }}"
},
"processedAt":"{{ $now.toISO() }}"
}
-
返回文件/二进制数据
场景:生成PDF、图片等文件并返回Respond to Webhook配置:
-
Respond With: Binary
-
Binary Property: data
(从前面节点获取的二进制数据) -
Response Headers:
Content-Type: application/pdf
Content-Disposition: attachment; filename="report.pdf"
常见响应格式(JSON)JSON是最常用的响应格式,以下是几个标准模板:
-
标准成功响应
{
"code":200,
"success":true,
"message":"操作成功",
"data": {
"id":"12345",
"created":"2025-10-09T10:30:00Z"
}
}
-
错误响应
{
"code":400,
"success":false,
"error": {
"type":"ValidationError",
"message":"必填字段缺失",
"fields": ["email","name"]
}
}
-
列表数据响应
{
"success":true,
"data": [
{"id":1,"name":"项目A"},
{"id":2,"name":"项目B"}
],
"total":2,
"page":1
}
四、基础安全4.1 为什么需要验证?防止恶意攻击、保证数据完整性、控制API成本。想象你的 Webhook URL 是:http://localhost:5678/webhook/delete-user
如果没有验证,任何人知道这个地址都能发送请求,后果可能是: 恶意删除数据, 垃圾信息灌水和服务器资源被滥用因此,验证请求来源至关重要!4.2 简单的密钥验证示例方案 1:URL 参数密钥原理:在 URL 中添加密钥参数正确请求:
https://your-n8n.com/webhook/submit?secret=mySecretKey123
错误请求(被拒绝):
https://your-n8n.com/webhook/submit
工作流结构:Webhook → IF 节点(验证密钥)→ 拒绝/继续处理
方案 2:HTTP Header 验证原理:在请求头中传递密钥curl -X POST https://your-n8n.com/webhook/submit \
-H"X-API-Key: mySecretKey123"\
-H"Content-Type: application/json"\
-d'{"username": "张三"}'
IF 节点配置:
-
Condition: {{ $json.headers['x-api-key'] }}
equalsmySecretKey123
优势:密钥不会出现在 URL 中,不会被日志记录。方案 3:使用 n8n 内置身份验证Webhook 节点配置:

-
点击Authentication选项 -
选择Header Auth -
设置: -
Name: X-API-Key
-
Value: your-secret-key-here
调用方配置:fetch('https://your-n8n.com/webhook/submit', {
method:'POST',
headers: {
'X-API-Key':'your-secret-key-here',
'Content-Type':'application/json'
},
body:JSON.stringify({username:'张三'})
})
五、总结通过本文的学习,我们完整掌握了n8n中Webhook的核心知识,理解了Webhook是一种主动推送的通信方式,相比传统轮询更实时、更高效。学会了如何配置Webhook节点接收外部请求,如何解析body、query、headers中的数据,以及如何使用Respond to Webhook节点返回自定义响应掌握Webhook,意味着打开了n8n连接外部世界的大门