跳到主要内容

点击 Webhook

NUXT_WEBHOOK_URL 设为 HTTP 或 HTTPS 地址,即可为每次计入访问统计的点击发送尽力投递 Webhook。生产环境强烈建议使用 HTTPS。空值会禁用投递;被 NUXT_DISABLE_BOT_ACCESS_LOG 排除的机器人点击也不会发送 Webhook。

签名密钥

NUXT_WEBHOOK_SECRET 是可选项。它必须以 whsec_ 开头,后缀是 24–64 字节 HMAC 密钥的 Base64 编码。可用以下命令生成 32 字节密钥:

sh
printf 'whsec_%s\n' "$(openssl rand -base64 32)"

每个请求都包含 webhook-idwebhook-timestamp。签名请求还包含 webhook-signature: v1,<base64>;其值使用解码后的密钥后缀,对 <webhook-id>.<webhook-timestamp>.<raw-body> 执行 HMAC-SHA256 得到。请在解析 JSON 前使用原始请求体验签。

非空但无效的密钥会导致投递失败,绝不会降级为无签名投递。不配置密钥时,请求未经认证且没有签名,不建议在不受信任的网络中使用。

载荷

Sink 发送 Dub 风格载荷:

json
{
  "id": "evt_...",
  "event": "link.clicked",
  "createdAt": "2026-07-11T12:00:00.000Z",
  "data": {
    "click": {
      "id": "clk_...",
      "timestamp": "2026-07-11T12:00:00.000Z",
      "country": "US",
      "region": "California",
      "city": "San Francisco",
      "device": "mobile",
      "browser": "Mobile Safari",
      "os": "iOS",
      "referer": "example.com"
    },
    "link": {
      "id": "link-id",
      "slug": "example"
    }
  }
}

位置字段保留 Cloudflare 提供的国家/地区代码、区域和城市原始值。device 优先使用解析出的设备类别,否则回退到设备型号。

投递与隐私

载荷不包含 IP 地址、坐标、完整 User-Agent、查询参数、密码和目标 URL。投递异步执行,超时为 10 秒,仅接受 2xx 响应,不跟随重定向,也不会重试。投递失败不会阻塞短链接重定向。