知识库 API
通过 Open API 以程序方式管理知识库目录与文档,支持批量导入、定时同步与增量更新
简述
知识库 API 面向 技术对接人员:由您的业务后端或自动化脚本携带租户 API Key,调用 OpenDesk Open API 对知识库 目录 与 文档 进行查询、创建、更新与删除。写入结果与客服工作台知识库 共用同一套数据,操作人展示为 「API Key: {名称}」。
调用边界: 仅允许 服务端 调用;浏览器、Web SDK、移动 App 不得持有 API Key。员工日常维护知识库仍使用工作台内部接口(员工 JWT),不走本 Open API。
适用场景
| 场景 | 说明 |
|---|---|
| 批量导入 FAQ | 从 Excel、CRM、自建 CMS 一次性或分批写入知识文档 |
| 定时同步 | 外部系统变更后,脚本按目录增量更新标题与 HTML 正文 |
| 对账与巡检 | 按目录、关键词、状态分页拉取文档列表,与源系统比对 |
| AI / 搜索前置 | 外部 RAG 或搜索索引定期读取已发布文档(本 API 不提供向量检索) |
典型用途: 实施脚本导入问题库、产品文档从中台同步至 OpenDesk 知识库、运维自动化发布 / 下线说明文档。
接入前准备
| 准备项 | 说明 | 获取方式 |
|---|---|---|
| OpenDesk 访问地址 | 租户部署根地址,下文记为 {OpenDesk地址} | 由实施或运维提供 |
| API Key | 格式 sk-odk-... | 管理后台 → 全局设置 → API Key(超级管理员) |
| HTTP 客户端 | 支持 JSON 与 REST 语义 | curl、Python、Java、Node.js 等 |
| HTML 正文 | 文档内容为 HTML 字符串 | 纯文本可包 <p>...</p>;不支持直接上传 Word/PDF 附件 |
接口前缀:
{OpenDesk地址}/api/v1/open/knowledge
鉴权 Header(每次请求必填):
Authorization: Bearer sk-odk-您的密钥
Content-Type: application/json
技术特性:
- 鉴权走统一依赖
get_open_api_context:只读取AuthorizationHeader,不接受 Query / Cookie / Body 中的 Key。 - 数据范围严格限定为 API Key 所属租户;跨租户资源 ID 返回 404。
- 无效或已删除 Key → 401;已禁用 Key → 403;成功调用更新 Key 的 最近使用时间。
- 目录 / 文档 CRUD 复用内部
KnowledgeService规则,与工作台行为一致。 - 当前 API Key 无 scope 细分,启用 Key 均可调用知识库 Open API 及
context-token接口。
整体流程
外部系统 / 脚本 OpenDesk Open API 客服工作台知识库
│ │ │
│ ① GET /knowledge/directories │ │
│ ───────────────────────────────────────> │ │
│ ② 返回目录树(含 id、children) │ │
│ <─────────────────────────────────────── │ │
│ │ │
│ ③ POST /knowledge/documents │ │
│ title + directory_id + content_html │ │
│ ───────────────────────────────────────> │ ④ 写入租户知识库 │
│ ⑤ 返回文档 id、status 等 │ ───────────────────────────────> │
│ <─────────────────────────────────────── │ 坐席可立即阅读 / 编辑 │
推荐操作顺序:
① 查询目录树,确认目标分类
↓
② 若无合适目录 → POST 新建目录(最多 3 级)
↓
③ POST 新建或 PUT 更新文档(title + content_html)
↓
④ GET 列表对账,或按标题存在性决定更新 / 新建
如何使用
第一步:创建 API Key
- 超级管理员登录 管理后台 → 全局设置 → API Key。
- 新建 Key(如「知识库同步脚本」「CMS 对接服务」),保存完整
sk-odk-...。 - 在脚本或密钥管理系统中配置,勿提交至 Git。

第二步:确认目标目录
调用 查询目录树,建立「业务分类名 → 目录 ID」映射:
curl "{OpenDesk地址}/api/v1/open/knowledge/directories" \
-H "Authorization: Bearer sk-odk-您的密钥"
响应 items 为树形结构,节点含 id、name、children 等。记下目标 id 作为后续 directory_id。
若无合适目录,先 新建目录:
curl -X POST "{OpenDesk地址}/api/v1/open/knowledge/directories" \
-H "Authorization: Bearer sk-odk-您的密钥" \
-H "Content-Type: application/json" \
-d '{"name": "常见问题", "parent_id": null}'
| 字段 | 说明 |
|---|---|
name | 目录名,1~50 字;同一上级下不可重名 |
parent_id | 上级目录 ID;顶级传 null |

