Webhook 事件

开放平台在关键业务事件发生时,向合作方配置的 Webhook URL 推送实时通知。 合作方无需轮询,即可第一时间感知用户行为变化。

Webhook HTTP 投递服务正在开发中,预计近期上线。以下为规格预览,接口和事件格式在正式发布前可能调整。

概述

Webhook 采用 HTTP POST 方式推送,请求体为 JSON 格式。 平台期望合作方服务在 5 秒内返回 HTTP 200, 否则视为推送失败并触发重试。

配置 Webhook

在控制台「应用管理 → Webhook 设置」中配置:

  • Endpoint URL:接收推送的 HTTPS 地址(需支持 TLS 1.2+)
  • 订阅事件:选择需要接收的事件类型
  • 签名密钥:平台自动生成,用于验证推送来源

事件列表

事件名触发时机
user.profile.updated用户基础信息变更(PATCH 接口调用成功)
user.family_group.created家庭组新增或更新
user.family_group.deleted家庭组解散(组内成员已级联软删)
user.family_member.created家庭成员新增
user.family_member.updated家庭成员信息更新
user.family_member.deleted家庭成员删除
health.station.appointment.confirmed预约成功
health.station.appointment.cancelled预约取消
health.station.checkin.completed用户到站核验成功,检测开始
health.daily_report.completed健康日报 AI 解读完成
benefit_card.activated权益卡激活
benefit_card.exhausted权益卡次数耗尽

请求体格式

{
  "event": "health.daily_report.completed",
  "event_id": "evt_xxxxxxxxxxxx",           // 全局唯一事件 ID,可用于幂等处理
  "app_id": "100023",
  "timestamp": "2026-04-01T10:30:00+08:00",
  "data": {
    // 事件相关业务数据,因事件类型而异
    "report_no": "DR20260401001",
    "open_user_id": 10086,
    "family_member_id": 3001,
    "ai_status": "completed"
  }
}

签名验证

平台在每次推送时附带 X-Webhook-Signature Header, 用于验证请求来自晓葆平台(防止伪造):

X-Webhook-Signature: sha256=<hmac_sha256_hex>

验证方式:

// PHP 示例
$body       = file_get_contents("php://input");
$sigHeader  = $_SERVER["HTTP_X_WEBHOOK_SIGNATURE"] ?? "";
$expected   = "sha256=" . hash_hmac("sha256", $body, $webhookSecret);

if (!hash_equals($expected, $sigHeader)) {
    http_response_code(401);
    exit("Signature mismatch");
}
必须使用 hash_equals(时间恒定比较)而非 === 进行签名比对, 防止时序攻击。

重试机制

  • 合作方服务需在 5 秒内返回 HTTP 2xx,否则视为失败
  • 失败后按指数退避重试:5s → 30s → 2min → 10min → 30min,共 5 次
  • 5 次全部失败后标记为死信,可在控制台手动重新投递
  • 合作方应使用 event_id 做幂等处理,避免重试导致重复执行

即将上线

  • Webhook 调试工具(控制台内直接测试推送)
  • 事件日志查询(按时间/事件类型查询历史推送记录)
  • 手动重推(针对死信事件)