跳转到内容
最后更新于

Webhook

Webhook 讓您的應用程式在 AI 任務完成時,收到狀態為 success 或 error 的非同步通知。通知會送至您控管的 HTTP 端點,並遵循 Standard Webhooks Specification。


Webhook Secret

Webhook Secret 的結構

我們使用 HMAC-SHA256 簽章機制的 webhook secret,webhook secret 以 base64 編碼,並加上 whsec_ 前綴以便辨識。

webhook secret 範例:

whsec_NDQzMzYxNzkzMzE0NjYyNDM6OTIxOTcwNDIxODQ

使用 Standard Webhooks 套件實作 Webhook

我們強烈建議使用 Standard Webhooks Library 的官方實作,您不必擔心簽章驗證的細節。

使用官方實作也能確保簽章驗證安全且正確。

https://github.com/standard-webhooks/standard-webhooks/tree/main?tab=readme-ov-file#reference-implementations

自行實作 Webhook

請仔細理解 webhook secret 的結構,參考 Signature scheme 中的對稱(Symmetric)部分。

當您準備為簽章輸入內容簽章時,請移除 whsec_ 前綴,並將剩下的字串做 base64 解碼,取得 secret 的實際位元組,用來進行 HMAC-SHA256 雜湊。


Webhook 請求範例

POST https://yourdomain.com/webhook-endpoint
Content-Type: application/json
webhook-id: msg_1eWPv9cWJCnEP99UJncmVJ6KjK_xVXRhZPe_eSGnRNbLlXEPjiG3gb3Usg9le3_4:1761112848
webhook-timestamp: 1761112900
webhook-signature: v1,vyVNWrjoZcBK1JXrFGkdDKK2slo5+Q5yfzpkHmqO5R0=
{
  "created_at": 1761112848,
  "data": {
    "task_id": "1eWPv9cWJCnEP99UJncmVJ6KjK_xVXRhZPe_eSGnRNbLlXEPjiG3gb3Usg9le3_4",
    "task_status": "success"
  }
}

HTTP 標頭

webhook-id

webhook 遞送的唯一識別碼。 此值在重試之間保持一致,應用於冪等性(idempotency)處理。

webhook-timestamp

webhook 送出時的 Unix epoch 時間戳(秒)。

webhook-signature

'v1' 後接逗號(,),再接 base64 編碼的 HMAC-SHA256 簽章。

'v1' 表示簽章機制的版本,目前是唯一支援的版本。

base64 編碼的 HMAC-SHA256 簽章,是使用您的 webhook secret 對簽章輸入內容簽章後的結果。

簽章輸入格式:

{webhook-id}.{webhook-timestamp}.{raw-minified-json-body}

已簽章內容範例:

msg_1eWPv9cWJCnEP99UJncmVJ6KjK_xVXRhZPe_eSGnRNbLlXEPjiG3gb3Usg9le3_4:1761112848.1761112900.{"created_at":1761112848,"data":{"task_id":"1eWPv9cWJCnEP99UJncmVJ6KjK_xVXRhZPe_eSGnRNbLlXEPjiG3gb3Usg9le3_4","task_status":"success"}}

請求內容

created_at

Unix epoch 時間戳(秒),表示任務完成的時間。

data

包含事件內容(event payload)。

欄位說明
task_id建立任務時回傳的任務識別碼。請使用此 ID 查詢最終任務結果。
task_status任務完成狀態。可能值為:success、error。

整合指南

Webhook 整合指南

  1. 在您的伺服器上準備一個 webhook 端點。 確認該端點可接受 POST 請求,且可透過 HTTPS 存取。

  2. 在 API Console 中建立 webhook。

  3. 執行 AI 任務並記錄 task_id。

  4. 處理 webhook 通知,使用 task_id 取得任務結果。


建立 Webhook 端點

前往 API Console 的 Webhook 管理頁面:

https://yce.makeupar.com/api-console/en/webhook/

1. 找到 Webhook 區塊

2. 建立新的 Webhook 端點

您最多可同時設定 10 個 webhook 端點。

3. 保護您的 Webhook Secret

您的 webhook secret 用於驗證 webhook-signature。 請妥善保管,切勿公開揭露。

4. 管理既有 Webhooks


驗證簽章

在您的伺服器上處理 Webhook 請求

我們建議使用 Standard Webhooks Library 的官方實作:

https://github.com/standard-webhooks/standard-webhooks/tree/main?tab=readme-ov-file#reference-implementations

這能確保簽章驗證安全且正確。

您也可以使用 Standard Webhooks Simulator 測試或除錯內容:

https://www.standardwebhooks.com/simulate

驗證 Webhook 簽章

請參考 webhook 請求範例:

POST https://yourdomain.com/webhook-endpoint
Content-Type: application/json
webhook-id: msg_1eWPv9cWJCnEP99UJncmVJ6KjK_xVXRhZPe_eSGnRNbLlXEPjiG3gb3Usg9le3_4:1761112848
webhook-timestamp: 1761112900
webhook-signature: v1,vyVNWrjoZcBK1JXrFGkdDKK2slo5+Q5yfzpkHmqO5R0=

請求內容:

{
  "created_at": 1761112848,
  "data": {
    "task_id": "1eWPv9cWJCnEP99UJncmVJ6KjK_xVXRhZPe_eSGnRNbLlXEPjiG3gb3Usg9le3_4",
    "task_status": "success"
  }
}

簽章輸入格式將為:

{webhook-id}.{webhook-timestamp}.{raw-minified-json-body}

已簽章內容範例:

msg_1eWPv9cWJCnEP99UJncmVJ6KjK_xVXRhZPe_eSGnRNbLlXEPjiG3gb3Usg9le3_4:1761112848.1761112900.{"created_at":1761112848,"data":{"task_id":"1eWPv9cWJCnEP99UJncmVJ6KjK_xVXRhZPe_eSGnRNbLlXEPjiG3gb3Usg9le3_4","task_status":"success"}}

使用您的 webhook secret 金鑰,將以 HMAC-SHA256 加密的已簽章內容,與收到的 webhook-signature 進行驗證。 範例:

v1,vyVNWrjoZcBK1JXrFGkdDKK2slo5+Q5yfzpkHmqO5R0=