# 審批

Source: https://openflow.run/zh-tw/docs/nodes/approval/
Language: zh-TW
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-tw/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)
