# 工作流错误

Source: https://openflow.run/zh-cn/docs/nodes/error/
Language: zh-CN
Product version: 0.1.0-beta.77

指定的生产工作流失败后，启动独立的错误处理工作流。

自动生产运行最终失败后，可以用工作流错误触发器（Flow Error）发送通知或记录事故。源运行的失败结果保持不变。

## 选择上游工作流

在处理工作流中添加错误触发器，选择要监测的已发布上游工作流。公开配置是一个工作流 ID 列表：

```json
{
  "op": "node.add", "as": "failure", "type": "error", "name": "Production failure",
  "config": { "sourceFlowIds": ["UPSTREAM_FLOW_ID"] }
}
```

列表为空时不监听任何工作流。不能选择当前工作流、未发布工作流或已删除工作流。选择符合条件的来源后，发布并启用处理工作流。

工作流错误触发器在所选生产工作流最终失败后，启动独立的处理运行。

**输入**
选择要监测的已发布上游工作流；案例初始选择为空。

**预期结果**
符合条件的上游失败会启动当前处理工作流，源运行仍保持失败状态。

**运行前准备**
选择已发布的上游工作流，再发布并启用处理工作流。手动运行不会触发此错误处理。

[下载工作流](https://openflow.run/docs/examples/handle-flow-error.openflow.json)

## 触发规则

符合条件的自动运行包括 Webhook、定时，以及由轮询检测到的应用事件运行，例如 Gmail 收到新邮件。最终失败或结果不确定时，可以启动错误处理。手动草稿运行、手动 Live 运行、成功运行和已取消运行都不会触发。

一次失败运行，对每个已订阅的处理工作流最多启动一次处理运行。部署端会持久化待投递的处理请求，并在接收运行前重新检查处理工作流是否符合条件。处理工作流自身失败，不会递归触发更多处理工作流。

## 输出

*   `workflow`：源工作流及其固定的发布版本和修订版本。
*   `execution`：源运行和最终状态。
*   `error`：错误代码、消息，以及可用的失败节点或执行标识。

草稿测试可以传入有代表性的失败数据，无需制造生产故障。真实的生产错误投递仍需单独检查。

## 后续处理

处理事故不会重试或修复源运行。结果不确定时，外部操作可能已经生效，重复执行前需要检查外部系统。节点内部的错误处理见[错误与重试](https://openflow.run/zh-cn/docs/concepts/errors-and-retries/index.md)。

## 资料来源

*   [docs/triggers/error-trigger.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/triggers/error-trigger.md)
*   [docs/control/contracts/control-api.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/control/contracts/control-api.md#flow-error-deletion-impact)
*   [packages/open-flow/src/workbench/browser/runtime/editor/addNodeOptions.ts](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/packages/open-flow/src/workbench/browser/runtime/editor/addNodeOptions.ts)
