跳到正文
LinkProfit

转化与收入

把订单归因回产生它的那一次点击:带签名的点击标识、归因窗口、转化目标、服务端 API、浏览器脚本,以及向外部平台的转发。

更新于 2026年8月14日

转化跟踪把点击和它带来的钱之间的闭环合上。跳转器在每次跳转时签发一个带签名的标识;你的服务器或你的致谢页面把它连同订单一起送回来;你原本就在看的每一份明细,都会多出一列收入。

转化是付费功能。当套餐不包含它时,跳转器会彻底停止签发标识,两条接收通道也都会以套餐限制为由拒收转化。

点击标识

每次跳转时,worker 都会签发一个令牌,并且:

  • 按你自己选定的参数名(默认是 lp_cid)把它追加到目标地址上;
  • 把它写入你的跳转域名下的第一方 cookie,有效期 90 天。

正是这个 cookie 让归因能在那些已经不再接受任何第三方内容的浏览器里活下来——它由你自己的域名写入,而不是由我们的域名写入。

令牌带有签名,并且与租户绑定:工作区和合作伙伴的标识都属于签名载荷的一部分,因此在某个客户的链接上签发的令牌,到了另一个客户的工作区里会像伪造品一样被拒绝。它不携带个人数据——只有点击发生的时刻、链接、分流版本、国家/地区、设备类别、流量来源,以及一个表示可疑流量的标志。

参数名和签发开关都在转化 → 设置里。改动其中任何一个,都会立即重写每一条链接的缓存配置。

归因窗口

晚于窗口到达的转化会以 attribution_expired 被拒收,这个代码与 invalid_click_id 不同,因此集成方不必靠猜就能分清「来得太晚」和「标识有问题」。窗口是按工作区设置的。

转化目标

转化目标就是一个具名的结果:purchasesignuptrial。转化目标可以带上默认金额和货币,在转化到达却没有带金额时使用。如果某笔转化引用了尚不存在的转化目标,它会在首次使用时被创建,因此集成不必在两个地方分别配置。

发送转化

从你的服务器发送

curl -X POST https://api.linkprofit.com/v1/conversions \
  -H "Authorization: Bearer lp_live_..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-10241" \
  -d '{
    "click_id": "1.eyJ1aWQiOiJ...",
    "goal": "purchase",
    "order_id": "10241",
    "amount_cents": 4999,
    "currency": "usd"
  }'

这个密钥需要 conversions:write 权限范围。金额是最小货币单位的整数——分、便士、戈比。像 49.99 这样的金额会被拒绝并指明是哪个字段,而不是被悄悄四舍五入,因为在支付路径中途临时发明的取整规则,正是收入报表和账单悄然对不上的原因。

从浏览器发送

worker 会从你自己的跳转域名上提供一段很小的脚本:

<script src="https://go.example.com/cv.js" defer></script>
<script>
  window.lpConversion({ goal: 'purchase', orderId: '10241', amountCents: 4999, currency: 'usd' });
</script>

脚本会从地址里读取标识,或者从第一方 cookie 中读取。这条链路上的任何一环都不存在第三方主机,这既是一条隐私特性,也是一条白标特性:你客户的页面不会加载任何提到平台的东西。

重复

去重是一次原子插入,而不是先读后写。同一个 order_id 被反复投递时只会产生一笔转化,并在返回时标记为重复——正是这一点让重试失败的 webhook 成为一件安全而非危险的事。

可疑转化

分类器的判定结果就装在令牌里,因此归因到数据中心或代理的转化,在记录下来的那一刻就会被标记为可疑。它会在报告里作为一个独立的分段出现,而不是被删掉或悄悄混进去。「两百笔转化」和「两百笔转化,其中四十笔来自同一个主机托管地址段、而且都在一小时之内」是两个不同的事实。

转化之后去往哪里

  • 一个带签名的 conversion.created webhook 事件会经由常规的 webhook 机制发出:队列、签名、重试计划、补投 cron。
  • 已配置的广告平台集成会通过投递队列收到这笔转化;队列里的尝试次数计数器在发起外部调用之前就已递增,退避策略有文档说明,用尽之后打上放弃标记,而不是无限重试。

每月额度

套餐可以限制每个自然月接收的转化数量,按 UTC 计算。超过上限后,接收通道返回 quota_exceeded——这是一个不同于套餐限制的代码,因此「你的套餐里没有这项功能」和「本月额度已用完」之间的区别,不必开工单就能看清楚。