用一条签名 Webhook
把报告送到任何地方

把 BugCapturer 指向你拥有的任意接口,每份报告都会以带签名、带版本号的 JSON 送达 —— 适合自有服务、消息队列与内部工具。

稳定且带版本号的结构

以下结构在 v1 内保证稳定:只会新增字段,不会静默改名。

字段类型说明
eventstring事件名:share.created(报告)或 test(测试按钮)
schema_versionnumber结构版本号,当前为 1 —— 解析前请先校验
share.report_urlstring指向完整报告的公开链接
report.console_errorsarray控制台错误正文:message 与 source,最多 30 条
report.network_errorsarray失败请求:method、url、status,最多 30 条
report.*_errors_countnumber错误条数 —— 与上面两个数组等长
reporterobject站点传入的身份(name / email / uid),匿名时为空串

先验证,再信任

每次请求都用你持有的密钥签名,接口可以拒绝任何伪造请求。

签名请求头x-bugcapturer-signature
算法对原始请求体计算 HMAC-SHA256
密钥创建集成时仅展示一次
比较方式请使用恒定时间比较
verify.js
const crypto = require('crypto');

const expected = crypto
  .createHmac('sha256', process.env.BC_WEBHOOK_SECRET)
  .update(rawBody)
  .digest('hex');

const received = req.headers['x-bugcapturer-signature'];
crypto.timingSafeEqual(
  Buffer.from(expected),
  Buffer.from(received)
);

重试与投递日志

Webhook 失败往往源于无聊的原因:发版、重启、网络抖动。BugCapturer 预设了这些情况。

🔁

自动重试

投递失败会按退避策略重试,之后才记录为失败。

⏸️

自动停用

接口持续失败时会自动暂停,并邮件通知你。

🧾

投递日志

每次尝试与响应都会被记录,排查时不必靠猜。

🧯

手动补发

接口恢复后,可手动重新投递失败的记录。