用途:接收并可靠处理 HubSpot Webhook 事件,面向生产规模而非首次接入演示。
主要能力:1) HMAC-SHA256 签名校验,基于 client secret、HTTP 方法、完整 URI、原始请求体与 X-HubSpot-Request-Timestamp 计算,并做 5 分钟时间窗校验与常量时间比较;2) Redis SET NX 去重,以 eventId 为键、24 小时 TTL 作为幂等闸门;3) 立即返回 200 并将批次入队异步处理,避免 5 秒超时引发重试风暴;4) 死信队列与重放,处理耗尽重试的永久失败事件;5) 属性变更顺序保护,按 occurredAt 比较避免旧值覆盖新值;6) 列表成员订阅与作用域说明。
必要用法:需 Node.js 18+ 或 Python 3.10+、Express 4.x、Redis 6+、消息队列(BullMQ/RabbitMQ/SQS),并设置 HUBSPOT_CLIENT_SECRET。Webhook 路由必须使用 express.raw() 保留原始请求体,不能用 express.json(),否则签名校验失败。订阅注册示例:curl -X POST "https://api.hubapi.com/webhooks/v3/{appId}/subscriptions" -H "Authorization: Bearer $HUBSPOT_ACCESS_TOKEN" -H "Content-Type: application/json" -d '{"eventType": "contact.propertyChange", "propertyName": "lifecyclestage", "active": true}'。
适用场景:高并发、需幂等与可恢复的 HubSpot 集成。
限制:HubSpot 无重放 API,超过 3 天重试窗口的事件永久丢失;列表成员变更需单独订阅与 crm.lists.read 作用域,且 HubSpot 未直接暴露 list.membershipChange 事件类型。