开始之前
你需要一个 n8n 实例,比如第 1 课用的那个,再加一个能运行 curl 的终端。在 Windows PowerShell 5.1 里,curl 是另一个命令的别名,所以要输入 curl.exe。
下面两次调用都从同一台机器发出,所以暂时不需要让它能从互联网访问。外部服务想调用你笔记本上的 n8n,是另一回事,常见错误那一节会说为什么。
搭一个 Webhook,用 curl 调用它
下面这个 Webhook 接收 POST 请求里的一个名字,再返回一句问候。代码里是 n8n 文档自己的 curl 写法:第一条调用测试 URL,第二条调用生产 URL。真实的 URL 请从 Webhook 节点里复制,因为你的主机和路径会不一样。
curl --request POST <https://your-n8n.url/webhook-test/hello> --data 'name=Ada'
curl --request POST <https://your-n8n.url/webhook/hello> --data 'name=Ada'- 新建一个工作流,添加 Webhook 节点作为触发器。
- 把 HTTP Method 设为 POST。节点默认只接受一种方法,所以用别的方法发来的请求匹配不上。
- Path 可以保持原样,也可以自己填,比如
hello。n8n 默认填一个随机路径,免得和别的 Webhook 冲突。 - 把 Respond 设为 When Last Node Finishes,Response Data 设为 First Entry JSON。
- 选择 Listen for test event。n8n 会注册测试 URL,并保持 120 秒有效。在终端里运行上面代码中的第一条命令,这条请求会作为数据出现在节点里。
- 在 Webhook 后面添加 Edit Fields (Set) 节点。新增一个字段
greeting,Value 里先输入 "Hello, ",再从 INPUT 面板把name拖进来,它在body下面。表达式就变成{{ $json.body.name }}。 - 选择 Execute workflow,它会重新注册测试 URL,然后再发一次同样的命令。终端会以 JSON 形式打印出 Edit Fields 节点的输出。
- 把 Webhook 节点切换到 Production URL,再 Publish 工作流,运行第二条命令。这次编辑器里什么也不会出现,要去 Executions 标签页看这次运行。
测试 URL 还是生产 URL
Webhook 节点面板顶部同时显示两个 URL,用一个开关切换当前显示哪一个,这是节点说明页里写的。两者的区别在于什么时候响应,背后的工作流是同一个。
路径里的那一段由两个设置决定,N8N_ENDPOINT_WEBHOOK 和 N8N_ENDPOINT_WEBHOOK_TEST,自托管的实例可以改它们。n8n 的 Docker 页面把隧道模式称为本地开发工具,并提醒不要在生产环境使用。不过在 localhost 上开发时,n8n 要求用隧道模式启动,外部服务才够得到这个 Webhook。
| 区别 | 测试 URL | 生产 URL |
|---|---|---|
| 什么时候注册 | 工作流未发布时,你选择 Listen for test event 或 Execute workflow | 你发布工作流时 |
| 响应多久 | 开始监听后约 120 秒 | 直到你取消发布工作流 |
| 数据出现在哪里 | 编辑器里 | 工作流的 Executions 标签页 |
| 默认路径段 | webhook-test | webhook |
| 用来做什么 | 搭建和调试 | 真正来调用你的外部服务 |
选择 Webhook 怎样返回结果
Webhook 节点上的 Respond 设置,决定调用方拿到什么。Immediately 返回响应码和一句 "Workflow got started"。When Last Node Finishes 返回最后一个节点的输出,再由 Response Data 选择返回全部条目、第一条的 JSON、第一条的二进制数据,或者不返回正文。Streaming response 在工作流运行的同时把数据发回去,需要能流式输出的节点,比如 AI Agent 节点。
想在工作流中间就给出回复,把 Respond 设为 Using 'Respond to Webhook' node,再把 Respond to Webhook 节点放到合适的位置。
- 这个节点只运行一次,用的是第一条传入的数据,在循环里也一样。之后再运行的第二个 Respond to Webhook 会被忽略。
- 它的 Respond With 菜单有 All Incoming Items、Binary File、First Incoming Item、JSON、JWT Token、No Data、Redirect 和 Text。Text 默认发送 HTML。
- 工作流结束时没有走到这个节点,返回的是标准消息,状态码 200。在它之前就出错,返回的是错误,状态码 500。
- 从 n8n 1.103.0 起,HTML 响应会被包在沙盒 iframe 里,里面的相对 URL 无效,要改用绝对 URL。
限制与防护
认证方式设为 None 时,任何拿到 URL 的人都能调用它。Webhook 节点提供了真正的防护手段,下面几个数字则是它的限制。在付费套餐上,每个触发了 Webhook 的请求,也算一次执行。
- 在节点上选一种认证方式:通过 Webhook 凭据使用 Basic auth、Header auth 或 JWT auth,或者 n8n User Auth(OAuth2),也可以选 None。
- 在 IP(s) Allowlist 里填入允许调用这个 URL 的地址,其他地址会收到 403。
- Allowed Origins (CORS) 默认是
*,也就是允许所有来源。 - 在 n8n Cloud 上,任务要跑超过 100 秒的话,先用一个 Webhook 立刻回复,再让调用方去轮询第二个 Webhook 拿结果。
n8n 团队和 n8n-skills 的作者怎么说 Webhook 数据
2025 年 8 月 27 日,n8n 团队在 X 上宣布了聊天流式输出,卖点是逐字显示回复。放到 Webhook 节点上,就是 Streaming response 模式。n8n 的流式输出页面列出了两个能流式输出的节点:AI Agent 和 Respond to Webhook。调用方等一段长回答时,不用等运行结束就能先读到文字。
Romuald Członkowski 在华沙的 AiAdvisors 工作。他做了 n8n-skills,一套用 Claude Code 搭 n8n 工作流的技能。2026 年 11 月 5 日,这个仓库在 GitHub 上有 6.6k 星。
它的表达式技能把一个坑标成了关键:Webhook 把发来的数据放在 body 下面。第 6 步从 body 下面拖出 name,就是这个原因,表达式最后是 {{ $json.body.name }}。读 Webhook 数据的表达式返回空值时,先看是不是漏了 body。
关键陷阱:Webhook 的数据在
$json.body下面

