账户关联把 TRACIO 的设备级识别与你自己的用户概念连接起来。将内部账户 ID 作为 linkedId 传入,即可告诉 TRACIO 哪些 visitor ID 属于同一位已认证的用户——跨浏览器、跨设备、跨会话。
TRACIO 看到的每位访客都会获得一个设备级标识符(参见识别)。该标识符本身对你的用户一无所知,它只能认出再次到访的设备。
linkedId 弥合了这一差距:它是当前已认证用户的 accountId,随常规识别请求一并发送。当两个或更多 visitor ID 共享同一个 linkedId 时,TRACIO 会把它们关联为一个账户,从而支撑面板中的 Connections 页面、跨设备身份,以及账户接管(ATO)的行为漂移检测——参见你将获得什么。
没有 linkedId,TRACIO 只能看到匿名设备,无法按账户对它们分组。
账户关联是在你现有集成之上新增的一个参数,无需后端代码。
在现有 script 标签中,于公钥旁添加 lid:
<!-- 之前 --><script src="https://edge.tracio.ai/s.js?k=PUBLIC_KEY" async></script>
<!-- 之后(仅在用户完成认证后) --><script src="https://edge.tracio.ai/s.js?k=PUBLIC_KEY&lid=ACCOUNT_ID" async></script>如果使用 @tracio/sdk,请在配置中传入 linkedId:
import { Tracio } from "@tracio/sdk"
const tracio = Tracio.init({ publicKey: "5ca175fc...", linkedId: user.id,})linkedId 只在 agent 加载的那一刻读取一次。如果你的 script 标签或 Tracio.init() 调用在登录之前执行,就需要确保在认证状态确定后把 linkedId 带上:
lid=ACCOUNT_ID 重新插入标签(或重新加载页面)。publicKey 再次调用 Tracio.init() 会返回已有实例并忽略新配置,不会读取 linkedId。请先调用 tracio.destroy(),再执行 Tracio.init({ publicKey, linkedId: user.id })。或者把首次 Tracio.init() 调用推迟到用户认证状态确定之后。linkedId。切勿为访客或匿名访问者发送,也切勿退回到 "guest"、"anonymous" 这类占位值——共用的占位值会把毫无关联的人合并进同一个账户。linkedId 会在 256 字节处截断。普通 ID 远低于这一上限;请勿传入大体积令牌(例如完整的 JWT)。linkedId 与工作区的其他事件数据一同存储,并在面板的 Connections 页面上作为账户标识符原样展示给你——展示时不做哈希或匿名化处理,因为你需要认出这个账户。
在内部,TRACIO 的跨设备匹配(fanout 检测、ATO 行为基线)使用的是基于 linkedId 计算、按环境隔离的单向哈希,从不使用原始值。因此匹配逻辑不会依赖明文值,也不会在你自己的面板和 Webhook 之外泄露它。
这正是 linkedId 应当是一个不透明内部 ID、而非邮箱地址或姓名的原因(参见规则):它会作为账户标识符呈现给你,因此不应携带超出你已有信息范围的个人数据。
s.js 的请求(或 agent 的识别请求)同时包含 k= 和 lid= 参数。linkedId 接入之前,该页面会显示一条设置提示;首个携带 lid= 的请求到达后几分钟内,提示即会消失。一旦 linkedId 开始上报,TRACIO 将解锁: