测试 Webhook
向某个 Webhook 发送一个合成事件,用于验证连通性、TLS 与签名处理。该事件由 PipAI 生成,并通过正常的投递管线送达——使用相同的请求头、相同的签名、相同的重试语义——因此一次成功的测试可以确认你的处理逻辑端到端连接正确。
端点
POST /v1/webhooks/{id}/test
权重: 10 鉴权: 必须(已签名)——参见 鉴权。
该端点是同步的:请求会阻塞直到合成投递完成或超时(10 秒)。请节制使用——它的权重比其他 Webhook 端点更高,因为它会占用一个投递槽位。
路径参数
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string | YES | Webhook 标识,格式为 wh_<6-8 hex>。 |
请求体
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
event_type | string | NO | 嵌入到合成事件请求体中的 type 字段。默认为 webhook.test。允许传入真实的事件类型(例如 strategy.deployed)——data 负载将填入虚拟值。 |
响应
{
"test_event_id": "evt_test_b7f2c1a93d",
"delivered": true,
"response_status": 200,
"response_time_ms": 187,
"error": null
}
投递失败时:
{
"test_event_id": "evt_test_b7f2c1a93d",
"delivered": false,
"response_status": 502,
"response_time_ms": 412,
"error": "Endpoint returned non-2xx status"
}
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
test_event_id | string | 合成事件的标识,格式为 evt_test_<10-12 hex>。测试事件 ID 使用 evt_test_ 前缀,便于在生产监控数据中过滤掉。 |
delivered | boolean | 当端点在 10 秒超时内返回 2xx 状态时为 true,否则为 false。 |
response_status | integer|null | 端点返回的 HTTP 状态;若端点未响应(TLS 错误、连接被拒、超时)则为 null。 |
response_time_ms | integer|null | 从请求发出到收到响应的实际耗时(毫秒)。若未收到响应则为 null。 |
error | string|null | 失败时的人类可读错误描述;成功时为 null。 |
成功的测试(delivered: true)会将该 Webhook 的 consecutive_failures 计数器重置为 0, 这是恢复一个尚未触及自动暂停阈值但已积累失败的 active Webhook 的官方方式。
错误
403 INSUFFICIENT_PERMISSION—— API 密钥缺少webhooks:write范围。404 NOT_FOUND—— 该账户上不存在该id对应的 Webhook。409 INVALID_STATE—— 该 Webhook 的status为broken。失效(broken)的 Webhook 必须先通过仪表盘或(即将推出的)PATCH 端点重新激活,才能发送测试。这可以避免对已经连续失败 50 次的端点产生意外流量。
请注意,投递失败(例如端点返回 5xx)不是 请求级错误——API 调用本身会返回 200 OK,请求体中 delivered: false。只有元数据级别的问题才会产生非 200 响应。
完整列表参见 错误。
示例
curl -X POST "https://api.pipai.example/v1/webhooks/wh_2a4f10/test" \
-H "X-PipAI-API-Key: $API_KEY" \
-H "X-PipAI-Timestamp: $TS" \
-H "X-PipAI-Signature: $SIG" \
-H "Content-Type: application/json" \
-d '{
"event_type": "strategy.deployed"
}'