SuperAPI AI 工具集

strava-webhooks

通用与其它

查看项目

更新于 10-15 22:14

技能介绍

用途:帮助开发者接收并验证 Strava Webhook Events API 推送,涵盖创建推送订阅、实现订阅校验握手、处理活动与运动员事件,以及检测运动员取消授权。

主要能力与关键机制:Strava 推送事件没有逐事件签名(无 HMAC 或共享密钥头),真实性只在订阅时通过一次 GET 握手建立。流程为:向 https://www.strava.com/api/v3/push_subscriptions POST client_id、client_secret、callback_url 和自选的 verify_token;Strava 随即以 hub.mode=subscribe、hub.challenge、hub.verify_token GET 回调地址;确认 verify_token 匹配后,需在 2 秒内返回 HTTP 200 与 JSON {"hub.challenge":"<回显值>"}。之后 Strava 向同一回调 POST 轻量事件(仅 object_id),须在 2 秒内以 200 确认,否则最多重试 3 次;完整活动或运动员数据需用 object_id 调 Strava REST API 获取。每个 API 应用仅允许一个订阅。

验证要点:事件本身无签名,安全边界是 GET 校验握手,需用时间安全比较比对 hub.verify_token,并回显 hub.challenge(键名需精确一致)。示例代码位于 examples/express/、examples/nextjs/、examples/fastapi/。

事件类型:以 object_type + aspect_type 标识。activity/create 为上传新活动;activity/update 为标题、类型或隐私变化;activity/delete 为删除活动;athlete/update 表示运动员取消授权(updates 为 {"authorized":"false"})。活动更新可能含 title、type、private,一次保存可能产生多个事件。事件载荷含 object_type、object_id、aspect_type、owner_id、subscription_id、event_time、updates。

环境变量:STRAVA_CLIENT_ID、STRAVA_CLIENT_SECRET、STRAVA_VERIFY_TOKEN、STRAVA_SUBSCRIPTION_ID(可选,用于过滤其他订阅的事件)。

本地开发:可用 npx hookdeck-cli listen 3000 strava --path /webhooks/strava 建立隧道,再用 curl 向 push_subscriptions 创建订阅以触发校验。

限制:无逐事件签名可验;2 秒内须确认否则重试;单应用仅一个订阅;需自行拉取完整数据。参考文档见 references/overview.md、references/setup.md、references/verification.md。