Outlook Add-in 单证识别
outlook-addin/ 现在不再只是邮件摘要 demo,而是一个嵌入 Outlook task pane 的单证识别前端。它通过 document-recognition extraction-job 接口创建识别任务,同时继续允许底层绑定到某个 Fusion runtime agent。
架构关系
本地开发链路如下:
flowchart LR
Outlook[Outlook / OWA] --> Addin[outlook-addin Vite<br/>https://localhost:3100]
Addin -->|/api proxy| DemoBackend[demo-backend<br/>http://localhost:3000]
DemoBackend --> AIService[ai-service]
关键点:
outlook-addin不直接请求ai-service。- 前端统一调用同源
/api/*,由 Vite 代理转发给demo-backend。 - 这样可以和
demo-frontend保持同一套 extraction-job 路由与 payload。
启动方式
先启动 demo backend,再启动 add-in dev server:
just run-demo-backend
cd outlook-addin
npm install
npm run dev
默认端口:
demo-backend:http://localhost:3000outlook-addin:https://localhost:3100
之所以将 add-in 改到 3100,是为了避免与 demo-backend 的本地默认端口冲突。
环境变量
在 outlook-addin/.env 中可设置:
VITE_DEFAULT_AGENT_ID=your-fusion-runtime-agent-id
VITE_DOCUMENT_RECOGNITION_AGENT_ID=your-document-recognition-owner-agent-id
DEMO_BACKEND_URL=http://localhost:3000
VITE_ADDIN_HOST_URL=https://localhost:3100
VITE_OUTLOOK_INDEX_URL=http://localhost:5173
说明:
VITE_DEFAULT_AGENT_ID:可选,用于默认选中某个 Fusion runtime agent。VITE_DOCUMENT_RECOGNITION_AGENT_ID:必填,表示 extraction-job 的 owner agent。DEMO_BACKEND_URL:Vite 开发代理的目标地址。VITE_ADDIN_HOST_URL:本地 add-in 宿主地址,会同时影响 Vite dev server 端口与生成后的manifest.xml。VITE_OUTLOOK_INDEX_URL:任务完成后跳转的详细工作区地址。
Manifest 与 Office API 约束
为了从 Outlook 当前邮件读取附件内容,manifest 需要至少声明 Mailbox 1.8。
这一点对应到前端实现时,依赖两个 Office 附件 API:
item.getAttachmentsAsync():获取当前项的附件列表item.getAttachmentContentAsync():获取附件内容并转成浏览器可提交的File
如果只在普通浏览器里打开 https://localhost:3100,Office 宿主上下文不存在,此时:
- 无法读取真实 Outlook 附件
- 但仍然可以通过本地文件上传测试识别 UI 与 extraction-job 流程
前端职责
outlook-addin 的识别模式主要包含四块:
- Fusion runtime agent 选择
- 当前邮件附件选择与 staging
- 通过 document-recognition 创建 extraction job
- 只读字段摘要与跳转到详细工作区
与 demo-frontend 相比,差异点主要在输入源:
demo-frontend:本地文件上传为主outlook-addin:当前邮件附件为主,本地上传为回退路径
发布与下载
生产发布后的公开入口分成三类:
- Add-in 宿主页:
https://outlook.aibot.zata.cafe - 宿主 manifest:
https://outlook.aibot.zata.cafe/manifest.xml - 下载页:见 Outlook Add-in 下载
当前 .exe 交付的是 Windows 安装助手,而不是组织级分发包。它会把当前生产 manifest 下载到本地,并打开下载说明页,便于继续 sideload。
当前后端接口
旧 POST/GET /api/agents/{agent_id}/extraction-jobs* 路径已经移除,本指南保留该流转仅作为历史背景。当前 Outlook add-in 相关的单证识别查询面应改为:
GET /document-recognition/runtime-agentsGET /document-recognition/runsGET /document-recognition/runs/{run_id}PATCH /document-recognition/runs/{run_id}/field-reviews/{field_id}GET /document-recognition/runs/{run_id}/field-reviews/{field_id}/revisions
其中可被 Outlook 入口选择的 Fusion agent 不再由前端自行推断,而是由管理端显式维护:
PUT /admin/document-recognition/runtime-agents/{agent_id}DELETE /admin/document-recognition/runtime-agents/{agent_id}
这样做的好处是:
- 不再把通用 Fusion history 混进 document-recognition 查询面
- Outlook 入口和 Studio/Admin 共用同一套 canonical run/read/review surface
- 可选 Fusion runtime 的名字、描述和启用状态可以通过 registry 明确暴露