需完成服务端集成与前端嵌入:一、Docker部署OnlyOffice Document Server并验证可用;二、钉钉后台配置JSAPI权限及可信域名;三、构造含userId、documentKey、JWT token的config对象;四、iframe嵌入编辑器并监听postMessage事件;五、对接钉钉文档预览能力实现网盘直编。

如果您希望在钉钉工作台中直接调用 OnlyOffice 实现在线文档编辑与协同能力,则需完成服务端集成与前端嵌入两个关键环节。以下是实现该对接的具体路径:
一、部署并配置 OnlyOffice Document Server
OnlyOffice 文档编辑功能依赖独立运行的 Document Server 服务,必须先完成其部署与基础可用性验证。该服务将作为钉钉前端调用的实际后端渲染引擎。
1、使用 Docker 部署官方镜像:执行 docker pull onlyoffice/documentserver 拉取最新稳定版镜像。
2、启动容器并映射必要端口与卷:运行命令中须包含 -p 80:80(或自定义 HTTPS 端口),同时挂载 /var/www/onlyoffice/Data 与 /var/log/onlyoffice 目录至宿主机持久化路径。
3、访问 http://[服务器IP],确认页面显示 “ONLYOFFICE Docs is running” 提示且无 502/504 错误。
二、在钉钉开发者后台配置 JSAPI 权限与可信域名
钉钉小程序或 H5 应用调用 OnlyOffice 编辑器需通过 JSAPI 接口加载 iframe,因此必须提前完成安全域白名单与接口权限授权。
1、登录 https://open-dev.dingtalk.com 进入企业内部应用管理后台。
2、进入「应用开发」→「H5 微应用」或「小程序」,找到目标应用,在「开发管理」页签中填写 Document Server 的完整域名(如 https://docs.example.com) 至「可信域名」列表。
3、在「权限管理」中勾选 dd.openLink 与 dd.config 权限,并提交审核(若为自建应用且已通过企业内审,可跳过公审流程)。
三、构造符合钉钉上下文的 OnlyOffice 配置对象
OnlyOffice 初始化时需传入 JSON 格式的 config 对象,其中必须适配钉钉用户身份与会话上下文,确保文档权限隔离与操作审计可追溯。
1、从钉钉 JSAPI 获取当前用户 userId:dd.runtime.permission.requestAuthCode 获取 authCode 后,调用后端接口换取 userId。
2、生成唯一 documentKey:采用 userId + 文件ID + 时间戳 SHA256 方式生成不可预测密钥,防止 URL 劫持。
3、设置 token 字段:在 config 中启用 token.enable = true,并在 editorConfig.token 与 document.fileType 对应字段填入由后端签发的 JWT,含 exp、userId、permissions 声明。
四、通过 iframe 嵌入 OnlyOffice 编辑器到钉钉工作台页面
钉钉 H5 微应用中不可直接使用 window.open 或 location.href 跳转至外部编辑器,必须采用受控 iframe 加载方式,并监听 postMessage 事件响应保存、关闭等动作。
1、在 HTML 中插入固定尺寸 iframe 容器:<iframe id="onlyoffice-frame" width="100%" height="800px" frameborder="0"></iframe>。
2、动态设置 src 属性为 OnlyOffice 文档编辑地址,格式为:https://docs.example.com/Editor.aspx?_dc=xxx&doc=xxx,其中 _dc 参数需随每次加载递增以绕过钉钉 WebView 缓存。
3、绑定 message 事件监听器,接收来自 iframe 的 onOutdatedVersion、onDocumentStateChange 和 onRequestClose 等回调,执行对应业务逻辑(如提示升级、触发自动保存、关闭当前微应用页)。
五、启用钉钉文件存储直连 OnlyOffice 文档服务
若需在钉钉网盘中点击 .docx/.xlsx 文件直接唤起 OnlyOffice 编辑,需在钉钉开放平台配置「文档预览」能力并对接自有文档服务接口。
1、进入「能力中心」→「文档服务」→「自定义文档预览」,启用该能力并填写回调地址,如:https://api.example.com/dingtalk/onlyoffice/preload。
2、该回调接口需返回标准 JSON 响应,包含 fileUrl(指向钉钉临时文件直链)、title、callbackUrl(保存回写地址)及 editorConfig 子对象。
3、响应中 fileUrl 必须为钉钉签发的、带有效期与签名的临时下载链接,且域名已在上一步可信域名中备案;否则 iframe 将因跨域被拦截。


















