更多: 快速开始
- 在网站上安装 TapCub
- 从 Google Analytics 4 或百度统计迁移
- 添加网站、App 或小程序
- WordPress 怎么安装 TapCub?
- Shopify 怎么安装 TapCub?
- TapCub 统计代码贴在哪里?
- 能用 Google Tag Manager 安装 TapCub 吗?
- React、Vue 或 Next.js 应用怎么统计?
- 怎么确认 TapCub 已经在收数据?
- TapCub 装好了为什么没有数据?
- 什么是站点,能添加几个?
- 站点该选哪个时区?
- 需要登记哪些域名?
- 怎么不让自己的访问进报表?
- 访客数为什么和 Google Analytics 4 对不上?
- 能同时跑 TapCub 和 Google Analytics 4 吗?
- GA4 的目标和事件怎么搬到 TapCub?
- 能把 GA4 的历史数据导入吗?
- Squarespace 怎么安装 TapCub?
- Wix 怎么安装 TapCub?
- TapCub 需要哪些内容安全策略(CSP)规则?
- 广告拦截器会拦住 TapCub 吗?
- 怎么从服务端上报事件?
- 怎么在 React 上安装 TapCub?
- 怎么在 Nuxt 上安装 TapCub?
- 怎么在 Vue 上安装 TapCub?
- 怎么在 Next.js 上安装 TapCub?
- 怎么为 TapCub 客服抓取 HAR 文件?
- 怎么创建和管理 API 密钥?
- 本分类全部文章
简短回答
向 https://api.pathclue.com/api/v1/track 发 POST,在 Authorization: Bearer 请求头里放一个带「服务端 Track」权限的密钥,请求体是 {"events": [ … ]},一次 1 到 1,000 个事件。接入期间加上 ?debug=1:服务端会校验每个事件并逐条返回结果,但不入库。
没有你所用语言的服务端 SDK,或者要从网关、任务调度器发送时,用 HTTP API。如果你的技术栈有 SDK(Node.js、Python、PHP、Java、Go),优先用 SDK:它已经处理了批量、重试和刷新。见从服务端发送事件。
开始之前
- 创建一个带「服务端 Track」(
track:write)权限的项目 API 密钥:创建和管理 API 密钥。 - 密钥只放在服务端,比如环境变量
TAPCUB_API_KEY。 - 页面浏览继续交给网站脚本。HTTP API 用来发业务事件(订单、付款、注册)和用户档案更新,不用来发浏览。
发送头一个事件
curl -X POST "https://api.pathclue.com/api/v1/track?debug=1" \
-H "Authorization: Bearer $TAPCUB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"events": [{
"type": "track",
"event": "purchase",
"login_id": "u_1001",
"insert_id": "ord_1001",
"time": 1759363200123,
"properties": { "revenue": 19.9, "currency": "USD" },
"context": { "platform": "server" }
}]
}'
调试模式的响应带 debug: true,results 里每个事件一条,附带警告。没有问题后去掉 ?debug=1 再发一次。事件会出现在 全端分析 › 数据 › 事件与属性。
事件字段
| 字段 | 说明 |
|---|---|
type | 默认 track,见下表 |
event | 事件名,1 到 100 个字符。track 必填 |
login_id / device_id | 谁做的。已登录用户用 login_id;匿名用户用 device_id(最长 72 个字符) |
time | Unix 毫秒。和服务器时间相差超过 72 小时会被改成当前时间,并返回警告 |
insert_id | 最长 36 个字符。幂等键:同一个 ID 只保留头一条。用订单号或支付号 |
session_id | 最长 32 个字符。不带时事件照常入库,但不计入会话指标 |
properties | 事件或档案属性 |
group | type:id,比如 company:acme,把事件挂到某个账户上 |
context | ip、user_agent、url、platform、country、lang,以及用于注册归因的 campaign |
事件类型
type | 用途 |
|---|---|
track | 记录一个业务事件(默认) |
track_signup | 记录注册,并把匿名设备关联到新的 login_id |
bind / unbind | 添加或移除邮箱、手机号等身份(放在 identities 里) |
profile_set、profile_set_once、profile_unset、profile_increment、profile_append | 更新用户档案属性 |
item_set / item_delete | 写入商品、文章等维度数据,带 item_type 和 item_id |
track_update / track_overwrite | 合并或替换已存事件的属性,必须带 insert_id |
group_set | 设置账户(group)的属性 |
例子:一个请求里同时更新档案、绑定邮箱。
{ "events": [
{ "type": "profile_set", "login_id": "u_1001", "properties": { "plan": "pro", "$name": "Ada" } },
{ "type": "bind", "login_id": "u_1001", "identities": { "email": "ada@example.com" } }
] }
邮箱或手机号如果不是 64 位十六进制的哈希值,服务端会先哈希再存储,这一条会返回警告 plaintext_identity_hashed。想完全不发送明文,就自己先做 SHA-256。
读懂响应
成功的调用返回 received、accepted、rejected、events(进入缓冲的行数)和 results。非调试模式下,results 只列出失败或有警告的条目:index 是它在 events 里的位置,ok: false 表示这一条没有入库。同一请求里的其他条目照常接收。
在地址参数里加 validation_behavior=enforce,任何产生警告的条目都会被拒绝,比如用来确保明文邮箱永远不会被接收。
错误、限制和重试
| 响应 | 含义 | 怎么办 |
|---|---|---|
400 VALIDATION | 请求体不符合格式 | 看 issues;整个请求被拒绝 |
401 NO_API_KEY / BAD_API_KEY | 密钥缺失、错误、已吊销或已过期 | 检查请求头和密钥 |
403 | 密钥没有「服务端 Track」权限 | 换一个带 track:write 的密钥 |
413 PAYLOAD_TOO_LARGE | 请求体超过 2 MB | 拆成更小的批次 |
429 RATE_LIMIT | 这个密钥每分钟超过 600 次请求 | 等 retryAfter 秒,再退避重试 |
5xx | 服务端错误 | 指数退避重试 |
重试规则:每次重试都保持同一个 insert_id,避免重复计数;指数退避,限制重试次数;尽量批量发送(每次最多 1,000 个事件),不要一个事件发一次请求。
相关
这篇回答解决你的问题了吗?
我们会根据反馈修改和补充这篇内容。
提交没有成功,请稍后再试。
谢谢你的反馈,我们会据此改进这篇内容。你已经反馈过这篇了,谢谢。