用途:把 Omni Analytics 仪表盘嵌入外部应用,使用签名 iframe URL 加载,并通过 postMessage 实现父应用与 iframe 的双向通信。
主要能力:@omni-co/embed SDK 负责 URL 签名与主题定制;embedSsoDashboard() 生成签名 URL,参数包括 contentId、secret、host、externalId、name,可选 userAttributes(行级安全)、mode、prefersDark、customTheme、entity。customTheme 可控制仪表盘背景、磁贴、筛选控件、弹层与按钮等样式,建议用纯十六进制色值。事件方面,Omni 事件均带 source: "omni",包括 dashboard:loaded、dashboard:filters、error、dashboard:tile-drill、page:changed 及自定义可视化事件;父应用可用 dashboard:filter-change-by-url-parameter 向 iframe 推送筛选。实体工作区配合 entity、entityFolderContentRole、mode: Application、uiSettings、connectionRoles 让嵌入用户创建并保存自己的仪表盘。
使用方式:先 npm install @omni-co/embed,确认 Omni CLI 已安装并完成配置(omni config show、omni config use <profile-name>、omni whoami),设置 OMNI_EMBED_SECRET(来自 Admin → Embed)与 OMNI_EMBED_HOST(裸 .embed-omniapp.co 主机名,不含协议与端口)。签名须用 SDK 的 embedSsoDashboard(),不要手写 HMAC,也不要用 OMNI_API_TOKEN 当嵌入密钥。权限感知场景可先 omni scim embed-users-list --filter 'embedExternalId eq "user@example.com"' 查用户 ID,再 omni documents list --user-id <omniUserId> 列出文档,过滤 hasDashboard: true,用 identifier 作为 contentId。
限制:host 含协议或端口会返回 400;API/CLI 调用使用 API 主机,签名 iframe 才用嵌入主机;密钥缺失时不要伪造签名 URL,应返回使用 process.env.OMNI_EMBED_SECRET 的服务端代码;无 Node.js 时仍提供 TypeScript/Node 服务端代码,不改为 Python 或浏览器端手动签名;linear-gradient() 与 rgba() 经 SDK 传递可能失败。其他细节资料未提供。