ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Zoom Meeting SDK 集成实战:在 knowledge-work-plugins 中将 Zoom 会议嵌入 Web、桌面、移动端与 Linux 机器人环境

Zoom Meeting SDK 集成实战:在 knowledge-work-plugins 中将 Zoom 会议嵌入 Web、桌面、移动端与 Linux 机器人环境 Zoom Meeting SDK 集成实战在 knowledge-work-plugins 中将 Zoom 会议嵌入 Web、桌面、移动端与 Linux 机器人环境【免费下载链接】knowledge-work-pluginsOpen source repository of plugins primarily intended for knowledge workers to use in Claude Cowork项目地址: https://gitcode.com/GitHub_Trending/kn/knowledge-work-plugins本篇技术指南以knowledge-work-plugins仓库中 meeting-sdk 技能文档 为主体系统讲解 Zoom Meeting SDK 的完整集成路线从 Web 端 Client View / Component View 的选型与快速接入到服务端签名签发、JWT/ZAK/OBF 三类令牌体系再到 Android、iOS、macOS、Unreal、Electron、Windows、React Native 与 Linux 无头机器人等全平台实现细节。读完本文你将掌握 Meeting SDK 的硬性路由规则、可复制的快速开始代码、生产级签名后端与 5 分钟预检排障流程避免陷入 RESTjoin_url与 SDK join 调用混淆的常见坑。一、技能定位与硬性路由守护规则在 SKILL.md 中meeting-sdk被定义为 build-zoom-meeting-sdk-app 参考技能定位是把完整的 Zoom 会议体验嵌入 Web、移动端、桌面端与无头headless集成。它明确要求优先使用build-zoom-meeting-app或build-zoom-bot技能完成路由再进入本技能获取平台级细节。文档开篇列出了一条必须先读的硬性路由守护规则Hard Routing Guardrail如果用户要求在自有 App UI 内嵌入/加入会议必须路由到 Meeting SDK 实现除非用户明确要求会议资源管理或浏览器join_url链接否则不得切换到纯 REST 会议链接流程Meeting SDK 的加入路径要求SDK 签名 SDK join 调用REST 的join_url并不是 Meeting SDK 的加入负载payload。RUNBOOK.md 中进一步给出了“错路探测器”如果实现中产出的是一串join_url链接而不是 SDK join 调用说明你走在了 REST 路径上如果代码依赖GET/POST /v2/meetings但用户要的是内嵌 join 体验同样是走错了路。一个合格的 Meeting SDK MVP 必须包含签名端点 前端ZoomMtg/ZoomMtgEmbeddedjoin 调用。技能还挂接了三个辅助入口认证流程见 zoom-oauth 技能Web 端加入前诊断用 probe-sdk 技能快速排障先跑 5 分钟 Runbook。二、前置条件按照原文档接入 Meeting SDK 需要一个启用了 Meeting SDK 凭据的 Zoom App来自 Zoom Marketplace 的SDK Key 与 SDK Secret平台对应的开发环境Web、Android、iOS、macOS、Unreal、Electron、Linux 或 Windows。references/environment-variables.md 给出了标准化的.env键名约定方便你统一管理凭据变量是否必需用途获取位置ZOOM_SDK_KEY是Meeting SDK 签名签发方标识Zoom Marketplace → Meeting SDK App → App CredentialsZOOM_SDK_SECRET是签名生成密钥Zoom Marketplace → Meeting SDK App → App CredentialsZOOM_MEETING_NUMBER按流程要加入/发起的会议号会议邀请、Zoom Web 门户或 Meetings APIZOOM_MEETING_PASSWORD按条件会议密码会议邀请详情 / Meetings APIZOOM_ROLE按条件签名角色0参会者、1主持人由你的应用逻辑设定ZOOM_ZAK仅主持人流程发起会议的主机授权令牌通过 Zoom REST API 用户令牌端点生成另有运行时值MEETING_SDK_JWT生成的签名必须在服务端生成并保持短时效。任何情况下都不得把ZOOM_SDK_SECRET暴露给前端或移动端客户端。三、快速开始Web Client ViewCDN 方式原文档给出的最小可运行示例通过 CDN 加载 Zoom 会议 UIClient View 全页模式核心调用链为preLoadWasm()→prepareWebSDK()→init()→join()script srchttps://source.zoom.us/3.1.6/lib/vendor/react.min.js/script script srchttps://source.zoom.us/3.1.6/lib/vendor/react-dom.min.js/script script srchttps://source.zoom.us/3.1.6/lib/vendor/redux.min.js/script script srchttps://source.zoom.us/3.1.6/lib/vendor/redux-thunk.min.js/script script srchttps://source.zoom.us/3.1.6/lib/vendor/lodash.min.js/script script srchttps://source.zoom.us/3.1.6/zoom-meeting-3.1.6.min.js/script script // CDN 提供 ZoomMtgClient View全页模式 // 如需 ZoomMtgEmbeddedComponent View嵌入模式请改用 npm 安装 ZoomMtg.preLoadWasm(); ZoomMtg.prepareWebSDK(); ZoomMtg.init({ leaveUrl: window.location.href, patchJsMedia: true, disableCORP: !window.crossOriginIsolated, success: function() { ZoomMtg.join({ sdkKey: YOUR_SDK_KEY, signature: YOUR_SIGNATURE, // 必须在服务端生成 meetingNumber: MEETING_NUMBER, userName: User Name, passWord: , // 注意camelCaseW 为大写 success: function(res) { console.log(Joined); }, error: function(err) { console.error(err); } }); }, error: function(err) { console.error(err); } }); /script两点必须立即记住signature必须由服务端生成passWord是 camelCase 且 W 大写——这是 Web Client View 的专属拼写与 Component View 的password全小写完全不同。四、Web 端关键注意事项Critical Notes1. CDN 与 npm 是完全不同的两套 API这是新手最容易踩的坑。原文档用一张对照表明确了两者的差异分发方式全局对象视图类型API 风格CDNzoom-meeting-{ver}.min.jsZoomMtgClient View全页回调Callbacksnpmzoom/meetingsdkZoomMtgEmbeddedComponent View可嵌入Promise在 web/SKILL.md 中这份对照被扩展得更细Client View 用passWord大写 W、事件走inMeetingServiceListener()Component View 用password小写、事件走on()/off()且 npm 导入路径分别为import { ZoomMtg } from zoom/meetingsdk与import ZoomMtgEmbedded from zoom/meetingsdk/embedded。两种模式严禁混用 API。2. 生产环境必须后端签发签名永远不要在客户端代码中暴露 SDK Secret。签名必须由服务端生成原文档给出了 Node.js 示例// server.jsNode.js 示例 const KJUR require(jsrsasign); app.post(/api/signature, (req, res) { const { meetingNumber, role } req.body; const iat Math.floor(Date.now() / 1000) - 30; const exp iat 60 * 60 * 2; const header { alg: HS256, typ: JWT }; const payload { sdkKey: process.env.ZOOM_SDK_KEY, mn: String(meetingNumber).replace(/\D/g, ), role: parseInt(role, 10), iat, exp, tokenExp: exp }; const signature KJUR.jws.JWS.sign(HS256, JSON.stringify(header), JSON.stringify(payload), process.env.ZOOM_SDK_SECRET ); res.json({ signature, sdkKey: process.env.ZOOM_SDK_KEY }); });注意mn做了\D清理只保留数字——签名载荷中的会议号必须是纯数字字符串。3. CSS 冲突避免全局重置全局* { margin: 0; }这类重置会破坏 Zoom 自带 UI 的布局。原文档给出的建议是/* 错误示范 */ * { margin: 0; padding: 0; } /* 正确做法只在你的应用作用域内声明 */ .your-app, .your-app * { box-sizing: border-box; }4. Client View 工具栏裁切修复当全页模式下的工具栏超出屏幕时可以通过对#zmmtg-root施加缩放来修复#zmmtg-root { position: fixed !important; top: 0 !important; left: 0 !important; right: 0 !important; bottom: 0 !important; width: 100vw !important; height: 100vh !important; /* 对 SPAReact/Next 等至关重要确保 Zoom UI 不被应用外壳/浮层遮挡 */ z-index: 9999 !important; transform: scale(0.95) !important; transform-origin: top center !important; }注释中点名了 SPA 场景的关键风险应用 shell 与浮层overlay可能盖住 Zoom UI因此需要固定定位加高 z-index。5. 会议开始时隐藏你的应用 UIClient View 会接管整个页面因此需要在init成功回调里隐藏自有界面// 在 ZoomMtg.init 成功回调中 document.documentElement.classList.add(meeting-active); document.body.classList.add(meeting-active);body.meeting-active .your-app { display: none !important; } body.meeting-active { background: #000 !important; }五、UI 选项Client View 与 Component ViewMeeting SDK 的 UI 哲学是以 Zoom 官方 UI 为基底、在其上做定制——这与 Video SDK 从零自建 UI 的模式完全不同。视图描述Component View可抽取、可定制的 UI可把会议嵌入到页面某个 div 中Client View全页面的 Zoom UI 体验web/SKILL.md 给出的选型建议是追求快速集成、接受全页体验时选 Client View需要在页面特定区域嵌入、构建 React/Vue/Angular 应用、想要 Promise/async-await 语法、需要自定义定位与缩放时优先选 Component View。若用户明确要“在 Web 应用中为 Zoom 会议实现自定义视频 UI”必须路由到Meeting SDK Component View而不是 Video SDK——Component View 是真实 Zoom 会议的自定义 UI而 Video SDK Web 是非会议视频会话产品的 UI。六、核心概念速查概念说明SDK Key/Secret来自 Marketplace 的凭据Signature用 SDK Secret 签名的 JWTComponent View可抽取、可定制的 UIWebClient View全页 Zoom UIWeb七、签名生成原理与常见失败模式references/authorization.md 与 references/signature-playbook.md 对签名机制做了源码级补充。JWT 签名的载荷包含以下字段字段说明sdkKey你的 SDK Keymn会议号纯数字role0 参会者1 主持人iat签发时间戳exp过期时间戳tokenExp令牌过期时间戳短时效令牌最佳实践iat取当前时间前推 2 小时满足 Zoom 对exp - iat 2 hours的要求exp取当前时间后推 10 秒安全短时效即“刚生成、立刻用”const jwt require(jsonwebtoken); function generateSignature(sdkKey, sdkSecret, meetingNumber, role) { const iat Math.floor(Date.now() / 1000) - 7200; // 2 小时前 const exp Math.floor(Date.now() / 1000) 10; // 10 秒后 const payload { sdkKey: sdkKey, mn: meetingNumber, role: role, iat: iat, exp: exp, tokenExp: exp }; return jwt.sign(payload, sdkSecret, { algorithm: HS256 }); }签名规则三条铁律来自 signature-playbook只在服务端生成签名绝不把 SDK Secret 交给浏览器或 AppmeetingNumber必须只含数字role必须与行为匹配0以参会者身份加入1以主持人身份发起同时注意iat/exp要合理并考虑时钟偏移以服务器时间为准。常见失败模式包括Invalid signature密钥错误、mn格式错误、exp/tokenExp过期、用 role1 的签名去加入会议或反之Web “发起”流程常见的4003 Invalid Parameter角色不匹配或缺主持人条件通常需要 ZAK“本地正常、生产环境失败”环境变量/密钥不一致、生产服务器时钟偏移。此外还有一个 Web 专属坑passWord拼写错误或缺失会让带密码的会议加入失败且表象很像认证问题。八、令牌体系JWT 签名、ZAK 与 OBFreferences/bot-authentication.md 专门澄清了三类令牌这是“meeting bot”场景下最容易混淆的部分令牌用途是否始终需要是否已废弃JWT 签名初始化/认证 Meeting SDK是否ZAK 令牌以某个 Zoom 用户身份认证否视场景否OBF 令牌以用户归属方式加入外部会议否按仓库文档2026 年 2 月后外部会议必需否最大的误区是把 “JWT App 类型” 与 “JWT 签名” 混为一谈前者是用于 REST API 认证的 App 类型已迁移到 Server-to-Server OAuth后者是 Meeting SDK 仍必需且未废弃的签名机制。ZAKZoom Access Key是证明你的机器人/应用已认证为某个特定 Zoom 用户的短时效凭据。以下场景需要 ZAK会议启用了“仅允许已认证用户加入”、以主持人身份发起会议主持人不在场时、把机器人头像改为对应用户。获取方式先通过 OAuth 授权码换 access token再调用GET /v2/users/me/token?typezakttl7200所需 scope 为user:read:zak。注意任意 Zoom 账号的 ZAK 都满足“仅认证用户”要求不必是会议参与者的 ZAK——可以创建一个专用服务账号如meeting-botcompany.com供所有机器人使用。OBFOn-Behalf-Of代用户令牌把 SDK 应用绑定到会议中某个真实用户用于外部会议的问责与透明。与 ZAK 的关键差异OBF 要求授权用户必须在会议中否则机器人会被立即断开且只对特定会议 ID 有效ZAK 不要求用户在场。获取方式GET /v2/users/me/token?typeonbehalfmeeting_id{meeting_id}scope 为user:read:token。zak与obfToken互斥只能二选一。若机器人先于授权用户加入会议而失败SDK v6.6.10 会返回MEETING_FAIL_AUTHORIZED_USER_NOT_INMEETING需要实现带退避重试的加入逻辑。按仓库文档的时间线当前阶段 JWT 签名必需、ZAK 可选2025 年 11 月起 SDK v6.6.10 引入 OBF 专属错误码外部会议自 2026 年起要求 OBF 或 ZAKbot-authentication.md 记录为 2026-02-23web/SKILL.md 记录为 2026-03-02两处时间表述略有差异实施前应以官方最新公告为准。九、平台指南总览原文档以“Detailed References”形式为每个平台都维护了独立技能入口架构上采用“平台 SKILL reference-map/pointer doc”双层组织平台入口文档覆盖内容Androidandroid/SKILL.md默认/自定义 UI、join/start、认证生命周期、移动端集成API 面漂移观察点见 android-reference-map.mdiOSios/SKILL.md默认/自定义 UI、join/start、认证生命周期API 面见 ios-reference-map.mdmacOSmacos/SKILL.md桌面默认/自定义 UI、service controllers、主持人流程API 面见 macos-reference-map.mdUnrealunreal/SKILL.mdC/Blueprint 包装器行为与 SDK 映射版本滞后说明见 unreal-reference-map.mdLinuxlinux/SKILL.mdC 无头机器人、原始媒体访问React Nativereact-native/SKILL.mdiOS/Android 包装器、join/start 流程、bridge 搭建Electronelectron/SKILL.md桌面包装器、认证/加入流程、模块控制器、raw dataWindowswindows/SKILL.mdC 桌面应用、原始媒体访问Webweb/SKILL.mdClient View Component View 双模式Linux 无头机器人要点以 linux/SKILL.md 为例Linux SDK 是面向 Docker/云端无头环境的 C 库核心能力包括无需 GUI 的无头运行、YUV420 原始视频与 32kHz PCM 原始音频访问、GLib 事件循环、预置 CentOS/Ubuntu Dockerfile、PulseAudio 虚拟音频设备。最小原始录制流程为JoinParam join_param; join_param.userType SDK_UT_WITHOUT_LOGIN; auto params join_param.param.withoutloginuserJoin; params.meetingNumber meeting_number; params.userName Recording Bot; params.psw meeting_password.c_str(); params.app_privilege_token obf_token.c_str(); SDKError join_err meeting_service-Join(join_param); if (join_err ! SDKERR_SUCCESS) { throw std::runtime_error(join_failed); } // 在 MEETING_STATUS_INMEETING 回调中 auto* record_ctrl meeting_service-GetMeetingRecordingController(); if (!record_ctrl) { throw std::runtime_error(recording_controller_unavailable); } if (record_ctrl-CanStartRawRecording() ! SDKERR_SUCCESS) { throw std::runtime_error(raw_recording_not_permitted); } SDKError record_err record_ctrl-StartRawRecording(); if (record_err ! SDKERR_SUCCESS) { throw std::runtime_error(start_raw_recording_failed); } GetAudioRawdataHelper()-subscribe(new MyAudioDelegate());该文档还强调了几条高价值实践Docker 中无音频的 #1 原因是缺 PulseAudio 配置需创建~/.config/zoomus.conf并加载虚拟声卡原始录制必须显式调用StartRawRecording()才能订阅媒体流可通过主持人/联席主持人身份、录制令牌或 OBFapp_privilege_token获得权限没有 GLib 主循环回调永远不会触发、join 会挂起raw data 一律建议使用堆内存模式ZoomSDKRawDataMemoryModeHeap回调运行在 SDK 线程上不要在回调内做重操作或调用CleanUPSDK()。十、特性参考与深度主题原文档列出了可深入的功能主题文档均可按需查阅references/authorization.md — SDK JWT 生成references/bot-authentication.md — 机器人场景的 ZAK vs OBF vs JWT 令牌references/breakout-rooms.md — 程序化分组讨论室管理references/ai-companion.md — 会议中的 AI Companion 控制references/webinars.md — 网络研讨会 SDK 特性references/multiple-meetings.md — 多会议/多实例加入references/troubleshooting.md — 常见问题与解决方案references/forum-top-questions.md — 论坛高频问题模式references/triage-intake.md — 模糊问题如何先问清references/signature-playbook.md — 签名问题根因排查手册web/references/web-tracking-id.md — Tracking ID 配置十一、5 分钟预检 Runbook快速排障RUNBOOK.md 是官方推荐的“深挖调试前先跑”的 5 分钟预检清单按以下顺序逐项核对确认集成模式Web Client ViewCDN/全局ZoomMtg还是 Component ViewnpmZoomMtgEmbedded两种模式严禁混用 API确认签名路径签名必须在服务端用 SDK Secret 生成、绝不暴露在浏览器代码中且签名载荷中的meetingNumber和role必须与 join 请求一致确认 join 负载卫生只传有效值、避免 undefined 可选字段、会议号规范化为数字字符串出现渲染问题先用更保守的默认视图设置测试确认浏览器与安全前置使用高级媒体特性时验证跨源隔离COOP/COEP避免会破坏 Zoom 布局的全局 CSS 重置确保页面浮层/z-index 不遮挡会议容器确认路由与基础路径签名端点必须能被前端访问推荐同源代理子路径部署要检查 fetch URL 与反向代理重写快速探针签名端点返回含非空 signature 的 JSON、join 调用返回可操作的 SDK 错误而非通用 404 HTML、浏览器控制台无明显的 mixed-content/CORS 拦截。可直接复制的验证命令# 1) 验证签名端点返回 JSON curl -sS -i $MEETING_SDK_BASE_URL/api/signature # 2) 验证应用页面可达并返回 HTML curl -sS -i $MEETING_SDK_BASE_URL预期两个端点都返回有效的 JSON/HTML而非 404/502 通用页。快速决策树黑屏/白屏 → 检查 CSS、z-index、模式不匹配与负载字段卫生快速加入失败 → 签名负载不匹配或签名过期间歇性加载问题 → 跨源隔离或浏览器扩展干扰SDK 选型守护嵌入真实会议体验用 Meeting SDK构建完全自定义的视频体验用 Video SDK错路探测器产出join_url链接 → REST 路径依赖/v2/meetings而用户要内嵌 join → 错路。Meeting SDK MVP 必须包含签名端点 前端ZoomMtg/ZoomMtgEmbeddedjoin。十二、Web 端进阶签名端点、事件监听与高可用细节web/SKILL.md 把 Web 端细节扩展得更完整。两种视图都要求后端提供 JWT 签名端点例如克隆官方 auth endpoint 示例配置.env后npm install npm run start并给出标准工作流┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Get Signature │───►│ init() │───►│ join() │ │ (from backend)│ │ (SDK setup) │ │ (enter mtg) │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ ▼ ▼ success/error success/error callback callback (or Promise resolve) (or Promise resolve)Client View 事件通过ZoomMtg.inMeetingServiceListener()注册onUserJoin/onUserLeave含 reasonCode 枚举0 其他、1 主持人结束会议、2 主动离开、3 从等候室离开、4 等待主持人开始、5 会议转移、6 被移出、7 被移出等候室、8 离开声明页、onMeetingStatus1 连接中、2 已连接、3 已断开、4 重连中、onUserIsInWaitingRoom、onActiveSpeaker、onNetworkQualityChangelevel 0-1 差、2 正常、3-5 良好、onJoinSpeed、onReceiveChatMsg、onRecordingChange、onShareContentChange、onReceiveTranscriptionMsg需开启“保存字幕”、onRoomStatusChange2 进行中、3 关闭中、4 已关闭等。Component View 事件通过client.on()/client.off()注册connection-changeConnecting/Connected/Reconnecting/Closed、user-added/user-removed/user-updated、active-speaker、video-active-change等。常用方法Client View 的getCurrentUser、getAttendeeslist、mute/muteAll、sendChatuserId 0 表示全体、leaveMeeting/endMeeting、主持人控制makeHost/makeCoHost/expel/putOnHold、分组讨论室createBreakoutRoom/openBreakoutRooms/closeBreakoutRooms、setVirtualBackgroundComponent View 对应为getCurrentUser()、getParticipantsList()、mute/muteAudio/muteVideo、leaveMeeting()/endMeeting()。辅助工具从邀请链接自动提取会议号9-11位数字正则与密码pwd参数、动态切换语言ZoomMtg.i18n.load/reloadreRender、进入前用checkSystemRequirements()检测浏览器兼容性。十三、SharedArrayBufferHD 视频的前置条件Web 端的高阶特性——720p/1080p 视频、宫格视图、虚拟背景、背景降噪——都依赖SharedArrayBuffer见 concepts/sharedarraybuffer.md。开启方式是在服务端配置两条跨源隔离响应头Cross-Origin-Opener-Policy: same-origin Cross-Origin-Embedder-Policy: require-corp浏览器端验证if (typeof SharedArrayBuffer function) { console.log(SharedArrayBuffer enabled!); } else { console.warn(HD features will be limited); } console.log(Cross-origin isolated:, window.crossOriginIsolated);由于 COOP/COEP 头可能破坏页面导航官方示例普遍采用双服务器开发模式主应用服务器如端口 9999不设隔离头、正常导航会议页面服务器如端口 9998带隔离头再由主服务器反向代理/meeting.html。Vite 场景可直接在配置中加头// vite.config.ts export default defineConfig({ server: { headers: { Cross-Origin-Embedder-Policy: require-corp, Cross-Origin-Opener-Policy: same-origin, } } });按 web/references/web.md 的说明启用 720p 还需要向 Zoom 支持申请开通、在 Zoom 配置中启用 “Group HD”、SharedArrayBuffer 可用、网络与 CPU 余量充足分辨率阶梯为 1:1 通话最高 1080p、2-4 人小组最高 720p、更大会议自适应且当第 3 名参会者开启视频时会回退到标清。浏览器支持矩阵的完整版见 web/concepts/browser-support.md。十四、React 集成模式web/SKILL.md 指出官方 React 示例采用命令式初始化而非 React hooks在模块级调用preLoadWasm()与prepareWebSDK()点击按钮后 fetch 签名端点 →init→join。官方示例暴露的常见坑包括createClient()写在组件体内导致每次渲染重建客户端应用useRef持久化、不依赖 React 生命周期钩子SDK 的leaveOnPageUnload负责清理、直接用getElementById生产环境改用useRefHTMLDivElement、缺少错误状态处理以及模块级副作用preLoadWasm()可能与 SSR 冲突。生产级模式是用useRef持久化客户端实例、useRefHTMLDivElement绑定容器、useState管理加入中/错误状态组件挂载时仅创建一次客户端。十五、环境变量与配置约定跨平台统一的环境变量约定已在本文章节二列出ZOOM_SDK_KEY、ZOOM_SDK_SECRET、ZOOM_MEETING_NUMBER、ZOOM_MEETING_PASSWORD、ZOOM_ROLE、ZOOM_ZAK。每个平台还有各自的.env细节例如 Android 见 android/references/environment-variables.md、iOS 见 ios/references/environment-variables.md、macOS 见 macos/references/environment-variables.md、Unreal 见 unreal/references/environment-variables.md。Vite 前端通过VITE_AUTH_ENDPOINT与VITE_SDK_KEY这类前缀变量读取签名端点与 SDK Keyimport.meta.env。十六、示例仓库与学习路径原文档整理了 Zoom 官方维护的示例仓库按技术栈分类Linux Headless、Linux Raw Data、Web、Web NPM、React、Auth、Angular、Vue.js完整清单见 general/references/community-repos.md。官方文档与开发者论坛是权威资料源仓库内的 web/SKILL.md 还提供了按视图类型、概念、示例、故障排查组织的完整导航索引。推荐学习路径先读本文与 SKILL.md 建立整体路由意识 → 按平台进入对应 SKILL → 动手前跑一遍 RUNBOOK.md 预检 → 遇签名问题查 signature-playbook.md遇机器人认证问题查 bot-authentication.md。十七、常见问题速查表问题排查方向加入失败且报签名错误校验签名生成、sdkKey 格式、mn是否纯数字、exp/tokenExp是否过期、role 是否匹配带密码会议加入失败检查passWordClient View大写 W与passwordComponent View小写是否拼错无 HD 视频确认服务端已配置 COOP/COEP 头、浏览器支持 SharedArrayBuffer黑屏/空白 UI检查 CSS 重置、z-index 遮挡、Client/Component 模式是否混用、负载字段是否规范间歇性加载问题排查跨源隔离配置与浏览器扩展干扰本地正常、生产失败核对环境变量/密钥是否一致、生产服务器时钟偏移外部会议加入被拒2026 后按 bot-authentication.md 补 OBF 或 ZAK 令牌二者互斥机器人先于授权用户加入失败实现MEETING_FAIL_AUTHORIZED_USER_NOT_INMEETING重试逻辑3 秒间隔、最多 5 次完整错误码与问题清单见 web/troubleshooting/error-codes.md 与 web/troubleshooting/common-issues.md平台级问题分别见各平台troubleshooting/目录。深度调试前永远先执行 5 分钟 Runbook。【免费下载链接】knowledge-work-pluginsOpen source repository of plugins primarily intended for knowledge workers to use in Claude Cowork项目地址: https://gitcode.com/GitHub_Trending/kn/knowledge-work-plugins创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表