Skip to content

Webhook 事件歷史

查詢當前賬號的 webhook 投遞歷史。常用場景:

  • 排查"為什麼我的 webhook 沒收到"
  • 監控 dead_letter 狀態的死信
  • 與本地業務記錄對賬

端點

MethodPOST
Path/api/v1/openapi/webhook_events/list
鑑權HMAC
冪等鍵不需要

請求欄位

欄位型別必填說明
event_typestring過濾事件型別,如 card.opened
statusint過濾投遞狀態(見下表)
pageint預設 1
page_sizeint預設 20,最大 100

投遞狀態

statusstatus_desc含義
0pending等待首次投遞
1delivered投遞成功
2failed_retry失敗但仍在重試
3dead_letter已死信,不再重試
4skipped跳過(如 webhook URL 未配置)

請求示例

json
{ "event_type": "card.opened", "status": 1, "page": 1, "page_size": 20 }

響應欄位

data.list[] 中每項:

欄位型別說明
event_idstringevt_<uuid>(與 Webhook-Id 頭去字首後一致)
event_typestring事件型別
statusint見上表
status_descstring英文描述
attempt_countint已嘗試次數
next_attempt_atstring nullable下次重試時間(RFC3339)
last_errorstring最近一次失敗原因
last_response_statusint最近一次 HTTP 狀態碼(0 = 網路層失敗)
delivered_atstring nullable投遞成功時間
created_atstring事件建立時間

響應示例

json
{
  "code": 200,
  "message": "成功",
  "data": {
    "list": [
      {
        "event_id": "evt_550e8400-e29b-41d4-a716-446655440000",
        "event_type": "card.opened",
        "status": 1,
        "status_desc": "delivered",
        "attempt_count": 1,
        "next_attempt_at": null,
        "last_error": "",
        "last_response_status": 200,
        "delivered_at": "2026-04-29T11:00:13Z",
        "created_at": "2026-04-29T11:00:12Z"
      }
    ],
    "total": 12,
    "page": 1,
    "page_size": 20,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false
  }
}

典型錯誤

HTTPmessage_key說明
401openapi_invalid_credentials鑑權失敗
500openapi_list_webhook_events_failed服務端異常

排查 Webhook 投遞問題

場景 1:本地一直沒收到 webhook

bash
# 看是不是根本沒投遞
{ "status": 0 }    # 仍 pending → 系統側延遲,等幾秒再看
{ "status": 4 }    # skipped → 你 webhook URL 沒配 / 已停用

# 或失敗重試中
{ "status": 2 }    # 看 last_error / last_response_status 判斷

場景 2:懷疑漏事件

bash
# 列你的 card_id 相關事件
{ "event_type": "card.opened", "page_size": 100 }
# 與本地接收記錄對賬

場景 3:確認死信

bash
{ "status": 3 }
# 死信通常是:URL 永久 4xx / 永久 timeout / DNS 失敗
# 修好接收器後,聯絡支援手動重投或忽略

採用 MIT 等價條款釋出