Agent Skills
返回列表
n8n 失败重试与异常处理

n8n 失败重试与异常处理

AI Agent 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_fccf428b/n8n-error-handling 到 AI 助手。

技能介绍

无人值守工作流的静默失败问题

n8n 的默认行为是:任何一个节点抛错,整条工作流立即停止。你在本地看着红节点重跑,没问题;但一旦工作流跑在无人值守环境里——webhook 触发的 API、定时任务、队列 worker、agent 工具——这个默认值就是灾难:调用方等到超时或收到空的 500,运维没有收到任何告警,症状只是"集成突然不工作了",没有日志、没有线索。

本技能要解决的问题是让失败变得响亮、结构化、可恢复,最好情况下还能自愈,让瞬时抖动根本不需要人介入。

技能如何工作:两层错误处理

防止大多数静默失败的两个核心思想:

  • Per-node error outputs:节点失败时路由到你控制的第二个输出,而不是杀死整个运行。
  • Workflow-level error workflow:一个兜底工作流,捕获任何逃出 per-node 处理的错误(超时、节点间崩溃、未接线的失败)。

关键陷阱:per-node error output 是两步设置。 只做一半看起来完成了,实际会吞掉错误:

  1. 在节点上设置 onError: "continueErrorOutput"——这才会创建第二输出 main[1]。
  2. 把那个错误输出接到真正的处理器。没有目标,错误数据就发射到虚空。

| 你做了什么 | 运行时发生了什么 |
|---|---|
| 设置了 onError,没接错误输出 | 错误数据被静默丢弃,仪表盘显示成功,最坏情况无日志。 |
| 接了错误输出,没设 onError | 槽位永远不触发,失败时工作流照常停止。 |
| 两步都做了 | 失败沿 main[1] 路由到处理器。✅ |

接线后必须验证——validate_workflow 检查不出半接线的错误输出。用 n8n_get_workflow 拉取工作流,确认 onError 是 continueErrorOutput 且 connections["HTTP Request"].main[1] 包含你的处理器。

自愈优先:先设 retryOnFail,再接错误路径。 任何调用网络服务的节点——HTTP Request、Gmail/Slack/Discord、数据库、AI 节点——都应设置节点级重试。429 或上游短暂抖动会自己重试成功,错误输出只在真实、持久的故障时触发。引擎限制:重试对任何错误触发(无状态码过滤),maxTries 上限 5,waitBetweenTries 上限 5000ms。

API 工作流的规范形状:无悬挂分支。 每条路径——成功和每个错误——都必须结束于 Respond to Webhook 节点,否则调用方会等到超时。校验失败(4xx)在上游用 IF/Switch 或 Set 节点里的 IIFE Schema 校验器判断,直接返回 400/401/403/404;错误输出只留给意外失败(5xx)。responseCode 默认 200——即使错误分支也如此——这是独立陷阱:返回 200 带错误体,调用方的 HTTP 客户端会当成成功。每个 Respond 节点都要显式设置 responseCode。

状态码要匹配失败原因。 5xx 表示你的故障、建议重试;4xx 表示调用方的错、不要重试。把坏输入也接到返回 500 的 Respond 是常见错误——调用方分不清你的宕机和他的 bug。

工作流级错误工作流(兜底) 捕获 per-node 处理漏掉的一切:你忘记接线的节点、节点间崩溃、整条工作流超时、触发器失败。用 Error Trigger 节点启动,最小版本是捕获→通知。告警要包含工作流名、编辑器和失败执行的链接、失败节点名、真实错误消息(不是"Workflow failed")。

适用边界与注意点

  • 你自己盯着跑的内部一次性工作流:默认 stopWorkflow 没问题,你会看到红节点并重跑。分界线是:如果输出有别人在看——下游系统、终端用户、值班工程师——失败必须被处理,不能被吞掉。
  • 递归陷阱:如果错误工作流通知 Slack,而 Slack 正好挂了,错误工作流自己也失败,原始错误就消失了。在不同于被监控工作流所用渠道的通道上通知(多数工作流用 Slack → 错误工作流用邮件),并加降级(写入 Data Table)。
  • "已处理"的错误不会冒泡:如果节点的错误输出接到一个丢弃数据的空操作,n8n 认为错误已处理,错误工作流不会触发。只在真正处理错误时才做 per-node 捕获。
  • MCP 做不到的事:分配错误工作流(实例默认或按工作流覆盖)是 n8n UI 设置——Workflow Settings → Error Workflow。没有 MCP 工具能设。用 MCP 构建错误工作流后,要告诉用户确切的 UI 步骤,并对每条无人值守工作流重复(或设实例默认)。其他工作流设置(Save Execution Data、时区、超时、caller policy)也是 UI only。

使用场景

  • 给 webhook 触发的 API 工作流接入节点错误输出,按失败原因分别返回 4xx 或 5xx,不让调用方等到超时
  • 定时任务或队列工作流频繁被 429 打断时,为网络节点配置 retryOnFail,并搭建 Error Trigger 兜底告警
  • 排查工作流接了错误处理却仍静默失败的问题,核对节点 onError 与 connections.main[1] 是否两步都完成
  • 为支付、发送类节点设计有限次重试与幂等保证,错误日志与告警中剔除凭据和请求体

适合人员

  • 搭建 webhook 自动化的集成工程师:需要保证每条失败路径都有 HTTP 响应,不让调用方拿到超时或空 500
  • 维护定时或队列工作流的后端开发者:希望上游抖动时靠 retryOnFail 自愈,真实故障时收到带执行链接的告警
  • 设计 API 错误契约的开发者:需要按 4xx/5xx 区分调用方错误与自身故障,返回让监控能分开告警的状态码
  • 负责支付、通知类无人值守流程的开发者:需要在有限重试与幂等之间平衡,避免重复扣款或重复发送