目录层级上限:3 级。 删除目录前须清空其下所有子目录与文档。
第三步:创建或更新文档
新建文档:
curl -X POST "{OpenDesk地址}/api/v1/open/knowledge/documents" \
-H "Authorization: Bearer sk-odk-您的密钥" \
-H "Content-Type: application/json" \
-d '{
"title": "如何重置密码",
"directory_id": 3,
"content_html": "<p>进入<strong>设置</strong> → 安全 → 重置密码。</p>",
"status": "published"
}'
| 字段 | 必填 | 说明 |
|---|---|---|
title | 是 | 1~120 字;同一目录下不可重名 |
directory_id | 是 | 所属目录 ID |
content_html | 是 | HTML 正文;去标签后不能为空 |
status | 否 | draft(默认)或 published |
validity_type | 否 | permanent(默认)或 scheduled |
valid_from / valid_to | 条件 | scheduled 时必填起止时间 |
更新文档(部分字段):
curl -X PUT "{OpenDesk地址}/api/v1/open/knowledge/documents/{文档ID}" \
-H "Authorization: Bearer sk-odk-您的密钥" \
-H "Content-Type: application/json" \
-d '{
"title": "如何重置密码(2026版)",
"content_html": "<p>更新后的操作步骤...</p>",
"status": "published"
}'
PUT 只需传入要修改的字段。
第四步:查询与对账
文档列表(分页 + 筛选):
curl "{OpenDesk地址}/api/v1/open/knowledge/documents?directory=3&status=published&page=1&per_page=20" \
-H "Authorization: Bearer sk-odk-您的密钥"
| 参数 | 说明 |
|---|---|
directory | 目录 ID(含子目录下文档) |
q | 关键词,搜索标题与正文 |
status | draft / published;不传则含草稿 |
display_status | draft / published / expired(按服务端本地时间计算) |
page | 页码,默认 1 |
per_page | 每页条数,默认 20,最大 100 |
列表默认 包含草稿,便于外部系统做全量同步。
接口速查
目录
| 功能 | Method | Path |
|---|---|---|
| 查询目录树 | GET | /api/v1/open/knowledge/directories |
| 新建目录 | POST | /api/v1/open/knowledge/directories |
| 更新目录 | PUT | /api/v1/open/knowledge/directories/{directory_id} |
| 移动 / 排序 | PATCH | /api/v1/open/knowledge/directories/{directory_id}/move |
| 删除空目录 | DELETE | /api/v1/open/knowledge/directories/{directory_id} |
文档
| 功能 | Method | Path |
|---|---|---|
| 查询列表 | GET | /api/v1/open/knowledge/documents |
| 新建文档 | POST | /api/v1/open/knowledge/documents |
| 文档详情 | GET | /api/v1/open/knowledge/documents/{document_id} |
| 更新文档 | PUT | /api/v1/open/knowledge/documents/{document_id} |
| 删除文档 | DELETE | /api/v1/open/knowledge/documents/{document_id} |
完整请求 / 响应 Schema 见 {OpenDesk地址}/docs。
错误与排查
| HTTP 状态 | 常见原因 | 处理建议 |
|---|---|---|
| 401 | Key 缺失、无效或已删除 | 检查 Authorization Header |
| 403 | Key 已禁用 | 启用或更换 Key |
| 404 | 目录 / 文档 ID 不存在或不属当前租户 | 核对 ID 与租户 |
| 400 / 422 | 业务规则不满足 | 见下表 |
知识库专项规则:
| 规则 | 说明 |
|---|---|
| 目录层级 | 最多 3 级 |
| 重名 | 同一父目录下目录名不可重复;同一目录下文档标题不可重复 |
| 删除目录 | 须先清空子目录与文档 |
| 正文 | content_html 去 HTML 标签后不能为空 |
| 附件 | 不支持 Word/PDF 直传;须转为 HTML 写入 content_html |
安全与限制
- API Key 仅部署在服务端;日志与监控不得打印完整 Key。
- 生产 / 测试环境分离 Key;停用脚本后 禁用并删除 对应 Key。
- 所有请求使用 HTTPS。
- Open API 不走员工权限树,不继承
knowledge.workspace.*等员工权限;租户隔离完全由 Key 决定。 - 本 API 不提供:Excel 导入导出接口、附件上传、版本历史、审批流、AI 向量检索。
与其他功能的关系
- API Key(管理后台):与本接口及《传递客户上下文》共用鉴权凭证。
- 客服工作台 · 知识库:API 写入的数据在同一界面可见、可编辑。
- 知识库 SDK:员工侧浏览器 SDK 使用员工 JWT,不使用本 Open API。
- 传递客户上下文:同属
/api/v1/open/*,鉴权方式相同。
对接示例
从 Excel 批量导入 FAQ
角色与目标: 实施人员将「问题库.xlsx」(分类、标题、答案)导入 OpenDesk 知识库。
对接逻辑:
GET /knowledge/directories→ 建立「Excel 分类 → directory_id」映射;缺失分类则POST创建。- 逐行读取:标题 →
title,答案 →content_html(纯文本包<p>)。 GET /knowledge/documents?directory={id}&q={title}判断是否已存在;存在则PUT更新,否则POST新建。- 导入结束后再次
GET列表核对条数。
场景效果: 工作台知识库出现完整 FAQ 目录;操作记录显示「API Key: 问题库导入脚本」。
定时同步产品说明
角色与目标: 产品中台 nightly 任务将最新产品说明 HTML 同步至 OpenDesk。
对接逻辑:
- 中台输出
{ slug, title, html, category }。 - 脚本按
category解析directory_id。 - 按
slug或标题查找文档 ID,存在则PUT content_html+status: published,否则POST新建。 - 下线产品时对文档
PUT status: draft或DELETE。
场景效果: 坐席在工作台搜索到与中台一致的最新说明,无需手工复制粘贴。
