Webhook 重试次数没有 header 怎么判断第几次
现象#
想在 handler 里按重试次数降级,翻遍请求头只有 Topic、Webhook-Id、Event-Id、Triggered-At,找不到 X-Shopify-Retry-Count 这类计数字段。
原因#
- 投递头里没有重试次数字段,重试沿用同一个 X-Shopify-Webhook-Id,从头里看不出第几次
- 同一事件被多个订阅投递时 Webhook-Id 各不相同,只有 Event-Id 保持一致
- 次数只出现在 Dev Dashboard 投递详情的 Delivery attempt 里,不随请求下发
- 拿 Triggered-At 与当前时间差估算次数,间隔递增且受时钟影响,只能当参考
处理步骤#
- 落库
X-Shopify-Webhook-Id与X-Shopify-Event-Id,按前者统计到达次数 - 同
webhook_id第 2 次到达时降日志级别,避免重试刷爆告警 - 需要精确次数时去
Logs打开该投递看Delivery attempt - 不要读 header 里不存在的字段做分支,undefined 会静默走错逻辑
- 多订阅场景用 Event-Id 聚合,能看出一次商家操作触发了几条投递
验收标准#
同一条事件重试时 webhook_id 不变、到达计数递增,多订阅时 event_id 相同而 webhook_id 不同。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。