X 官方嵌入卡片的截图,拍摄于 2026 年 11 月 5 日,时间为 UTC。点击截图可到 X 上打开原帖。
常见错误
- 没人监听时就去调用测试 URL。只有 n8n 在监听时它才响应,选了 Listen for test event 或 Execute workflow 之后才开始监听。
- 还没发布就调用生产 URL。n8n 在你发布工作流时才注册生产 Webhook,之前没有。
- 请求方法发错了。要同时接受多种方法,就在节点的 Settings 里打开 Allow Multiple HTTP Methods,再在 HTTP Methods 里添加方法。这样每种方法对应一个输出。
- 两个工作流用了同一个路径。n8n 对每一对路径加方法只允许一个 Webhook,并提示你选的这一对已被占用。取消发布另一个工作流,或者改掉路径或方法。
- 用 HTTP Request 节点调用时,请求方法和 Webhook 的方法不一致。两边要对上,用测试 URL 时还要先让 Webhook 节点执行工作流。
- IP 白名单只看到代理的地址。在反向代理后面,把
N8N_PROXY_HOPS设成代理的层数。同样的部署下,编辑器里还会显示错误的 URL,要设置N8N_WEBHOOK_URL才行。代理页面里有说明,第 4 课也会讲到。
自己试一试
- 把 IP(s) Allowlist 设成一个不是你自己的地址,调用生产 URL,看看返回了什么。试完把名单清空。
- 给节点加上一种认证方式,然后不带凭据调用一次,再带凭据调用一次。
- 加一个 Respond to Webhook 节点,返回 JSON 并自定义响应码,然后在终端里确认这个响应码。
- 给你这个只接受 POST 的 Webhook 发一个 GET 请求,看看返回了什么。
接下来学什么
Webhook 也可以给智能体供数据,它的流式响应模式就是为这种场景准备的。第 3 课用聊天模型、记忆和工具搭一个 AI 智能体。如果想看围绕这类触发器做好的现成工作流,导入 n8n 工作流讲了商店里下载的文件怎样变成你自己实例上能运行的副本。
自测一下
你用 curl 调用测试 URL,没有任何回复。该怎么做?
查看答案
C. 选择 Listen for test event,然后在 120 秒内再调用一次 测试 URL 只在 n8n 监听时才响应,选了 Listen for test event 之后保持 120 秒有效。
哪一种 Respond 设置,能让 Webhook 在工作流中间就给出回复?
查看答案
A. Using 'Respond to Webhook' node 选了这一项,就把 Respond to Webhook 节点放到合适的位置,而且只有它的第一次运行会发出响应。
怎样让一个 Webhook 同时接受 GET 和 POST?
查看答案
D. 在节点的 Settings 里打开 Allow Multiple HTTP Methods 节点默认只接受一种方法,Settings 里的这个开关可以列出多种,每种方法对应一个输出。
哪一项设置会对你没列出的所有地址返回 403?
查看答案
B. IP(s) Allowlist IP(s) Allowlist 里填的是允许调用这个 URL 的地址,而 Allowed Origins (CORS) 默认是 *,允许所有来源。
常见问题
能往 n8n Webhook 发送文件吗?
能。用表单数据发送,比如 curl 的 --form 'key=@/path/to/file',再设置节点的 Binary Property 选项,它指定接收文件的属性名。这个选项要求请求方法是 POST、PATCH 或 PUT。
一个 n8n Webhook 能同时接受 GET 和 POST 吗?
能。节点默认只接受一种方法,不过它的 Settings 里有个 Allow Multiple HTTP Methods 开关,打开后就可以列出多种。n8n 会给节点生成与方法数量相同的输出。
n8n Webhook 最大能接收多大的请求?
默认最大 16 MB。自托管的实例可以用 N8N_PAYLOAD_SIZE_MAX 变量调整,它的单位是 MiB,改完需要重启,详见端点变量。
怎么保护 n8n Webhook 的安全?
把认证方式和 IP 白名单结合起来用。节点支持 Basic、Header 和 JWT 认证,也支持通过 OAuth2 的 n8n User Auth,白名单则会对其他所有地址返回 403。
在自己笔记本上测试 Webhook,需要公网地址吗?
只有调用方在别处时才需要。同一台机器上用 curl 调用,什么都不用准备。要让互联网上的服务访问到,就把 n8n 放到有公网地址的服务器上,开发阶段也可以用 n8n 的隧道模式。
n8n Webhook 会超时吗?
Webhook 页面没有给出它自己的时间限制。在 n8n Cloud 上,Webhook 超过 100 秒还没响应,就会收到 Cloudflare 返回的 524 状态,所以耗时长的任务要用两个 Webhook,一个负责启动,一个负责轮询。
n8n Webhook 能返回一个 HTML 页面吗?
能,用 Respond to Webhook 节点并选 Text,它默认发送 HTML。要知道页面会放在沙盒 iframe 里,读不到顶层窗口,也不能用相对链接。
资料来源
- n8n Docs: Webhook node https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook
- n8n Docs: Webhook workflow development https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/workflow-development
- n8n Docs: Webhook common issues https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/common-issues
- n8n Docs: Respond to Webhook node https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook
- n8n Docs: Endpoints environment variables https://docs.n8n.io/deploy/host-n8n/configure-n8n/basic-configuration/use-environment-variables/endpoints
- n8n Docs: Configure webhook URLs with a reverse proxy https://docs.n8n.io/deploy/host-n8n/configure-n8n/basic-configuration/configuration-examples/configure-webhook-urls-with-reverse-proxy
- n8n Docs: Expressions for data transformation https://docs.n8n.io/build/work-with-data/transform-data/expressions-for-data-transformation
- n8n Docs: Understand executions https://docs.n8n.io/build/understand-workflows/understand-executions
- n8n Docs: Install with Docker https://docs.n8n.io/deploy/host-n8n/install-options/install-with-docker
- n8n Docs: Stream real-time responses https://docs.n8n.io/build/understand-workflows/understand-executions/stream-real-time-responses
- n8n.io on X: chat streaming has landed in n8n, 27 August 2025 https://x.com/n8n_io/status/1960613359037886710
- Romuald Członkowski on GitHub: n8n-skills https://github.com/czlonkowski/n8n-skills
- n8n on YouTube: n8n Beginner Course (2/9) - Introduction to APIs and Webhooks https://www.youtube.com/watch?v=y_cpFMF1pzk

