三种集成形态(API 集成模式 / AI 窗口集成 / 嵌入式集成)一次讲清:适用场景、鉴权与路径、请求与响应要点、示例代码与上线注意事项。面向新手开发者,可直接照抄集成。
mini-excel-ai 提供同一套后端能力,仅用是否加载前端、AI 由谁承载区分三种接入方式。下表中文名为集成手册用语;与开放 API 中 mode / 查询参数的对应关系见表后对照。
宿主不嵌入 mini 页面;自建 UI,直接调 REST / SSE。适合 B 端后台、已有数据看板、Mobile。
iframe 只承载表格与三视图;AI 对话窗口在宿主侧,通过 postMessage SDK 驱动分析。
单 iframe 完整工作台(表格 + 三视图 + 内置 AI)。最快上线,宿主几乎无开发量。
| 维度 | API 集成模式 | AI 窗口集成 | 嵌入式集成 |
|---|---|---|---|
| 宿主前端 | 全自建 | iframe + 自建 AI | 仅 iframe |
| 表格/三视图 | 无(或自建) | iframe 内 | iframe 内 |
| 集成复杂度 | 中(REST+SSE) | 中-高(SDK) | 低 |
| 品牌统一 | 完全自控 | AI 侧统一 | mini 主题/后台可配 |
名称与 API 对照:创建会话、统计或审计场景中 mode 仍使用下列取值(与文档中文名一一对应):zero-ui → API 集成模式;hybrid → AI 窗口集成;full → 嵌入式集成。iframe 地址参数 ?mode=hybrid、?mode=full 同理。
下文用 {BASE} 表示部署根地址,例如 https://mini.example.com。前后端同源时可为空字符串,由网关反代统一到 /api/mini/...。
系统无用户 JWT。多数写操作与部分读操作在 Header 中携带:
Authorization: Bearer <session_id>
部分路由将会话 ID 写在 URL 路径中(如 /session/{session_id}/files),上传等接口以具体 API 为准。
| 项 | 说明 |
|---|---|
| 方法 · 路径 | POST {BASE}/api/mini/session |
| Request JSON | mode:可选 zero-ui(API 集成模式)| hybrid(AI 窗口集成)| full(嵌入式集成,默认)external_ref:可选,租户/业务侧 IDmetadata:可选,自定义对象 |
| Response JSON | session_id, mode, created_at, active_file_id(可选) |
跨域嵌入或浏览器直连 API 时,需在服务端配置允许的 Origin(如环境变量中的白名单)。平台配置接口会返回 embed_allowed_origins 等字段供前端校验。
下列为常见集成路径;实际以你方网关与部署拓扑为准,对浏览器暴露的 URL 通常与下表一致。
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/mini/session | 创建会话 |
| POST | /api/mini/session/{session_id}/files | multipart 上传文件 |
| GET | /api/mini/session/{session_id} | 会话状态(含 workbook_state) |
| PUT | /api/mini/session/{session_id}/workbook | 回填 workbook 快照 |
| GET | /api/mini/session/{session_id}/artifacts | 产物列表 |
| DELETE | /api/mini/session/{session_id}/artifacts/{artifact_id} | 删除产物 |
| GET | /api/mini/config/platform | 平台配置(主题、上传限制、允许域名等) |
| POST | /api/mini/large-file/prepare/{session_id}/{file_id} | 大文件分析准备(服务端解析索引,供后续指令使用) |
| GET | /api/mini/large-file/preview/{session_id}/{file_id} | Query:sheet, offset, limit |
| POST | /api/mini/large-file/operation/stream | 大文件 AI 流式分析(SSE) |
| GET | /api/mini/large-file/download-results/{session_id}/{source_file_id} | 合并下载多表;Query:sheets(逗号分隔可见表名) |
| GET | /api/mini/large-file/download/{session_id}/{file_id} | 下载单次导出文件 |
| POST | /api/mini/excel/command | 普通分析指令(常与 SSE 配合) |
| GET | /mini/sse/{session_id} | 普通分析 SSE 连接 |
| POST | /api/mini/report/generate | 生成报表 Body:session_id, template, title 等 |
| GET | /api/mini/report/templates | 报表模板列表 |
| POST | /api/mini/pptx/generate | 生成 PPTX Body:session_id, title 等 |
| GET | /api/mini/pptx/preview/{artifact_id} | PPTX 预览元数据 |
| GET | /api/mini/artifacts/{artifact_id}/download | 产物下载;Query:format:json | pdf | png(视部署) |
{ "detail": "..." },HTTP 状态码 400 / 401 / 404 / 500 / 503 等。流式接口在 SSE 事件 error / 尾包 done 中携带原因。
宿主 UI ⇄ REST / SSE ⇄ mini-excel-ai 服务端 ⇄ 数据分析与 AI 能力(实现细节对集成方透明)
POST /api/mini/session 取 session_idPOST /api/mini/session/{id}/files 上传文件,得 file_idPOST /api/mini/large-file/prepare/{session_id}/{file_id} 确保就绪POST /api/mini/large-file/operation/stream 发送指令,消费 SSE(文本块、工具结果、完成)GET .../download-results/...(可带 ?sheets=表1,表2 与画布对齐)上传成功响应常见字段:file_id, original_name, file_size, is_large_file, large_file_status, session_id。sheet_names 等详情可在 prepare / preview 响应中补充。
| 事件 | 含义 |
|---|---|
text | 模型流式输出片段 |
tool_call / tool_result | 工具调用与结果;可能含新生成文件信息 |
excel_operation | 面向表格的操作描述(纯 API 场景常仅记录) |
done | 结束:success, message 等 |
error | 错误信息 |
// 1. 创建会话 const r1 = await fetch('{BASE}/api/mini/session', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ mode: 'zero-ui', external_ref: 'tenant-1' }), }); const { session_id } = await r1.json(); // 2. 上传(FormData) const fd = new FormData(); fd.append('file', fileBlob, 'data.xlsx'); const r2 = await fetch(`{BASE}/api/mini/session/${session_id}/files`, { method: 'POST', body: fd }); const fileInfo = await r2.json(); // 3. Prepare + Stream(伪代码:按项目 SSE 解析器读取 event/data) await fetch(`{BASE}/api/mini/large-file/prepare/${session_id}/${fileInfo.file_id}`, { method: 'POST' });
生产环境建议使用随部署提供的浏览器 SDK(如 MiniExcelAI.api(baseUrl)),已封装取消、解析与 URL 拼接;无需关心服务端内部实现。
演示页:部署后访问 /zero-ui-demo.html。
┌─ 宿主:自建 AI 窗口(SDK) ─┐ postMessage ┌─ iframe:表格 + 三视图 ─┐ │ sendAnalyzeCommand / … │ ←──────────────→ │ 无内置 AI │ └────────────────────────────┘ └────────────────────────┘
{BASE}/index.html?mode=hybrid&session_id=auto
session_id=auto 由应用自动建连;也可传入已有 session_id 复用会话。
const sdk = MiniExcelAI.connect(document.getElementById('mini-frame'), { origin: 'https://mini.example.com', }); await sdk.ready(); // { session_id } sdk.sendAnalyzeCommand('按地区汇总销售额'); sdk.changeView('reportCard'); // analyze | reportCard | presentation
sdk.on(name, handler))| 事件 | 说明 |
|---|---|
ready | iframe 内应用就绪 |
mini-excel-ai:workbookChange | 表格数据变更 |
mini-excel-ai:fileUploaded | 文件上传完成 |
mini-excel-ai:operationProgress | AI 执行进度 |
mini-excel-ai:artifactReady | 报表/PPT 等产物可下载 |
mini-excel-ai:error | 错误 |
演示页:/hybrid-demo.html(或你站点等价路径)。iframe 建议 sandbox 含 allow-scripts allow-same-origin allow-forms allow-popups allow-downloads,并按需 allow 剪贴板。
┌────────────────── iframe:嵌入式工作台 ─────────────────┐ │ [ 我要分析 | 我要报表 | 我要汇报 ] + 内置 AI 助手 │ │ 电子表格画布 │ └─────────────────────────────────────────────────────────┘
{BASE}/index.html?mode=full
可选:宿主先 POST /api/mini/session,再把 session_id 传入 URL,便于与 external_ref 对齐。
仍可 MiniExcelAI.connect(iframe) 仅订阅 artifactReady 等事件,无需代替用户操作。
适合最快交付:用户上传、对话、导出均在 iframe 内完成。
| 场景 | 方式 |
|---|---|
| 报表 / PPTX 元数据 | GET /api/mini/session/{session_id}/artifacts 列表项含 artifact_id, artifact_type, meta 等 |
| 产物文件 | GET /api/mini/artifacts/{artifact_id}/download |
| 报表多格式 | 部分部署支持 Query ?format=json|pdf|png;响应 Content-Type 等以实际环境为准 |
| 大文件合并下载 | GET .../large-file/download-results/{session_id}/{source_file_id};Query sheets= 逗号分隔表名,与前端可见 tab 对齐 |
X-Skipped-Sheets / X-Skip-Reason。用户手头的原始上传文件仍可作为权威数据源单独保留或下发。
/api/mini/large-file/* 面向大体量工作簿;/api/mini/excel/* 与 /mini/sse/* 为通用分析路径,部分场景需按协议回传数据查询结果。API 集成模式可优先采用大文件相关接口以降低前端配合成本。connect 必须传入可信 origin;CSP 配置 frame-src 白名单。index.html、assets/),以及网关到 mini-excel-ai API 上游是否可达。更细的 Markdown 说明见项目内 docs/integration-zero-ui.md、integration-hybrid-ai-window.md、integration-full-ui.md。