# ChatbotSDK — 前端对接文档 > P0 核心链路已完成 | 构建时间:2026-06-25 | 版本:1.0.0 --- ## 一、快速开始 ### 最简接入(3 行代码) ```html ``` 引入后在页面右下角出现悬浮客服按钮,点击即可对话。 ### 集成到现有项目 SDK 产物位于 `client/dist/` 目录: | 文件 | 大小 | 说明 | |------|------|------| | `chatbot-sdk.js` | 47KB | 未压缩开发版(含 sourcemap) | | `chatbot-sdk.min.js` | 22KB | 压缩生产版(gzip ~8KB) | **部署路径:** 将 `.min.js` 文件上传到后端 `static/sdk/` 目录或任意 CDN。 --- ## 二、SDKConfig 完整参数 | 参数 | 类型 | 必传 | 默认值 | 说明 | |------|------|------|--------|------| | `integrateId` | `string` | ✅ | — | 集成标识 → 后端 `chatId` + 数据隔离 key | | `requestDomain` | `string` | ✅ | — | 后端 API 域名(如 `https://ai.example.com`) | | `userId` | `string` | ❌ | — | 宿主用户标识 → 后端 `accountId` | | `roleId` | `number` | ❌ | — | 客服角色 ID | | `categoryId` | `number` | ❌ | — | 默认知识库分类 | | `showCategorySwitch` | `boolean` | ❌ | `false` | 是否显示知识库下拉 | | `title` | `string` | ❌ | `"AI 智能助手"` | 弹窗标题 | | `width` | `number` | ❌ | `380` | 弹窗宽度(px),移动端自适应 | | `position` | `string` | ❌ | `"right-bottom"` | 悬浮按钮位置:`left-bottom` \| `right-bottom` | | `primaryColor` | `string` | ❌ | `"#4F46E5"` | 主色调(适用于按钮/用户气泡/链接) | | `launcherIcon` | `string` | ❌ | SVG 图标 | 悬浮按钮图标(URL 或 SVG 字符串) | | `showClear` | `boolean` | ❌ | `true` | 是否显示清空对话按钮 | | `showAdminPanel` | `boolean` | ❌ | `false` | 是否显示管理面板 | | `streaming` | `boolean` | ❌ | `true` | 是否启用 SSE 流式输出 | | `locale` | `string` | ❌ | `"zh-CN"` | 界面语言(预留) | | `debug` | `boolean` | ❌ | `true` | 是否输出调试日志 | --- ## 三、公开 API | 方法 | 说明 | |------|------| | `ChatbotSDK.init(config)` | 初始化 SDK | | `ChatbotSDK.destroy()` | 销毁实例(清理 DOM + 样式 + 事件) | | `ChatbotSDK.open()` | 打开聊天窗口 | | `ChatbotSDK.close()` | 关闭聊天窗口 | | `ChatbotSDK.toggle()` | 切换窗口显示/隐藏 | | `ChatbotSDK.clearHistory()` | 清空当前会话 | --- ## 四、完整接入示例 ```html ``` --- ## 五、参数映射关系 SDK 入参与后端 API 参数对照: | SDK 入参 | 后端参数 | 说明 | |----------|----------|------| | `integrateId` | `chatId` | 会话标识 + 数据隔离 key | | `userId` | `accountId` | 宿主用户标识 | | `roleId` | `roleId` | 客服角色 ID | | `categoryId` | `categoryId` | 知识库分类过滤 | --- ## 六、对接的后端接口 ### 同步对话 ``` GET /ai/assistant_app/chat/sync ?message={message} &chatId={integrateId} &accountId={userId} &roleId={roleId} ``` ### SSE 流式对话 ``` GET /ai/assistant_app/chat/sse ?message={message} &chatId={integrateId} &accountId={userId} &roleId={roleId} ``` ### RAG 增强对话(P1 阶段启用) ``` GET /ai/assistant_app/chat/rag/sse ?message={message} &chatId={integrateId} &categoryId={categoryId} &rewriteStrategy=REWRITE ``` ### RAG 引用来源(P1 阶段启用) ``` GET /ai/assistant_app/rag/sources ?message={message} &chatId={integrateId} &categoryId={categoryId} ``` ### 分类列表(P1 阶段启用) ``` GET /category/list GET /category/tree ``` --- ## 七、CSS 命名空间隔离 所有 DOM 元素的 class/id 均使用 `csk-` 前缀,不会与宿主页面样式冲突: | 元素 | ID/Class | |------|----------| | 悬浮按钮 | `#csk-launcher` `.csk-launcher` | | 聊天弹窗 | `#csk-window` `.csk-window` | | 消息区 | `#csk-messages` `.csk-messages` | | 输入框 | `#csk-input` `.csk-input` | | 发送按钮 | `#csk-send-btn` `.csk-send-btn` | | 样式标签 | `style[data-csk-sdk]` | z-index 分层:悬浮按钮 9998,弹窗 9999。 --- ## 八、localStorage 缓存 缓存 key 格式:`csk_history_{integrateId}` 数据结构: ```json { "messages": [ { "id": "uuid", "role": "user|ai", "content": "消息内容", "timestamp": 1700000000000 } ], "updatedAt": 1700000000000 } ``` - 消息上限 200 条,超出自动裁剪最早 50 条 - 按 `integrateId` 隔离,不同接入方互不影响 - `init()` 时自动恢复历史消息 - `clearHistory()` 清空本地缓存 --- ## 九、错误处理 所有错误不抛异常、不阻塞宿主页面,仅 `console.error` 输出。 | 错误场景 | 提示信息 | |----------|----------| | 缺失 `integrateId` | `integrateId 是必传参数` | | 缺失 `requestDomain` | `requestDomain 是必传参数` | | 非法 URL | `requestDomain 不是合法的 URL 格式` | | 网络断开 | `网络连接失败,请检查网络` | | 请求超时 | `请求超时,请稍后重试`(超时时间 30s) | | HTTP 401 | `鉴权失败,请联系管理员` | | HTTP 403 | `无访问权限,请联系管理员配置` | | HTTP 500 | `服务器异常,请稍后重试` | | 跨域阻断 | `跨域请求被拦截,请联系管理员将当前域名加入 API 白名单` | | localStorage 满 | `localStorage 空间不足,会话历史保存失败` | --- ## 十、技术栈 - **语言**:TypeScript → ES2017 - **打包**:Rollup → IIFE 格式 - **压缩**:Terser - **浏览器兼容**:Chrome 70+, Firefox 70+, Safari 13+, Edge 79+ - **产物大小**:`.min.js` ~22KB(gzip ~8KB) --- ## 十一、开发与构建 ```bash # 进入 SDK 工程目录 cd client/ # 安装依赖 npm install # 构建(输出到 dist/) npm run build # 开发模式(watch) npm run dev ``` 源码结构: ``` client/ ├── src/ │ ├── index.ts # 入口:window.ChatbotSDK 挂载 │ ├── types.ts # TypeScript 类型定义 │ ├── config.ts # 配置解析 + 参数校验 │ ├── logger.ts # 日志模块 │ ├── storage.ts # localStorage 封装 │ ├── api.ts # HTTP 封装 + SSE 流式 │ ├── dom.ts # DOM 构建 + 拖拽 │ ├── styles.ts # CSS 注入 + 主题定制 │ ├── chat.ts # 对话核心 │ └── utils.ts # UUID、防抖、XSS 转义 ├── dist/ # 构建产物 │ ├── chatbot-sdk.js │ ├── chatbot-sdk.min.js │ └── *.map ├── package.json ├── tsconfig.json ├── rollup.config.js └── README.md ``` --- ## 十二、P0 → P1 → P2 路线图 | 阶段 | 状态 | 内容 | |------|------|------| | **P0 核心链路** | ✅ 已完成 | 项目骨架、配置校验、样式注入、悬浮按钮+弹窗、HTTP 通信、对话核心、本地缓存、打包构建 | | **P1 体验增强** | 🔜 待开发 | SSE 流式打字机效果、知识库下拉切换、RAG 引用来源展示、UI 全配置化、Markdown 渲染、弹窗拖拽 | | **P2 运营完善** | 🔜 待开发 | 会话管理面板、控制台日志体系、多语言国际化、知识库管理嵌入 | --- ## 十三、验证测试 访问 `http://localhost:9090/sdk/test.html` 运行自动化验证。 测试覆盖: 1. ✅ `window.ChatbotSDK` 全局挂载 2. ✅ 配置校验(必传参数 + 默认值 + 错误提示) 3. ✅ DOM 挂载(悬浮按钮 + 弹窗 + 输入框 + 样式注入) 4. ✅ localStorage 缓存读写 5. ✅ 与后端 API 的实际对话(需后端运行)