接口总览
| 能力 | 方法 | 路径 | 调用方 |
|---|---|---|---|
| 上报事件批次 | POST | /events | 客户站点代理 |
通用请求头
| Header | 必填 | 说明 |
|---|---|---|
Authorization: Bearer <site_token> | 是 | 站点服务端 token,不要暴露给浏览器 |
Content-Type: application/json | 是 | 请求体格式 |
Idempotency-Key | 建议 | 同一批事件重试时保持一致,长度 8-160 |
POST /events
一次最多上报 50 条事件。适合页面浏览、客服打开/关闭、按钮点击、表单提交等行为。Body 参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
events | array | 是 | 事件数组,1-50 条 |
events[].eventType | string | 是 | 事件类型,例如 page_view |
events[].visitorId | string | 建议 | 访客稳定 ID,同一访客应长期一致 |
events[].customerId | string | 否 | 客户站点自己的用户 ID |
events[].channel | string | 否 | 渠道,例如 web、chat |
events[].path | string | 否 | 页面路径,例如 /products |
events[].url | string | 否 | 完整 URL |
events[].title | string | 否 | 页面标题 |
events[].referrer | string | 否 | 来源页面 |
events[].eventData | object | 否 | 扩展数据,例如按钮名称、表单类型、会话 ID |
events[].createdAt | string | 否 | ISO 时间;不传时使用服务端接收时间 |
推荐事件类型
| 事件 | 说明 | 建议字段 |
|---|---|---|
page_view | 页面访问 | visitorId、path、url、title |
chat_opened | 打开客服窗口 | visitorId、path、eventData.conversationId |
chat_closed | 关闭客服窗口 | visitorId、eventData.conversationId |
cta_clicked | 点击关键按钮 | visitorId、path、eventData.label |
lead_submitted | 提交联系方式或询盘 | visitorId、eventData.formType |
请求示例
成功响应
响应字段
| 字段 | 说明 |
|---|---|
accepted | 成功接收的事件数量 |
rejected | 被拒收的事件数量 |
tracking | 当前站点事件追踪状态,可能是 enabled 或 disabled |
常见错误
| HTTP | 错误码 | 说明 | 处理建议 |
|---|---|---|---|
400 | INVALID_REQUEST | 事件为空、超过 50 条或字段格式错误 | 修正请求体后重试 |
401 | INVALID_TOKEN | token 无效 | 检查站点 token |
409 | IDEMPOTENCY_CONFLICT | 同一个幂等键被不同请求体复用 | 为新请求生成新的幂等键 |
429 | RATE_LIMITED | 请求过快 | 按 Retry-After 退避重试 |
实现要点
visitorId是串联会话、事件和线索的关键字段,建议保存在客户站点的一方 cookie 或本地存储中。- 客服相关事件建议把
conversationId放到eventData,便于 GrowthOS 关联行为路径。 - 事件接口可以批量上报,也可以低频实时上报;高流量站点建议本地聚合后批量提交。
- 表单、电话、邮箱等敏感字段只在业务确实需要时上报。
- 网络失败可以重试,但同一批事件要复用同一个
Idempotency-Key。