首页 产品 为什么选 OCTO 解决方案 文档 关于
文档中心 / API 与集成 / Bot API 概览
← 返回文档中心

Bot API 概览

OCTO 文档中心 · API 与集成

  • source-repos/octo-server/modules/bot_api/bot_api.go(路由注册行 410-468,Go 源码路由事实)
  • source-repos/octo-server/modules/bot_api/auth.go(register/heartbeat/auth 逻辑)
  • source-repos/octo-server/modules/bot_api/events.go(事件轮询)
  • source-repos/octo-server/modules/bot_api/card_profile.go(卡片能力查询)
  • source-repos/octo-server/modules/bot_api/file.go(文件上传/预签名)
  • source-repos/octo-server/modules/bot_api/groups.go(群组/成员)
  • 00-inbox/product-bot-answers/2026-09-19-openclaw-channel-octo事件机制回答.md(message_id=2101009604581167104)
  • 00-inbox/product-bot-answers/2026-09-19-openclaw-channel-octo交付前profile配置检查清单回答.md(message_id=2101150063836172288)
  • 00-inbox/product-bot-answers/2026-09-20-P0-API鉴权-Q1回答.md(产品管家Q1:API体系全貌,2026-09-20)
  • 01-product/模块说明/文档协同Docs模块.md v0.2(文档评论@Mention链路)
  • 01-product/模块说明/Drive网盘模块.md v0.2(Drive Bot API待确认)
  • 01-product/模块说明/语音Speech模块.md v0.3(语音纠错API)
  • 01-product/模块说明/智能摘要Summary模块.md v0.3(Agent触发总结PR#850)
  • 01-product/模块说明/全文搜索Search模块.md v0.3(Bot OBO搜索)
  • 售前交付/openclaw-channel-octo卡片能力正式口径-v1.0.md(v1.0,卡片API边界)

Bot API 概览 v0.4

状态:`draft` / v0.3。 端点列表来自 `modules/bot_api/bot_api.go` 路由注册源码 + 产品管家 Q1-Q4(2026-09-20)API体系全貌确认。API体系、鉴权token、消息发送、群/Thread/成员/文件管理边界均已补完。

0. OCTO 对外 API 体系全貌(产品管家 Q1,2026-09-20)

API类别 端点前缀 鉴权方式 状态 面向调用方 稳定性
Bot API /v1/bot/* Bearer Bot Token(register/heartbeat 免鉴权) 已开放 Bot/Agent(含OpenClaw插件) 主推、对外首选
OBO API /v1/obo/* + /v1/bot/obo-grant 用户登录态授权 grant+scope 已开放 Bot经用户授权后代发 GA
OpenAPI(OAuth) /v1/openapi/* authcode→access_token(OAuth授权码流) 已开放 第三方应用以用户身份接入 GA
Incoming Webhook /v1/groups/{g}/incoming-webhooks/* + push端/v1/.../{webhook_id}/{token}/{github,gitlab,wecom,feishu,octo,multica} webhook_id+token 已开放 外部系统单向推消息进群/子区 GA
Webhook(出站) /v1/webhook、/v2/webhook、/v1/webhook/github、/v1/webhook/message/notify HMAC-SHA256签名 已开放 接收IM事件回调的外部服务 GA
OIDC /v1/auth/oidc/{provider}/* OAuth/OIDC授权码 视部署配置(disabled时返回404) 用户SSO 按配置
AgentMail Gateway /v1/mail-gateway/*(反代到上游/webapi/v0) 标准登录UID+Space校验 已开放 agentmail网关代理 内部/网关
Management/Admin 无独立前缀,复用 /v1/*(前端经 /api 代理,nginx剥前缀);Marketplace独立 /market/api/v1/* Manager登录session/token(axios+401拦截) 已开放(面向管理后台自身) octo-admin管理控制台 未作为独立对外契约发布
  • 需要「以用户身份」代操作 → OBO(Bot侧)或 OpenAPI OAuth(第三方应用侧)
  • 外部系统单向推消息进群 → Incoming Webhook
  • 接收IM事件回调 → Webhook(出站)
  • Management/Admin API:没有独立 /admin 前缀,octo-admin前端直接调 /v1/*(经 /api 代理),鉴权是manager登录session(非长期静态token);唯一独立前缀是marketplace(/market/api/v1/*→独立marketplace服务:8092)
  • 售前口径:Admin API 未作为对外稳定契约发布,管理操作走后台UI,程序化对接首选 Bot API;技术上可用manager会话调/v1/*管理端点,但无独立CI/脚本token机制
  • OpenAPI/Swagger spec:octo-server仓库没有 openapi.yaml/json/swagger规范文件;「openapi模块」是OAuth授权码接入,不是Swagger文档
  • 普通客户端内部 /v1/* 接口不直接对第三方开放,正规用户身份接入走 /v1/openapi/* OAuth流

0.1 Bot 鉴权与身份模型(产品管家 Q2,2026-09-20)

Token 类型 用途 生命周期
bot_token(bf_/app_前缀) 长期身份凭据(opaque,非JWT) 调所有 /v1/bot/* 业务接口 长期,吊销即时生效(tombstone缓存)
IM token 短期WuKongIM连接凭证 建长连接收发实时消息 短期,register刷,heartbeat保活(Redis TTL 60s)
  • bot_token 申请:管理后台/botfather侧创建(非API自助注册);/v1/bot/register不是申请token入口,是用已有token刷IM token
  • 两种Bot:User Bot(bf_前缀,落robot表)/ App Bot(app_前缀,落app_bot表,有scope约束如space)
  • 身份模型:Bot默认以自己robotID身份发消息;OBO是额外授权(用户显式grant+scope后可代用户操作,App Bot受space约束fail-closed)
  • 权限模型:Bot加群后是普通群成员,非超管;不能跨群任意操作(必须是群成员,否则ErrBotAPINotGroupMember);GET /v1/bot/groups只返回自己加入的群;ACL=成员身份+路由scope(authtree守卫)双重约束
  • 限流三桶(2026-08-05事故后改为按bot身份分桶):business(业务如sendMessage,主配额)/ heartbeat(保活,独立自愈配额)/ register(换token,key=bot token指纹,鉴权前限);heartbeat/register移出全局per-IP桶防连坐;阈值可配置(env如registerIPRPS/Burst),不硬编码

0.2 消息收发核心模型(产品管家 Q3,2026-09-20)

  • 核心字段:channel_id(必填)+ channel_type(uint8:DM=1/群=2/子区=5)+ payload(必填)+ 可选on_behalf_of/stream_no
  • 最小文本:{"channel_id":"","channel_type":2,"payload":{"type":1,"content":"你好"}}
  • type=1 文本:{"type":1,"content":"..."}(content支持富文本/Markdown,由客户端渲染)
  • type=8 文件:{"type":8,"url":"...","name":"...","size":123}(图片/文件/语音/视频都走文件类,用presigned上传拿url,不塞base64)
  • 卡片:走sendMessage统一入口(非独立端点)——原始卡片带card字段(cardmsg.Validate校验,render_profile=octo-chat-v1);模板卡片带template_ref(服务端RenderPayloadForPrincipal渲染);卡片提交回调从events收card_action_callback事件
  • type全集不逐条断言;文本/文件/卡片三大类最稳
  • 编辑:POST /v1/bot/message/edit(只能改自己发的)
  • typing:POST /v1/bot/typing
  • 已读:POST /v1/bot/readReceipt
  • 卡片能力探测:GET /v1/bot/card/profile;卡片修订清墓碑:POST /v1/bot/message/card/revisions/clear
  • 撤回:路由表未见独立recall端点,待确认;Bot不能编辑/撤回人类消息
  • @提及:payload.mention(uids数组/mention.all=1@所有人,legacy @all不再触发bot)
  • 引用回复:payload内带reply字段(字段名待确认)
  • Thread回复:子区是独立channel,channel_type=5 + 子区channel_id(父群+short_id四下划线形式)

0.3 群/Thread/成员/文件管理边界(产品管家 Q4,2026-09-20)

能力 端点 状态
创建群 POST /v1/bot/createGroup ✅已开放
更新群信息 PUT /v1/bot/groups/:group_no/info ✅已开放
群公告/MD GET/PUT /v1/bot/groups/:group_no/md ✅已开放(PUT经protectAIContainerMutation)
解散群 无dissolve端点 ❌暂不开放
群头像更新 未在路由单独核到 ⚠️待确认
Thread创建/列出/详情/删除 POST/GET/DELETE .../threads[/:short_id] ✅已开放
Thread成员列表/join/leave/archive/md .../threads/:short_id/{members,join,leave,archive,md} ✅已开放(写操作过守卫)
拉人进群 POST /v1/bot/groups/:group_no/members/add ✅已开放
踢人 POST /v1/bot/groups/:group_no/members/remove ✅已开放
改成员角色(群主/管理员) 无角色变更端点 ❌暂不开放
用户资料 GET /v1/bot/user/info / POST /v1/bot/users/batch ✅已开放
Space成员/主体 GET /v1/bot/space/members / GET /v1/bot/space/principals/:uid ✅已开放
目标解析 GET /v1/bot/resolve/targets ✅已开放
查任意用户所在群 无此端点(越权) ❌不开放;GET /v1/bot/groups只返回bot自己加的群
  • 上传:POST /v1/bot/file/upload(别名/v1/bot/upload)
  • 下载:GET /v1/bot/file/download/*path / 代理302跳presigned GET /v1/botfile/*path
  • 直传凭证:GET /v1/bot/upload/credentials;预签名:GET /v1/bot/upload/presigned(大文件/客户端直传首选)
  • 大小限制:默认100MB,可通过system_setting file.max_size_kb配置,未配置回落100MB
  • 类型校验:扩展名白名单+黑名单双重门 + 魔数(magic number)校验防伪造后缀;贴纸单文件1MB/512×512

Bot API 定位

鉴权与连接

端点 方法 用途 来源文件
/v1/bot/register ANY Bot 注册/重连刷 IM token(限流豁免,保活"爬起来"能力) bot_api.go:362 + main.go 注释(2026-08-05 事故记录)
/v1/bot/heartbeat ANY Bot 保活心跳(限流豁免,检测掉线) bot_api.go:326 + main.go 注释
/v1/bot/obo/grant — OBO(On-Behalf-Of)授权授予(用户代 Bot 操作场景) bot_api.go:468
/v1/botfile/* — Bot 文件子路由组(ba.authBot()) bot_api.go

注:register/heartbeat 用 `r.Any` 而非 `r.POST`,因为全局限流豁免只看路径不看方法,必须盖住所有方法。这是生产事故(2026-08-05 同 IP Bot 互饿死锁)驱动的设计。(来源:main.go 注释 + bot_api.go:326/362)

消息发送与编辑

端点 方法 用途 来源文件
/v1/bot/sendMessage POST 发送消息(raw / card / template 三模式统一入口) bot_api.go:410
/v1/bot/message/edit POST 编辑已发送消息(含卡片 template edit 路径) bot_api.go:452; card_p2_edit_im_test.go
/v1/bot/typing POST 发送 typing 指示器 bot_api.go:411
/v1/bot/readReceipt POST 上报已读回执 bot_api.go:412
/v1/bot/messages/sync POST 历史消息拉取(分页+方向控制,v1.1.2 新功能 #50) bot_api.go:415; octo-server changelog v1.1.2
/v1/bot/message/card/revisions/clear POST 清除卡片修订(写墓碑,D10.6) bot_api.go:453

事件轮询(Agent 接收消息的入口)

端点 方法 用途 来源文件
/v1/bot/events POST 拉取事件(长轮询 long-poll;返回消息事件、card_action 回调等) bot_api.go:413; events.go; 产品管家 events-mechanism 回答
/v1/bot/events/:event_id/ack POST 确认事件已处理(ACK 去重机制) bot_api.go:414

事件类型包括:消息(message)、卡片回调(card_action)、成员变更等;cursor/ACK/去重机制保障 at-least-once 投递。(来源:产品管家 events-mechanism 回答 message_id=2101009604581167104)

卡片能力协商

端点 方法 用途 来源文件
/v1/bot/card/profile GET 查询当前 Bot 的卡片能力 manifest(profiles/limits/card_version/templating 等) bot_api.go:454; card_profile.go

这是"能力运行时以服务端 manifest 为准"的核心查询端点。插件启动后首先请求此端点决定展示/交互/进度卡是否启用及 limits 数值。(来源:产品管家 delivery-card-profile-checklist 回答 message_id=2101150063836172288)

群组与 Thread 管理

端点 方法 用途 来源文件
/v1/bot/groups GET 获取 Bot 所在群组列表 bot_api.go:416
/v1/bot/groups/:group_no GET 获取群信息 bot_api.go:423
/v1/bot/groups/:group_no/members GET 获取群成员列表 bot_api.go:424
/v1/bot/groups/:group_no/mention_pref GET 群级免@偏好(octo-server#237) bot_api.go:425
/v1/bot/groups/:group_no/md GET/PUT 获取/更新群 Markdown 公告/描述(PUT 经 protectAIContainerMutation) bot_api.go:426/427
/v1/bot/createGroup POST 创建群 bot_api.go:430
/v1/bot/groups/:group_no/info PUT 更新群信息 bot_api.go:431
/v1/bot/groups/:group_no/members/add POST 添加群成员 bot_api.go:432
/v1/bot/groups/:group_no/members/remove POST 移除群成员 bot_api.go:433
/v1/bot/groups/:group_no/threads POST 创建 Thread(子区) bot_api.go:435
/v1/bot/groups/:group_no/threads GET 列出 Thread bot_api.go:436
/v1/bot/groups/:group_no/threads/:short_id GET 获取 Thread 信息 bot_api.go:437
/v1/bot/groups/:group_no/threads/:short_id DELETE 删除 Thread bot_api.go:438
/v1/bot/groups/:group_no/threads/:short_id/members GET 列出 Thread 成员 bot_api.go:439
/v1/bot/groups/:group_no/threads/:short_id/join POST 加入 Thread bot_api.go:440
/v1/bot/groups/:group_no/threads/:short_id/leave POST 离开 Thread bot_api.go:441
/v1/bot/groups/:group_no/threads/:short_id/archive POST 归档 Thread bot_api.go:442
/v1/bot/groups/:group_no/threads/:short_id/md GET/PUT 获取/更新 Thread Markdown bot_api.go:443/444
/v1/bot/groups/:group_no/incoming-webhooks — 群 incoming webhook 管理子路由组 bot_api.go(g 路由组)
/v1/bot/groups/:group_no/threads/:short_id/incoming-webhooks — Thread 级 incoming webhook 子路由组 bot_api.go(threadG 路由组)

注:多个变更类端点(PUT/DELETE/POST 创建群/Thread/成员)经 `protectAIContainerMutation` 中间件保护,防止对 AI 容器类特殊会话进行未授权变更。(来源:bot_api.go 多处引用)

用户查询

端点 方法 用途 来源文件
/v1/bot/user/info GET 查询用户信息 bot_api.go:455
/v1/bot/users/batch POST 批量查询用户(有 batchUsersIPLimit 限流) bot_api.go:422; batch_users.go
/v1/bot/resolve/targets GET 解析消息目标(@提及/会话目标解析) bot_api.go:417
/v1/bot/space/members GET 查询 Space 成员列表 bot_api.go:428
/v1/bot/space/principals/:uid GET 查询 Space 内 principal 信息 bot_api.go:429

文件上传与下载

端点 方法 用途 来源文件
/v1/bot/file/upload / /v1/bot/upload POST 文件上传(Bot 发送文件入口) bot_api.go:447/448; file.go
/v1/bot/file/download/*path GET 文件下载 bot_api.go:449
/v1/bot/upload/credentials GET 获取上传凭据(presign 相关) bot_api.go:450
/v1/bot/upload/presigned GET 获取预签名 URL(用于直接 PUT 到 MinIO) bot_api.go:451

文件分两种上传路径:走 octo-server 中转上传,或走 presigned URL 直接 PUT 到 S3/MinIO(SigV4 签名)。单端口部署下 presign URL 指向 nginx 同端口,bucket-name 路由不破签。(来源:049 部署形态总览 SigV4 不破签章节;卡片正式口径 v1.0 排障路径)

命令注册

端点 方法 用途 来源文件
/v1/bot/setCommands POST 注册 Bot 斜线命令列表(客户端展示 Bot 命令菜单) bot_api.go:445; commands.go

语音(opt-in,speech profile 启用后)

端点 方法 用途 来源文件
/v1/bot/voice/context GET/PUT/DELETE 语音上下文管理 bot_api.go:457-459
/v1/bot/voice/transcribe POST 语音转写 bot_api.go:460

注:语音能力依赖 speech profile 启用(octo-speech 服务)+ 语音引擎(默认 qwen),属 opt-in 可选能力。(来源:049 部署形态总览 speech profile 章节)


内部版独有Bot相关能力(v0.4新增)

以下能力为OCTO内部版独有模块提供的Bot相关能力(开源版GitHub代码中未包含)。标注了确认状态——✅ 产品管家已确认、⚠️ 路由存在但能力待源码验证。

1. 文档评论@Mention链路(✅ 已确认)

  1. 用户在文档评论区 `@Bot`
  2. docs-backend存储评论 → 内部调用octo-server `POST /v1/internal/bot-mentions`(事件类型 `docCommentMentionEventType`)
  3. octo-server校验+幂等claim+入Redis bot_task队列
  4. openclaw-channel-octo插件收事件,隔离会话派发
  5. Bot使用octo-cli(bot自身token) 编辑文档正文并回复评论串
  • ❌ Bot Token不能直接调 /v1/bot/docs 类接口(octo-server bot_api路由无此注册)
  • ❌ /api/v1/docs 需登录态,Bot Token调不了
  • ⚠️ 仅支持BotFather创建的User Bot(bf_前缀),不支持App Bot(app_前缀)
  • ⚠️ Bot必须先被加为该文档成员且拥有相应权限
  • ⚠️ 有灰度门控 gate.Allows(DocID, SpaceID),属MVP阶段
  • ✅ PPT评论@Bot同链路(插件v1.5.0+)

2. Drive Bot API(⚠️ 路由存在,能力待源码验证)

  • nginx路由存在 /v1/bot/drive/ → drive:8080(用户侧/v1/drive/、Bot侧/v1/bot/drive/均反代到octo-drive:8080)
  • /v1/bot/drive/ 实际暴露哪些Bot API端点(上传/下载/列表/分享/读内容?)
  • Bot能否读取/操作网盘文件给AI做知识库
  • Bot能否上传文件到网盘
  • 权限模型(Bot操作网盘文件的权限边界)

3. 语音纠错API(✅ 已确认)

端点 方法 用途 确认状态
/v1/bot/voice/context GET/PUT/DELETE Bot侧管理语音纠错上下文(人名/专有名词/术语) ✅ 产品管家确认(Speech模块§1.7/§3.5)
/v1/voice/context GET/PUT/DELETE 用户侧语音上下文管理 ✅ 部署配置+源码路由确认

4. Bot OBO(On-Behalf-Of)消息搜索(✅ 已确认)

端点 方法 用途 确认状态
POST /v1/botfather/messages/search POST 以Bot主人身份搜索消息(OBO模式),权限等同Bot主人 ✅ 产品管家确认
  • Bot通过此API可以以Bot主人的身份和权限搜索消息(On-Behalf-Of模式)
  • 权限等同owner(不是Bot自身权限,而是owner的权限)
  • 使用方:octo-cli使用此API帮用户搜索消息
  • 消息搜索尊重权限(解散状态authz校验)

5. Summary Agent触发(✅ 已确认)

能力 说明 确认状态
Agent可触发/执行总结 Agent可以触发Summary生成总结任务,总结结果可供Agent引用 ✅ 产品管家确认(PR#850,v2026.08.17)
  • Summary模块支持Agent驱动触发(v2026-08.17,PR#850):Agent可触发/执行总结
  • 总结结果可供Agent引用,作为AI协作上下文
  • Agent触发总结的具体API端点路径待确认(是内部服务间调用还是经Bot API公开暴露?SM-08)

6. User Bot vs App Bot(内部版场景差异)

场景 User Bot(`bf_`前缀) App Bot(`app_`前缀)
基础IM(发消息/收事件/卡片/文件/群管理) ✅ ✅(受space scope约束)
文档评论@Mention链路(编辑文档正文) ✅(MVP,需被加为文档成员) ❌ 不支持(产品管家明确仅User Bot)
Bot OBO消息搜索 ✅ 待确认
语音纠错API ✅ 待确认

内部版Bot能力确认状态汇总

能力 Profile依赖 确认状态 售前可承诺
文档评论@Mention→Bot编辑正文 docs ✅ 产品管家确认 ✅(标注MVP/灰度/User Bot only)
docs-html Bot创建HTML文档 docs + docs-html ✅ 产品管家确认(BOT_AUTH_ENABLED) ✅(Bot创建HTML文档转发到聊天)
Drive Bot API(/v1/bot/drive/) drive ⚠️ 路由存在,能力待D-05源码验证 ❌ 待验证后承诺
语音纠错API(/v1/bot/voice/context) speech ✅ 产品管家确认+源码路由 ✅
Bot OBO消息搜索 search ✅ 产品管家确认 ✅
Bot文档/网盘OBO搜索 search + doc-index/drive-index ⚠️ SR-07待验证 ❌ 待验证
Agent触发Summary summary ✅ 产品管家确认(PR#850) ⚠️ API端点路径待确认

后续待建设子页(骨架占位)

  • 06-api-integration/Webhook与事件回调.md(待建设):incoming-webhook 端点、card_action 回调、事件格式、ACK 机制、DLQ
  • 06-api-integration/卡片API详解.md(待建设):raw card / template card 三模式 schema、profile 协商、降级、limits
  • 06-api-integration/文件上传API.md(待建设):中转上传 vs presigned PUT、bucket 白名单、SigV4 签名要求、大小限制
  • 06-api-integration/群组与Thread API.md(待建设):群组 CRUD、成员管理、Thread 生命周期、AI container 保护
  • 06-api-integration/用户与Space API.md(待建设):用户查询、批量、space 成员、权限模型
  • 06-api-integration/错误码与限流.md(待建设):全局 per-IP 令牌桶、per-Bot heartbeat/register 桶、4xx/429 处理
  • 06-api-integration/认证与安全.md(待建设):bot_token 获取/刷新、register 流程、OBO 授权、签名

版本记录

  • v0.1(骨架):端点列表来自bot_api.go grep,骨架占位
  • v0.2(Q1-Q4回填):API体系全貌8套分类、双token鉴权模型、消息模型、群Thread管理边界
  • v0.3(Q1-Q4收官):端点表格补全来源文件行号、语音端点补充、Management/Admin补实
  • v0.4(2026-09-21,P0扩展补漏):新增「内部版独有Bot相关能力」章节,覆盖6项:文档评论@Mention链路(✅)、Drive Bot API(⚠️待验证)、语音纠错API(✅)、Bot OBO搜索(✅)、Summary Agent触发(✅)、User Bot vs App Bot内部版差异;新增内部版Bot能力确认状态汇总表;更新frontmatter增加模块文档来源;confidence维持high(开源API部分high,内部版能力标注确认状态)

v0.1 骨架边界与注意事项

  • 本骨架端点列表仅来自 bot_api.go 路由注册行 grep,未精读每个 handler 的请求/响应格式、字段、权限检查。
  • /v1/obo/* 子路由组(OBO 授权)有独立路由但本文未展开,待 P2 精读。
  • incoming webhook 路由(群级和 Thread 级)的具体端点方法/路径未展开,待精读 incoming_webhook.go。
  • 所有端点字段级 schema、默认值、错误码均为"待验证/待背书",不得写成正式对外 API 文档。
  • 本文不替代官方 API 文档;正式对外 API 文档需 octo-server 官方 API 文档或服务端负责人背书。
  • 路由前缀均为 /v1/,版本前缀暗示未来可能有 /v2/,但当前未看到 v2 路由,待确认。