# 审批

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

等待明确的批准或拒绝，再执行对应分支。

任务能否继续取决于人工决定时，使用审批节点（Approval）。需要批准的操作必须连接到批准分支，只有提示词或画布注释不能保证这项依赖。

## 配置请求

```json
{
  "op": "node.add", "as": "review", "type": "approval", "name": "Review reply",
  "prompt": "Approve the proposed customer reply?",
  "inputs": {
    "reply": { "kind": "value", "value": "Your replacement is ready to ship." }
  }
}
```

审批请求会展示这些具名输入，帮助审批人了解情况。需要额外业务约束时，可以使用 `config.inputs`。

## 分支与输出

审批请求保存成功后，可以通过 `pending` 分支通知审批人。`approve` 和 `reject` 分别选择批准、拒绝后的执行路径。对应输出对象包含被接受的决定、处理时间、可选评论和上下文输入。

```json
{ "op": "edge.connect", "source": "$review", "branch": "approve", "target": "$send" }
```

上面的目标节点必须在同批修改中更早创建，或使用已读取的节点引用。如果拒绝后需要记录或修改任务，应另行连接拒绝分支。

人工决定后，审批节点选择批准回复或退回修改的分支。

**输入**
待审批的回复为「Your replacement is ready to ship.」。

**预期结果**
批准后进入 Approved reply，拒绝后进入 Keep the draft。

**运行前准备**
导入或执行此案例需要 Open Flow 服务；预览本身可离线使用。

[下载工作流](https://openflow.run/docs/examples/approval-review.openflow.json)

## 审批决定与权限

待审批请求由本次运行管理。无论通过哪个受支持的入口提交，都由最先被接受的操作生效。重复提交不会覆盖选择，也不会再次执行分支。

公开操作链接只能用于处理指定等待项，并且只能提交该等待项支持的决定，不提供部署端登录或通用工作流访问权限。通知必须通过部署端已授权的机制，将链接送达指定审批人。

## 限制

审批必须手动完成，不支持超时后自动批准，也没有普通任务重试或 `onError` 处理。需要到指定时间自动继续时，使用[等待节点](https://openflow.run/zh-cn/docs/nodes/wait/index.md)。

## 资料来源

*   [docs/authoring/node-authoring.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/authoring/node-authoring.md)
*   [docs/control/contracts/control-api.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/control/contracts/control-api.md#9-public-wait-action-hook)
*   [docs/architecture.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/architecture.md#wait-and-agent)
*   [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)
