服务器状态
加载中…
| 账号 | 登录用户 | 在线 | 余额 | 状态 | 滚球耗时 请求 / 解析 | 今日耗时 请求 / 解析 | 出口/代理 | 错误 | 错误次数 |
|---|
| ID | 名称 | 账号 | 用途 | 绑定IP | 代理 | 状态 | 操作 |
|---|
| 类型 | 主机:端口 | 用户名 | 密码 | 占用 | 状态 | 操作 |
|---|
| 团队分组 | 用户 | 归属/占用 | 类型 | 主机:端口 | 用户名 | 密码 | 归属地 | 到期 | 状态 | 操作 |
|---|
供 8050 登录页/设置选择的中心入口;各线路应反代到同一套 8030。公开接口仅返回已启用项。
| ID | 名称 | URL | 排序 | 启用 | 备注 | 操作 |
|---|
| ID | 显示名 | 登录名 | 用户 ID | 团队分组 | 备注 | 在线 | 客户端版本 | VIP 到期 | 登录 IP | 状态 | 紧急重启 | 操作 |
|---|
| 平台 | 状态 | 版本 | 文件名 | 大小 | SHA256 | 运行时哈希 | 上传时间 | 操作 |
|---|
| ID | 账号 | 域名 | 归属用户 | 共享用户 | 状态 | 操作 |
|---|
| 时间 | 团队 | 用户 | 投注人 | 账号 | 注单号 | 状态 | 类型 | 金额 | 投注比分 | 赛果 | 输赢 | 联赛 | 队伍 | 盘口 | 赔率 | GID |
|---|
按 Token 限制外放接口的调用速度,超出返回 429。保存后立即生效,无需重启服务。
加载中…
快速开始
三步接入:①在「外放 API」页生成 Token 并写入服务端环境变量 ODDS_BET_ALERT_TOKEN;②按下面的示例带上 Token 发起请求;③按「调用限速」一节控制请求频率。接口均为只读 GET,返回 application/json; charset=utf-8(SSE 为 text/event-stream)。
curl -s -H "Authorization: Bearer {{TOKEN}}" \
"{{BASE}}/api/external/bet-alerts?since=0&limit=50"
<token>,说明服务端尚未配置 Token。鉴权
所有外放接口共用同一个 Token。服务端按下表顺序取值,取到第一个非空的就不再往下找。
| 传法 | 优先级 | 说明 |
|---|---|---|
| Authorization: Bearer <token> | 1 | 推荐。标准请求头,不会出现在访问日志的 URL 里。 |
| X-Bet-Alert-Token: <token> | 2 | 自定义请求头,适合不便改 Authorization 的网关。 |
| ?token=<token> | 3 | 查询参数。SSE 必须用这种,因为浏览器 EventSource 不支持自定义请求头。 |
Token 有两种形式,效果完全等价:
| 形式 | 说明 |
|---|---|
| 明文 | 与服务端 ODDS_BET_ALERT_TOKEN 完全一致的原文。 |
| e1. 加密串 | 用 HG_TOKEN_ENCRYPT_KEY 加密后的密文,形如 e1.xxxx。给外部对接方用这种,避免明文四处流传。 |
调用限速
按 Token 计数(不是按 IP),所有外放接口共享同一个配额桶。当前配置:每分钟 — 次,突发 — 次。可在「外放 API」页随时调整,保存即生效。
| 概念 | 含义 |
|---|---|
| 每分钟次数 | 配额恢复速率。例如设为 60,即平均每秒恢复 1 次可用额度。 |
| 突发值 | 桶容量,允许短时间内连续打多少次。长时间闲置后额度攒满到这个上限为止。 |
| SSE 计数方式 | 只在建立连接时扣 1 次额度,连上之后持续推送不再计数。频繁断线重连才会打满配额。 |
超出配额返回 429,带 Retry-After: 60 响应头,响应体:
{"ok":false,"error":"rate_limited","rate_per_min":60,"burst":20}
GET新注单实时推送(SSE)
/api/external/bet-alerts/stream?token=<token>
与控制台新注单弹窗同源的实时流。Content-Type 为 text/event-stream,事件名固定为 bet_alert,data 为一条 JSON。
| 字段 | 说明 |
|---|---|
| alert_id | 自增告警 id。断线后用它作为轮询接口的 since 补齐断连期间漏掉的告警。 |
| at_ms | 告警产生时间,毫秒时间戳。 |
| event | 注单详情对象,字段见「注单轮询」一节。 |
const es = new EventSource("{{BASE}}/api/external/bet-alerts/stream?token={{TOKEN}}");
let lastId = 0;
es.addEventListener("bet_alert", (e) => {
const rec = JSON.parse(e.data);
lastId = rec.alert_id;
console.log(rec.event.wager_id, rec.event.stake, rec.event.market);
});
es.onerror = () => {
// EventSource 会自动重连;重连成功后用 lastId 调轮询接口补齐断连期间的告警
console.warn("SSE 断开,最后收到的 alert_id =", lastId);
};
?token= 传参。请优先使用 e1. 加密串,避免明文 Token 落进访问日志。GET新注单轮询
/api/external/bet-alerts?since=0&limit=50
SSE 的轮询替代方案,也用于断线后补齐历史告警。服务端只保留最近若干条告警,长时间不拉可能丢失,建议轮询间隔不超过一分钟。
| 参数 | 默认 | 说明 |
|---|---|---|
| since | 0 | 游标,只返回 alert_id 大于该值的告警。首次传 0,之后传上一次返回的 next_since。 |
| limit | 不限 | 本次最多返回多少条。 |
响应为 {"ok":true,"items":[…],"next_since":N}。items[].event 的字段:
| 字段 | 说明 |
|---|---|
| action | 事件类型:new 新注单、status 状态变更、settle 结算。 |
| id | 系统内部注单记录 id。 |
| wager_id | 皇冠注单号,去重的主依据。 |
| status | 注单状态,外放只推送 confirmed。 |
| stake | 投注金额,数字类型。 |
| odds | 成交赔率,字符串。 |
| gid | 关联赛事 id。 |
| league / teams | 联赛名与对阵双方。 |
| market | 玩法描述,如「全场大小 2.5 大」。 |
| account_id / account_name | 下注所用的账号 id 与名称。 |
| user_id / user_name | 归属用户 id 与名称。 |
| placed_by | 实际操作下注的人。 |
| settle_text / win_gold / final_score | 结算文案、输赢金额、最终比分。仅结算类事件有值。 |
| created_at | 注单创建时间。 |
status=confirmed 且非结算的注单会触发告警;同一注单号、或同一「场次 + 玩法」组合在 24 小时内只推一次。account_name 与 user_name 等内部账号信息,与控制台弹窗一致。转发给第三方前请自行裁剪。curl -s -H "Authorization: Bearer {{TOKEN}}" \
"{{BASE}}/api/external/bet-alerts?since=0&limit=50"
错误码
| 状态码 | 含义 | 排查方向 |
|---|---|---|
| 400 | 参数缺失或非法 | 详情接口未带 gid 时返回 {"error":"missing_gid"}。 |
| 401 | Token 缺失或不正确 | 核对是否漏传 Token、明文与服务端不一致、或 e1. 串用的加密密钥不对。 |
| 404 | 赛事不存在 | gid 写错,或该场次已完场被清理。返回 {"error":"not_found"}。 |
| 405 | 请求方法不对 | 外放接口只接受 GET。 |
| 429 | 超出调用频率 | 按 Retry-After 退避后重试,或在「外放 API」页调高配额。 |
| 503 | 外放功能未启用 | 服务端没有配置 ODDS_BET_ALERT_TOKEN。在「外放 API」页生成 Token,写入环境变量后重启服务。 |
加载中…
| 时间 | 级别 | 类型 | IP | 用户 | 版本 | 次数 | 摘要 |
|---|
运维状态,非安全事件:internal keeper 请求未携带用户 Token 的来源。归零后才可设 ODDS_INTERNAL_REQUIRE_USER_TOKEN=1。
加载中…
| IP | 次数 | 最后出现 | 最后路径 |
|---|