## Bot 设置 (`bot-settings`)

平台级 Bot 管理:按五类(搜索引擎 / 监控·工具 / 自动化工具 / 无头浏览器 / 恶意 Bot)与伪造爬虫设处置方式、验证方式、行为评分分段、保护接口与例外,仅管理员可改;无头浏览器、恶意 Bot、伪造爬虫处置与行为评分属付费功能 WAF 增强。站点在站点配置 bot 里逐类覆盖。

鉴权: 仅管理员 · 文档: https://www-demo.kuxitong.com/zh/docs/api/bot-settings

### GET `/api/v2/bot-settings`

获取 Bot 设置 · 鉴权: 仅管理员

```sh
curl "https://panel.example.com/api/v2/bot-settings" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### PUT `/api/v2/bot-settings`

修改 Bot 设置 · 鉴权: 仅管理员

请求体:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `actions` | object |  | 按类处置;缺省搜索引擎、监控·工具放行,自动化工具只记录,无头浏览器验证,恶意 Bot 与伪造爬虫拦截。headless、malicious、fake 属 WAF 增强。 |
| `challenge` | string |  | 处置为 challenge 时的验证方式:js 无感、slide 滑块、rotate 旋转图片、click 点选、captcha 字符(缺省 js)。 可选值: ["js","slide","rotate","click","captcha"] |
| `enabled` | boolean |  | 总开关;false = 所有站点都不做 Bot 判定。 |
| `enhanced` | string |  | WAF 增强判定档:full 已开通、readonly 到期只读缓冲内(License.readonly_days,缺省 7 天;增强项照常生效但只读)、basic 未开通或缓冲已过(无头浏览器、恶意 Bot、伪造爬虫按普通访客,不打分,设置保留);修改时忽略。 可选值: ["full","readonly","basic"] |
| `exceptions` | object[] |  | 例外:命中的请求不做 Bot 判定(path、cidr、ja4 至少一项,同一条里多项须同时满足)。 |
| `expected_updated_at` | string |  | 乐观锁:调用方读到的 updated_at(配置 node.global 的版本,与 CC/WAF 设置共用;读到为空用 1970-01-01T00:00:00Z)。与库里当前值不等则回 409 stale_version、不保存;不带则不检查。 |
| `protect` | string[] |  | 保护接口(路径前缀,如 /login,WAF 增强):没看过页面直接请求它们加分。 |
| `score` | object |  | 行为评分分段(WAF 增强,0–100):低于 js 放行;js 到 slide 无感验证;slide 到 block 按 kind 验证;达到 block 按恶意 Bot 处置。须 js < slide < block。通过验证的访客 30 分钟内分数清零。 |
| `updated_at` | string |  | 响应里的版本(node.global 配置键的 updated_at,没改过为空);修改时忽略。 |

```sh
curl -X PUT "https://panel.example.com/api/v2/bot-settings" \
  -H "X-API-Key: $GOCDN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"actions":{"automation":"log","fake":"block","headless":"challenge","malicious":"block","monitor":"allow","search":"allow"},"challenge":"js","enabled":true,"exceptions":[{"cidr":"198.51.100.0/24","site_ids":[]}],"protect":["/login"],"score":{"block":85,"js":30,"kind":"slide","slide":60}}'
```

Bot 设置对象:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `actions` | object |  | 按类处置;缺省搜索引擎、监控·工具放行,自动化工具只记录,无头浏览器验证,恶意 Bot 与伪造爬虫拦截。headless、malicious、fake 属 WAF 增强。 |
| `challenge` | string |  | 处置为 challenge 时的验证方式:js 无感、slide 滑块、rotate 旋转图片、click 点选、captcha 字符(缺省 js)。 可选值: ["js","slide","rotate","click","captcha"] |
| `enabled` | boolean |  | 总开关;false = 所有站点都不做 Bot 判定。 |
| `enhanced` | string |  | WAF 增强判定档:full 已开通、readonly 到期只读缓冲内(License.readonly_days,缺省 7 天;增强项照常生效但只读)、basic 未开通或缓冲已过(无头浏览器、恶意 Bot、伪造爬虫按普通访客,不打分,设置保留);修改时忽略。 可选值: ["full","readonly","basic"] (只读) |
| `exceptions` | object[] |  | 例外:命中的请求不做 Bot 判定(path、cidr、ja4 至少一项,同一条里多项须同时满足)。 |
| `expected_updated_at` | string |  | 乐观锁:调用方读到的 updated_at(配置 node.global 的版本,与 CC/WAF 设置共用;读到为空用 1970-01-01T00:00:00Z)。与库里当前值不等则回 409 stale_version、不保存;不带则不检查。 |
| `protect` | string[] |  | 保护接口(路径前缀,如 /login,WAF 增强):没看过页面直接请求它们加分。 |
| `score` | object |  | 行为评分分段(WAF 增强,0–100):低于 js 放行;js 到 slide 无感验证;slide 到 block 按 kind 验证;达到 block 按恶意 Bot 处置。须 js < slide < block。通过验证的访客 30 分钟内分数清零。 |
| `updated_at` | string |  | 响应里的版本(node.global 配置键的 updated_at,没改过为空);修改时忽略。 (只读) |
