SuperAPI AI 工具集

pagerduty-webhooks

部署与运维

查看项目

更新于 10-16 05:54

技能介绍

用途:接收并验证 PagerDuty V3 出站 Webhook。V3 是当前唯一受支持的代际,订阅通过 POST https://api.pagerduty.com/webhook_subscriptions 创建。V1 已于 2022 年 10 月停止工作,V2 为遗留版本且不使用 X-PagerDuty-Signature 签名,应迁移到 V3。注意 Events API 是反方向(你向 PagerDuty 发事件),不属于 Webhook。

主要能力:验证 X-PagerDuty-Signature(对原始请求体做 HMAC-SHA256,小写十六进制,前缀 v1=);处理 incident.triggered、acknowledged、resolved 等事件;按 event.event_type 路由,用 event.data.type 选择数据结构;去重与重试处理。

使用方式:必须使用未经改动的原始请求体(Express 用 express.raw({ type: 'application/json' }),Next.js 用 await request.text(),FastAPI 用 await request.body()),编码为 UTF-8。签名头可能含多个逗号分隔签名(密钥轮换),任一匹配即通过;忽略非 v1= 的未知版本;非十六进制候选跳过。Node 中 crypto.timingSafeEqual 长度不等会抛错,需先校验长度;Python 用 hmac.compare_digest 比较 bytes。官方 JS 客户端 @pagerduty/pdjs 与 Python 客户端 pdpyras 均无验证辅助函数,需自行实现;Go 客户端 webhookv3/webhookv3.go 是权威参考。

限制与注意:签名内容无时间戳与 nonce,不存在重放窗口,不要添加容忍时间检查。无握手或验证请求,密钥来自创建订阅的 API 响应。响应需在 5 秒内返回 2xx(Custom Incident Actions 为 16 秒),建议立即返回 202 并异步处理。除 429 外的 4xx 不重试,5xx、429、超时最多重试 48 小时;连续 3 次丢弃后订阅停用 24 小时。按 X-Webhook-Id 去重(至少一次投递)。55 KB 内保证投递与顺序,超过 256 KB 必被丢弃。event.agent 与 event.client 可能为 null。未识别的 event_type 需有默认分支且不得抛错。