Skip to content

裁决字段参考 ​

每一份反欺诈裁决——无论是通过 Web SDK 的 onVerdict 回调送达, 还是从数据 API 拉取——都是同一个 BotVerdict 对象。本页说明每个字段 及其处理方式。

json
{
  "is_bot": false,
  "score": 18,
  "level": "low",
  "action": "record_only",
  "reasons": [],
  "consistency": { "ok": true },
  "degraded": false,
  "verdict_id": "vd_3f9c0a7e5b1d4c2a9e8f7b6a",
  "verdict_token": "vt1.eyJ2Ijoi...",
  "verdict_token_exp": 1767225600
}

字段 ​

字段类型说明
is_botboolean核心裁决。true = 该次访问被判定为自动化或无效流量;false = 看起来像真人。这是大多数接入会据以分支的关键字段。
scorenumber (0–100)访问的可疑程度。越高越可疑。 用它设置你自己的阈值——例如剔除超过某个你选定阈值的访问。具体数值由我们的风控模型产出,不应被反向推导。
level枚举score 的粗分档:low、medium、high、critical。当你想用分桶而非原始数值时很方便。
action枚举我们对该次访问的建议处理:record_only、challenge、flag 或 deny。见下文。遇到不认识的值请按 flag 处理,这样以后新增取值时你的接入也不会出错。
reasonsstring[]最多三个原因大类,说明裁决为何有风险。干净访问为空数组。
consistency对象一个跨信号一致性结论。读取 consistency.ok(布尔值):true = 该次访问的各信号如预期般吻合;false = 有信号对不上,值得额外审视。该结论背后的内部拆分不对外暴露。
degradedboolean当裁决无法完整计算(服务不可达、出错等)而返回了保守兜底值时为 true。请把降级裁决当作"未知"而非"干净"。
verdict_idstring本次裁决的唯一 ID。之后可用它通过数据 API 查询这条裁决。
verdict_tokenstring本次裁决的签名凭证,供你的服务端校验。见服务端校验。兜底裁决不带此字段。
verdict_token_expnumberverdict_token 的过期时间(Unix 秒)。

action —— 该怎么做 ​

action 是我们的建议;最终决定权仍在你手里。

action含义该怎么做
record_only访问看起来正常。照常放行。仅记录裁决用于报表与对账。
flag可疑但未确凿。继续展示页面,但把该次访问标为低质量——从你的指标中剔除,从下游流程里切出,并在你自己的决策中纳入权重(例如转化归因或你对该次访问的信任度)。
challenge达到升级门槛(默认高风险)。在把访客当作真人之前要求其额外做一次验证。应用的处理动作设为 challenge 时,Web SDK 会自动弹出验证(见升级验证);否则应用你自己的拦截。
deny命中了拦截规则,例如黑名单,或你配置为拦截的策略。不要提供受保护的内容,也不会弹验证码。旧版 SDK 会原样透传这个值,请在 onVerdict 里处理。

可配置的处理动作 ​

对于高风险访问,action 返回什么是按应用配置的,在控制台的应用详情里设置。 裁决是服务端权威的:只有当访问达到所设置的风险门槛(默认高风险,严格模式为中风险,见下文)且你的应用配置了对应动作时, action 才会是 challenge 或 flag。未达门槛时,裁决始终为 record_only。

配置高风险时返回的 action含义
record_only(默认)record_only仅记录。裁决被记录用于报表与对账;不向访客提出任何要求。
challengechallenge触发验证码复验。Web SDK 会弹出一次验证码(样式由 SDK 的 challengeConfig 控制)。
flagflag标记该次访问。裁决携带 flag;由你的集成自行决定如何处理(拦截 / 切分 / 处理)。

因为决策在服务端完成,你的代码可以保持简单:在 onVerdict 里读取 verdict.action 并据此处理——放行、拦截,或让 SDK 弹出验证码。你无需自己重新推导风险。

升级验证门槛与题型 ​

处理动作设为 challenge 时,控制台同一位置还会出现两项设置:

  • 升级验证门槛:达到哪个风险等级就返回所配置的动作。默认为高风险及以上。严格模式下中风险访问也会触发:能拦下更多爬虫和 AI 工具,但会有更多真实访客看到验证码。
  • 升级验证题型:升级时至少使用的验证码题型,可选滑块(默认)、旋转、点选、3D 点选。题型越强,自动化和 AI 工具越难通过。

escalate_result ​

在托管验证码升级跑过之后出现——即 action 为 challenge 且 SDK 弹了验证码时。没有升级时为 null。同时通过 onEscalateDone(passed, detail) 回调下发。

字段说明
passed访客是否通过了验证码
token验证码 pass token —— 请在服务端校验它确认真的通过(不要只信客户端的 passed)
challenge_id验证码 challenge id
cid本次升级关联的点击 id(若本次带了 click token)

reasons —— 原因大类 ​

reasons 用大类说明一次访问为什么被判为有风险。最多三个,按强弱排序。不会包含具体信号或分数构成。

大类含义
automation有自动化工具的迹象,例如脚本驱动或无头浏览器。
network网络有风险或前后不一致,例如代理、机房或匿名网络,或命中了被封禁的地址。
abnormal_requests请求模式异常,例如请求过于频繁、多次失败,或有自动化流量的历史记录。
device设备或其运行环境不可信,或无法识别。
behavior访问行为不像真人,例如完全没有交互,或链接被重复使用。
other其他原因,包括你自己配置的规则和兜底裁决。

这个列表用于报表和解释,不建议在它上面写规则;分支判断请用 is_bot、action 或 score。以后可能新增大类。

服务端校验 ​

页面拿到的任何数据都可能被访客篡改。如果你要做内容墙(只让真人看到某个页面、接口返回或下载),不要信任浏览器里的 is_bot,而是把 verdict_token 交给你自己的服务端校验:

  1. 在 onVerdict 里把 verdict.verdict_token 发给你的后端,例如放在请求头或 Cookie 里。
  2. 后端带上 token 和访客 IP 调用 POST /v1/bot/verdict/verify。
  3. 只有响应为 valid: true、且裁决符合你的要求(例如 verdict.is_bot 为 false)时才返回内容。

token 绑定你的应用、本次裁决和访客所在网络,有效期较短(默认 10 分钟)。默认可以重复校验,一个 token 可以覆盖一次访问中的多次页面请求。需要只用一次的场景(例如提交表单)请传 consume: true。

如果访客随后通过了升级验证码,token 里仍是原始裁决。请同时在服务端校验 escalate_result 里的验证码通过凭证。

level 与 score ​

level 只是 score 的分档,为方便而提供:

level何时使用
low当作干净流量。
medium临界——记录无妨,可考虑从高价值漏斗中剔除。
high强可疑——标记并剔除。
critical几乎确定无效——标记/剔除,并最好触发升级验证。

选择适合你流水线的字段

  • 简单是/否拦截 → 用 is_bot 分支。
  • 按建议驱动 → 用 action 分支。
  • 自定义阈值 → 用 score 分支(或用 level 分桶)。

处理降级裁决 ​

当 degraded 为 true 时,裁决未被完整计算。兜底值刻意保守 (is_bot: false、action: record_only),因此真实用户绝不会被误拦。 在报表里请把这类访问当作未知,而不要计入"确认干净"的流量。

下一步 ​

  • Web SDK —— 在你的页面接收裁决
  • 数据 API —— 服务端拉取裁决与统计

MIT-licensed examples · CaptchaLa is operated independently