# Webhook 回應

Source: https://openflow.run/zh-tw/docs/nodes/webhook-response/
Language: zh-TW
Product version: 0.1.0-beta.77

在指定節點完成時回傳 HTTP 回應，工作流程可以繼續執行。

如果需要在整次執行結束前向呼叫方確認已收到請求，可以使用 Webhook 回應節點。Webhook 設定中需要選擇要使用的回應節點。

## 設定回應

節點有以下固定輸入：

| 輸入 | 值 |
| --- | --- |
| `body` | 任意 JSON 值，預設為空文字。 |
| `statusCode` | HTTP 狀態碼數字，預設為 200。 |
| `headers` | 值為純量的回應標頭物件，預設為空物件。 |

```json
{
  "op": "node.add", "as": "response", "type": "webhook-response", "name": "Acknowledge",
  "inputs": {
    "body": { "kind": "value", "value": "Accepted" },
    "statusCode": { "kind": "value", "value": 202 }
  }
}
```

在同一批修改中，將 Webhook 的 `config.options.responseBody` 設為 `{ "kind": "webhook-response", "nodeId": "$response", "timeoutMs": 30000 }`，並連線從 Webhook 到該回應節點的執行路徑。

## 回應時機

第一次成功執行時，節點會送出不可變的回應快照。HTTP 呼叫方無需等待後續節點即可收到回應。此後的失敗、迴圈迭代或重試，都不會替換這份回應。

POST Webhook 將宣告的 message 傳給程式碼節點；Webhook 回應節點回傳確認訊息，後續任務仍可繼續。

**輸入**
POST 請求本文：{"message":"Please check my order"}

**預期結果**
HTTP 202，文字為 "Received: Please check my order"，並包含 X-Workflow: ticket-intake。

**執行前準備**
將工作流程發布到對外提供 Webhook 地址的部署環境。

[下載工作流程](https://openflow.run/docs/examples/webhook-response.openflow.json)

該節點沒有業務輸出，但可以連線下游執行節點。工作流程可以有多個回應節點，每個 Webhook 只選擇其中一個可達節點。如果執行成功，但選取的回應節點被跳過，HTTP 會回傳錯誤。

## 使用限制

回應標頭可以逐項填寫固定值，也可以將整個物件綁定到一個輸入來源，不支援為每一項分別綁定動態來源。部署端的回應標頭和來源策略仍然生效。巢狀工作流程中的回應節點不能回答父執行的 HTTP 請求。

此節點沒有節點重試或錯誤處理策略。回應模式和超時設定見 [Webhook](https://openflow.run/zh-tw/docs/nodes/webhook/index.md)。

## 資料來源

*   [docs/authoring/node-authoring.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/authoring/node-authoring.md#early-webhook-response-nodes)
*   [docs/control/contracts/control-api.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/control/contracts/control-api.md#trigger-configuration-and-outputs)
*   [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)
