[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-anthropic-zoom-rtms":3,"mdc-umxbbv-key":37,"related-repo-anthropic-zoom-rtms":5949,"related-org-anthropic-zoom-rtms":6068},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"zoom-rtms","process live media with Zoom RTMS","Reference skill for Zoom RTMS. Use after routing to a live-media workflow when processing real-time audio, video, chat, transcripts, screen share, or contact-center voice streams.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"anthropic","Anthropic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fanthropic.png","anthropics",[13,17,20,23],{"name":14,"slug":15,"type":16},"Audio","audio","tag",{"name":18,"slug":19,"type":16},"Video","video",{"name":21,"slug":22,"type":16},"Zoom","zoom",{"name":24,"slug":25,"type":16},"Real-time","real-time",22885,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins","2026-04-10T04:56:47.39171",null,2736,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"Open source repository of plugins primarily intended for knowledge workers to use in Claude Cowork","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Ftree\u002FHEAD\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Frtms","---\nname: zoom-rtms\ndescription: Reference skill for Zoom RTMS. Use after routing to a live-media workflow when processing real-time audio, video, chat, transcripts, screen share, or contact-center voice streams.\nuser-invocable: false\ntriggers:\n  - \"real-time media\"\n  - \"rtms\"\n  - \"live audio stream\"\n  - \"live video stream\"\n  - \"meeting transcription\"\n  - \"raw audio\"\n  - \"raw video\"\n  - \"websocket media\"\n  - \"live transcript\"\n  - \"streaming audio\"\n  - \"streaming video\"\n  - \"meeting bot media\"\n  - \"contact center voice media\"\n  - \"participant video on\"\n  - \"participant video off\"\n  - \"single individual video stream\"\n---\n\n# Zoom Realtime Media Streams (RTMS)\n\nBackground reference for live Zoom media pipelines. Prefer `build-zoom-bot` first, then use this skill for stream types, capabilities, and RTMS-specific implementation constraints.\n\n# Zoom Realtime Media Streams (RTMS)\n\nExpert guidance for accessing live audio, video, transcript, chat, and screen share data from Zoom meetings, webinars, Video SDK sessions, and Zoom Contact Center Voice in real-time. RTMS uses a WebSocket-based protocol with open standards and does not require a meeting bot to capture the media plane.\n\n## Read This First (Critical)\n\nRTMS is primarily a **backend media ingestion service**.\n\n- Your backend receives and processes live media: **audio, video, screen share, chat, transcript**.\n- RTMS is not a frontend UI SDK by itself.\n- Processing is **event-triggered**: backend waits for RTMS start webhook events before stream handling begins.\n\nOptional architecture (common):\n\n- Add a **Zoom App SDK** frontend for in-client UI\u002Fcontrols.\n- Stream backend RTMS outputs to frontend via **WebSocket** (or SSE, gRPC, queue workers, etc.).\n\nUse RTMS for media\u002Fdata plane, and use frontend frameworks\u002FZoom Apps for presentation + user interactions.\n\n**Official Documentation**: https:\u002F\u002Fdevelopers.zoom.us\u002Fdocs\u002Frtms\u002F\n**SDK Reference (JS)**: https:\u002F\u002Fzoom.github.io\u002Frtms\u002Fjs\u002F\n**SDK Reference (Python)**: https:\u002F\u002Fzoom.github.io\u002Frtms\u002Fpy\u002F\n**Sample Repository**: https:\u002F\u002Fgithub.com\u002Fzoom\u002Frtms-samples\n\n## Quick Links\n\n**New to RTMS? Follow this path:**\n\n1. **[Connection Architecture](concepts\u002Fconnection-architecture.md)** - Two-phase WebSocket design\n2. **[SDK Quickstart](examples\u002Fsdk-quickstart.md)** - Fastest way to receive media (recommended)\n3. **[Manual WebSocket](examples\u002Fmanual-websocket.md)** - Full protocol control without SDK\n4. **[Media Types](references\u002Fmedia-types.md)** - Audio, video, transcript, chat, screen share\n\n**Complete Implementation:**\n- **[RTMS Bot](examples\u002Frtms-bot.md)** - End-to-end bot implementation guide\n\n**Reference:**\n- **[Lifecycle Flow](concepts\u002Flifecycle-flow.md)** - Complete webhook-to-streaming flow\n- **[Data Types](references\u002Fdata-types.md)** - All enums and constants\n- **[Webhooks](references\u002Fwebhooks.md)** - Event subscription details\n- **[Environment Variables](references\u002Fenvironment-variables.md)** - credential modes and runtime knobs\n- **[Quickstart Notes](references\u002Fquickstart.md)** - Secondary quickstart guide\n- **Integrated Index** - see the section below in this file\n\n**Having issues?**\n- Connection fails -> [Common Issues](troubleshooting\u002Fcommon-issues.md)\n- Duplicate connections -> [Webhook Gotchas](troubleshooting\u002Fcommon-issues.md#webhook-response-timing)\n- No audio\u002Fvideo -> [Media Configuration](references\u002Fmedia-types.md)\n- Start with preflight checks -> [5-Minute Runbook](RUNBOOK.md)\n\n## Supported Products\n\n| Product | Webhook Event | Payload ID | App Type |\n|---------|--------------|------------|----------|\n| **Meetings** | `meeting.rtms_started` \u002F `meeting.rtms_stopped` | `meeting_uuid` | General App |\n| **Webinars** | `webinar.rtms_started` \u002F `webinar.rtms_stopped` | `meeting_uuid` (same!) | General App |\n| **Video SDK** | `session.rtms_started` \u002F `session.rtms_stopped` | `session_id` | Video SDK App |\n| **Zoom Contact Center Voice** | Product-specific RTMS\u002FZCC Voice events | Product-specific stream\u002Fsession identifiers | Contact Center \u002F approved RTMS integration |\n\nOnce connected, the core signaling\u002Fmedia socket model is shared across products. Meetings, webinars, and Video SDK sessions use the familiar start\u002Fstop webhooks. Zoom Contact Center Voice adds its own RTMS\u002FZCC Voice event family and should be treated as the same transport model with product-specific event payloads.\n\n## RTMS Overview\n\nRTMS is a data pipeline that gives your app access to live media from Zoom meetings, webinars, and Video SDK sessions **without participant bots**. Instead of having automated clients join meetings, use RTMS to collect media data directly from Zoom's infrastructure.\n\n### What RTMS Provides\n\n| Media Type | Format | Use Cases |\n|------------|--------|-----------|\n| **Audio** | PCM (L16), G.711, G.722, Opus | Transcription, voice analysis, recording |\n| **Video** | H.264, JPG, PNG | Recording, AI vision, thumbnails, active participant selection |\n| **Screen Share** | H.264, JPG, PNG | Content capture, slide extraction |\n| **Transcript** | JSON text | Meeting notes, search, compliance |\n| **Chat** | JSON text | Archive, sentiment analysis |\n\n### March 2026 Protocol Changes\n\n- **Zoom Contact Center Voice support**: RTMS now covers Contact Center Voice audio and transcript scenarios.\n- **Transcript Language Identification control**: transcript media handshakes now support `src_language` and `enable_lid`. Default behavior is LID enabled. Set `enable_lid: false` to force a fixed language.\n- **Single individual video stream subscription**: RTMS can now stream one participant's camera feed at a time when `data_opt` is set to `VIDEO_SINGLE_INDIVIDUAL_STREAM`.\n- **Graceful client-initiated shutdown**: backends can send `STREAM_CLOSE_REQ` over the signaling socket and wait for `STREAM_CLOSE_RESP`.\n- **Media keep-alive tolerance increased**: media socket keep-alive timeout is now **65 seconds**, not 35.\n\n### Two Approaches\n\n| Approach | Best For | Complexity |\n|----------|----------|------------|\n| **SDK** (`@zoom\u002Frtms`) | Most use cases | Low - handles WebSocket complexity |\n| **Manual WebSocket** | Custom protocols, other languages | High - full protocol implementation |\n\n## Prerequisites\n\n- **Node.js 20.3.0+** (24 LTS recommended) for JavaScript SDK\n- **Python 3.10+** for Python SDK\n- Zoom General App (for meetings\u002Fwebinars) or Video SDK App (for Video SDK) with RTMS feature enabled\n- Webhook endpoint for RTMS events\n- Server to receive WebSocket streams\n\n> **Need RTMS access?** Post in [Zoom Developer Forum](https:\u002F\u002Fdevforum.zoom.us\u002F) requesting RTMS access with your use case.\n\n## Quick Start (SDK - Recommended)\n\n```javascript\nimport rtms from \"@zoom\u002Frtms\";\n\n\u002F\u002F All RTMS start\u002Fstop events across products\nconst RTMS_EVENTS = [\"meeting.rtms_started\", \"webinar.rtms_started\", \"session.rtms_started\"];\n\n\u002F\u002F Handle webhook events\nrtms.onWebhookEvent(({ event, payload }) => {\n  if (!RTMS_EVENTS.includes(event)) return;\n\n  const client = new rtms.Client();\n\n  client.onAudioData((data, timestamp, metadata) => {\n    console.log(`Audio from ${metadata.userName}: ${data.length} bytes`);\n  });\n\n  client.onTranscriptData((data, timestamp, metadata) => {\n    const text = data.toString('utf8');\n    console.log(`${metadata.userName}: ${text}`);\n  });\n\n  client.onJoinConfirm((reason) => {\n    console.log(`Joined session: ${reason}`);\n  });\n\n  \u002F\u002F SDK handles all WebSocket connections automatically\n  \u002F\u002F Accepts both meeting_uuid and session_id transparently\n  client.join(payload);\n});\n```\n\n## Quick Start (Manual WebSocket)\n\nFor full control or non-SDK languages, implement the two-phase WebSocket protocol:\n\n```javascript\nconst WebSocket = require('ws');\nconst crypto = require('crypto');\n\nconst RTMS_EVENTS = ['meeting.rtms_started', 'webinar.rtms_started', 'session.rtms_started'];\n\n\u002F\u002F 1. Generate signature\n\u002F\u002F For meetings\u002Fwebinars: uses meeting_uuid. For Video SDK: uses session_id.\nfunction generateSignature(clientId, idValue, streamId, clientSecret) {\n  const message = `${clientId},${idValue},${streamId}`;\n  return crypto.createHmac('sha256', clientSecret).update(message).digest('hex');\n}\n\n\u002F\u002F 2. Handle webhook\napp.post('\u002Fwebhook', (req, res) => {\n  res.status(200).send();  \u002F\u002F CRITICAL: Respond immediately!\n  \n  const { event, payload } = req.body;\n  if (RTMS_EVENTS.includes(event)) {\n    connectToRTMS(payload);\n  }\n});\n\n\u002F\u002F 3. Connect to signaling WebSocket\nfunction connectToRTMS(payload) {\n  const { server_urls, rtms_stream_id } = payload;\n  \u002F\u002F meeting_uuid for meetings\u002Fwebinars, session_id for Video SDK\n  const idValue = payload.meeting_uuid || payload.session_id;\n  const signature = generateSignature(CLIENT_ID, idValue, rtms_stream_id, CLIENT_SECRET);\n  \n  const signalingWs = new WebSocket(server_urls);\n  \n  signalingWs.on('open', () => {\n    signalingWs.send(JSON.stringify({\n      msg_type: 1,  \u002F\u002F Handshake request\n      protocol_version: 1,\n      meeting_uuid: idValue,\n      rtms_stream_id,\n      signature,\n      media_type: 9  \u002F\u002F AUDIO(1) | TRANSCRIPT(8)\n    }));\n  });\n  \n  \u002F\u002F ... handle responses, connect to media WebSocket\n}\n```\n\n**See**: [Manual WebSocket Guide](examples\u002Fmanual-websocket.md) for complete implementation.\n\n## Media Type Bitmask\n\nCombine types with bitwise OR:\n\n| Type | Value | Description |\n|------|-------|-------------|\n| Audio | 1 | PCM audio samples |\n| Video | 2 | H.264\u002FJPG video frames |\n| Screen Share | 4 | **Separate from video!** |\n| Transcript | 8 | Real-time speech-to-text |\n| Chat | 16 | In-meeting chat messages |\n| All | 32 | All media types |\n\n**Example**: Audio + Transcript = `1 | 8` = `9`\n\n## Critical Gotchas\n\n| Issue | Solution |\n|-------|----------|\n| **Only 1 connection allowed** | New connections kick out existing ones. Track active sessions! |\n| **Respond 200 immediately** | If webhook delays, Zoom retries creating duplicate connections |\n| **Heartbeat mandatory** | Respond to msg_type 12 with msg_type 13, or connection dies |\n| **Reconnection is YOUR job** | RTMS doesn't auto-reconnect. Media keep-alive tolerance is now about **65s**; signaling remains around **60s** |\n| **Transcript language drift** | Use `src_language` plus `enable_lid: false` when you want fixed-language transcription instead of automatic language switching |\n| **Single participant video only** | `VIDEO_SINGLE_INDIVIDUAL_STREAM` supports one participant at a time. A new `VIDEO_SUBSCRIPTION_REQ` overrides the previous selection |\n| **Graceful close is explicit now** | Use `STREAM_CLOSE_REQ` \u002F `STREAM_CLOSE_RESP` when your backend wants to terminate the stream cleanly |\n\n## Environment Variables\n\n### SDK Environment Variables\n\n```bash\n# Required - Authentication\nZM_RTMS_CLIENT=your_client_id          # Zoom OAuth Client ID\nZM_RTMS_SECRET=your_client_secret      # Zoom OAuth Client Secret\n\n# Optional - Webhook server\nZM_RTMS_PORT=8080                      # Default: 8080\nZM_RTMS_PATH=\u002Fwebhook                  # Default: \u002F\n\n# Optional - Logging\nZM_RTMS_LOG_LEVEL=info                 # error, warn, info, debug, trace\nZM_RTMS_LOG_FORMAT=progressive         # progressive or json\nZM_RTMS_LOG_ENABLED=true\n```\n\n### Manual Implementation Variables\n\n```bash\nZOOM_CLIENT_ID=your_client_id\nZOOM_CLIENT_SECRET=your_client_secret\nZOOM_SECRET_TOKEN=your_webhook_token   # For webhook validation\n```\n\n## Zoom App Setup\n\n### For Meetings and Webinars (General App)\n\n1. Go to [marketplace.zoom.us](https:\u002F\u002Fmarketplace.zoom.us) -> Develop -> Build App\n2. Choose **General App** -> **User-Managed**\n3. Features -> Access -> **Enable Event Subscription**\n4. Add Events -> Search \"rtms\" -> Select:\n   - `meeting.rtms_started`\n   - `meeting.rtms_stopped`\n   - `webinar.rtms_started` (if using webinars)\n   - `webinar.rtms_stopped` (if using webinars)\n5. Scopes -> Add Scopes -> Search \"rtms\" -> Add:\n   - `meeting:read:meeting_audio`\n   - `meeting:read:meeting_video`\n   - `meeting:read:meeting_transcript`\n   - `meeting:read:meeting_chat`\n   - `webinar:read:webinar_audio` (if using webinars)\n   - `webinar:read:webinar_video` (if using webinars)\n   - `webinar:read:webinar_transcript` (if using webinars)\n   - `webinar:read:webinar_chat` (if using webinars)\n\n### For Video SDK (Video SDK App)\n\n1. Go to [marketplace.zoom.us](https:\u002F\u002Fmarketplace.zoom.us) -> Develop -> Build App\n2. Choose **Video SDK App**\n3. Use your SDK Key and SDK Secret (not OAuth Client ID\u002FSecret)\n4. Add Events:\n   - `session.rtms_started`\n   - `session.rtms_stopped`\n\n## Sample Repositories\n\n### Official Samples\n\n| Repository | Description |\n|------------|-------------|\n| [rtms-samples](https:\u002F\u002Fgithub.com\u002Fzoom\u002Frtms-samples) | RTMSManager, boilerplates, AI samples |\n| [rtms-quickstart-js](https:\u002F\u002Fgithub.com\u002Fzoom\u002Frtms-quickstart-js) | JavaScript SDK quickstart |\n| [rtms-quickstart-py](https:\u002F\u002Fgithub.com\u002Fzoom\u002Frtms-quickstart-py) | Python SDK quickstart |\n| [rtms-sdk-cpp](https:\u002F\u002Fgithub.com\u002Fzoom\u002Frtms-sdk-cpp) | C++ SDK |\n| [zoom-rtms](https:\u002F\u002Fgithub.com\u002Fzoom\u002Frtms) | Main SDK repository |\n\n### AI Integration Samples\n\n| Sample | Description |\n|--------|-------------|\n| [rtms-meeting-assistant-starter-kit](https:\u002F\u002Fgithub.com\u002Fzoom\u002Frtms-meeting-assistant-starter-kit) | AI meeting assistant with summaries |\n| [arlo-meeting-assistant](https:\u002F\u002Fgithub.com\u002Fzoom\u002Farlo-meeting-assistant) | Production meeting assistant with DB |\n| [videosdk-rtms-transcribe-audio](https:\u002F\u002Fgithub.com\u002Fzoom\u002Fvideosdk-rtms-transcribe-audio) | Whisper transcription |\n\n## Complete Documentation\n\n### Concepts\n- **[Connection Architecture](concepts\u002Fconnection-architecture.md)** - Two-phase WebSocket design\n- **[Lifecycle Flow](concepts\u002Flifecycle-flow.md)** - Webhook to streaming flow\n\n### Examples\n- **[SDK Quickstart](examples\u002Fsdk-quickstart.md)** - Using @zoom\u002Frtms SDK\n- **[Manual WebSocket](examples\u002Fmanual-websocket.md)** - Raw protocol implementation\n- **[RTMS Bot](examples\u002Frtms-bot.md)** - Complete bot implementation guide\n- **[AI Integration](examples\u002Fai-integration.md)** - Transcription and analysis patterns\n\n### References\n- **[Media Types](references\u002Fmedia-types.md)** - Audio, video, transcript, chat, screen share\n- **[Data Types](references\u002Fdata-types.md)** - All enums and constants\n- **[Connection](references\u002Fconnection.md)** - WebSocket protocol details\n- **[Webhooks](references\u002Fwebhooks.md)** - Event subscription\n\n### Troubleshooting\n- **[Common Issues](troubleshooting\u002Fcommon-issues.md)** - FAQ and solutions\n\n## Resources\n\n- **Official docs**: https:\u002F\u002Fdevelopers.zoom.us\u002Fdocs\u002Frtms\u002F\n- **Data types**: https:\u002F\u002Fdevelopers.zoom.us\u002Fdocs\u002Frtms\u002Fdata-types\u002F\n- **Media params**: https:\u002F\u002Fdevelopers.zoom.us\u002Fdocs\u002Frtms\u002Fmedia-parameter-definition\u002F\n- **Developer forum**: https:\u002F\u002Fdevforum.zoom.us\u002F\n\n---\n\n**Need help?** Start with Integrated Index section below for complete navigation.\n\n---\n\n## Integrated Index\n\n_This section was migrated from `SKILL.md`._\n\nRTMS provides real-time access to live audio, video, transcript, chat, and screen share from Zoom meetings, webinars, and Video SDK sessions.\n\n## Critical Positioning\n\nTreat RTMS as a **backend service** for receiving and processing media streams.\n\n- Backend role: ingest audio\u002Fvideo\u002Fshare\u002Fchat\u002Ftranscript, run AI\u002Fanalytics, persist\u002Fforward data.\n- Optional frontend role: Zoom App SDK or web dashboard that consumes processed stream data from backend transport (WebSocket\u002FSSE\u002Fother).\n- Kickoff model: backend waits for RTMS start webhook events, then starts stream processing.\n\nDo not model RTMS as a frontend-only SDK.\n\n## Quick Start Path\n\n**If you're new to RTMS, follow this order:**\n\n1. **Run preflight checks first** -> [RUNBOOK.md](RUNBOOK.md)\n2. **Understand the architecture** -> [concepts\u002Fconnection-architecture.md](concepts\u002Fconnection-architecture.md)\n   - Two-phase WebSocket: Signaling + Media\n   - Why RTMS doesn't use bots\n\n3. **Choose your approach** -> SDK or Manual\n   - SDK (recommended): [examples\u002Fsdk-quickstart.md](examples\u002Fsdk-quickstart.md)\n   - Manual WebSocket: [examples\u002Fmanual-websocket.md](examples\u002Fmanual-websocket.md)\n\n4. **Understand the lifecycle** -> [concepts\u002Flifecycle-flow.md](concepts\u002Flifecycle-flow.md)\n   - Webhook -> Signaling -> Media -> Streaming\n\n5. **Configure media types** -> [references\u002Fmedia-types.md](references\u002Fmedia-types.md)\n   - Audio, video, transcript, chat, screen share\n\n6. **Troubleshoot issues** -> [troubleshooting\u002Fcommon-issues.md](troubleshooting\u002Fcommon-issues.md)\n   - Connection problems, duplicate webhooks, missing data\n\n---\n\n## Documentation Structure\n\n```\nrtms\u002F\n├── SKILL.md                           # Main skill overview\n├── SKILL.md                           # This file - navigation guide\n│\n├── concepts\u002F                          # Core architectural patterns\n│   ├── connection-architecture.md     # Two-phase WebSocket design\n│   └── lifecycle-flow.md              # Webhook to streaming flow\n│\n├── examples\u002F                          # Complete working code\n│   ├── sdk-quickstart.md              # Using @zoom\u002Frtms SDK\n│   ├── manual-websocket.md            # Raw protocol implementation\n│   ├── rtms-bot.md                    # Complete RTMS bot implementation\n│   └── ai-integration.md              # Transcription and analysis\n│\n├── references\u002F                        # Reference documentation\n│   ├── media-types.md                 # Audio, video, transcript, chat, share\n│   ├── data-types.md                  # All enums and constants\n│   ├── connection.md                  # WebSocket protocol details\n│   └── webhooks.md                    # Event subscription\n│\n└── troubleshooting\u002F                   # Problem solving guides\n    └── common-issues.md               # FAQ and solutions\n```\n\n---\n\n## By Use Case\n\n### I want to get meeting transcripts\n1. [SDK Quickstart](examples\u002Fsdk-quickstart.md) - Fastest approach\n2. [Media Types](references\u002Fmedia-types.md#transcript) - Transcript configuration\n3. [AI Integration](examples\u002Fai-integration.md) - Whisper, Deepgram, AssemblyAI\n\n### I want to record meetings\n1. [Media Types](references\u002Fmedia-types.md) - Audio + Video configuration\n2. [SDK Quickstart](examples\u002Fsdk-quickstart.md) - Receiving media\n3. [AI Integration](examples\u002Fai-integration.md#audio-recording) - Gap-filled recording\n\n### I want to build an AI meeting assistant\n1. [AI Integration](examples\u002Fai-integration.md) - Complete patterns\n2. [SDK Quickstart](examples\u002Fsdk-quickstart.md) - Media ingestion\n3. [Lifecycle Flow](concepts\u002Flifecycle-flow.md) - Event handling\n\n### I want to build a complete RTMS bot\n1. [RTMS Bot](examples\u002Frtms-bot.md) - **Complete implementation guide**\n2. [Lifecycle Flow](concepts\u002Flifecycle-flow.md) - Webhook to streaming flow\n3. [Connection Architecture](concepts\u002Fconnection-architecture.md) - Two-phase design\n\n### I need full protocol control\n1. [Manual WebSocket](examples\u002Fmanual-websocket.md) - **START HERE**\n2. [Connection Architecture](concepts\u002Fconnection-architecture.md) - Two-phase design\n3. [Data Types](references\u002Fdata-types.md) - All message types and enums\n4. [Connection](references\u002Fconnection.md) - Protocol details\n\n### I'm getting connection errors\n1. [Common Issues](troubleshooting\u002Fcommon-issues.md) - Diagnostic checklist\n2. [Connection Architecture](concepts\u002Fconnection-architecture.md) - Verify flow\n3. [Webhooks](references\u002Fwebhooks.md) - Validation and timing\n\n### I want to understand the architecture\n1. [Connection Architecture](concepts\u002Fconnection-architecture.md) - Two-phase WebSocket\n2. [Lifecycle Flow](concepts\u002Flifecycle-flow.md) - Complete flow diagram\n3. [Data Types](references\u002Fdata-types.md) - Protocol constants\n\n---\n\n## By Product\n\n### I'm building for Zoom Meetings\n- Standard RTMS setup. Webhook event: `meeting.rtms_started`. Uses General App with OAuth.\n- Start with [SDK Quickstart](examples\u002Fsdk-quickstart.md) or [Manual WebSocket](examples\u002Fmanual-websocket.md).\n\n### I'm building for Zoom Webinars\n- Same as meetings, but webhook event is `webinar.rtms_started`. Payload still uses `meeting_uuid` (NOT `webinar_uuid`).\n- Add webinar scopes and event subscriptions. See [Webhooks](references\u002Fwebhooks.md).\n- Only **panelist** streams are confirmed available. Attendee streams may not be individual.\n\n### I'm building for Zoom Video SDK\n- Webhook event: `session.rtms_started`. Payload uses `session_id` (NOT `meeting_uuid`).\n- Requires a **Video SDK App** with SDK Key\u002FSecret (not OAuth Client ID\u002FSecret).\n- Once connected, the protocol is **identical** to meetings.\n- See [Webhooks](references\u002Fwebhooks.md) for payload details.\n\n---\n\n## Key Documents\n\n### 1. Connection Architecture (CRITICAL)\n**[concepts\u002Fconnection-architecture.md](concepts\u002Fconnection-architecture.md)**\n\nRTMS uses **two separate WebSocket connections**:\n- **Signaling WebSocket**: Authentication, control, heartbeats\n- **Media WebSocket**: Actual audio\u002Fvideo\u002Ftranscript data\n\n### 2. SDK vs Manual (DECISION POINT)\n**[examples\u002Fsdk-quickstart.md](examples\u002Fsdk-quickstart.md)** vs **[examples\u002Fmanual-websocket.md](examples\u002Fmanual-websocket.md)**\n\n| SDK | Manual |\n|-----|--------|\n| Handles WebSocket complexity | Full protocol control |\n| Automatic reconnection | DIY reconnection |\n| Less code | More code |\n| Best for most use cases | Best for custom requirements |\n\n### 3. Critical Gotchas (MOST COMMON ISSUES)\n**[troubleshooting\u002Fcommon-issues.md](troubleshooting\u002Fcommon-issues.md)**\n\n1. **Respond 200 immediately** - Delayed webhook responses cause duplicates\n2. **Only 1 connection per stream** - New connections kick out existing\n3. **Heartbeat required** - Must respond to keep-alive or connection dies\n4. **Track active sessions** - Prevent duplicate join attempts\n\n---\n\n## Key Learnings\n\n### Critical Discoveries:\n\n1. **Two-Phase WebSocket Design**\n   - Signaling: Control plane (handshake, heartbeat, start\u002Fstop)\n   - Media: Data plane (audio, video, transcript, chat, share)\n   - See: [Connection Architecture](concepts\u002Fconnection-architecture.md)\n\n2. **Webhook Response Timing**\n   - MUST respond 200 BEFORE any processing\n   - Delayed response -> Zoom retries -> duplicate connections\n   - See: [Common Issues](troubleshooting\u002Fcommon-issues.md#webhook-response-timing)\n\n3. **Heartbeat is Mandatory**\n   - Signaling: Receive msg_type 12, respond with msg_type 13\n   - Media: Same pattern\n   - Failure to respond = connection closed\n   - See: [Connection](references\u002Fconnection.md#heartbeat)\n\n4. **Signature Generation**\n   - Format: `HMAC-SHA256(clientSecret, \"clientId,meetingUuid,streamId\")`\n   - For Video SDK, use `session_id` in place of `meetingUuid`\n   - Webinars still use `meeting_uuid` (not `webinar_uuid`)\n   - Required for both signaling and media handshakes\n   - See: [Manual WebSocket](examples\u002Fmanual-websocket.md#signature-generation)\n\n5. **Media Types are Bitmasks**\n   - Audio=1, Video=2, Share=4, Transcript=8, Chat=16, All=32\n   - Combine with OR: Audio+Transcript = 1|8 = 9\n   - See: [Media Types](references\u002Fmedia-types.md)\n\n6. **Screen Share is SEPARATE from Video**\n   - Different msg_type (16 vs 15)\n   - Different media flag (4 vs 2)\n   - Must subscribe separately\n   - See: [Media Types](references\u002Fmedia-types.md#screen-share)\n\n---\n\n## Quick Reference\n\n### \"Connection fails\"\n-> [Common Issues](troubleshooting\u002Fcommon-issues.md)\n\n### \"Duplicate connections\"\n-> [Webhook timing](troubleshooting\u002Fcommon-issues.md#webhook-response-timing)\n\n### \"No audio\u002Fvideo data\"\n-> [Media Types](references\u002Fmedia-types.md) - Check configuration\n\n### \"How do I implement manually?\"\n-> [Manual WebSocket](examples\u002Fmanual-websocket.md)\n\n### \"What message types exist?\"\n-> [Data Types](references\u002Fdata-types.md)\n\n### \"How do I integrate AI?\"\n-> [AI Integration](examples\u002Fai-integration.md)\n\n---\n\n## Document Version\n\nBased on **Zoom RTMS SDK v1.x** and official documentation as of 2026.\n\n---\n\n**Happy coding!**\n\nRemember: Start with [SDK Quickstart](examples\u002Fsdk-quickstart.md) for the fastest path, or [Manual WebSocket](examples\u002Fmanual-websocket.md) if you need full control.\n",{"data":38,"body":57},{"name":4,"description":6,"user-invocable":39,"triggers":40},false,[41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56],"real-time media","rtms","live audio stream","live video stream","meeting transcription","raw audio","raw video","websocket media","live transcript","streaming audio","streaming video","meeting bot media","contact center voice media","participant video on","participant video off","single individual video stream",{"type":58,"children":59},"root",[60,69,84,89,94,101,114,147,152,179,184,238,244,252,312,320,337,345,428,436,482,488,676,681,687,699,706,834,840,954,960,1038,1044,1082,1105,1111,2031,2037,2042,3299,3315,3321,3326,3459,3483,3489,3674,3679,3685,3880,3886,3949,3955,3961,4131,4137,4187,4193,4199,4308,4314,4389,4395,4401,4427,4433,4486,4492,4543,4549,4564,4570,4631,4635,4645,4648,4653,4669,4674,4680,4692,4710,4715,4721,4729,4865,4868,4874,4884,4887,4893,4899,4930,4936,4967,4973,5003,5009,5043,5049,5091,5097,5127,5133,5163,5166,5172,5178,5209,5215,5267,5273,5334,5337,5343,5349,5359,5370,5393,5399,5418,5491,5497,5507,5549,5552,5558,5564,5797,5800,5806,5812,5821,5827,5836,5842,5852,5858,5866,5872,5880,5886,5894,5897,5903,5915,5918,5926,5943],{"type":61,"tag":62,"props":63,"children":65},"element","h1",{"id":64},"zoom-realtime-media-streams-rtms",[66],{"type":67,"value":68},"text","Zoom Realtime Media Streams (RTMS)",{"type":61,"tag":70,"props":71,"children":72},"p",{},[73,75,82],{"type":67,"value":74},"Background reference for live Zoom media pipelines. Prefer ",{"type":61,"tag":76,"props":77,"children":79},"code",{"className":78},[],[80],{"type":67,"value":81},"build-zoom-bot",{"type":67,"value":83}," first, then use this skill for stream types, capabilities, and RTMS-specific implementation constraints.",{"type":61,"tag":62,"props":85,"children":87},{"id":86},"zoom-realtime-media-streams-rtms-1",[88],{"type":67,"value":68},{"type":61,"tag":70,"props":90,"children":91},{},[92],{"type":67,"value":93},"Expert guidance for accessing live audio, video, transcript, chat, and screen share data from Zoom meetings, webinars, Video SDK sessions, and Zoom Contact Center Voice in real-time. RTMS uses a WebSocket-based protocol with open standards and does not require a meeting bot to capture the media plane.",{"type":61,"tag":95,"props":96,"children":98},"h2",{"id":97},"read-this-first-critical",[99],{"type":67,"value":100},"Read This First (Critical)",{"type":61,"tag":70,"props":102,"children":103},{},[104,106,112],{"type":67,"value":105},"RTMS is primarily a ",{"type":61,"tag":107,"props":108,"children":109},"strong",{},[110],{"type":67,"value":111},"backend media ingestion service",{"type":67,"value":113},".",{"type":61,"tag":115,"props":116,"children":117},"ul",{},[118,130,135],{"type":61,"tag":119,"props":120,"children":121},"li",{},[122,124,129],{"type":67,"value":123},"Your backend receives and processes live media: ",{"type":61,"tag":107,"props":125,"children":126},{},[127],{"type":67,"value":128},"audio, video, screen share, chat, transcript",{"type":67,"value":113},{"type":61,"tag":119,"props":131,"children":132},{},[133],{"type":67,"value":134},"RTMS is not a frontend UI SDK by itself.",{"type":61,"tag":119,"props":136,"children":137},{},[138,140,145],{"type":67,"value":139},"Processing is ",{"type":61,"tag":107,"props":141,"children":142},{},[143],{"type":67,"value":144},"event-triggered",{"type":67,"value":146},": backend waits for RTMS start webhook events before stream handling begins.",{"type":61,"tag":70,"props":148,"children":149},{},[150],{"type":67,"value":151},"Optional architecture (common):",{"type":61,"tag":115,"props":153,"children":154},{},[155,167],{"type":61,"tag":119,"props":156,"children":157},{},[158,160,165],{"type":67,"value":159},"Add a ",{"type":61,"tag":107,"props":161,"children":162},{},[163],{"type":67,"value":164},"Zoom App SDK",{"type":67,"value":166}," frontend for in-client UI\u002Fcontrols.",{"type":61,"tag":119,"props":168,"children":169},{},[170,172,177],{"type":67,"value":171},"Stream backend RTMS outputs to frontend via ",{"type":61,"tag":107,"props":173,"children":174},{},[175],{"type":67,"value":176},"WebSocket",{"type":67,"value":178}," (or SSE, gRPC, queue workers, etc.).",{"type":61,"tag":70,"props":180,"children":181},{},[182],{"type":67,"value":183},"Use RTMS for media\u002Fdata plane, and use frontend frameworks\u002FZoom Apps for presentation + user interactions.",{"type":61,"tag":70,"props":185,"children":186},{},[187,192,194,202,207,208,214,219,220,226,231,232],{"type":61,"tag":107,"props":188,"children":189},{},[190],{"type":67,"value":191},"Official Documentation",{"type":67,"value":193},": ",{"type":61,"tag":195,"props":196,"children":200},"a",{"href":197,"rel":198},"https:\u002F\u002Fdevelopers.zoom.us\u002Fdocs\u002Frtms\u002F",[199],"nofollow",[201],{"type":67,"value":197},{"type":61,"tag":107,"props":203,"children":204},{},[205],{"type":67,"value":206},"SDK Reference (JS)",{"type":67,"value":193},{"type":61,"tag":195,"props":209,"children":212},{"href":210,"rel":211},"https:\u002F\u002Fzoom.github.io\u002Frtms\u002Fjs\u002F",[199],[213],{"type":67,"value":210},{"type":61,"tag":107,"props":215,"children":216},{},[217],{"type":67,"value":218},"SDK Reference (Python)",{"type":67,"value":193},{"type":61,"tag":195,"props":221,"children":224},{"href":222,"rel":223},"https:\u002F\u002Fzoom.github.io\u002Frtms\u002Fpy\u002F",[199],[225],{"type":67,"value":222},{"type":61,"tag":107,"props":227,"children":228},{},[229],{"type":67,"value":230},"Sample Repository",{"type":67,"value":193},{"type":61,"tag":195,"props":233,"children":236},{"href":234,"rel":235},"https:\u002F\u002Fgithub.com\u002Fzoom\u002Frtms-samples",[199],[237],{"type":67,"value":234},{"type":61,"tag":95,"props":239,"children":241},{"id":240},"quick-links",[242],{"type":67,"value":243},"Quick Links",{"type":61,"tag":70,"props":245,"children":246},{},[247],{"type":61,"tag":107,"props":248,"children":249},{},[250],{"type":67,"value":251},"New to RTMS? Follow this path:",{"type":61,"tag":253,"props":254,"children":255},"ol",{},[256,270,284,298],{"type":61,"tag":119,"props":257,"children":258},{},[259,268],{"type":61,"tag":107,"props":260,"children":261},{},[262],{"type":61,"tag":195,"props":263,"children":265},{"href":264},"concepts\u002Fconnection-architecture.md",[266],{"type":67,"value":267},"Connection Architecture",{"type":67,"value":269}," - Two-phase WebSocket design",{"type":61,"tag":119,"props":271,"children":272},{},[273,282],{"type":61,"tag":107,"props":274,"children":275},{},[276],{"type":61,"tag":195,"props":277,"children":279},{"href":278},"examples\u002Fsdk-quickstart.md",[280],{"type":67,"value":281},"SDK Quickstart",{"type":67,"value":283}," - Fastest way to receive media (recommended)",{"type":61,"tag":119,"props":285,"children":286},{},[287,296],{"type":61,"tag":107,"props":288,"children":289},{},[290],{"type":61,"tag":195,"props":291,"children":293},{"href":292},"examples\u002Fmanual-websocket.md",[294],{"type":67,"value":295},"Manual WebSocket",{"type":67,"value":297}," - Full protocol control without SDK",{"type":61,"tag":119,"props":299,"children":300},{},[301,310],{"type":61,"tag":107,"props":302,"children":303},{},[304],{"type":61,"tag":195,"props":305,"children":307},{"href":306},"references\u002Fmedia-types.md",[308],{"type":67,"value":309},"Media Types",{"type":67,"value":311}," - Audio, video, transcript, chat, screen share",{"type":61,"tag":70,"props":313,"children":314},{},[315],{"type":61,"tag":107,"props":316,"children":317},{},[318],{"type":67,"value":319},"Complete Implementation:",{"type":61,"tag":115,"props":321,"children":322},{},[323],{"type":61,"tag":119,"props":324,"children":325},{},[326,335],{"type":61,"tag":107,"props":327,"children":328},{},[329],{"type":61,"tag":195,"props":330,"children":332},{"href":331},"examples\u002Frtms-bot.md",[333],{"type":67,"value":334},"RTMS Bot",{"type":67,"value":336}," - End-to-end bot implementation guide",{"type":61,"tag":70,"props":338,"children":339},{},[340],{"type":61,"tag":107,"props":341,"children":342},{},[343],{"type":67,"value":344},"Reference:",{"type":61,"tag":115,"props":346,"children":347},{},[348,362,376,390,404,418],{"type":61,"tag":119,"props":349,"children":350},{},[351,360],{"type":61,"tag":107,"props":352,"children":353},{},[354],{"type":61,"tag":195,"props":355,"children":357},{"href":356},"concepts\u002Flifecycle-flow.md",[358],{"type":67,"value":359},"Lifecycle Flow",{"type":67,"value":361}," - Complete webhook-to-streaming flow",{"type":61,"tag":119,"props":363,"children":364},{},[365,374],{"type":61,"tag":107,"props":366,"children":367},{},[368],{"type":61,"tag":195,"props":369,"children":371},{"href":370},"references\u002Fdata-types.md",[372],{"type":67,"value":373},"Data Types",{"type":67,"value":375}," - All enums and constants",{"type":61,"tag":119,"props":377,"children":378},{},[379,388],{"type":61,"tag":107,"props":380,"children":381},{},[382],{"type":61,"tag":195,"props":383,"children":385},{"href":384},"references\u002Fwebhooks.md",[386],{"type":67,"value":387},"Webhooks",{"type":67,"value":389}," - Event subscription details",{"type":61,"tag":119,"props":391,"children":392},{},[393,402],{"type":61,"tag":107,"props":394,"children":395},{},[396],{"type":61,"tag":195,"props":397,"children":399},{"href":398},"references\u002Fenvironment-variables.md",[400],{"type":67,"value":401},"Environment Variables",{"type":67,"value":403}," - credential modes and runtime knobs",{"type":61,"tag":119,"props":405,"children":406},{},[407,416],{"type":61,"tag":107,"props":408,"children":409},{},[410],{"type":61,"tag":195,"props":411,"children":413},{"href":412},"references\u002Fquickstart.md",[414],{"type":67,"value":415},"Quickstart Notes",{"type":67,"value":417}," - Secondary quickstart guide",{"type":61,"tag":119,"props":419,"children":420},{},[421,426],{"type":61,"tag":107,"props":422,"children":423},{},[424],{"type":67,"value":425},"Integrated Index",{"type":67,"value":427}," - see the section below in this file",{"type":61,"tag":70,"props":429,"children":430},{},[431],{"type":61,"tag":107,"props":432,"children":433},{},[434],{"type":67,"value":435},"Having issues?",{"type":61,"tag":115,"props":437,"children":438},{},[439,450,461,471],{"type":61,"tag":119,"props":440,"children":441},{},[442,444],{"type":67,"value":443},"Connection fails -> ",{"type":61,"tag":195,"props":445,"children":447},{"href":446},"troubleshooting\u002Fcommon-issues.md",[448],{"type":67,"value":449},"Common Issues",{"type":61,"tag":119,"props":451,"children":452},{},[453,455],{"type":67,"value":454},"Duplicate connections -> ",{"type":61,"tag":195,"props":456,"children":458},{"href":457},"troubleshooting\u002Fcommon-issues.md#webhook-response-timing",[459],{"type":67,"value":460},"Webhook Gotchas",{"type":61,"tag":119,"props":462,"children":463},{},[464,466],{"type":67,"value":465},"No audio\u002Fvideo -> ",{"type":61,"tag":195,"props":467,"children":468},{"href":306},[469],{"type":67,"value":470},"Media Configuration",{"type":61,"tag":119,"props":472,"children":473},{},[474,476],{"type":67,"value":475},"Start with preflight checks -> ",{"type":61,"tag":195,"props":477,"children":479},{"href":478},"RUNBOOK.md",[480],{"type":67,"value":481},"5-Minute Runbook",{"type":61,"tag":95,"props":483,"children":485},{"id":484},"supported-products",[486],{"type":67,"value":487},"Supported Products",{"type":61,"tag":489,"props":490,"children":491},"table",{},[492,521],{"type":61,"tag":493,"props":494,"children":495},"thead",{},[496],{"type":61,"tag":497,"props":498,"children":499},"tr",{},[500,506,511,516],{"type":61,"tag":501,"props":502,"children":503},"th",{},[504],{"type":67,"value":505},"Product",{"type":61,"tag":501,"props":507,"children":508},{},[509],{"type":67,"value":510},"Webhook Event",{"type":61,"tag":501,"props":512,"children":513},{},[514],{"type":67,"value":515},"Payload ID",{"type":61,"tag":501,"props":517,"children":518},{},[519],{"type":67,"value":520},"App Type",{"type":61,"tag":522,"props":523,"children":524},"tbody",{},[525,568,609,650],{"type":61,"tag":497,"props":526,"children":527},{},[528,537,554,563],{"type":61,"tag":529,"props":530,"children":531},"td",{},[532],{"type":61,"tag":107,"props":533,"children":534},{},[535],{"type":67,"value":536},"Meetings",{"type":61,"tag":529,"props":538,"children":539},{},[540,546,548],{"type":61,"tag":76,"props":541,"children":543},{"className":542},[],[544],{"type":67,"value":545},"meeting.rtms_started",{"type":67,"value":547}," \u002F ",{"type":61,"tag":76,"props":549,"children":551},{"className":550},[],[552],{"type":67,"value":553},"meeting.rtms_stopped",{"type":61,"tag":529,"props":555,"children":556},{},[557],{"type":61,"tag":76,"props":558,"children":560},{"className":559},[],[561],{"type":67,"value":562},"meeting_uuid",{"type":61,"tag":529,"props":564,"children":565},{},[566],{"type":67,"value":567},"General App",{"type":61,"tag":497,"props":569,"children":570},{},[571,579,595,605],{"type":61,"tag":529,"props":572,"children":573},{},[574],{"type":61,"tag":107,"props":575,"children":576},{},[577],{"type":67,"value":578},"Webinars",{"type":61,"tag":529,"props":580,"children":581},{},[582,588,589],{"type":61,"tag":76,"props":583,"children":585},{"className":584},[],[586],{"type":67,"value":587},"webinar.rtms_started",{"type":67,"value":547},{"type":61,"tag":76,"props":590,"children":592},{"className":591},[],[593],{"type":67,"value":594},"webinar.rtms_stopped",{"type":61,"tag":529,"props":596,"children":597},{},[598,603],{"type":61,"tag":76,"props":599,"children":601},{"className":600},[],[602],{"type":67,"value":562},{"type":67,"value":604}," (same!)",{"type":61,"tag":529,"props":606,"children":607},{},[608],{"type":67,"value":567},{"type":61,"tag":497,"props":610,"children":611},{},[612,620,636,645],{"type":61,"tag":529,"props":613,"children":614},{},[615],{"type":61,"tag":107,"props":616,"children":617},{},[618],{"type":67,"value":619},"Video SDK",{"type":61,"tag":529,"props":621,"children":622},{},[623,629,630],{"type":61,"tag":76,"props":624,"children":626},{"className":625},[],[627],{"type":67,"value":628},"session.rtms_started",{"type":67,"value":547},{"type":61,"tag":76,"props":631,"children":633},{"className":632},[],[634],{"type":67,"value":635},"session.rtms_stopped",{"type":61,"tag":529,"props":637,"children":638},{},[639],{"type":61,"tag":76,"props":640,"children":642},{"className":641},[],[643],{"type":67,"value":644},"session_id",{"type":61,"tag":529,"props":646,"children":647},{},[648],{"type":67,"value":649},"Video SDK App",{"type":61,"tag":497,"props":651,"children":652},{},[653,661,666,671],{"type":61,"tag":529,"props":654,"children":655},{},[656],{"type":61,"tag":107,"props":657,"children":658},{},[659],{"type":67,"value":660},"Zoom Contact Center Voice",{"type":61,"tag":529,"props":662,"children":663},{},[664],{"type":67,"value":665},"Product-specific RTMS\u002FZCC Voice events",{"type":61,"tag":529,"props":667,"children":668},{},[669],{"type":67,"value":670},"Product-specific stream\u002Fsession identifiers",{"type":61,"tag":529,"props":672,"children":673},{},[674],{"type":67,"value":675},"Contact Center \u002F approved RTMS integration",{"type":61,"tag":70,"props":677,"children":678},{},[679],{"type":67,"value":680},"Once connected, the core signaling\u002Fmedia socket model is shared across products. Meetings, webinars, and Video SDK sessions use the familiar start\u002Fstop webhooks. Zoom Contact Center Voice adds its own RTMS\u002FZCC Voice event family and should be treated as the same transport model with product-specific event payloads.",{"type":61,"tag":95,"props":682,"children":684},{"id":683},"rtms-overview",[685],{"type":67,"value":686},"RTMS Overview",{"type":61,"tag":70,"props":688,"children":689},{},[690,692,697],{"type":67,"value":691},"RTMS is a data pipeline that gives your app access to live media from Zoom meetings, webinars, and Video SDK sessions ",{"type":61,"tag":107,"props":693,"children":694},{},[695],{"type":67,"value":696},"without participant bots",{"type":67,"value":698},". Instead of having automated clients join meetings, use RTMS to collect media data directly from Zoom's infrastructure.",{"type":61,"tag":700,"props":701,"children":703},"h3",{"id":702},"what-rtms-provides",[704],{"type":67,"value":705},"What RTMS Provides",{"type":61,"tag":489,"props":707,"children":708},{},[709,730],{"type":61,"tag":493,"props":710,"children":711},{},[712],{"type":61,"tag":497,"props":713,"children":714},{},[715,720,725],{"type":61,"tag":501,"props":716,"children":717},{},[718],{"type":67,"value":719},"Media Type",{"type":61,"tag":501,"props":721,"children":722},{},[723],{"type":67,"value":724},"Format",{"type":61,"tag":501,"props":726,"children":727},{},[728],{"type":67,"value":729},"Use Cases",{"type":61,"tag":522,"props":731,"children":732},{},[733,753,773,793,814],{"type":61,"tag":497,"props":734,"children":735},{},[736,743,748],{"type":61,"tag":529,"props":737,"children":738},{},[739],{"type":61,"tag":107,"props":740,"children":741},{},[742],{"type":67,"value":14},{"type":61,"tag":529,"props":744,"children":745},{},[746],{"type":67,"value":747},"PCM (L16), G.711, G.722, Opus",{"type":61,"tag":529,"props":749,"children":750},{},[751],{"type":67,"value":752},"Transcription, voice analysis, recording",{"type":61,"tag":497,"props":754,"children":755},{},[756,763,768],{"type":61,"tag":529,"props":757,"children":758},{},[759],{"type":61,"tag":107,"props":760,"children":761},{},[762],{"type":67,"value":18},{"type":61,"tag":529,"props":764,"children":765},{},[766],{"type":67,"value":767},"H.264, JPG, PNG",{"type":61,"tag":529,"props":769,"children":770},{},[771],{"type":67,"value":772},"Recording, AI vision, thumbnails, active participant selection",{"type":61,"tag":497,"props":774,"children":775},{},[776,784,788],{"type":61,"tag":529,"props":777,"children":778},{},[779],{"type":61,"tag":107,"props":780,"children":781},{},[782],{"type":67,"value":783},"Screen Share",{"type":61,"tag":529,"props":785,"children":786},{},[787],{"type":67,"value":767},{"type":61,"tag":529,"props":789,"children":790},{},[791],{"type":67,"value":792},"Content capture, slide extraction",{"type":61,"tag":497,"props":794,"children":795},{},[796,804,809],{"type":61,"tag":529,"props":797,"children":798},{},[799],{"type":61,"tag":107,"props":800,"children":801},{},[802],{"type":67,"value":803},"Transcript",{"type":61,"tag":529,"props":805,"children":806},{},[807],{"type":67,"value":808},"JSON text",{"type":61,"tag":529,"props":810,"children":811},{},[812],{"type":67,"value":813},"Meeting notes, search, compliance",{"type":61,"tag":497,"props":815,"children":816},{},[817,825,829],{"type":61,"tag":529,"props":818,"children":819},{},[820],{"type":61,"tag":107,"props":821,"children":822},{},[823],{"type":67,"value":824},"Chat",{"type":61,"tag":529,"props":826,"children":827},{},[828],{"type":67,"value":808},{"type":61,"tag":529,"props":830,"children":831},{},[832],{"type":67,"value":833},"Archive, sentiment analysis",{"type":61,"tag":700,"props":835,"children":837},{"id":836},"march-2026-protocol-changes",[838],{"type":67,"value":839},"March 2026 Protocol Changes",{"type":61,"tag":115,"props":841,"children":842},{},[843,853,887,912,937],{"type":61,"tag":119,"props":844,"children":845},{},[846,851],{"type":61,"tag":107,"props":847,"children":848},{},[849],{"type":67,"value":850},"Zoom Contact Center Voice support",{"type":67,"value":852},": RTMS now covers Contact Center Voice audio and transcript scenarios.",{"type":61,"tag":119,"props":854,"children":855},{},[856,861,863,869,871,877,879,885],{"type":61,"tag":107,"props":857,"children":858},{},[859],{"type":67,"value":860},"Transcript Language Identification control",{"type":67,"value":862},": transcript media handshakes now support ",{"type":61,"tag":76,"props":864,"children":866},{"className":865},[],[867],{"type":67,"value":868},"src_language",{"type":67,"value":870}," and ",{"type":61,"tag":76,"props":872,"children":874},{"className":873},[],[875],{"type":67,"value":876},"enable_lid",{"type":67,"value":878},". Default behavior is LID enabled. Set ",{"type":61,"tag":76,"props":880,"children":882},{"className":881},[],[883],{"type":67,"value":884},"enable_lid: false",{"type":67,"value":886}," to force a fixed language.",{"type":61,"tag":119,"props":888,"children":889},{},[890,895,897,903,905,911],{"type":61,"tag":107,"props":891,"children":892},{},[893],{"type":67,"value":894},"Single individual video stream subscription",{"type":67,"value":896},": RTMS can now stream one participant's camera feed at a time when ",{"type":61,"tag":76,"props":898,"children":900},{"className":899},[],[901],{"type":67,"value":902},"data_opt",{"type":67,"value":904}," is set to ",{"type":61,"tag":76,"props":906,"children":908},{"className":907},[],[909],{"type":67,"value":910},"VIDEO_SINGLE_INDIVIDUAL_STREAM",{"type":67,"value":113},{"type":61,"tag":119,"props":913,"children":914},{},[915,920,922,928,930,936],{"type":61,"tag":107,"props":916,"children":917},{},[918],{"type":67,"value":919},"Graceful client-initiated shutdown",{"type":67,"value":921},": backends can send ",{"type":61,"tag":76,"props":923,"children":925},{"className":924},[],[926],{"type":67,"value":927},"STREAM_CLOSE_REQ",{"type":67,"value":929}," over the signaling socket and wait for ",{"type":61,"tag":76,"props":931,"children":933},{"className":932},[],[934],{"type":67,"value":935},"STREAM_CLOSE_RESP",{"type":67,"value":113},{"type":61,"tag":119,"props":938,"children":939},{},[940,945,947,952],{"type":61,"tag":107,"props":941,"children":942},{},[943],{"type":67,"value":944},"Media keep-alive tolerance increased",{"type":67,"value":946},": media socket keep-alive timeout is now ",{"type":61,"tag":107,"props":948,"children":949},{},[950],{"type":67,"value":951},"65 seconds",{"type":67,"value":953},", not 35.",{"type":61,"tag":700,"props":955,"children":957},{"id":956},"two-approaches",[958],{"type":67,"value":959},"Two Approaches",{"type":61,"tag":489,"props":961,"children":962},{},[963,984],{"type":61,"tag":493,"props":964,"children":965},{},[966],{"type":61,"tag":497,"props":967,"children":968},{},[969,974,979],{"type":61,"tag":501,"props":970,"children":971},{},[972],{"type":67,"value":973},"Approach",{"type":61,"tag":501,"props":975,"children":976},{},[977],{"type":67,"value":978},"Best For",{"type":61,"tag":501,"props":980,"children":981},{},[982],{"type":67,"value":983},"Complexity",{"type":61,"tag":522,"props":985,"children":986},{},[987,1018],{"type":61,"tag":497,"props":988,"children":989},{},[990,1008,1013],{"type":61,"tag":529,"props":991,"children":992},{},[993,998,1000,1006],{"type":61,"tag":107,"props":994,"children":995},{},[996],{"type":67,"value":997},"SDK",{"type":67,"value":999}," (",{"type":61,"tag":76,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":67,"value":1005},"@zoom\u002Frtms",{"type":67,"value":1007},")",{"type":61,"tag":529,"props":1009,"children":1010},{},[1011],{"type":67,"value":1012},"Most use cases",{"type":61,"tag":529,"props":1014,"children":1015},{},[1016],{"type":67,"value":1017},"Low - handles WebSocket complexity",{"type":61,"tag":497,"props":1019,"children":1020},{},[1021,1028,1033],{"type":61,"tag":529,"props":1022,"children":1023},{},[1024],{"type":61,"tag":107,"props":1025,"children":1026},{},[1027],{"type":67,"value":295},{"type":61,"tag":529,"props":1029,"children":1030},{},[1031],{"type":67,"value":1032},"Custom protocols, other languages",{"type":61,"tag":529,"props":1034,"children":1035},{},[1036],{"type":67,"value":1037},"High - full protocol implementation",{"type":61,"tag":95,"props":1039,"children":1041},{"id":1040},"prerequisites",[1042],{"type":67,"value":1043},"Prerequisites",{"type":61,"tag":115,"props":1045,"children":1046},{},[1047,1057,1067,1072,1077],{"type":61,"tag":119,"props":1048,"children":1049},{},[1050,1055],{"type":61,"tag":107,"props":1051,"children":1052},{},[1053],{"type":67,"value":1054},"Node.js 20.3.0+",{"type":67,"value":1056}," (24 LTS recommended) for JavaScript SDK",{"type":61,"tag":119,"props":1058,"children":1059},{},[1060,1065],{"type":61,"tag":107,"props":1061,"children":1062},{},[1063],{"type":67,"value":1064},"Python 3.10+",{"type":67,"value":1066}," for Python SDK",{"type":61,"tag":119,"props":1068,"children":1069},{},[1070],{"type":67,"value":1071},"Zoom General App (for meetings\u002Fwebinars) or Video SDK App (for Video SDK) with RTMS feature enabled",{"type":61,"tag":119,"props":1073,"children":1074},{},[1075],{"type":67,"value":1076},"Webhook endpoint for RTMS events",{"type":61,"tag":119,"props":1078,"children":1079},{},[1080],{"type":67,"value":1081},"Server to receive WebSocket streams",{"type":61,"tag":1083,"props":1084,"children":1085},"blockquote",{},[1086],{"type":61,"tag":70,"props":1087,"children":1088},{},[1089,1094,1096,1103],{"type":61,"tag":107,"props":1090,"children":1091},{},[1092],{"type":67,"value":1093},"Need RTMS access?",{"type":67,"value":1095}," Post in ",{"type":61,"tag":195,"props":1097,"children":1100},{"href":1098,"rel":1099},"https:\u002F\u002Fdevforum.zoom.us\u002F",[199],[1101],{"type":67,"value":1102},"Zoom Developer Forum",{"type":67,"value":1104}," requesting RTMS access with your use case.",{"type":61,"tag":95,"props":1106,"children":1108},{"id":1107},"quick-start-sdk-recommended",[1109],{"type":67,"value":1110},"Quick Start (SDK - Recommended)",{"type":61,"tag":1112,"props":1113,"children":1118},"pre",{"className":1114,"code":1115,"language":1116,"meta":1117,"style":1117},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import rtms from \"@zoom\u002Frtms\";\n\n\u002F\u002F All RTMS start\u002Fstop events across products\nconst RTMS_EVENTS = [\"meeting.rtms_started\", \"webinar.rtms_started\", \"session.rtms_started\"];\n\n\u002F\u002F Handle webhook events\nrtms.onWebhookEvent(({ event, payload }) => {\n  if (!RTMS_EVENTS.includes(event)) return;\n\n  const client = new rtms.Client();\n\n  client.onAudioData((data, timestamp, metadata) => {\n    console.log(`Audio from ${metadata.userName}: ${data.length} bytes`);\n  });\n\n  client.onTranscriptData((data, timestamp, metadata) => {\n    const text = data.toString('utf8');\n    console.log(`${metadata.userName}: ${text}`);\n  });\n\n  client.onJoinConfirm((reason) => {\n    console.log(`Joined session: ${reason}`);\n  });\n\n  \u002F\u002F SDK handles all WebSocket connections automatically\n  \u002F\u002F Accepts both meeting_uuid and session_id transparently\n  client.join(payload);\n});\n","javascript","",[1119],{"type":61,"tag":76,"props":1120,"children":1121},{"__ignoreMap":1117},[1122,1166,1176,1186,1265,1273,1282,1340,1396,1404,1451,1459,1520,1618,1635,1643,1700,1758,1824,1840,1848,1890,1939,1955,1963,1972,1981,2015],{"type":61,"tag":1123,"props":1124,"children":1127},"span",{"class":1125,"line":1126},"line",1,[1128,1134,1140,1145,1151,1156,1161],{"type":61,"tag":1123,"props":1129,"children":1131},{"style":1130},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[1132],{"type":67,"value":1133},"import",{"type":61,"tag":1123,"props":1135,"children":1137},{"style":1136},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1138],{"type":67,"value":1139}," rtms ",{"type":61,"tag":1123,"props":1141,"children":1142},{"style":1130},[1143],{"type":67,"value":1144},"from",{"type":61,"tag":1123,"props":1146,"children":1148},{"style":1147},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1149],{"type":67,"value":1150}," \"",{"type":61,"tag":1123,"props":1152,"children":1154},{"style":1153},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1155],{"type":67,"value":1005},{"type":61,"tag":1123,"props":1157,"children":1158},{"style":1147},[1159],{"type":67,"value":1160},"\"",{"type":61,"tag":1123,"props":1162,"children":1163},{"style":1147},[1164],{"type":67,"value":1165},";\n",{"type":61,"tag":1123,"props":1167,"children":1169},{"class":1125,"line":1168},2,[1170],{"type":61,"tag":1123,"props":1171,"children":1173},{"emptyLinePlaceholder":1172},true,[1174],{"type":67,"value":1175},"\n",{"type":61,"tag":1123,"props":1177,"children":1179},{"class":1125,"line":1178},3,[1180],{"type":61,"tag":1123,"props":1181,"children":1183},{"style":1182},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1184],{"type":67,"value":1185},"\u002F\u002F All RTMS start\u002Fstop events across products\n",{"type":61,"tag":1123,"props":1187,"children":1189},{"class":1125,"line":1188},4,[1190,1196,1201,1206,1211,1215,1219,1223,1228,1232,1236,1240,1244,1248,1252,1256,1261],{"type":61,"tag":1123,"props":1191,"children":1193},{"style":1192},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1194],{"type":67,"value":1195},"const",{"type":61,"tag":1123,"props":1197,"children":1198},{"style":1136},[1199],{"type":67,"value":1200}," RTMS_EVENTS ",{"type":61,"tag":1123,"props":1202,"children":1203},{"style":1147},[1204],{"type":67,"value":1205},"=",{"type":61,"tag":1123,"props":1207,"children":1208},{"style":1136},[1209],{"type":67,"value":1210}," [",{"type":61,"tag":1123,"props":1212,"children":1213},{"style":1147},[1214],{"type":67,"value":1160},{"type":61,"tag":1123,"props":1216,"children":1217},{"style":1153},[1218],{"type":67,"value":545},{"type":61,"tag":1123,"props":1220,"children":1221},{"style":1147},[1222],{"type":67,"value":1160},{"type":61,"tag":1123,"props":1224,"children":1225},{"style":1147},[1226],{"type":67,"value":1227},",",{"type":61,"tag":1123,"props":1229,"children":1230},{"style":1147},[1231],{"type":67,"value":1150},{"type":61,"tag":1123,"props":1233,"children":1234},{"style":1153},[1235],{"type":67,"value":587},{"type":61,"tag":1123,"props":1237,"children":1238},{"style":1147},[1239],{"type":67,"value":1160},{"type":61,"tag":1123,"props":1241,"children":1242},{"style":1147},[1243],{"type":67,"value":1227},{"type":61,"tag":1123,"props":1245,"children":1246},{"style":1147},[1247],{"type":67,"value":1150},{"type":61,"tag":1123,"props":1249,"children":1250},{"style":1153},[1251],{"type":67,"value":628},{"type":61,"tag":1123,"props":1253,"children":1254},{"style":1147},[1255],{"type":67,"value":1160},{"type":61,"tag":1123,"props":1257,"children":1258},{"style":1136},[1259],{"type":67,"value":1260},"]",{"type":61,"tag":1123,"props":1262,"children":1263},{"style":1147},[1264],{"type":67,"value":1165},{"type":61,"tag":1123,"props":1266,"children":1268},{"class":1125,"line":1267},5,[1269],{"type":61,"tag":1123,"props":1270,"children":1271},{"emptyLinePlaceholder":1172},[1272],{"type":67,"value":1175},{"type":61,"tag":1123,"props":1274,"children":1276},{"class":1125,"line":1275},6,[1277],{"type":61,"tag":1123,"props":1278,"children":1279},{"style":1182},[1280],{"type":67,"value":1281},"\u002F\u002F Handle webhook events\n",{"type":61,"tag":1123,"props":1283,"children":1285},{"class":1125,"line":1284},7,[1286,1290,1294,1300,1305,1310,1316,1320,1325,1330,1335],{"type":61,"tag":1123,"props":1287,"children":1288},{"style":1136},[1289],{"type":67,"value":42},{"type":61,"tag":1123,"props":1291,"children":1292},{"style":1147},[1293],{"type":67,"value":113},{"type":61,"tag":1123,"props":1295,"children":1297},{"style":1296},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[1298],{"type":67,"value":1299},"onWebhookEvent",{"type":61,"tag":1123,"props":1301,"children":1302},{"style":1136},[1303],{"type":67,"value":1304},"(",{"type":61,"tag":1123,"props":1306,"children":1307},{"style":1147},[1308],{"type":67,"value":1309},"({",{"type":61,"tag":1123,"props":1311,"children":1313},{"style":1312},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[1314],{"type":67,"value":1315}," event",{"type":61,"tag":1123,"props":1317,"children":1318},{"style":1147},[1319],{"type":67,"value":1227},{"type":61,"tag":1123,"props":1321,"children":1322},{"style":1312},[1323],{"type":67,"value":1324}," payload",{"type":61,"tag":1123,"props":1326,"children":1327},{"style":1147},[1328],{"type":67,"value":1329}," })",{"type":61,"tag":1123,"props":1331,"children":1332},{"style":1192},[1333],{"type":67,"value":1334}," =>",{"type":61,"tag":1123,"props":1336,"children":1337},{"style":1147},[1338],{"type":67,"value":1339}," {\n",{"type":61,"tag":1123,"props":1341,"children":1343},{"class":1125,"line":1342},8,[1344,1349,1354,1359,1364,1368,1373,1377,1382,1387,1392],{"type":61,"tag":1123,"props":1345,"children":1346},{"style":1130},[1347],{"type":67,"value":1348},"  if",{"type":61,"tag":1123,"props":1350,"children":1352},{"style":1351},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[1353],{"type":67,"value":999},{"type":61,"tag":1123,"props":1355,"children":1356},{"style":1147},[1357],{"type":67,"value":1358},"!",{"type":61,"tag":1123,"props":1360,"children":1361},{"style":1136},[1362],{"type":67,"value":1363},"RTMS_EVENTS",{"type":61,"tag":1123,"props":1365,"children":1366},{"style":1147},[1367],{"type":67,"value":113},{"type":61,"tag":1123,"props":1369,"children":1370},{"style":1296},[1371],{"type":67,"value":1372},"includes",{"type":61,"tag":1123,"props":1374,"children":1375},{"style":1351},[1376],{"type":67,"value":1304},{"type":61,"tag":1123,"props":1378,"children":1379},{"style":1136},[1380],{"type":67,"value":1381},"event",{"type":61,"tag":1123,"props":1383,"children":1384},{"style":1351},[1385],{"type":67,"value":1386},")) ",{"type":61,"tag":1123,"props":1388,"children":1389},{"style":1130},[1390],{"type":67,"value":1391},"return",{"type":61,"tag":1123,"props":1393,"children":1394},{"style":1147},[1395],{"type":67,"value":1165},{"type":61,"tag":1123,"props":1397,"children":1399},{"class":1125,"line":1398},9,[1400],{"type":61,"tag":1123,"props":1401,"children":1402},{"emptyLinePlaceholder":1172},[1403],{"type":67,"value":1175},{"type":61,"tag":1123,"props":1405,"children":1407},{"class":1125,"line":1406},10,[1408,1413,1418,1423,1428,1433,1437,1442,1447],{"type":61,"tag":1123,"props":1409,"children":1410},{"style":1192},[1411],{"type":67,"value":1412},"  const",{"type":61,"tag":1123,"props":1414,"children":1415},{"style":1136},[1416],{"type":67,"value":1417}," client",{"type":61,"tag":1123,"props":1419,"children":1420},{"style":1147},[1421],{"type":67,"value":1422}," =",{"type":61,"tag":1123,"props":1424,"children":1425},{"style":1147},[1426],{"type":67,"value":1427}," new",{"type":61,"tag":1123,"props":1429,"children":1430},{"style":1136},[1431],{"type":67,"value":1432}," rtms",{"type":61,"tag":1123,"props":1434,"children":1435},{"style":1147},[1436],{"type":67,"value":113},{"type":61,"tag":1123,"props":1438,"children":1439},{"style":1296},[1440],{"type":67,"value":1441},"Client",{"type":61,"tag":1123,"props":1443,"children":1444},{"style":1351},[1445],{"type":67,"value":1446},"()",{"type":61,"tag":1123,"props":1448,"children":1449},{"style":1147},[1450],{"type":67,"value":1165},{"type":61,"tag":1123,"props":1452,"children":1454},{"class":1125,"line":1453},11,[1455],{"type":61,"tag":1123,"props":1456,"children":1457},{"emptyLinePlaceholder":1172},[1458],{"type":67,"value":1175},{"type":61,"tag":1123,"props":1460,"children":1462},{"class":1125,"line":1461},12,[1463,1468,1472,1477,1481,1485,1490,1494,1499,1503,1508,1512,1516],{"type":61,"tag":1123,"props":1464,"children":1465},{"style":1136},[1466],{"type":67,"value":1467},"  client",{"type":61,"tag":1123,"props":1469,"children":1470},{"style":1147},[1471],{"type":67,"value":113},{"type":61,"tag":1123,"props":1473,"children":1474},{"style":1296},[1475],{"type":67,"value":1476},"onAudioData",{"type":61,"tag":1123,"props":1478,"children":1479},{"style":1351},[1480],{"type":67,"value":1304},{"type":61,"tag":1123,"props":1482,"children":1483},{"style":1147},[1484],{"type":67,"value":1304},{"type":61,"tag":1123,"props":1486,"children":1487},{"style":1312},[1488],{"type":67,"value":1489},"data",{"type":61,"tag":1123,"props":1491,"children":1492},{"style":1147},[1493],{"type":67,"value":1227},{"type":61,"tag":1123,"props":1495,"children":1496},{"style":1312},[1497],{"type":67,"value":1498}," timestamp",{"type":61,"tag":1123,"props":1500,"children":1501},{"style":1147},[1502],{"type":67,"value":1227},{"type":61,"tag":1123,"props":1504,"children":1505},{"style":1312},[1506],{"type":67,"value":1507}," metadata",{"type":61,"tag":1123,"props":1509,"children":1510},{"style":1147},[1511],{"type":67,"value":1007},{"type":61,"tag":1123,"props":1513,"children":1514},{"style":1192},[1515],{"type":67,"value":1334},{"type":61,"tag":1123,"props":1517,"children":1518},{"style":1147},[1519],{"type":67,"value":1339},{"type":61,"tag":1123,"props":1521,"children":1523},{"class":1125,"line":1522},13,[1524,1529,1533,1538,1542,1547,1552,1557,1562,1566,1571,1576,1580,1584,1588,1592,1597,1601,1606,1610,1614],{"type":61,"tag":1123,"props":1525,"children":1526},{"style":1136},[1527],{"type":67,"value":1528},"    console",{"type":61,"tag":1123,"props":1530,"children":1531},{"style":1147},[1532],{"type":67,"value":113},{"type":61,"tag":1123,"props":1534,"children":1535},{"style":1296},[1536],{"type":67,"value":1537},"log",{"type":61,"tag":1123,"props":1539,"children":1540},{"style":1351},[1541],{"type":67,"value":1304},{"type":61,"tag":1123,"props":1543,"children":1544},{"style":1147},[1545],{"type":67,"value":1546},"`",{"type":61,"tag":1123,"props":1548,"children":1549},{"style":1153},[1550],{"type":67,"value":1551},"Audio from ",{"type":61,"tag":1123,"props":1553,"children":1554},{"style":1147},[1555],{"type":67,"value":1556},"${",{"type":61,"tag":1123,"props":1558,"children":1559},{"style":1136},[1560],{"type":67,"value":1561},"metadata",{"type":61,"tag":1123,"props":1563,"children":1564},{"style":1147},[1565],{"type":67,"value":113},{"type":61,"tag":1123,"props":1567,"children":1568},{"style":1136},[1569],{"type":67,"value":1570},"userName",{"type":61,"tag":1123,"props":1572,"children":1573},{"style":1147},[1574],{"type":67,"value":1575},"}",{"type":61,"tag":1123,"props":1577,"children":1578},{"style":1153},[1579],{"type":67,"value":193},{"type":61,"tag":1123,"props":1581,"children":1582},{"style":1147},[1583],{"type":67,"value":1556},{"type":61,"tag":1123,"props":1585,"children":1586},{"style":1136},[1587],{"type":67,"value":1489},{"type":61,"tag":1123,"props":1589,"children":1590},{"style":1147},[1591],{"type":67,"value":113},{"type":61,"tag":1123,"props":1593,"children":1594},{"style":1136},[1595],{"type":67,"value":1596},"length",{"type":61,"tag":1123,"props":1598,"children":1599},{"style":1147},[1600],{"type":67,"value":1575},{"type":61,"tag":1123,"props":1602,"children":1603},{"style":1153},[1604],{"type":67,"value":1605}," bytes",{"type":61,"tag":1123,"props":1607,"children":1608},{"style":1147},[1609],{"type":67,"value":1546},{"type":61,"tag":1123,"props":1611,"children":1612},{"style":1351},[1613],{"type":67,"value":1007},{"type":61,"tag":1123,"props":1615,"children":1616},{"style":1147},[1617],{"type":67,"value":1165},{"type":61,"tag":1123,"props":1619,"children":1621},{"class":1125,"line":1620},14,[1622,1627,1631],{"type":61,"tag":1123,"props":1623,"children":1624},{"style":1147},[1625],{"type":67,"value":1626},"  }",{"type":61,"tag":1123,"props":1628,"children":1629},{"style":1351},[1630],{"type":67,"value":1007},{"type":61,"tag":1123,"props":1632,"children":1633},{"style":1147},[1634],{"type":67,"value":1165},{"type":61,"tag":1123,"props":1636,"children":1638},{"class":1125,"line":1637},15,[1639],{"type":61,"tag":1123,"props":1640,"children":1641},{"emptyLinePlaceholder":1172},[1642],{"type":67,"value":1175},{"type":61,"tag":1123,"props":1644,"children":1646},{"class":1125,"line":1645},16,[1647,1651,1655,1660,1664,1668,1672,1676,1680,1684,1688,1692,1696],{"type":61,"tag":1123,"props":1648,"children":1649},{"style":1136},[1650],{"type":67,"value":1467},{"type":61,"tag":1123,"props":1652,"children":1653},{"style":1147},[1654],{"type":67,"value":113},{"type":61,"tag":1123,"props":1656,"children":1657},{"style":1296},[1658],{"type":67,"value":1659},"onTranscriptData",{"type":61,"tag":1123,"props":1661,"children":1662},{"style":1351},[1663],{"type":67,"value":1304},{"type":61,"tag":1123,"props":1665,"children":1666},{"style":1147},[1667],{"type":67,"value":1304},{"type":61,"tag":1123,"props":1669,"children":1670},{"style":1312},[1671],{"type":67,"value":1489},{"type":61,"tag":1123,"props":1673,"children":1674},{"style":1147},[1675],{"type":67,"value":1227},{"type":61,"tag":1123,"props":1677,"children":1678},{"style":1312},[1679],{"type":67,"value":1498},{"type":61,"tag":1123,"props":1681,"children":1682},{"style":1147},[1683],{"type":67,"value":1227},{"type":61,"tag":1123,"props":1685,"children":1686},{"style":1312},[1687],{"type":67,"value":1507},{"type":61,"tag":1123,"props":1689,"children":1690},{"style":1147},[1691],{"type":67,"value":1007},{"type":61,"tag":1123,"props":1693,"children":1694},{"style":1192},[1695],{"type":67,"value":1334},{"type":61,"tag":1123,"props":1697,"children":1698},{"style":1147},[1699],{"type":67,"value":1339},{"type":61,"tag":1123,"props":1701,"children":1703},{"class":1125,"line":1702},17,[1704,1709,1714,1718,1723,1727,1732,1736,1741,1746,1750,1754],{"type":61,"tag":1123,"props":1705,"children":1706},{"style":1192},[1707],{"type":67,"value":1708},"    const",{"type":61,"tag":1123,"props":1710,"children":1711},{"style":1136},[1712],{"type":67,"value":1713}," text",{"type":61,"tag":1123,"props":1715,"children":1716},{"style":1147},[1717],{"type":67,"value":1422},{"type":61,"tag":1123,"props":1719,"children":1720},{"style":1136},[1721],{"type":67,"value":1722}," data",{"type":61,"tag":1123,"props":1724,"children":1725},{"style":1147},[1726],{"type":67,"value":113},{"type":61,"tag":1123,"props":1728,"children":1729},{"style":1296},[1730],{"type":67,"value":1731},"toString",{"type":61,"tag":1123,"props":1733,"children":1734},{"style":1351},[1735],{"type":67,"value":1304},{"type":61,"tag":1123,"props":1737,"children":1738},{"style":1147},[1739],{"type":67,"value":1740},"'",{"type":61,"tag":1123,"props":1742,"children":1743},{"style":1153},[1744],{"type":67,"value":1745},"utf8",{"type":61,"tag":1123,"props":1747,"children":1748},{"style":1147},[1749],{"type":67,"value":1740},{"type":61,"tag":1123,"props":1751,"children":1752},{"style":1351},[1753],{"type":67,"value":1007},{"type":61,"tag":1123,"props":1755,"children":1756},{"style":1147},[1757],{"type":67,"value":1165},{"type":61,"tag":1123,"props":1759,"children":1761},{"class":1125,"line":1760},18,[1762,1766,1770,1774,1778,1783,1787,1791,1795,1799,1803,1807,1811,1816,1820],{"type":61,"tag":1123,"props":1763,"children":1764},{"style":1136},[1765],{"type":67,"value":1528},{"type":61,"tag":1123,"props":1767,"children":1768},{"style":1147},[1769],{"type":67,"value":113},{"type":61,"tag":1123,"props":1771,"children":1772},{"style":1296},[1773],{"type":67,"value":1537},{"type":61,"tag":1123,"props":1775,"children":1776},{"style":1351},[1777],{"type":67,"value":1304},{"type":61,"tag":1123,"props":1779,"children":1780},{"style":1147},[1781],{"type":67,"value":1782},"`${",{"type":61,"tag":1123,"props":1784,"children":1785},{"style":1136},[1786],{"type":67,"value":1561},{"type":61,"tag":1123,"props":1788,"children":1789},{"style":1147},[1790],{"type":67,"value":113},{"type":61,"tag":1123,"props":1792,"children":1793},{"style":1136},[1794],{"type":67,"value":1570},{"type":61,"tag":1123,"props":1796,"children":1797},{"style":1147},[1798],{"type":67,"value":1575},{"type":61,"tag":1123,"props":1800,"children":1801},{"style":1153},[1802],{"type":67,"value":193},{"type":61,"tag":1123,"props":1804,"children":1805},{"style":1147},[1806],{"type":67,"value":1556},{"type":61,"tag":1123,"props":1808,"children":1809},{"style":1136},[1810],{"type":67,"value":67},{"type":61,"tag":1123,"props":1812,"children":1813},{"style":1147},[1814],{"type":67,"value":1815},"}`",{"type":61,"tag":1123,"props":1817,"children":1818},{"style":1351},[1819],{"type":67,"value":1007},{"type":61,"tag":1123,"props":1821,"children":1822},{"style":1147},[1823],{"type":67,"value":1165},{"type":61,"tag":1123,"props":1825,"children":1827},{"class":1125,"line":1826},19,[1828,1832,1836],{"type":61,"tag":1123,"props":1829,"children":1830},{"style":1147},[1831],{"type":67,"value":1626},{"type":61,"tag":1123,"props":1833,"children":1834},{"style":1351},[1835],{"type":67,"value":1007},{"type":61,"tag":1123,"props":1837,"children":1838},{"style":1147},[1839],{"type":67,"value":1165},{"type":61,"tag":1123,"props":1841,"children":1843},{"class":1125,"line":1842},20,[1844],{"type":61,"tag":1123,"props":1845,"children":1846},{"emptyLinePlaceholder":1172},[1847],{"type":67,"value":1175},{"type":61,"tag":1123,"props":1849,"children":1851},{"class":1125,"line":1850},21,[1852,1856,1860,1865,1869,1873,1878,1882,1886],{"type":61,"tag":1123,"props":1853,"children":1854},{"style":1136},[1855],{"type":67,"value":1467},{"type":61,"tag":1123,"props":1857,"children":1858},{"style":1147},[1859],{"type":67,"value":113},{"type":61,"tag":1123,"props":1861,"children":1862},{"style":1296},[1863],{"type":67,"value":1864},"onJoinConfirm",{"type":61,"tag":1123,"props":1866,"children":1867},{"style":1351},[1868],{"type":67,"value":1304},{"type":61,"tag":1123,"props":1870,"children":1871},{"style":1147},[1872],{"type":67,"value":1304},{"type":61,"tag":1123,"props":1874,"children":1875},{"style":1312},[1876],{"type":67,"value":1877},"reason",{"type":61,"tag":1123,"props":1879,"children":1880},{"style":1147},[1881],{"type":67,"value":1007},{"type":61,"tag":1123,"props":1883,"children":1884},{"style":1192},[1885],{"type":67,"value":1334},{"type":61,"tag":1123,"props":1887,"children":1888},{"style":1147},[1889],{"type":67,"value":1339},{"type":61,"tag":1123,"props":1891,"children":1893},{"class":1125,"line":1892},22,[1894,1898,1902,1906,1910,1914,1919,1923,1927,1931,1935],{"type":61,"tag":1123,"props":1895,"children":1896},{"style":1136},[1897],{"type":67,"value":1528},{"type":61,"tag":1123,"props":1899,"children":1900},{"style":1147},[1901],{"type":67,"value":113},{"type":61,"tag":1123,"props":1903,"children":1904},{"style":1296},[1905],{"type":67,"value":1537},{"type":61,"tag":1123,"props":1907,"children":1908},{"style":1351},[1909],{"type":67,"value":1304},{"type":61,"tag":1123,"props":1911,"children":1912},{"style":1147},[1913],{"type":67,"value":1546},{"type":61,"tag":1123,"props":1915,"children":1916},{"style":1153},[1917],{"type":67,"value":1918},"Joined session: ",{"type":61,"tag":1123,"props":1920,"children":1921},{"style":1147},[1922],{"type":67,"value":1556},{"type":61,"tag":1123,"props":1924,"children":1925},{"style":1136},[1926],{"type":67,"value":1877},{"type":61,"tag":1123,"props":1928,"children":1929},{"style":1147},[1930],{"type":67,"value":1815},{"type":61,"tag":1123,"props":1932,"children":1933},{"style":1351},[1934],{"type":67,"value":1007},{"type":61,"tag":1123,"props":1936,"children":1937},{"style":1147},[1938],{"type":67,"value":1165},{"type":61,"tag":1123,"props":1940,"children":1942},{"class":1125,"line":1941},23,[1943,1947,1951],{"type":61,"tag":1123,"props":1944,"children":1945},{"style":1147},[1946],{"type":67,"value":1626},{"type":61,"tag":1123,"props":1948,"children":1949},{"style":1351},[1950],{"type":67,"value":1007},{"type":61,"tag":1123,"props":1952,"children":1953},{"style":1147},[1954],{"type":67,"value":1165},{"type":61,"tag":1123,"props":1956,"children":1958},{"class":1125,"line":1957},24,[1959],{"type":61,"tag":1123,"props":1960,"children":1961},{"emptyLinePlaceholder":1172},[1962],{"type":67,"value":1175},{"type":61,"tag":1123,"props":1964,"children":1966},{"class":1125,"line":1965},25,[1967],{"type":61,"tag":1123,"props":1968,"children":1969},{"style":1182},[1970],{"type":67,"value":1971},"  \u002F\u002F SDK handles all WebSocket connections automatically\n",{"type":61,"tag":1123,"props":1973,"children":1975},{"class":1125,"line":1974},26,[1976],{"type":61,"tag":1123,"props":1977,"children":1978},{"style":1182},[1979],{"type":67,"value":1980},"  \u002F\u002F Accepts both meeting_uuid and session_id transparently\n",{"type":61,"tag":1123,"props":1982,"children":1984},{"class":1125,"line":1983},27,[1985,1989,1993,1998,2002,2007,2011],{"type":61,"tag":1123,"props":1986,"children":1987},{"style":1136},[1988],{"type":67,"value":1467},{"type":61,"tag":1123,"props":1990,"children":1991},{"style":1147},[1992],{"type":67,"value":113},{"type":61,"tag":1123,"props":1994,"children":1995},{"style":1296},[1996],{"type":67,"value":1997},"join",{"type":61,"tag":1123,"props":1999,"children":2000},{"style":1351},[2001],{"type":67,"value":1304},{"type":61,"tag":1123,"props":2003,"children":2004},{"style":1136},[2005],{"type":67,"value":2006},"payload",{"type":61,"tag":1123,"props":2008,"children":2009},{"style":1351},[2010],{"type":67,"value":1007},{"type":61,"tag":1123,"props":2012,"children":2013},{"style":1147},[2014],{"type":67,"value":1165},{"type":61,"tag":1123,"props":2016,"children":2018},{"class":1125,"line":2017},28,[2019,2023,2027],{"type":61,"tag":1123,"props":2020,"children":2021},{"style":1147},[2022],{"type":67,"value":1575},{"type":61,"tag":1123,"props":2024,"children":2025},{"style":1136},[2026],{"type":67,"value":1007},{"type":61,"tag":1123,"props":2028,"children":2029},{"style":1147},[2030],{"type":67,"value":1165},{"type":61,"tag":95,"props":2032,"children":2034},{"id":2033},"quick-start-manual-websocket",[2035],{"type":67,"value":2036},"Quick Start (Manual WebSocket)",{"type":61,"tag":70,"props":2038,"children":2039},{},[2040],{"type":67,"value":2041},"For full control or non-SDK languages, implement the two-phase WebSocket protocol:",{"type":61,"tag":1112,"props":2043,"children":2045},{"className":1114,"code":2044,"language":1116,"meta":1117,"style":1117},"const WebSocket = require('ws');\nconst crypto = require('crypto');\n\nconst RTMS_EVENTS = ['meeting.rtms_started', 'webinar.rtms_started', 'session.rtms_started'];\n\n\u002F\u002F 1. Generate signature\n\u002F\u002F For meetings\u002Fwebinars: uses meeting_uuid. For Video SDK: uses session_id.\nfunction generateSignature(clientId, idValue, streamId, clientSecret) {\n  const message = `${clientId},${idValue},${streamId}`;\n  return crypto.createHmac('sha256', clientSecret).update(message).digest('hex');\n}\n\n\u002F\u002F 2. Handle webhook\napp.post('\u002Fwebhook', (req, res) => {\n  res.status(200).send();  \u002F\u002F CRITICAL: Respond immediately!\n  \n  const { event, payload } = req.body;\n  if (RTMS_EVENTS.includes(event)) {\n    connectToRTMS(payload);\n  }\n});\n\n\u002F\u002F 3. Connect to signaling WebSocket\nfunction connectToRTMS(payload) {\n  const { server_urls, rtms_stream_id } = payload;\n  \u002F\u002F meeting_uuid for meetings\u002Fwebinars, session_id for Video SDK\n  const idValue = payload.meeting_uuid || payload.session_id;\n  const signature = generateSignature(CLIENT_ID, idValue, rtms_stream_id, CLIENT_SECRET);\n  \n  const signalingWs = new WebSocket(server_urls);\n  \n  signalingWs.on('open', () => {\n    signalingWs.send(JSON.stringify({\n      msg_type: 1,  \u002F\u002F Handshake request\n      protocol_version: 1,\n      meeting_uuid: idValue,\n      rtms_stream_id,\n      signature,\n      media_type: 9  \u002F\u002F AUDIO(1) | TRANSCRIPT(8)\n    }));\n  });\n  \n  \u002F\u002F ... handle responses, connect to media WebSocket\n}\n",[2046],{"type":61,"tag":76,"props":2047,"children":2048},{"__ignoreMap":1117},[2049,2095,2140,2147,2219,2226,2234,2242,2299,2366,2473,2481,2488,2496,2564,2618,2626,2677,2717,2741,2749,2764,2771,2779,2807,2848,2856,2904,2966,2974,3017,3025,3077,3120,3148,3170,3191,3204,3217,3240,3258,3274,3282,3291],{"type":61,"tag":1123,"props":2050,"children":2051},{"class":1125,"line":1126},[2052,2056,2061,2065,2070,2074,2078,2083,2087,2091],{"type":61,"tag":1123,"props":2053,"children":2054},{"style":1192},[2055],{"type":67,"value":1195},{"type":61,"tag":1123,"props":2057,"children":2058},{"style":1136},[2059],{"type":67,"value":2060}," WebSocket ",{"type":61,"tag":1123,"props":2062,"children":2063},{"style":1147},[2064],{"type":67,"value":1205},{"type":61,"tag":1123,"props":2066,"children":2067},{"style":1296},[2068],{"type":67,"value":2069}," require",{"type":61,"tag":1123,"props":2071,"children":2072},{"style":1136},[2073],{"type":67,"value":1304},{"type":61,"tag":1123,"props":2075,"children":2076},{"style":1147},[2077],{"type":67,"value":1740},{"type":61,"tag":1123,"props":2079,"children":2080},{"style":1153},[2081],{"type":67,"value":2082},"ws",{"type":61,"tag":1123,"props":2084,"children":2085},{"style":1147},[2086],{"type":67,"value":1740},{"type":61,"tag":1123,"props":2088,"children":2089},{"style":1136},[2090],{"type":67,"value":1007},{"type":61,"tag":1123,"props":2092,"children":2093},{"style":1147},[2094],{"type":67,"value":1165},{"type":61,"tag":1123,"props":2096,"children":2097},{"class":1125,"line":1168},[2098,2102,2107,2111,2115,2119,2123,2128,2132,2136],{"type":61,"tag":1123,"props":2099,"children":2100},{"style":1192},[2101],{"type":67,"value":1195},{"type":61,"tag":1123,"props":2103,"children":2104},{"style":1136},[2105],{"type":67,"value":2106}," crypto ",{"type":61,"tag":1123,"props":2108,"children":2109},{"style":1147},[2110],{"type":67,"value":1205},{"type":61,"tag":1123,"props":2112,"children":2113},{"style":1296},[2114],{"type":67,"value":2069},{"type":61,"tag":1123,"props":2116,"children":2117},{"style":1136},[2118],{"type":67,"value":1304},{"type":61,"tag":1123,"props":2120,"children":2121},{"style":1147},[2122],{"type":67,"value":1740},{"type":61,"tag":1123,"props":2124,"children":2125},{"style":1153},[2126],{"type":67,"value":2127},"crypto",{"type":61,"tag":1123,"props":2129,"children":2130},{"style":1147},[2131],{"type":67,"value":1740},{"type":61,"tag":1123,"props":2133,"children":2134},{"style":1136},[2135],{"type":67,"value":1007},{"type":61,"tag":1123,"props":2137,"children":2138},{"style":1147},[2139],{"type":67,"value":1165},{"type":61,"tag":1123,"props":2141,"children":2142},{"class":1125,"line":1178},[2143],{"type":61,"tag":1123,"props":2144,"children":2145},{"emptyLinePlaceholder":1172},[2146],{"type":67,"value":1175},{"type":61,"tag":1123,"props":2148,"children":2149},{"class":1125,"line":1188},[2150,2154,2158,2162,2166,2170,2174,2178,2182,2187,2191,2195,2199,2203,2207,2211,2215],{"type":61,"tag":1123,"props":2151,"children":2152},{"style":1192},[2153],{"type":67,"value":1195},{"type":61,"tag":1123,"props":2155,"children":2156},{"style":1136},[2157],{"type":67,"value":1200},{"type":61,"tag":1123,"props":2159,"children":2160},{"style":1147},[2161],{"type":67,"value":1205},{"type":61,"tag":1123,"props":2163,"children":2164},{"style":1136},[2165],{"type":67,"value":1210},{"type":61,"tag":1123,"props":2167,"children":2168},{"style":1147},[2169],{"type":67,"value":1740},{"type":61,"tag":1123,"props":2171,"children":2172},{"style":1153},[2173],{"type":67,"value":545},{"type":61,"tag":1123,"props":2175,"children":2176},{"style":1147},[2177],{"type":67,"value":1740},{"type":61,"tag":1123,"props":2179,"children":2180},{"style":1147},[2181],{"type":67,"value":1227},{"type":61,"tag":1123,"props":2183,"children":2184},{"style":1147},[2185],{"type":67,"value":2186}," '",{"type":61,"tag":1123,"props":2188,"children":2189},{"style":1153},[2190],{"type":67,"value":587},{"type":61,"tag":1123,"props":2192,"children":2193},{"style":1147},[2194],{"type":67,"value":1740},{"type":61,"tag":1123,"props":2196,"children":2197},{"style":1147},[2198],{"type":67,"value":1227},{"type":61,"tag":1123,"props":2200,"children":2201},{"style":1147},[2202],{"type":67,"value":2186},{"type":61,"tag":1123,"props":2204,"children":2205},{"style":1153},[2206],{"type":67,"value":628},{"type":61,"tag":1123,"props":2208,"children":2209},{"style":1147},[2210],{"type":67,"value":1740},{"type":61,"tag":1123,"props":2212,"children":2213},{"style":1136},[2214],{"type":67,"value":1260},{"type":61,"tag":1123,"props":2216,"children":2217},{"style":1147},[2218],{"type":67,"value":1165},{"type":61,"tag":1123,"props":2220,"children":2221},{"class":1125,"line":1267},[2222],{"type":61,"tag":1123,"props":2223,"children":2224},{"emptyLinePlaceholder":1172},[2225],{"type":67,"value":1175},{"type":61,"tag":1123,"props":2227,"children":2228},{"class":1125,"line":1275},[2229],{"type":61,"tag":1123,"props":2230,"children":2231},{"style":1182},[2232],{"type":67,"value":2233},"\u002F\u002F 1. Generate signature\n",{"type":61,"tag":1123,"props":2235,"children":2236},{"class":1125,"line":1284},[2237],{"type":61,"tag":1123,"props":2238,"children":2239},{"style":1182},[2240],{"type":67,"value":2241},"\u002F\u002F For meetings\u002Fwebinars: uses meeting_uuid. For Video SDK: uses session_id.\n",{"type":61,"tag":1123,"props":2243,"children":2244},{"class":1125,"line":1342},[2245,2250,2255,2259,2264,2268,2273,2277,2282,2286,2291,2295],{"type":61,"tag":1123,"props":2246,"children":2247},{"style":1192},[2248],{"type":67,"value":2249},"function",{"type":61,"tag":1123,"props":2251,"children":2252},{"style":1296},[2253],{"type":67,"value":2254}," generateSignature",{"type":61,"tag":1123,"props":2256,"children":2257},{"style":1147},[2258],{"type":67,"value":1304},{"type":61,"tag":1123,"props":2260,"children":2261},{"style":1312},[2262],{"type":67,"value":2263},"clientId",{"type":61,"tag":1123,"props":2265,"children":2266},{"style":1147},[2267],{"type":67,"value":1227},{"type":61,"tag":1123,"props":2269,"children":2270},{"style":1312},[2271],{"type":67,"value":2272}," idValue",{"type":61,"tag":1123,"props":2274,"children":2275},{"style":1147},[2276],{"type":67,"value":1227},{"type":61,"tag":1123,"props":2278,"children":2279},{"style":1312},[2280],{"type":67,"value":2281}," streamId",{"type":61,"tag":1123,"props":2283,"children":2284},{"style":1147},[2285],{"type":67,"value":1227},{"type":61,"tag":1123,"props":2287,"children":2288},{"style":1312},[2289],{"type":67,"value":2290}," clientSecret",{"type":61,"tag":1123,"props":2292,"children":2293},{"style":1147},[2294],{"type":67,"value":1007},{"type":61,"tag":1123,"props":2296,"children":2297},{"style":1147},[2298],{"type":67,"value":1339},{"type":61,"tag":1123,"props":2300,"children":2301},{"class":1125,"line":1398},[2302,2306,2311,2315,2320,2324,2328,2332,2336,2341,2345,2349,2353,2358,2362],{"type":61,"tag":1123,"props":2303,"children":2304},{"style":1192},[2305],{"type":67,"value":1412},{"type":61,"tag":1123,"props":2307,"children":2308},{"style":1136},[2309],{"type":67,"value":2310}," message",{"type":61,"tag":1123,"props":2312,"children":2313},{"style":1147},[2314],{"type":67,"value":1422},{"type":61,"tag":1123,"props":2316,"children":2317},{"style":1147},[2318],{"type":67,"value":2319}," `${",{"type":61,"tag":1123,"props":2321,"children":2322},{"style":1136},[2323],{"type":67,"value":2263},{"type":61,"tag":1123,"props":2325,"children":2326},{"style":1147},[2327],{"type":67,"value":1575},{"type":61,"tag":1123,"props":2329,"children":2330},{"style":1153},[2331],{"type":67,"value":1227},{"type":61,"tag":1123,"props":2333,"children":2334},{"style":1147},[2335],{"type":67,"value":1556},{"type":61,"tag":1123,"props":2337,"children":2338},{"style":1136},[2339],{"type":67,"value":2340},"idValue",{"type":61,"tag":1123,"props":2342,"children":2343},{"style":1147},[2344],{"type":67,"value":1575},{"type":61,"tag":1123,"props":2346,"children":2347},{"style":1153},[2348],{"type":67,"value":1227},{"type":61,"tag":1123,"props":2350,"children":2351},{"style":1147},[2352],{"type":67,"value":1556},{"type":61,"tag":1123,"props":2354,"children":2355},{"style":1136},[2356],{"type":67,"value":2357},"streamId",{"type":61,"tag":1123,"props":2359,"children":2360},{"style":1147},[2361],{"type":67,"value":1815},{"type":61,"tag":1123,"props":2363,"children":2364},{"style":1147},[2365],{"type":67,"value":1165},{"type":61,"tag":1123,"props":2367,"children":2368},{"class":1125,"line":1406},[2369,2374,2379,2383,2388,2392,2396,2401,2405,2409,2413,2417,2421,2426,2430,2435,2439,2443,2448,2452,2456,2461,2465,2469],{"type":61,"tag":1123,"props":2370,"children":2371},{"style":1130},[2372],{"type":67,"value":2373},"  return",{"type":61,"tag":1123,"props":2375,"children":2376},{"style":1136},[2377],{"type":67,"value":2378}," crypto",{"type":61,"tag":1123,"props":2380,"children":2381},{"style":1147},[2382],{"type":67,"value":113},{"type":61,"tag":1123,"props":2384,"children":2385},{"style":1296},[2386],{"type":67,"value":2387},"createHmac",{"type":61,"tag":1123,"props":2389,"children":2390},{"style":1351},[2391],{"type":67,"value":1304},{"type":61,"tag":1123,"props":2393,"children":2394},{"style":1147},[2395],{"type":67,"value":1740},{"type":61,"tag":1123,"props":2397,"children":2398},{"style":1153},[2399],{"type":67,"value":2400},"sha256",{"type":61,"tag":1123,"props":2402,"children":2403},{"style":1147},[2404],{"type":67,"value":1740},{"type":61,"tag":1123,"props":2406,"children":2407},{"style":1147},[2408],{"type":67,"value":1227},{"type":61,"tag":1123,"props":2410,"children":2411},{"style":1136},[2412],{"type":67,"value":2290},{"type":61,"tag":1123,"props":2414,"children":2415},{"style":1351},[2416],{"type":67,"value":1007},{"type":61,"tag":1123,"props":2418,"children":2419},{"style":1147},[2420],{"type":67,"value":113},{"type":61,"tag":1123,"props":2422,"children":2423},{"style":1296},[2424],{"type":67,"value":2425},"update",{"type":61,"tag":1123,"props":2427,"children":2428},{"style":1351},[2429],{"type":67,"value":1304},{"type":61,"tag":1123,"props":2431,"children":2432},{"style":1136},[2433],{"type":67,"value":2434},"message",{"type":61,"tag":1123,"props":2436,"children":2437},{"style":1351},[2438],{"type":67,"value":1007},{"type":61,"tag":1123,"props":2440,"children":2441},{"style":1147},[2442],{"type":67,"value":113},{"type":61,"tag":1123,"props":2444,"children":2445},{"style":1296},[2446],{"type":67,"value":2447},"digest",{"type":61,"tag":1123,"props":2449,"children":2450},{"style":1351},[2451],{"type":67,"value":1304},{"type":61,"tag":1123,"props":2453,"children":2454},{"style":1147},[2455],{"type":67,"value":1740},{"type":61,"tag":1123,"props":2457,"children":2458},{"style":1153},[2459],{"type":67,"value":2460},"hex",{"type":61,"tag":1123,"props":2462,"children":2463},{"style":1147},[2464],{"type":67,"value":1740},{"type":61,"tag":1123,"props":2466,"children":2467},{"style":1351},[2468],{"type":67,"value":1007},{"type":61,"tag":1123,"props":2470,"children":2471},{"style":1147},[2472],{"type":67,"value":1165},{"type":61,"tag":1123,"props":2474,"children":2475},{"class":1125,"line":1453},[2476],{"type":61,"tag":1123,"props":2477,"children":2478},{"style":1147},[2479],{"type":67,"value":2480},"}\n",{"type":61,"tag":1123,"props":2482,"children":2483},{"class":1125,"line":1461},[2484],{"type":61,"tag":1123,"props":2485,"children":2486},{"emptyLinePlaceholder":1172},[2487],{"type":67,"value":1175},{"type":61,"tag":1123,"props":2489,"children":2490},{"class":1125,"line":1522},[2491],{"type":61,"tag":1123,"props":2492,"children":2493},{"style":1182},[2494],{"type":67,"value":2495},"\u002F\u002F 2. Handle webhook\n",{"type":61,"tag":1123,"props":2497,"children":2498},{"class":1125,"line":1620},[2499,2504,2508,2513,2517,2521,2526,2530,2534,2538,2543,2547,2552,2556,2560],{"type":61,"tag":1123,"props":2500,"children":2501},{"style":1136},[2502],{"type":67,"value":2503},"app",{"type":61,"tag":1123,"props":2505,"children":2506},{"style":1147},[2507],{"type":67,"value":113},{"type":61,"tag":1123,"props":2509,"children":2510},{"style":1296},[2511],{"type":67,"value":2512},"post",{"type":61,"tag":1123,"props":2514,"children":2515},{"style":1136},[2516],{"type":67,"value":1304},{"type":61,"tag":1123,"props":2518,"children":2519},{"style":1147},[2520],{"type":67,"value":1740},{"type":61,"tag":1123,"props":2522,"children":2523},{"style":1153},[2524],{"type":67,"value":2525},"\u002Fwebhook",{"type":61,"tag":1123,"props":2527,"children":2528},{"style":1147},[2529],{"type":67,"value":1740},{"type":61,"tag":1123,"props":2531,"children":2532},{"style":1147},[2533],{"type":67,"value":1227},{"type":61,"tag":1123,"props":2535,"children":2536},{"style":1147},[2537],{"type":67,"value":999},{"type":61,"tag":1123,"props":2539,"children":2540},{"style":1312},[2541],{"type":67,"value":2542},"req",{"type":61,"tag":1123,"props":2544,"children":2545},{"style":1147},[2546],{"type":67,"value":1227},{"type":61,"tag":1123,"props":2548,"children":2549},{"style":1312},[2550],{"type":67,"value":2551}," res",{"type":61,"tag":1123,"props":2553,"children":2554},{"style":1147},[2555],{"type":67,"value":1007},{"type":61,"tag":1123,"props":2557,"children":2558},{"style":1192},[2559],{"type":67,"value":1334},{"type":61,"tag":1123,"props":2561,"children":2562},{"style":1147},[2563],{"type":67,"value":1339},{"type":61,"tag":1123,"props":2565,"children":2566},{"class":1125,"line":1637},[2567,2572,2576,2581,2585,2591,2595,2599,2604,2608,2613],{"type":61,"tag":1123,"props":2568,"children":2569},{"style":1136},[2570],{"type":67,"value":2571},"  res",{"type":61,"tag":1123,"props":2573,"children":2574},{"style":1147},[2575],{"type":67,"value":113},{"type":61,"tag":1123,"props":2577,"children":2578},{"style":1296},[2579],{"type":67,"value":2580},"status",{"type":61,"tag":1123,"props":2582,"children":2583},{"style":1351},[2584],{"type":67,"value":1304},{"type":61,"tag":1123,"props":2586,"children":2588},{"style":2587},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[2589],{"type":67,"value":2590},"200",{"type":61,"tag":1123,"props":2592,"children":2593},{"style":1351},[2594],{"type":67,"value":1007},{"type":61,"tag":1123,"props":2596,"children":2597},{"style":1147},[2598],{"type":67,"value":113},{"type":61,"tag":1123,"props":2600,"children":2601},{"style":1296},[2602],{"type":67,"value":2603},"send",{"type":61,"tag":1123,"props":2605,"children":2606},{"style":1351},[2607],{"type":67,"value":1446},{"type":61,"tag":1123,"props":2609,"children":2610},{"style":1147},[2611],{"type":67,"value":2612},";",{"type":61,"tag":1123,"props":2614,"children":2615},{"style":1182},[2616],{"type":67,"value":2617},"  \u002F\u002F CRITICAL: Respond immediately!\n",{"type":61,"tag":1123,"props":2619,"children":2620},{"class":1125,"line":1645},[2621],{"type":61,"tag":1123,"props":2622,"children":2623},{"style":1351},[2624],{"type":67,"value":2625},"  \n",{"type":61,"tag":1123,"props":2627,"children":2628},{"class":1125,"line":1702},[2629,2633,2638,2642,2646,2650,2655,2659,2664,2668,2673],{"type":61,"tag":1123,"props":2630,"children":2631},{"style":1192},[2632],{"type":67,"value":1412},{"type":61,"tag":1123,"props":2634,"children":2635},{"style":1147},[2636],{"type":67,"value":2637}," {",{"type":61,"tag":1123,"props":2639,"children":2640},{"style":1136},[2641],{"type":67,"value":1315},{"type":61,"tag":1123,"props":2643,"children":2644},{"style":1147},[2645],{"type":67,"value":1227},{"type":61,"tag":1123,"props":2647,"children":2648},{"style":1136},[2649],{"type":67,"value":1324},{"type":61,"tag":1123,"props":2651,"children":2652},{"style":1147},[2653],{"type":67,"value":2654}," }",{"type":61,"tag":1123,"props":2656,"children":2657},{"style":1147},[2658],{"type":67,"value":1422},{"type":61,"tag":1123,"props":2660,"children":2661},{"style":1136},[2662],{"type":67,"value":2663}," req",{"type":61,"tag":1123,"props":2665,"children":2666},{"style":1147},[2667],{"type":67,"value":113},{"type":61,"tag":1123,"props":2669,"children":2670},{"style":1136},[2671],{"type":67,"value":2672},"body",{"type":61,"tag":1123,"props":2674,"children":2675},{"style":1147},[2676],{"type":67,"value":1165},{"type":61,"tag":1123,"props":2678,"children":2679},{"class":1125,"line":1760},[2680,2684,2688,2692,2696,2700,2704,2708,2712],{"type":61,"tag":1123,"props":2681,"children":2682},{"style":1130},[2683],{"type":67,"value":1348},{"type":61,"tag":1123,"props":2685,"children":2686},{"style":1351},[2687],{"type":67,"value":999},{"type":61,"tag":1123,"props":2689,"children":2690},{"style":1136},[2691],{"type":67,"value":1363},{"type":61,"tag":1123,"props":2693,"children":2694},{"style":1147},[2695],{"type":67,"value":113},{"type":61,"tag":1123,"props":2697,"children":2698},{"style":1296},[2699],{"type":67,"value":1372},{"type":61,"tag":1123,"props":2701,"children":2702},{"style":1351},[2703],{"type":67,"value":1304},{"type":61,"tag":1123,"props":2705,"children":2706},{"style":1136},[2707],{"type":67,"value":1381},{"type":61,"tag":1123,"props":2709,"children":2710},{"style":1351},[2711],{"type":67,"value":1386},{"type":61,"tag":1123,"props":2713,"children":2714},{"style":1147},[2715],{"type":67,"value":2716},"{\n",{"type":61,"tag":1123,"props":2718,"children":2719},{"class":1125,"line":1826},[2720,2725,2729,2733,2737],{"type":61,"tag":1123,"props":2721,"children":2722},{"style":1296},[2723],{"type":67,"value":2724},"    connectToRTMS",{"type":61,"tag":1123,"props":2726,"children":2727},{"style":1351},[2728],{"type":67,"value":1304},{"type":61,"tag":1123,"props":2730,"children":2731},{"style":1136},[2732],{"type":67,"value":2006},{"type":61,"tag":1123,"props":2734,"children":2735},{"style":1351},[2736],{"type":67,"value":1007},{"type":61,"tag":1123,"props":2738,"children":2739},{"style":1147},[2740],{"type":67,"value":1165},{"type":61,"tag":1123,"props":2742,"children":2743},{"class":1125,"line":1842},[2744],{"type":61,"tag":1123,"props":2745,"children":2746},{"style":1147},[2747],{"type":67,"value":2748},"  }\n",{"type":61,"tag":1123,"props":2750,"children":2751},{"class":1125,"line":1850},[2752,2756,2760],{"type":61,"tag":1123,"props":2753,"children":2754},{"style":1147},[2755],{"type":67,"value":1575},{"type":61,"tag":1123,"props":2757,"children":2758},{"style":1136},[2759],{"type":67,"value":1007},{"type":61,"tag":1123,"props":2761,"children":2762},{"style":1147},[2763],{"type":67,"value":1165},{"type":61,"tag":1123,"props":2765,"children":2766},{"class":1125,"line":1892},[2767],{"type":61,"tag":1123,"props":2768,"children":2769},{"emptyLinePlaceholder":1172},[2770],{"type":67,"value":1175},{"type":61,"tag":1123,"props":2772,"children":2773},{"class":1125,"line":1941},[2774],{"type":61,"tag":1123,"props":2775,"children":2776},{"style":1182},[2777],{"type":67,"value":2778},"\u002F\u002F 3. Connect to signaling WebSocket\n",{"type":61,"tag":1123,"props":2780,"children":2781},{"class":1125,"line":1957},[2782,2786,2791,2795,2799,2803],{"type":61,"tag":1123,"props":2783,"children":2784},{"style":1192},[2785],{"type":67,"value":2249},{"type":61,"tag":1123,"props":2787,"children":2788},{"style":1296},[2789],{"type":67,"value":2790}," connectToRTMS",{"type":61,"tag":1123,"props":2792,"children":2793},{"style":1147},[2794],{"type":67,"value":1304},{"type":61,"tag":1123,"props":2796,"children":2797},{"style":1312},[2798],{"type":67,"value":2006},{"type":61,"tag":1123,"props":2800,"children":2801},{"style":1147},[2802],{"type":67,"value":1007},{"type":61,"tag":1123,"props":2804,"children":2805},{"style":1147},[2806],{"type":67,"value":1339},{"type":61,"tag":1123,"props":2808,"children":2809},{"class":1125,"line":1965},[2810,2814,2818,2823,2827,2832,2836,2840,2844],{"type":61,"tag":1123,"props":2811,"children":2812},{"style":1192},[2813],{"type":67,"value":1412},{"type":61,"tag":1123,"props":2815,"children":2816},{"style":1147},[2817],{"type":67,"value":2637},{"type":61,"tag":1123,"props":2819,"children":2820},{"style":1136},[2821],{"type":67,"value":2822}," server_urls",{"type":61,"tag":1123,"props":2824,"children":2825},{"style":1147},[2826],{"type":67,"value":1227},{"type":61,"tag":1123,"props":2828,"children":2829},{"style":1136},[2830],{"type":67,"value":2831}," rtms_stream_id",{"type":61,"tag":1123,"props":2833,"children":2834},{"style":1147},[2835],{"type":67,"value":2654},{"type":61,"tag":1123,"props":2837,"children":2838},{"style":1147},[2839],{"type":67,"value":1422},{"type":61,"tag":1123,"props":2841,"children":2842},{"style":1136},[2843],{"type":67,"value":1324},{"type":61,"tag":1123,"props":2845,"children":2846},{"style":1147},[2847],{"type":67,"value":1165},{"type":61,"tag":1123,"props":2849,"children":2850},{"class":1125,"line":1974},[2851],{"type":61,"tag":1123,"props":2852,"children":2853},{"style":1182},[2854],{"type":67,"value":2855},"  \u002F\u002F meeting_uuid for meetings\u002Fwebinars, session_id for Video SDK\n",{"type":61,"tag":1123,"props":2857,"children":2858},{"class":1125,"line":1983},[2859,2863,2867,2871,2875,2879,2883,2888,2892,2896,2900],{"type":61,"tag":1123,"props":2860,"children":2861},{"style":1192},[2862],{"type":67,"value":1412},{"type":61,"tag":1123,"props":2864,"children":2865},{"style":1136},[2866],{"type":67,"value":2272},{"type":61,"tag":1123,"props":2868,"children":2869},{"style":1147},[2870],{"type":67,"value":1422},{"type":61,"tag":1123,"props":2872,"children":2873},{"style":1136},[2874],{"type":67,"value":1324},{"type":61,"tag":1123,"props":2876,"children":2877},{"style":1147},[2878],{"type":67,"value":113},{"type":61,"tag":1123,"props":2880,"children":2881},{"style":1136},[2882],{"type":67,"value":562},{"type":61,"tag":1123,"props":2884,"children":2885},{"style":1147},[2886],{"type":67,"value":2887}," ||",{"type":61,"tag":1123,"props":2889,"children":2890},{"style":1136},[2891],{"type":67,"value":1324},{"type":61,"tag":1123,"props":2893,"children":2894},{"style":1147},[2895],{"type":67,"value":113},{"type":61,"tag":1123,"props":2897,"children":2898},{"style":1136},[2899],{"type":67,"value":644},{"type":61,"tag":1123,"props":2901,"children":2902},{"style":1147},[2903],{"type":67,"value":1165},{"type":61,"tag":1123,"props":2905,"children":2906},{"class":1125,"line":2017},[2907,2911,2916,2920,2924,2928,2933,2937,2941,2945,2949,2953,2958,2962],{"type":61,"tag":1123,"props":2908,"children":2909},{"style":1192},[2910],{"type":67,"value":1412},{"type":61,"tag":1123,"props":2912,"children":2913},{"style":1136},[2914],{"type":67,"value":2915}," signature",{"type":61,"tag":1123,"props":2917,"children":2918},{"style":1147},[2919],{"type":67,"value":1422},{"type":61,"tag":1123,"props":2921,"children":2922},{"style":1296},[2923],{"type":67,"value":2254},{"type":61,"tag":1123,"props":2925,"children":2926},{"style":1351},[2927],{"type":67,"value":1304},{"type":61,"tag":1123,"props":2929,"children":2930},{"style":1136},[2931],{"type":67,"value":2932},"CLIENT_ID",{"type":61,"tag":1123,"props":2934,"children":2935},{"style":1147},[2936],{"type":67,"value":1227},{"type":61,"tag":1123,"props":2938,"children":2939},{"style":1136},[2940],{"type":67,"value":2272},{"type":61,"tag":1123,"props":2942,"children":2943},{"style":1147},[2944],{"type":67,"value":1227},{"type":61,"tag":1123,"props":2946,"children":2947},{"style":1136},[2948],{"type":67,"value":2831},{"type":61,"tag":1123,"props":2950,"children":2951},{"style":1147},[2952],{"type":67,"value":1227},{"type":61,"tag":1123,"props":2954,"children":2955},{"style":1136},[2956],{"type":67,"value":2957}," CLIENT_SECRET",{"type":61,"tag":1123,"props":2959,"children":2960},{"style":1351},[2961],{"type":67,"value":1007},{"type":61,"tag":1123,"props":2963,"children":2964},{"style":1147},[2965],{"type":67,"value":1165},{"type":61,"tag":1123,"props":2967,"children":2969},{"class":1125,"line":2968},29,[2970],{"type":61,"tag":1123,"props":2971,"children":2972},{"style":1351},[2973],{"type":67,"value":2625},{"type":61,"tag":1123,"props":2975,"children":2977},{"class":1125,"line":2976},30,[2978,2982,2987,2991,2995,3000,3004,3009,3013],{"type":61,"tag":1123,"props":2979,"children":2980},{"style":1192},[2981],{"type":67,"value":1412},{"type":61,"tag":1123,"props":2983,"children":2984},{"style":1136},[2985],{"type":67,"value":2986}," signalingWs",{"type":61,"tag":1123,"props":2988,"children":2989},{"style":1147},[2990],{"type":67,"value":1422},{"type":61,"tag":1123,"props":2992,"children":2993},{"style":1147},[2994],{"type":67,"value":1427},{"type":61,"tag":1123,"props":2996,"children":2997},{"style":1296},[2998],{"type":67,"value":2999}," WebSocket",{"type":61,"tag":1123,"props":3001,"children":3002},{"style":1351},[3003],{"type":67,"value":1304},{"type":61,"tag":1123,"props":3005,"children":3006},{"style":1136},[3007],{"type":67,"value":3008},"server_urls",{"type":61,"tag":1123,"props":3010,"children":3011},{"style":1351},[3012],{"type":67,"value":1007},{"type":61,"tag":1123,"props":3014,"children":3015},{"style":1147},[3016],{"type":67,"value":1165},{"type":61,"tag":1123,"props":3018,"children":3020},{"class":1125,"line":3019},31,[3021],{"type":61,"tag":1123,"props":3022,"children":3023},{"style":1351},[3024],{"type":67,"value":2625},{"type":61,"tag":1123,"props":3026,"children":3028},{"class":1125,"line":3027},32,[3029,3034,3038,3043,3047,3051,3056,3060,3064,3069,3073],{"type":61,"tag":1123,"props":3030,"children":3031},{"style":1136},[3032],{"type":67,"value":3033},"  signalingWs",{"type":61,"tag":1123,"props":3035,"children":3036},{"style":1147},[3037],{"type":67,"value":113},{"type":61,"tag":1123,"props":3039,"children":3040},{"style":1296},[3041],{"type":67,"value":3042},"on",{"type":61,"tag":1123,"props":3044,"children":3045},{"style":1351},[3046],{"type":67,"value":1304},{"type":61,"tag":1123,"props":3048,"children":3049},{"style":1147},[3050],{"type":67,"value":1740},{"type":61,"tag":1123,"props":3052,"children":3053},{"style":1153},[3054],{"type":67,"value":3055},"open",{"type":61,"tag":1123,"props":3057,"children":3058},{"style":1147},[3059],{"type":67,"value":1740},{"type":61,"tag":1123,"props":3061,"children":3062},{"style":1147},[3063],{"type":67,"value":1227},{"type":61,"tag":1123,"props":3065,"children":3066},{"style":1147},[3067],{"type":67,"value":3068}," ()",{"type":61,"tag":1123,"props":3070,"children":3071},{"style":1192},[3072],{"type":67,"value":1334},{"type":61,"tag":1123,"props":3074,"children":3075},{"style":1147},[3076],{"type":67,"value":1339},{"type":61,"tag":1123,"props":3078,"children":3080},{"class":1125,"line":3079},33,[3081,3086,3090,3094,3098,3103,3107,3112,3116],{"type":61,"tag":1123,"props":3082,"children":3083},{"style":1136},[3084],{"type":67,"value":3085},"    signalingWs",{"type":61,"tag":1123,"props":3087,"children":3088},{"style":1147},[3089],{"type":67,"value":113},{"type":61,"tag":1123,"props":3091,"children":3092},{"style":1296},[3093],{"type":67,"value":2603},{"type":61,"tag":1123,"props":3095,"children":3096},{"style":1351},[3097],{"type":67,"value":1304},{"type":61,"tag":1123,"props":3099,"children":3100},{"style":1136},[3101],{"type":67,"value":3102},"JSON",{"type":61,"tag":1123,"props":3104,"children":3105},{"style":1147},[3106],{"type":67,"value":113},{"type":61,"tag":1123,"props":3108,"children":3109},{"style":1296},[3110],{"type":67,"value":3111},"stringify",{"type":61,"tag":1123,"props":3113,"children":3114},{"style":1351},[3115],{"type":67,"value":1304},{"type":61,"tag":1123,"props":3117,"children":3118},{"style":1147},[3119],{"type":67,"value":2716},{"type":61,"tag":1123,"props":3121,"children":3123},{"class":1125,"line":3122},34,[3124,3129,3134,3139,3143],{"type":61,"tag":1123,"props":3125,"children":3126},{"style":1351},[3127],{"type":67,"value":3128},"      msg_type",{"type":61,"tag":1123,"props":3130,"children":3131},{"style":1147},[3132],{"type":67,"value":3133},":",{"type":61,"tag":1123,"props":3135,"children":3136},{"style":2587},[3137],{"type":67,"value":3138}," 1",{"type":61,"tag":1123,"props":3140,"children":3141},{"style":1147},[3142],{"type":67,"value":1227},{"type":61,"tag":1123,"props":3144,"children":3145},{"style":1182},[3146],{"type":67,"value":3147},"  \u002F\u002F Handshake request\n",{"type":61,"tag":1123,"props":3149,"children":3151},{"class":1125,"line":3150},35,[3152,3157,3161,3165],{"type":61,"tag":1123,"props":3153,"children":3154},{"style":1351},[3155],{"type":67,"value":3156},"      protocol_version",{"type":61,"tag":1123,"props":3158,"children":3159},{"style":1147},[3160],{"type":67,"value":3133},{"type":61,"tag":1123,"props":3162,"children":3163},{"style":2587},[3164],{"type":67,"value":3138},{"type":61,"tag":1123,"props":3166,"children":3167},{"style":1147},[3168],{"type":67,"value":3169},",\n",{"type":61,"tag":1123,"props":3171,"children":3173},{"class":1125,"line":3172},36,[3174,3179,3183,3187],{"type":61,"tag":1123,"props":3175,"children":3176},{"style":1351},[3177],{"type":67,"value":3178},"      meeting_uuid",{"type":61,"tag":1123,"props":3180,"children":3181},{"style":1147},[3182],{"type":67,"value":3133},{"type":61,"tag":1123,"props":3184,"children":3185},{"style":1136},[3186],{"type":67,"value":2272},{"type":61,"tag":1123,"props":3188,"children":3189},{"style":1147},[3190],{"type":67,"value":3169},{"type":61,"tag":1123,"props":3192,"children":3194},{"class":1125,"line":3193},37,[3195,3200],{"type":61,"tag":1123,"props":3196,"children":3197},{"style":1136},[3198],{"type":67,"value":3199},"      rtms_stream_id",{"type":61,"tag":1123,"props":3201,"children":3202},{"style":1147},[3203],{"type":67,"value":3169},{"type":61,"tag":1123,"props":3205,"children":3207},{"class":1125,"line":3206},38,[3208,3213],{"type":61,"tag":1123,"props":3209,"children":3210},{"style":1136},[3211],{"type":67,"value":3212},"      signature",{"type":61,"tag":1123,"props":3214,"children":3215},{"style":1147},[3216],{"type":67,"value":3169},{"type":61,"tag":1123,"props":3218,"children":3220},{"class":1125,"line":3219},39,[3221,3226,3230,3235],{"type":61,"tag":1123,"props":3222,"children":3223},{"style":1351},[3224],{"type":67,"value":3225},"      media_type",{"type":61,"tag":1123,"props":3227,"children":3228},{"style":1147},[3229],{"type":67,"value":3133},{"type":61,"tag":1123,"props":3231,"children":3232},{"style":2587},[3233],{"type":67,"value":3234}," 9",{"type":61,"tag":1123,"props":3236,"children":3237},{"style":1182},[3238],{"type":67,"value":3239},"  \u002F\u002F AUDIO(1) | TRANSCRIPT(8)\n",{"type":61,"tag":1123,"props":3241,"children":3243},{"class":1125,"line":3242},40,[3244,3249,3254],{"type":61,"tag":1123,"props":3245,"children":3246},{"style":1147},[3247],{"type":67,"value":3248},"    }",{"type":61,"tag":1123,"props":3250,"children":3251},{"style":1351},[3252],{"type":67,"value":3253},"))",{"type":61,"tag":1123,"props":3255,"children":3256},{"style":1147},[3257],{"type":67,"value":1165},{"type":61,"tag":1123,"props":3259,"children":3261},{"class":1125,"line":3260},41,[3262,3266,3270],{"type":61,"tag":1123,"props":3263,"children":3264},{"style":1147},[3265],{"type":67,"value":1626},{"type":61,"tag":1123,"props":3267,"children":3268},{"style":1351},[3269],{"type":67,"value":1007},{"type":61,"tag":1123,"props":3271,"children":3272},{"style":1147},[3273],{"type":67,"value":1165},{"type":61,"tag":1123,"props":3275,"children":3277},{"class":1125,"line":3276},42,[3278],{"type":61,"tag":1123,"props":3279,"children":3280},{"style":1351},[3281],{"type":67,"value":2625},{"type":61,"tag":1123,"props":3283,"children":3285},{"class":1125,"line":3284},43,[3286],{"type":61,"tag":1123,"props":3287,"children":3288},{"style":1182},[3289],{"type":67,"value":3290},"  \u002F\u002F ... handle responses, connect to media WebSocket\n",{"type":61,"tag":1123,"props":3292,"children":3294},{"class":1125,"line":3293},44,[3295],{"type":61,"tag":1123,"props":3296,"children":3297},{"style":1147},[3298],{"type":67,"value":2480},{"type":61,"tag":70,"props":3300,"children":3301},{},[3302,3307,3308,3313],{"type":61,"tag":107,"props":3303,"children":3304},{},[3305],{"type":67,"value":3306},"See",{"type":67,"value":193},{"type":61,"tag":195,"props":3309,"children":3310},{"href":292},[3311],{"type":67,"value":3312},"Manual WebSocket Guide",{"type":67,"value":3314}," for complete implementation.",{"type":61,"tag":95,"props":3316,"children":3318},{"id":3317},"media-type-bitmask",[3319],{"type":67,"value":3320},"Media Type Bitmask",{"type":61,"tag":70,"props":3322,"children":3323},{},[3324],{"type":67,"value":3325},"Combine types with bitwise OR:",{"type":61,"tag":489,"props":3327,"children":3328},{},[3329,3350],{"type":61,"tag":493,"props":3330,"children":3331},{},[3332],{"type":61,"tag":497,"props":3333,"children":3334},{},[3335,3340,3345],{"type":61,"tag":501,"props":3336,"children":3337},{},[3338],{"type":67,"value":3339},"Type",{"type":61,"tag":501,"props":3341,"children":3342},{},[3343],{"type":67,"value":3344},"Value",{"type":61,"tag":501,"props":3346,"children":3347},{},[3348],{"type":67,"value":3349},"Description",{"type":61,"tag":522,"props":3351,"children":3352},{},[3353,3370,3387,3407,3424,3441],{"type":61,"tag":497,"props":3354,"children":3355},{},[3356,3360,3365],{"type":61,"tag":529,"props":3357,"children":3358},{},[3359],{"type":67,"value":14},{"type":61,"tag":529,"props":3361,"children":3362},{},[3363],{"type":67,"value":3364},"1",{"type":61,"tag":529,"props":3366,"children":3367},{},[3368],{"type":67,"value":3369},"PCM audio samples",{"type":61,"tag":497,"props":3371,"children":3372},{},[3373,3377,3382],{"type":61,"tag":529,"props":3374,"children":3375},{},[3376],{"type":67,"value":18},{"type":61,"tag":529,"props":3378,"children":3379},{},[3380],{"type":67,"value":3381},"2",{"type":61,"tag":529,"props":3383,"children":3384},{},[3385],{"type":67,"value":3386},"H.264\u002FJPG video frames",{"type":61,"tag":497,"props":3388,"children":3389},{},[3390,3394,3399],{"type":61,"tag":529,"props":3391,"children":3392},{},[3393],{"type":67,"value":783},{"type":61,"tag":529,"props":3395,"children":3396},{},[3397],{"type":67,"value":3398},"4",{"type":61,"tag":529,"props":3400,"children":3401},{},[3402],{"type":61,"tag":107,"props":3403,"children":3404},{},[3405],{"type":67,"value":3406},"Separate from video!",{"type":61,"tag":497,"props":3408,"children":3409},{},[3410,3414,3419],{"type":61,"tag":529,"props":3411,"children":3412},{},[3413],{"type":67,"value":803},{"type":61,"tag":529,"props":3415,"children":3416},{},[3417],{"type":67,"value":3418},"8",{"type":61,"tag":529,"props":3420,"children":3421},{},[3422],{"type":67,"value":3423},"Real-time speech-to-text",{"type":61,"tag":497,"props":3425,"children":3426},{},[3427,3431,3436],{"type":61,"tag":529,"props":3428,"children":3429},{},[3430],{"type":67,"value":824},{"type":61,"tag":529,"props":3432,"children":3433},{},[3434],{"type":67,"value":3435},"16",{"type":61,"tag":529,"props":3437,"children":3438},{},[3439],{"type":67,"value":3440},"In-meeting chat messages",{"type":61,"tag":497,"props":3442,"children":3443},{},[3444,3449,3454],{"type":61,"tag":529,"props":3445,"children":3446},{},[3447],{"type":67,"value":3448},"All",{"type":61,"tag":529,"props":3450,"children":3451},{},[3452],{"type":67,"value":3453},"32",{"type":61,"tag":529,"props":3455,"children":3456},{},[3457],{"type":67,"value":3458},"All media types",{"type":61,"tag":70,"props":3460,"children":3461},{},[3462,3467,3469,3475,3477],{"type":61,"tag":107,"props":3463,"children":3464},{},[3465],{"type":67,"value":3466},"Example",{"type":67,"value":3468},": Audio + Transcript = ",{"type":61,"tag":76,"props":3470,"children":3472},{"className":3471},[],[3473],{"type":67,"value":3474},"1 | 8",{"type":67,"value":3476}," = ",{"type":61,"tag":76,"props":3478,"children":3480},{"className":3479},[],[3481],{"type":67,"value":3482},"9",{"type":61,"tag":95,"props":3484,"children":3486},{"id":3485},"critical-gotchas",[3487],{"type":67,"value":3488},"Critical Gotchas",{"type":61,"tag":489,"props":3490,"children":3491},{},[3492,3508],{"type":61,"tag":493,"props":3493,"children":3494},{},[3495],{"type":61,"tag":497,"props":3496,"children":3497},{},[3498,3503],{"type":61,"tag":501,"props":3499,"children":3500},{},[3501],{"type":67,"value":3502},"Issue",{"type":61,"tag":501,"props":3504,"children":3505},{},[3506],{"type":67,"value":3507},"Solution",{"type":61,"tag":522,"props":3509,"children":3510},{},[3511,3527,3543,3559,3587,3617,3646],{"type":61,"tag":497,"props":3512,"children":3513},{},[3514,3522],{"type":61,"tag":529,"props":3515,"children":3516},{},[3517],{"type":61,"tag":107,"props":3518,"children":3519},{},[3520],{"type":67,"value":3521},"Only 1 connection allowed",{"type":61,"tag":529,"props":3523,"children":3524},{},[3525],{"type":67,"value":3526},"New connections kick out existing ones. Track active sessions!",{"type":61,"tag":497,"props":3528,"children":3529},{},[3530,3538],{"type":61,"tag":529,"props":3531,"children":3532},{},[3533],{"type":61,"tag":107,"props":3534,"children":3535},{},[3536],{"type":67,"value":3537},"Respond 200 immediately",{"type":61,"tag":529,"props":3539,"children":3540},{},[3541],{"type":67,"value":3542},"If webhook delays, Zoom retries creating duplicate connections",{"type":61,"tag":497,"props":3544,"children":3545},{},[3546,3554],{"type":61,"tag":529,"props":3547,"children":3548},{},[3549],{"type":61,"tag":107,"props":3550,"children":3551},{},[3552],{"type":67,"value":3553},"Heartbeat mandatory",{"type":61,"tag":529,"props":3555,"children":3556},{},[3557],{"type":67,"value":3558},"Respond to msg_type 12 with msg_type 13, or connection dies",{"type":61,"tag":497,"props":3560,"children":3561},{},[3562,3570],{"type":61,"tag":529,"props":3563,"children":3564},{},[3565],{"type":61,"tag":107,"props":3566,"children":3567},{},[3568],{"type":67,"value":3569},"Reconnection is YOUR job",{"type":61,"tag":529,"props":3571,"children":3572},{},[3573,3575,3580,3582],{"type":67,"value":3574},"RTMS doesn't auto-reconnect. Media keep-alive tolerance is now about ",{"type":61,"tag":107,"props":3576,"children":3577},{},[3578],{"type":67,"value":3579},"65s",{"type":67,"value":3581},"; signaling remains around ",{"type":61,"tag":107,"props":3583,"children":3584},{},[3585],{"type":67,"value":3586},"60s",{"type":61,"tag":497,"props":3588,"children":3589},{},[3590,3598],{"type":61,"tag":529,"props":3591,"children":3592},{},[3593],{"type":61,"tag":107,"props":3594,"children":3595},{},[3596],{"type":67,"value":3597},"Transcript language drift",{"type":61,"tag":529,"props":3599,"children":3600},{},[3601,3603,3608,3610,3615],{"type":67,"value":3602},"Use ",{"type":61,"tag":76,"props":3604,"children":3606},{"className":3605},[],[3607],{"type":67,"value":868},{"type":67,"value":3609}," plus ",{"type":61,"tag":76,"props":3611,"children":3613},{"className":3612},[],[3614],{"type":67,"value":884},{"type":67,"value":3616}," when you want fixed-language transcription instead of automatic language switching",{"type":61,"tag":497,"props":3618,"children":3619},{},[3620,3628],{"type":61,"tag":529,"props":3621,"children":3622},{},[3623],{"type":61,"tag":107,"props":3624,"children":3625},{},[3626],{"type":67,"value":3627},"Single participant video only",{"type":61,"tag":529,"props":3629,"children":3630},{},[3631,3636,3638,3644],{"type":61,"tag":76,"props":3632,"children":3634},{"className":3633},[],[3635],{"type":67,"value":910},{"type":67,"value":3637}," supports one participant at a time. A new ",{"type":61,"tag":76,"props":3639,"children":3641},{"className":3640},[],[3642],{"type":67,"value":3643},"VIDEO_SUBSCRIPTION_REQ",{"type":67,"value":3645}," overrides the previous selection",{"type":61,"tag":497,"props":3647,"children":3648},{},[3649,3657],{"type":61,"tag":529,"props":3650,"children":3651},{},[3652],{"type":61,"tag":107,"props":3653,"children":3654},{},[3655],{"type":67,"value":3656},"Graceful close is explicit now",{"type":61,"tag":529,"props":3658,"children":3659},{},[3660,3661,3666,3667,3672],{"type":67,"value":3602},{"type":61,"tag":76,"props":3662,"children":3664},{"className":3663},[],[3665],{"type":67,"value":927},{"type":67,"value":547},{"type":61,"tag":76,"props":3668,"children":3670},{"className":3669},[],[3671],{"type":67,"value":935},{"type":67,"value":3673}," when your backend wants to terminate the stream cleanly",{"type":61,"tag":95,"props":3675,"children":3677},{"id":3676},"environment-variables",[3678],{"type":67,"value":401},{"type":61,"tag":700,"props":3680,"children":3682},{"id":3681},"sdk-environment-variables",[3683],{"type":67,"value":3684},"SDK Environment Variables",{"type":61,"tag":1112,"props":3686,"children":3690},{"className":3687,"code":3688,"language":3689,"meta":1117,"style":1117},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Required - Authentication\nZM_RTMS_CLIENT=your_client_id          # Zoom OAuth Client ID\nZM_RTMS_SECRET=your_client_secret      # Zoom OAuth Client Secret\n\n# Optional - Webhook server\nZM_RTMS_PORT=8080                      # Default: 8080\nZM_RTMS_PATH=\u002Fwebhook                  # Default: \u002F\n\n# Optional - Logging\nZM_RTMS_LOG_LEVEL=info                 # error, warn, info, debug, trace\nZM_RTMS_LOG_FORMAT=progressive         # progressive or json\nZM_RTMS_LOG_ENABLED=true\n","bash",[3691],{"type":61,"tag":76,"props":3692,"children":3693},{"__ignoreMap":1117},[3694,3702,3724,3746,3753,3761,3783,3804,3811,3819,3841,3863],{"type":61,"tag":1123,"props":3695,"children":3696},{"class":1125,"line":1126},[3697],{"type":61,"tag":1123,"props":3698,"children":3699},{"style":1182},[3700],{"type":67,"value":3701},"# Required - Authentication\n",{"type":61,"tag":1123,"props":3703,"children":3704},{"class":1125,"line":1168},[3705,3710,3714,3719],{"type":61,"tag":1123,"props":3706,"children":3707},{"style":1136},[3708],{"type":67,"value":3709},"ZM_RTMS_CLIENT",{"type":61,"tag":1123,"props":3711,"children":3712},{"style":1147},[3713],{"type":67,"value":1205},{"type":61,"tag":1123,"props":3715,"children":3716},{"style":1153},[3717],{"type":67,"value":3718},"your_client_id",{"type":61,"tag":1123,"props":3720,"children":3721},{"style":1182},[3722],{"type":67,"value":3723},"          # Zoom OAuth Client ID\n",{"type":61,"tag":1123,"props":3725,"children":3726},{"class":1125,"line":1178},[3727,3732,3736,3741],{"type":61,"tag":1123,"props":3728,"children":3729},{"style":1136},[3730],{"type":67,"value":3731},"ZM_RTMS_SECRET",{"type":61,"tag":1123,"props":3733,"children":3734},{"style":1147},[3735],{"type":67,"value":1205},{"type":61,"tag":1123,"props":3737,"children":3738},{"style":1153},[3739],{"type":67,"value":3740},"your_client_secret",{"type":61,"tag":1123,"props":3742,"children":3743},{"style":1182},[3744],{"type":67,"value":3745},"      # Zoom OAuth Client Secret\n",{"type":61,"tag":1123,"props":3747,"children":3748},{"class":1125,"line":1188},[3749],{"type":61,"tag":1123,"props":3750,"children":3751},{"emptyLinePlaceholder":1172},[3752],{"type":67,"value":1175},{"type":61,"tag":1123,"props":3754,"children":3755},{"class":1125,"line":1267},[3756],{"type":61,"tag":1123,"props":3757,"children":3758},{"style":1182},[3759],{"type":67,"value":3760},"# Optional - Webhook server\n",{"type":61,"tag":1123,"props":3762,"children":3763},{"class":1125,"line":1275},[3764,3769,3773,3778],{"type":61,"tag":1123,"props":3765,"children":3766},{"style":1136},[3767],{"type":67,"value":3768},"ZM_RTMS_PORT",{"type":61,"tag":1123,"props":3770,"children":3771},{"style":1147},[3772],{"type":67,"value":1205},{"type":61,"tag":1123,"props":3774,"children":3775},{"style":1153},[3776],{"type":67,"value":3777},"8080",{"type":61,"tag":1123,"props":3779,"children":3780},{"style":1182},[3781],{"type":67,"value":3782},"                      # Default: 8080\n",{"type":61,"tag":1123,"props":3784,"children":3785},{"class":1125,"line":1284},[3786,3791,3795,3799],{"type":61,"tag":1123,"props":3787,"children":3788},{"style":1136},[3789],{"type":67,"value":3790},"ZM_RTMS_PATH",{"type":61,"tag":1123,"props":3792,"children":3793},{"style":1147},[3794],{"type":67,"value":1205},{"type":61,"tag":1123,"props":3796,"children":3797},{"style":1153},[3798],{"type":67,"value":2525},{"type":61,"tag":1123,"props":3800,"children":3801},{"style":1182},[3802],{"type":67,"value":3803},"                  # Default: \u002F\n",{"type":61,"tag":1123,"props":3805,"children":3806},{"class":1125,"line":1342},[3807],{"type":61,"tag":1123,"props":3808,"children":3809},{"emptyLinePlaceholder":1172},[3810],{"type":67,"value":1175},{"type":61,"tag":1123,"props":3812,"children":3813},{"class":1125,"line":1398},[3814],{"type":61,"tag":1123,"props":3815,"children":3816},{"style":1182},[3817],{"type":67,"value":3818},"# Optional - Logging\n",{"type":61,"tag":1123,"props":3820,"children":3821},{"class":1125,"line":1406},[3822,3827,3831,3836],{"type":61,"tag":1123,"props":3823,"children":3824},{"style":1136},[3825],{"type":67,"value":3826},"ZM_RTMS_LOG_LEVEL",{"type":61,"tag":1123,"props":3828,"children":3829},{"style":1147},[3830],{"type":67,"value":1205},{"type":61,"tag":1123,"props":3832,"children":3833},{"style":1153},[3834],{"type":67,"value":3835},"info",{"type":61,"tag":1123,"props":3837,"children":3838},{"style":1182},[3839],{"type":67,"value":3840},"                 # error, warn, info, debug, trace\n",{"type":61,"tag":1123,"props":3842,"children":3843},{"class":1125,"line":1453},[3844,3849,3853,3858],{"type":61,"tag":1123,"props":3845,"children":3846},{"style":1136},[3847],{"type":67,"value":3848},"ZM_RTMS_LOG_FORMAT",{"type":61,"tag":1123,"props":3850,"children":3851},{"style":1147},[3852],{"type":67,"value":1205},{"type":61,"tag":1123,"props":3854,"children":3855},{"style":1153},[3856],{"type":67,"value":3857},"progressive",{"type":61,"tag":1123,"props":3859,"children":3860},{"style":1182},[3861],{"type":67,"value":3862},"         # progressive or json\n",{"type":61,"tag":1123,"props":3864,"children":3865},{"class":1125,"line":1461},[3866,3871,3875],{"type":61,"tag":1123,"props":3867,"children":3868},{"style":1136},[3869],{"type":67,"value":3870},"ZM_RTMS_LOG_ENABLED",{"type":61,"tag":1123,"props":3872,"children":3873},{"style":1147},[3874],{"type":67,"value":1205},{"type":61,"tag":1123,"props":3876,"children":3877},{"style":1153},[3878],{"type":67,"value":3879},"true\n",{"type":61,"tag":700,"props":3881,"children":3883},{"id":3882},"manual-implementation-variables",[3884],{"type":67,"value":3885},"Manual Implementation Variables",{"type":61,"tag":1112,"props":3887,"children":3889},{"className":3687,"code":3888,"language":3689,"meta":1117,"style":1117},"ZOOM_CLIENT_ID=your_client_id\nZOOM_CLIENT_SECRET=your_client_secret\nZOOM_SECRET_TOKEN=your_webhook_token   # For webhook validation\n",[3890],{"type":61,"tag":76,"props":3891,"children":3892},{"__ignoreMap":1117},[3893,3910,3927],{"type":61,"tag":1123,"props":3894,"children":3895},{"class":1125,"line":1126},[3896,3901,3905],{"type":61,"tag":1123,"props":3897,"children":3898},{"style":1136},[3899],{"type":67,"value":3900},"ZOOM_CLIENT_ID",{"type":61,"tag":1123,"props":3902,"children":3903},{"style":1147},[3904],{"type":67,"value":1205},{"type":61,"tag":1123,"props":3906,"children":3907},{"style":1153},[3908],{"type":67,"value":3909},"your_client_id\n",{"type":61,"tag":1123,"props":3911,"children":3912},{"class":1125,"line":1168},[3913,3918,3922],{"type":61,"tag":1123,"props":3914,"children":3915},{"style":1136},[3916],{"type":67,"value":3917},"ZOOM_CLIENT_SECRET",{"type":61,"tag":1123,"props":3919,"children":3920},{"style":1147},[3921],{"type":67,"value":1205},{"type":61,"tag":1123,"props":3923,"children":3924},{"style":1153},[3925],{"type":67,"value":3926},"your_client_secret\n",{"type":61,"tag":1123,"props":3928,"children":3929},{"class":1125,"line":1178},[3930,3935,3939,3944],{"type":61,"tag":1123,"props":3931,"children":3932},{"style":1136},[3933],{"type":67,"value":3934},"ZOOM_SECRET_TOKEN",{"type":61,"tag":1123,"props":3936,"children":3937},{"style":1147},[3938],{"type":67,"value":1205},{"type":61,"tag":1123,"props":3940,"children":3941},{"style":1153},[3942],{"type":67,"value":3943},"your_webhook_token",{"type":61,"tag":1123,"props":3945,"children":3946},{"style":1182},[3947],{"type":67,"value":3948},"   # For webhook validation\n",{"type":61,"tag":95,"props":3950,"children":3952},{"id":3951},"zoom-app-setup",[3953],{"type":67,"value":3954},"Zoom App Setup",{"type":61,"tag":700,"props":3956,"children":3958},{"id":3957},"for-meetings-and-webinars-general-app",[3959],{"type":67,"value":3960},"For Meetings and Webinars (General App)",{"type":61,"tag":253,"props":3962,"children":3963},{},[3964,3978,3994,4004,4047],{"type":61,"tag":119,"props":3965,"children":3966},{},[3967,3969,3976],{"type":67,"value":3968},"Go to ",{"type":61,"tag":195,"props":3970,"children":3973},{"href":3971,"rel":3972},"https:\u002F\u002Fmarketplace.zoom.us",[199],[3974],{"type":67,"value":3975},"marketplace.zoom.us",{"type":67,"value":3977}," -> Develop -> Build App",{"type":61,"tag":119,"props":3979,"children":3980},{},[3981,3983,3987,3989],{"type":67,"value":3982},"Choose ",{"type":61,"tag":107,"props":3984,"children":3985},{},[3986],{"type":67,"value":567},{"type":67,"value":3988}," -> ",{"type":61,"tag":107,"props":3990,"children":3991},{},[3992],{"type":67,"value":3993},"User-Managed",{"type":61,"tag":119,"props":3995,"children":3996},{},[3997,3999],{"type":67,"value":3998},"Features -> Access -> ",{"type":61,"tag":107,"props":4000,"children":4001},{},[4002],{"type":67,"value":4003},"Enable Event Subscription",{"type":61,"tag":119,"props":4005,"children":4006},{},[4007,4009],{"type":67,"value":4008},"Add Events -> Search \"rtms\" -> Select:\n",{"type":61,"tag":115,"props":4010,"children":4011},{},[4012,4020,4028,4038],{"type":61,"tag":119,"props":4013,"children":4014},{},[4015],{"type":61,"tag":76,"props":4016,"children":4018},{"className":4017},[],[4019],{"type":67,"value":545},{"type":61,"tag":119,"props":4021,"children":4022},{},[4023],{"type":61,"tag":76,"props":4024,"children":4026},{"className":4025},[],[4027],{"type":67,"value":553},{"type":61,"tag":119,"props":4029,"children":4030},{},[4031,4036],{"type":61,"tag":76,"props":4032,"children":4034},{"className":4033},[],[4035],{"type":67,"value":587},{"type":67,"value":4037}," (if using webinars)",{"type":61,"tag":119,"props":4039,"children":4040},{},[4041,4046],{"type":61,"tag":76,"props":4042,"children":4044},{"className":4043},[],[4045],{"type":67,"value":594},{"type":67,"value":4037},{"type":61,"tag":119,"props":4048,"children":4049},{},[4050,4052],{"type":67,"value":4051},"Scopes -> Add Scopes -> Search \"rtms\" -> Add:\n",{"type":61,"tag":115,"props":4053,"children":4054},{},[4055,4064,4073,4082,4091,4101,4111,4121],{"type":61,"tag":119,"props":4056,"children":4057},{},[4058],{"type":61,"tag":76,"props":4059,"children":4061},{"className":4060},[],[4062],{"type":67,"value":4063},"meeting:read:meeting_audio",{"type":61,"tag":119,"props":4065,"children":4066},{},[4067],{"type":61,"tag":76,"props":4068,"children":4070},{"className":4069},[],[4071],{"type":67,"value":4072},"meeting:read:meeting_video",{"type":61,"tag":119,"props":4074,"children":4075},{},[4076],{"type":61,"tag":76,"props":4077,"children":4079},{"className":4078},[],[4080],{"type":67,"value":4081},"meeting:read:meeting_transcript",{"type":61,"tag":119,"props":4083,"children":4084},{},[4085],{"type":61,"tag":76,"props":4086,"children":4088},{"className":4087},[],[4089],{"type":67,"value":4090},"meeting:read:meeting_chat",{"type":61,"tag":119,"props":4092,"children":4093},{},[4094,4100],{"type":61,"tag":76,"props":4095,"children":4097},{"className":4096},[],[4098],{"type":67,"value":4099},"webinar:read:webinar_audio",{"type":67,"value":4037},{"type":61,"tag":119,"props":4102,"children":4103},{},[4104,4110],{"type":61,"tag":76,"props":4105,"children":4107},{"className":4106},[],[4108],{"type":67,"value":4109},"webinar:read:webinar_video",{"type":67,"value":4037},{"type":61,"tag":119,"props":4112,"children":4113},{},[4114,4120],{"type":61,"tag":76,"props":4115,"children":4117},{"className":4116},[],[4118],{"type":67,"value":4119},"webinar:read:webinar_transcript",{"type":67,"value":4037},{"type":61,"tag":119,"props":4122,"children":4123},{},[4124,4130],{"type":61,"tag":76,"props":4125,"children":4127},{"className":4126},[],[4128],{"type":67,"value":4129},"webinar:read:webinar_chat",{"type":67,"value":4037},{"type":61,"tag":700,"props":4132,"children":4134},{"id":4133},"for-video-sdk-video-sdk-app",[4135],{"type":67,"value":4136},"For Video SDK (Video SDK App)",{"type":61,"tag":253,"props":4138,"children":4139},{},[4140,4150,4158,4163],{"type":61,"tag":119,"props":4141,"children":4142},{},[4143,4144,4149],{"type":67,"value":3968},{"type":61,"tag":195,"props":4145,"children":4147},{"href":3971,"rel":4146},[199],[4148],{"type":67,"value":3975},{"type":67,"value":3977},{"type":61,"tag":119,"props":4151,"children":4152},{},[4153,4154],{"type":67,"value":3982},{"type":61,"tag":107,"props":4155,"children":4156},{},[4157],{"type":67,"value":649},{"type":61,"tag":119,"props":4159,"children":4160},{},[4161],{"type":67,"value":4162},"Use your SDK Key and SDK Secret (not OAuth Client ID\u002FSecret)",{"type":61,"tag":119,"props":4164,"children":4165},{},[4166,4168],{"type":67,"value":4167},"Add Events:\n",{"type":61,"tag":115,"props":4169,"children":4170},{},[4171,4179],{"type":61,"tag":119,"props":4172,"children":4173},{},[4174],{"type":61,"tag":76,"props":4175,"children":4177},{"className":4176},[],[4178],{"type":67,"value":628},{"type":61,"tag":119,"props":4180,"children":4181},{},[4182],{"type":61,"tag":76,"props":4183,"children":4185},{"className":4184},[],[4186],{"type":67,"value":635},{"type":61,"tag":95,"props":4188,"children":4190},{"id":4189},"sample-repositories",[4191],{"type":67,"value":4192},"Sample Repositories",{"type":61,"tag":700,"props":4194,"children":4196},{"id":4195},"official-samples",[4197],{"type":67,"value":4198},"Official Samples",{"type":61,"tag":489,"props":4200,"children":4201},{},[4202,4217],{"type":61,"tag":493,"props":4203,"children":4204},{},[4205],{"type":61,"tag":497,"props":4206,"children":4207},{},[4208,4213],{"type":61,"tag":501,"props":4209,"children":4210},{},[4211],{"type":67,"value":4212},"Repository",{"type":61,"tag":501,"props":4214,"children":4215},{},[4216],{"type":67,"value":3349},{"type":61,"tag":522,"props":4218,"children":4219},{},[4220,4237,4255,4273,4291],{"type":61,"tag":497,"props":4221,"children":4222},{},[4223,4232],{"type":61,"tag":529,"props":4224,"children":4225},{},[4226],{"type":61,"tag":195,"props":4227,"children":4229},{"href":234,"rel":4228},[199],[4230],{"type":67,"value":4231},"rtms-samples",{"type":61,"tag":529,"props":4233,"children":4234},{},[4235],{"type":67,"value":4236},"RTMSManager, boilerplates, AI samples",{"type":61,"tag":497,"props":4238,"children":4239},{},[4240,4250],{"type":61,"tag":529,"props":4241,"children":4242},{},[4243],{"type":61,"tag":195,"props":4244,"children":4247},{"href":4245,"rel":4246},"https:\u002F\u002Fgithub.com\u002Fzoom\u002Frtms-quickstart-js",[199],[4248],{"type":67,"value":4249},"rtms-quickstart-js",{"type":61,"tag":529,"props":4251,"children":4252},{},[4253],{"type":67,"value":4254},"JavaScript SDK quickstart",{"type":61,"tag":497,"props":4256,"children":4257},{},[4258,4268],{"type":61,"tag":529,"props":4259,"children":4260},{},[4261],{"type":61,"tag":195,"props":4262,"children":4265},{"href":4263,"rel":4264},"https:\u002F\u002Fgithub.com\u002Fzoom\u002Frtms-quickstart-py",[199],[4266],{"type":67,"value":4267},"rtms-quickstart-py",{"type":61,"tag":529,"props":4269,"children":4270},{},[4271],{"type":67,"value":4272},"Python SDK quickstart",{"type":61,"tag":497,"props":4274,"children":4275},{},[4276,4286],{"type":61,"tag":529,"props":4277,"children":4278},{},[4279],{"type":61,"tag":195,"props":4280,"children":4283},{"href":4281,"rel":4282},"https:\u002F\u002Fgithub.com\u002Fzoom\u002Frtms-sdk-cpp",[199],[4284],{"type":67,"value":4285},"rtms-sdk-cpp",{"type":61,"tag":529,"props":4287,"children":4288},{},[4289],{"type":67,"value":4290},"C++ SDK",{"type":61,"tag":497,"props":4292,"children":4293},{},[4294,4303],{"type":61,"tag":529,"props":4295,"children":4296},{},[4297],{"type":61,"tag":195,"props":4298,"children":4301},{"href":4299,"rel":4300},"https:\u002F\u002Fgithub.com\u002Fzoom\u002Frtms",[199],[4302],{"type":67,"value":4},{"type":61,"tag":529,"props":4304,"children":4305},{},[4306],{"type":67,"value":4307},"Main SDK repository",{"type":61,"tag":700,"props":4309,"children":4311},{"id":4310},"ai-integration-samples",[4312],{"type":67,"value":4313},"AI Integration Samples",{"type":61,"tag":489,"props":4315,"children":4316},{},[4317,4332],{"type":61,"tag":493,"props":4318,"children":4319},{},[4320],{"type":61,"tag":497,"props":4321,"children":4322},{},[4323,4328],{"type":61,"tag":501,"props":4324,"children":4325},{},[4326],{"type":67,"value":4327},"Sample",{"type":61,"tag":501,"props":4329,"children":4330},{},[4331],{"type":67,"value":3349},{"type":61,"tag":522,"props":4333,"children":4334},{},[4335,4353,4371],{"type":61,"tag":497,"props":4336,"children":4337},{},[4338,4348],{"type":61,"tag":529,"props":4339,"children":4340},{},[4341],{"type":61,"tag":195,"props":4342,"children":4345},{"href":4343,"rel":4344},"https:\u002F\u002Fgithub.com\u002Fzoom\u002Frtms-meeting-assistant-starter-kit",[199],[4346],{"type":67,"value":4347},"rtms-meeting-assistant-starter-kit",{"type":61,"tag":529,"props":4349,"children":4350},{},[4351],{"type":67,"value":4352},"AI meeting assistant with summaries",{"type":61,"tag":497,"props":4354,"children":4355},{},[4356,4366],{"type":61,"tag":529,"props":4357,"children":4358},{},[4359],{"type":61,"tag":195,"props":4360,"children":4363},{"href":4361,"rel":4362},"https:\u002F\u002Fgithub.com\u002Fzoom\u002Farlo-meeting-assistant",[199],[4364],{"type":67,"value":4365},"arlo-meeting-assistant",{"type":61,"tag":529,"props":4367,"children":4368},{},[4369],{"type":67,"value":4370},"Production meeting assistant with DB",{"type":61,"tag":497,"props":4372,"children":4373},{},[4374,4384],{"type":61,"tag":529,"props":4375,"children":4376},{},[4377],{"type":61,"tag":195,"props":4378,"children":4381},{"href":4379,"rel":4380},"https:\u002F\u002Fgithub.com\u002Fzoom\u002Fvideosdk-rtms-transcribe-audio",[199],[4382],{"type":67,"value":4383},"videosdk-rtms-transcribe-audio",{"type":61,"tag":529,"props":4385,"children":4386},{},[4387],{"type":67,"value":4388},"Whisper transcription",{"type":61,"tag":95,"props":4390,"children":4392},{"id":4391},"complete-documentation",[4393],{"type":67,"value":4394},"Complete Documentation",{"type":61,"tag":700,"props":4396,"children":4398},{"id":4397},"concepts",[4399],{"type":67,"value":4400},"Concepts",{"type":61,"tag":115,"props":4402,"children":4403},{},[4404,4415],{"type":61,"tag":119,"props":4405,"children":4406},{},[4407,4414],{"type":61,"tag":107,"props":4408,"children":4409},{},[4410],{"type":61,"tag":195,"props":4411,"children":4412},{"href":264},[4413],{"type":67,"value":267},{"type":67,"value":269},{"type":61,"tag":119,"props":4416,"children":4417},{},[4418,4425],{"type":61,"tag":107,"props":4419,"children":4420},{},[4421],{"type":61,"tag":195,"props":4422,"children":4423},{"href":356},[4424],{"type":67,"value":359},{"type":67,"value":4426}," - Webhook to streaming flow",{"type":61,"tag":700,"props":4428,"children":4430},{"id":4429},"examples",[4431],{"type":67,"value":4432},"Examples",{"type":61,"tag":115,"props":4434,"children":4435},{},[4436,4448,4460,4472],{"type":61,"tag":119,"props":4437,"children":4438},{},[4439,4446],{"type":61,"tag":107,"props":4440,"children":4441},{},[4442],{"type":61,"tag":195,"props":4443,"children":4444},{"href":278},[4445],{"type":67,"value":281},{"type":67,"value":4447}," - Using @zoom\u002Frtms SDK",{"type":61,"tag":119,"props":4449,"children":4450},{},[4451,4458],{"type":61,"tag":107,"props":4452,"children":4453},{},[4454],{"type":61,"tag":195,"props":4455,"children":4456},{"href":292},[4457],{"type":67,"value":295},{"type":67,"value":4459}," - Raw protocol implementation",{"type":61,"tag":119,"props":4461,"children":4462},{},[4463,4470],{"type":61,"tag":107,"props":4464,"children":4465},{},[4466],{"type":61,"tag":195,"props":4467,"children":4468},{"href":331},[4469],{"type":67,"value":334},{"type":67,"value":4471}," - Complete bot implementation guide",{"type":61,"tag":119,"props":4473,"children":4474},{},[4475,4484],{"type":61,"tag":107,"props":4476,"children":4477},{},[4478],{"type":61,"tag":195,"props":4479,"children":4481},{"href":4480},"examples\u002Fai-integration.md",[4482],{"type":67,"value":4483},"AI Integration",{"type":67,"value":4485}," - Transcription and analysis patterns",{"type":61,"tag":700,"props":4487,"children":4489},{"id":4488},"references",[4490],{"type":67,"value":4491},"References",{"type":61,"tag":115,"props":4493,"children":4494},{},[4495,4506,4517,4531],{"type":61,"tag":119,"props":4496,"children":4497},{},[4498,4505],{"type":61,"tag":107,"props":4499,"children":4500},{},[4501],{"type":61,"tag":195,"props":4502,"children":4503},{"href":306},[4504],{"type":67,"value":309},{"type":67,"value":311},{"type":61,"tag":119,"props":4507,"children":4508},{},[4509,4516],{"type":61,"tag":107,"props":4510,"children":4511},{},[4512],{"type":61,"tag":195,"props":4513,"children":4514},{"href":370},[4515],{"type":67,"value":373},{"type":67,"value":375},{"type":61,"tag":119,"props":4518,"children":4519},{},[4520,4529],{"type":61,"tag":107,"props":4521,"children":4522},{},[4523],{"type":61,"tag":195,"props":4524,"children":4526},{"href":4525},"references\u002Fconnection.md",[4527],{"type":67,"value":4528},"Connection",{"type":67,"value":4530}," - WebSocket protocol details",{"type":61,"tag":119,"props":4532,"children":4533},{},[4534,4541],{"type":61,"tag":107,"props":4535,"children":4536},{},[4537],{"type":61,"tag":195,"props":4538,"children":4539},{"href":384},[4540],{"type":67,"value":387},{"type":67,"value":4542}," - Event subscription",{"type":61,"tag":700,"props":4544,"children":4546},{"id":4545},"troubleshooting",[4547],{"type":67,"value":4548},"Troubleshooting",{"type":61,"tag":115,"props":4550,"children":4551},{},[4552],{"type":61,"tag":119,"props":4553,"children":4554},{},[4555,4562],{"type":61,"tag":107,"props":4556,"children":4557},{},[4558],{"type":61,"tag":195,"props":4559,"children":4560},{"href":446},[4561],{"type":67,"value":449},{"type":67,"value":4563}," - FAQ and solutions",{"type":61,"tag":95,"props":4565,"children":4567},{"id":4566},"resources",[4568],{"type":67,"value":4569},"Resources",{"type":61,"tag":115,"props":4571,"children":4572},{},[4573,4587,4602,4617],{"type":61,"tag":119,"props":4574,"children":4575},{},[4576,4581,4582],{"type":61,"tag":107,"props":4577,"children":4578},{},[4579],{"type":67,"value":4580},"Official docs",{"type":67,"value":193},{"type":61,"tag":195,"props":4583,"children":4585},{"href":197,"rel":4584},[199],[4586],{"type":67,"value":197},{"type":61,"tag":119,"props":4588,"children":4589},{},[4590,4595,4596],{"type":61,"tag":107,"props":4591,"children":4592},{},[4593],{"type":67,"value":4594},"Data types",{"type":67,"value":193},{"type":61,"tag":195,"props":4597,"children":4600},{"href":4598,"rel":4599},"https:\u002F\u002Fdevelopers.zoom.us\u002Fdocs\u002Frtms\u002Fdata-types\u002F",[199],[4601],{"type":67,"value":4598},{"type":61,"tag":119,"props":4603,"children":4604},{},[4605,4610,4611],{"type":61,"tag":107,"props":4606,"children":4607},{},[4608],{"type":67,"value":4609},"Media params",{"type":67,"value":193},{"type":61,"tag":195,"props":4612,"children":4615},{"href":4613,"rel":4614},"https:\u002F\u002Fdevelopers.zoom.us\u002Fdocs\u002Frtms\u002Fmedia-parameter-definition\u002F",[199],[4616],{"type":67,"value":4613},{"type":61,"tag":119,"props":4618,"children":4619},{},[4620,4625,4626],{"type":61,"tag":107,"props":4621,"children":4622},{},[4623],{"type":67,"value":4624},"Developer forum",{"type":67,"value":193},{"type":61,"tag":195,"props":4627,"children":4629},{"href":1098,"rel":4628},[199],[4630],{"type":67,"value":1098},{"type":61,"tag":4632,"props":4633,"children":4634},"hr",{},[],{"type":61,"tag":70,"props":4636,"children":4637},{},[4638,4643],{"type":61,"tag":107,"props":4639,"children":4640},{},[4641],{"type":67,"value":4642},"Need help?",{"type":67,"value":4644}," Start with Integrated Index section below for complete navigation.",{"type":61,"tag":4632,"props":4646,"children":4647},{},[],{"type":61,"tag":95,"props":4649,"children":4651},{"id":4650},"integrated-index",[4652],{"type":67,"value":425},{"type":61,"tag":70,"props":4654,"children":4655},{},[4656],{"type":61,"tag":4657,"props":4658,"children":4659},"em",{},[4660,4662,4668],{"type":67,"value":4661},"This section was migrated from ",{"type":61,"tag":76,"props":4663,"children":4665},{"className":4664},[],[4666],{"type":67,"value":4667},"SKILL.md",{"type":67,"value":113},{"type":61,"tag":70,"props":4670,"children":4671},{},[4672],{"type":67,"value":4673},"RTMS provides real-time access to live audio, video, transcript, chat, and screen share from Zoom meetings, webinars, and Video SDK sessions.",{"type":61,"tag":95,"props":4675,"children":4677},{"id":4676},"critical-positioning",[4678],{"type":67,"value":4679},"Critical Positioning",{"type":61,"tag":70,"props":4681,"children":4682},{},[4683,4685,4690],{"type":67,"value":4684},"Treat RTMS as a ",{"type":61,"tag":107,"props":4686,"children":4687},{},[4688],{"type":67,"value":4689},"backend service",{"type":67,"value":4691}," for receiving and processing media streams.",{"type":61,"tag":115,"props":4693,"children":4694},{},[4695,4700,4705],{"type":61,"tag":119,"props":4696,"children":4697},{},[4698],{"type":67,"value":4699},"Backend role: ingest audio\u002Fvideo\u002Fshare\u002Fchat\u002Ftranscript, run AI\u002Fanalytics, persist\u002Fforward data.",{"type":61,"tag":119,"props":4701,"children":4702},{},[4703],{"type":67,"value":4704},"Optional frontend role: Zoom App SDK or web dashboard that consumes processed stream data from backend transport (WebSocket\u002FSSE\u002Fother).",{"type":61,"tag":119,"props":4706,"children":4707},{},[4708],{"type":67,"value":4709},"Kickoff model: backend waits for RTMS start webhook events, then starts stream processing.",{"type":61,"tag":70,"props":4711,"children":4712},{},[4713],{"type":67,"value":4714},"Do not model RTMS as a frontend-only SDK.",{"type":61,"tag":95,"props":4716,"children":4718},{"id":4717},"quick-start-path",[4719],{"type":67,"value":4720},"Quick Start Path",{"type":61,"tag":70,"props":4722,"children":4723},{},[4724],{"type":61,"tag":107,"props":4725,"children":4726},{},[4727],{"type":67,"value":4728},"If you're new to RTMS, follow this order:",{"type":61,"tag":253,"props":4730,"children":4731},{},[4732,4745,4771,4802,4823,4844],{"type":61,"tag":119,"props":4733,"children":4734},{},[4735,4740,4741],{"type":61,"tag":107,"props":4736,"children":4737},{},[4738],{"type":67,"value":4739},"Run preflight checks first",{"type":67,"value":3988},{"type":61,"tag":195,"props":4742,"children":4743},{"href":478},[4744],{"type":67,"value":478},{"type":61,"tag":119,"props":4746,"children":4747},{},[4748,4753,4754,4758],{"type":61,"tag":107,"props":4749,"children":4750},{},[4751],{"type":67,"value":4752},"Understand the architecture",{"type":67,"value":3988},{"type":61,"tag":195,"props":4755,"children":4756},{"href":264},[4757],{"type":67,"value":264},{"type":61,"tag":115,"props":4759,"children":4760},{},[4761,4766],{"type":61,"tag":119,"props":4762,"children":4763},{},[4764],{"type":67,"value":4765},"Two-phase WebSocket: Signaling + Media",{"type":61,"tag":119,"props":4767,"children":4768},{},[4769],{"type":67,"value":4770},"Why RTMS doesn't use bots",{"type":61,"tag":119,"props":4772,"children":4773},{},[4774,4779,4781],{"type":61,"tag":107,"props":4775,"children":4776},{},[4777],{"type":67,"value":4778},"Choose your approach",{"type":67,"value":4780}," -> SDK or Manual",{"type":61,"tag":115,"props":4782,"children":4783},{},[4784,4793],{"type":61,"tag":119,"props":4785,"children":4786},{},[4787,4789],{"type":67,"value":4788},"SDK (recommended): ",{"type":61,"tag":195,"props":4790,"children":4791},{"href":278},[4792],{"type":67,"value":278},{"type":61,"tag":119,"props":4794,"children":4795},{},[4796,4798],{"type":67,"value":4797},"Manual WebSocket: ",{"type":61,"tag":195,"props":4799,"children":4800},{"href":292},[4801],{"type":67,"value":292},{"type":61,"tag":119,"props":4803,"children":4804},{},[4805,4810,4811,4815],{"type":61,"tag":107,"props":4806,"children":4807},{},[4808],{"type":67,"value":4809},"Understand the lifecycle",{"type":67,"value":3988},{"type":61,"tag":195,"props":4812,"children":4813},{"href":356},[4814],{"type":67,"value":356},{"type":61,"tag":115,"props":4816,"children":4817},{},[4818],{"type":61,"tag":119,"props":4819,"children":4820},{},[4821],{"type":67,"value":4822},"Webhook -> Signaling -> Media -> Streaming",{"type":61,"tag":119,"props":4824,"children":4825},{},[4826,4831,4832,4836],{"type":61,"tag":107,"props":4827,"children":4828},{},[4829],{"type":67,"value":4830},"Configure media types",{"type":67,"value":3988},{"type":61,"tag":195,"props":4833,"children":4834},{"href":306},[4835],{"type":67,"value":306},{"type":61,"tag":115,"props":4837,"children":4838},{},[4839],{"type":61,"tag":119,"props":4840,"children":4841},{},[4842],{"type":67,"value":4843},"Audio, video, transcript, chat, screen share",{"type":61,"tag":119,"props":4845,"children":4846},{},[4847,4852,4853,4857],{"type":61,"tag":107,"props":4848,"children":4849},{},[4850],{"type":67,"value":4851},"Troubleshoot issues",{"type":67,"value":3988},{"type":61,"tag":195,"props":4854,"children":4855},{"href":446},[4856],{"type":67,"value":446},{"type":61,"tag":115,"props":4858,"children":4859},{},[4860],{"type":61,"tag":119,"props":4861,"children":4862},{},[4863],{"type":67,"value":4864},"Connection problems, duplicate webhooks, missing data",{"type":61,"tag":4632,"props":4866,"children":4867},{},[],{"type":61,"tag":95,"props":4869,"children":4871},{"id":4870},"documentation-structure",[4872],{"type":67,"value":4873},"Documentation Structure",{"type":61,"tag":1112,"props":4875,"children":4879},{"className":4876,"code":4878,"language":67},[4877],"language-text","rtms\u002F\n├── SKILL.md                           # Main skill overview\n├── SKILL.md                           # This file - navigation guide\n│\n├── concepts\u002F                          # Core architectural patterns\n│   ├── connection-architecture.md     # Two-phase WebSocket design\n│   └── lifecycle-flow.md              # Webhook to streaming flow\n│\n├── examples\u002F                          # Complete working code\n│   ├── sdk-quickstart.md              # Using @zoom\u002Frtms SDK\n│   ├── manual-websocket.md            # Raw protocol implementation\n│   ├── rtms-bot.md                    # Complete RTMS bot implementation\n│   └── ai-integration.md              # Transcription and analysis\n│\n├── references\u002F                        # Reference documentation\n│   ├── media-types.md                 # Audio, video, transcript, chat, share\n│   ├── data-types.md                  # All enums and constants\n│   ├── connection.md                  # WebSocket protocol details\n│   └── webhooks.md                    # Event subscription\n│\n└── troubleshooting\u002F                   # Problem solving guides\n    └── common-issues.md               # FAQ and solutions\n",[4880],{"type":61,"tag":76,"props":4881,"children":4882},{"__ignoreMap":1117},[4883],{"type":67,"value":4878},{"type":61,"tag":4632,"props":4885,"children":4886},{},[],{"type":61,"tag":95,"props":4888,"children":4890},{"id":4889},"by-use-case",[4891],{"type":67,"value":4892},"By Use Case",{"type":61,"tag":700,"props":4894,"children":4896},{"id":4895},"i-want-to-get-meeting-transcripts",[4897],{"type":67,"value":4898},"I want to get meeting transcripts",{"type":61,"tag":253,"props":4900,"children":4901},{},[4902,4911,4921],{"type":61,"tag":119,"props":4903,"children":4904},{},[4905,4909],{"type":61,"tag":195,"props":4906,"children":4907},{"href":278},[4908],{"type":67,"value":281},{"type":67,"value":4910}," - Fastest approach",{"type":61,"tag":119,"props":4912,"children":4913},{},[4914,4919],{"type":61,"tag":195,"props":4915,"children":4917},{"href":4916},"references\u002Fmedia-types.md#transcript",[4918],{"type":67,"value":309},{"type":67,"value":4920}," - Transcript configuration",{"type":61,"tag":119,"props":4922,"children":4923},{},[4924,4928],{"type":61,"tag":195,"props":4925,"children":4926},{"href":4480},[4927],{"type":67,"value":4483},{"type":67,"value":4929}," - Whisper, Deepgram, AssemblyAI",{"type":61,"tag":700,"props":4931,"children":4933},{"id":4932},"i-want-to-record-meetings",[4934],{"type":67,"value":4935},"I want to record meetings",{"type":61,"tag":253,"props":4937,"children":4938},{},[4939,4948,4957],{"type":61,"tag":119,"props":4940,"children":4941},{},[4942,4946],{"type":61,"tag":195,"props":4943,"children":4944},{"href":306},[4945],{"type":67,"value":309},{"type":67,"value":4947}," - Audio + Video configuration",{"type":61,"tag":119,"props":4949,"children":4950},{},[4951,4955],{"type":61,"tag":195,"props":4952,"children":4953},{"href":278},[4954],{"type":67,"value":281},{"type":67,"value":4956}," - Receiving media",{"type":61,"tag":119,"props":4958,"children":4959},{},[4960,4965],{"type":61,"tag":195,"props":4961,"children":4963},{"href":4962},"examples\u002Fai-integration.md#audio-recording",[4964],{"type":67,"value":4483},{"type":67,"value":4966}," - Gap-filled recording",{"type":61,"tag":700,"props":4968,"children":4970},{"id":4969},"i-want-to-build-an-ai-meeting-assistant",[4971],{"type":67,"value":4972},"I want to build an AI meeting assistant",{"type":61,"tag":253,"props":4974,"children":4975},{},[4976,4985,4994],{"type":61,"tag":119,"props":4977,"children":4978},{},[4979,4983],{"type":61,"tag":195,"props":4980,"children":4981},{"href":4480},[4982],{"type":67,"value":4483},{"type":67,"value":4984}," - Complete patterns",{"type":61,"tag":119,"props":4986,"children":4987},{},[4988,4992],{"type":61,"tag":195,"props":4989,"children":4990},{"href":278},[4991],{"type":67,"value":281},{"type":67,"value":4993}," - Media ingestion",{"type":61,"tag":119,"props":4995,"children":4996},{},[4997,5001],{"type":61,"tag":195,"props":4998,"children":4999},{"href":356},[5000],{"type":67,"value":359},{"type":67,"value":5002}," - Event handling",{"type":61,"tag":700,"props":5004,"children":5006},{"id":5005},"i-want-to-build-a-complete-rtms-bot",[5007],{"type":67,"value":5008},"I want to build a complete RTMS bot",{"type":61,"tag":253,"props":5010,"children":5011},{},[5012,5026,5034],{"type":61,"tag":119,"props":5013,"children":5014},{},[5015,5019,5021],{"type":61,"tag":195,"props":5016,"children":5017},{"href":331},[5018],{"type":67,"value":334},{"type":67,"value":5020}," - ",{"type":61,"tag":107,"props":5022,"children":5023},{},[5024],{"type":67,"value":5025},"Complete implementation guide",{"type":61,"tag":119,"props":5027,"children":5028},{},[5029,5033],{"type":61,"tag":195,"props":5030,"children":5031},{"href":356},[5032],{"type":67,"value":359},{"type":67,"value":4426},{"type":61,"tag":119,"props":5035,"children":5036},{},[5037,5041],{"type":61,"tag":195,"props":5038,"children":5039},{"href":264},[5040],{"type":67,"value":267},{"type":67,"value":5042}," - Two-phase design",{"type":61,"tag":700,"props":5044,"children":5046},{"id":5045},"i-need-full-protocol-control",[5047],{"type":67,"value":5048},"I need full protocol control",{"type":61,"tag":253,"props":5050,"children":5051},{},[5052,5065,5073,5082],{"type":61,"tag":119,"props":5053,"children":5054},{},[5055,5059,5060],{"type":61,"tag":195,"props":5056,"children":5057},{"href":292},[5058],{"type":67,"value":295},{"type":67,"value":5020},{"type":61,"tag":107,"props":5061,"children":5062},{},[5063],{"type":67,"value":5064},"START HERE",{"type":61,"tag":119,"props":5066,"children":5067},{},[5068,5072],{"type":61,"tag":195,"props":5069,"children":5070},{"href":264},[5071],{"type":67,"value":267},{"type":67,"value":5042},{"type":61,"tag":119,"props":5074,"children":5075},{},[5076,5080],{"type":61,"tag":195,"props":5077,"children":5078},{"href":370},[5079],{"type":67,"value":373},{"type":67,"value":5081}," - All message types and enums",{"type":61,"tag":119,"props":5083,"children":5084},{},[5085,5089],{"type":61,"tag":195,"props":5086,"children":5087},{"href":4525},[5088],{"type":67,"value":4528},{"type":67,"value":5090}," - Protocol details",{"type":61,"tag":700,"props":5092,"children":5094},{"id":5093},"im-getting-connection-errors",[5095],{"type":67,"value":5096},"I'm getting connection errors",{"type":61,"tag":253,"props":5098,"children":5099},{},[5100,5109,5118],{"type":61,"tag":119,"props":5101,"children":5102},{},[5103,5107],{"type":61,"tag":195,"props":5104,"children":5105},{"href":446},[5106],{"type":67,"value":449},{"type":67,"value":5108}," - Diagnostic checklist",{"type":61,"tag":119,"props":5110,"children":5111},{},[5112,5116],{"type":61,"tag":195,"props":5113,"children":5114},{"href":264},[5115],{"type":67,"value":267},{"type":67,"value":5117}," - Verify flow",{"type":61,"tag":119,"props":5119,"children":5120},{},[5121,5125],{"type":61,"tag":195,"props":5122,"children":5123},{"href":384},[5124],{"type":67,"value":387},{"type":67,"value":5126}," - Validation and timing",{"type":61,"tag":700,"props":5128,"children":5130},{"id":5129},"i-want-to-understand-the-architecture",[5131],{"type":67,"value":5132},"I want to understand the architecture",{"type":61,"tag":253,"props":5134,"children":5135},{},[5136,5145,5154],{"type":61,"tag":119,"props":5137,"children":5138},{},[5139,5143],{"type":61,"tag":195,"props":5140,"children":5141},{"href":264},[5142],{"type":67,"value":267},{"type":67,"value":5144}," - Two-phase WebSocket",{"type":61,"tag":119,"props":5146,"children":5147},{},[5148,5152],{"type":61,"tag":195,"props":5149,"children":5150},{"href":356},[5151],{"type":67,"value":359},{"type":67,"value":5153}," - Complete flow diagram",{"type":61,"tag":119,"props":5155,"children":5156},{},[5157,5161],{"type":61,"tag":195,"props":5158,"children":5159},{"href":370},[5160],{"type":67,"value":373},{"type":67,"value":5162}," - Protocol constants",{"type":61,"tag":4632,"props":5164,"children":5165},{},[],{"type":61,"tag":95,"props":5167,"children":5169},{"id":5168},"by-product",[5170],{"type":67,"value":5171},"By Product",{"type":61,"tag":700,"props":5173,"children":5175},{"id":5174},"im-building-for-zoom-meetings",[5176],{"type":67,"value":5177},"I'm building for Zoom Meetings",{"type":61,"tag":115,"props":5179,"children":5180},{},[5181,5193],{"type":61,"tag":119,"props":5182,"children":5183},{},[5184,5186,5191],{"type":67,"value":5185},"Standard RTMS setup. Webhook event: ",{"type":61,"tag":76,"props":5187,"children":5189},{"className":5188},[],[5190],{"type":67,"value":545},{"type":67,"value":5192},". Uses General App with OAuth.",{"type":61,"tag":119,"props":5194,"children":5195},{},[5196,5198,5202,5204,5208],{"type":67,"value":5197},"Start with ",{"type":61,"tag":195,"props":5199,"children":5200},{"href":278},[5201],{"type":67,"value":281},{"type":67,"value":5203}," or ",{"type":61,"tag":195,"props":5205,"children":5206},{"href":292},[5207],{"type":67,"value":295},{"type":67,"value":113},{"type":61,"tag":700,"props":5210,"children":5212},{"id":5211},"im-building-for-zoom-webinars",[5213],{"type":67,"value":5214},"I'm building for Zoom Webinars",{"type":61,"tag":115,"props":5216,"children":5217},{},[5218,5245,5255],{"type":61,"tag":119,"props":5219,"children":5220},{},[5221,5223,5228,5230,5235,5237,5243],{"type":67,"value":5222},"Same as meetings, but webhook event is ",{"type":61,"tag":76,"props":5224,"children":5226},{"className":5225},[],[5227],{"type":67,"value":587},{"type":67,"value":5229},". Payload still uses ",{"type":61,"tag":76,"props":5231,"children":5233},{"className":5232},[],[5234],{"type":67,"value":562},{"type":67,"value":5236}," (NOT ",{"type":61,"tag":76,"props":5238,"children":5240},{"className":5239},[],[5241],{"type":67,"value":5242},"webinar_uuid",{"type":67,"value":5244},").",{"type":61,"tag":119,"props":5246,"children":5247},{},[5248,5250,5254],{"type":67,"value":5249},"Add webinar scopes and event subscriptions. See ",{"type":61,"tag":195,"props":5251,"children":5252},{"href":384},[5253],{"type":67,"value":387},{"type":67,"value":113},{"type":61,"tag":119,"props":5256,"children":5257},{},[5258,5260,5265],{"type":67,"value":5259},"Only ",{"type":61,"tag":107,"props":5261,"children":5262},{},[5263],{"type":67,"value":5264},"panelist",{"type":67,"value":5266}," streams are confirmed available. Attendee streams may not be individual.",{"type":61,"tag":700,"props":5268,"children":5270},{"id":5269},"im-building-for-zoom-video-sdk",[5271],{"type":67,"value":5272},"I'm building for Zoom Video SDK",{"type":61,"tag":115,"props":5274,"children":5275},{},[5276,5300,5311,5323],{"type":61,"tag":119,"props":5277,"children":5278},{},[5279,5281,5286,5288,5293,5294,5299],{"type":67,"value":5280},"Webhook event: ",{"type":61,"tag":76,"props":5282,"children":5284},{"className":5283},[],[5285],{"type":67,"value":628},{"type":67,"value":5287},". Payload uses ",{"type":61,"tag":76,"props":5289,"children":5291},{"className":5290},[],[5292],{"type":67,"value":644},{"type":67,"value":5236},{"type":61,"tag":76,"props":5295,"children":5297},{"className":5296},[],[5298],{"type":67,"value":562},{"type":67,"value":5244},{"type":61,"tag":119,"props":5301,"children":5302},{},[5303,5305,5309],{"type":67,"value":5304},"Requires a ",{"type":61,"tag":107,"props":5306,"children":5307},{},[5308],{"type":67,"value":649},{"type":67,"value":5310}," with SDK Key\u002FSecret (not OAuth Client ID\u002FSecret).",{"type":61,"tag":119,"props":5312,"children":5313},{},[5314,5316,5321],{"type":67,"value":5315},"Once connected, the protocol is ",{"type":61,"tag":107,"props":5317,"children":5318},{},[5319],{"type":67,"value":5320},"identical",{"type":67,"value":5322}," to meetings.",{"type":61,"tag":119,"props":5324,"children":5325},{},[5326,5328,5332],{"type":67,"value":5327},"See ",{"type":61,"tag":195,"props":5329,"children":5330},{"href":384},[5331],{"type":67,"value":387},{"type":67,"value":5333}," for payload details.",{"type":61,"tag":4632,"props":5335,"children":5336},{},[],{"type":61,"tag":95,"props":5338,"children":5340},{"id":5339},"key-documents",[5341],{"type":67,"value":5342},"Key Documents",{"type":61,"tag":700,"props":5344,"children":5346},{"id":5345},"_1-connection-architecture-critical",[5347],{"type":67,"value":5348},"1. Connection Architecture (CRITICAL)",{"type":61,"tag":70,"props":5350,"children":5351},{},[5352],{"type":61,"tag":107,"props":5353,"children":5354},{},[5355],{"type":61,"tag":195,"props":5356,"children":5357},{"href":264},[5358],{"type":67,"value":264},{"type":61,"tag":70,"props":5360,"children":5361},{},[5362,5364,5369],{"type":67,"value":5363},"RTMS uses ",{"type":61,"tag":107,"props":5365,"children":5366},{},[5367],{"type":67,"value":5368},"two separate WebSocket connections",{"type":67,"value":3133},{"type":61,"tag":115,"props":5371,"children":5372},{},[5373,5383],{"type":61,"tag":119,"props":5374,"children":5375},{},[5376,5381],{"type":61,"tag":107,"props":5377,"children":5378},{},[5379],{"type":67,"value":5380},"Signaling WebSocket",{"type":67,"value":5382},": Authentication, control, heartbeats",{"type":61,"tag":119,"props":5384,"children":5385},{},[5386,5391],{"type":61,"tag":107,"props":5387,"children":5388},{},[5389],{"type":67,"value":5390},"Media WebSocket",{"type":67,"value":5392},": Actual audio\u002Fvideo\u002Ftranscript data",{"type":61,"tag":700,"props":5394,"children":5396},{"id":5395},"_2-sdk-vs-manual-decision-point",[5397],{"type":67,"value":5398},"2. SDK vs Manual (DECISION POINT)",{"type":61,"tag":70,"props":5400,"children":5401},{},[5402,5409,5411],{"type":61,"tag":107,"props":5403,"children":5404},{},[5405],{"type":61,"tag":195,"props":5406,"children":5407},{"href":278},[5408],{"type":67,"value":278},{"type":67,"value":5410}," vs ",{"type":61,"tag":107,"props":5412,"children":5413},{},[5414],{"type":61,"tag":195,"props":5415,"children":5416},{"href":292},[5417],{"type":67,"value":292},{"type":61,"tag":489,"props":5419,"children":5420},{},[5421,5436],{"type":61,"tag":493,"props":5422,"children":5423},{},[5424],{"type":61,"tag":497,"props":5425,"children":5426},{},[5427,5431],{"type":61,"tag":501,"props":5428,"children":5429},{},[5430],{"type":67,"value":997},{"type":61,"tag":501,"props":5432,"children":5433},{},[5434],{"type":67,"value":5435},"Manual",{"type":61,"tag":522,"props":5437,"children":5438},{},[5439,5452,5465,5478],{"type":61,"tag":497,"props":5440,"children":5441},{},[5442,5447],{"type":61,"tag":529,"props":5443,"children":5444},{},[5445],{"type":67,"value":5446},"Handles WebSocket complexity",{"type":61,"tag":529,"props":5448,"children":5449},{},[5450],{"type":67,"value":5451},"Full protocol control",{"type":61,"tag":497,"props":5453,"children":5454},{},[5455,5460],{"type":61,"tag":529,"props":5456,"children":5457},{},[5458],{"type":67,"value":5459},"Automatic reconnection",{"type":61,"tag":529,"props":5461,"children":5462},{},[5463],{"type":67,"value":5464},"DIY reconnection",{"type":61,"tag":497,"props":5466,"children":5467},{},[5468,5473],{"type":61,"tag":529,"props":5469,"children":5470},{},[5471],{"type":67,"value":5472},"Less code",{"type":61,"tag":529,"props":5474,"children":5475},{},[5476],{"type":67,"value":5477},"More code",{"type":61,"tag":497,"props":5479,"children":5480},{},[5481,5486],{"type":61,"tag":529,"props":5482,"children":5483},{},[5484],{"type":67,"value":5485},"Best for most use cases",{"type":61,"tag":529,"props":5487,"children":5488},{},[5489],{"type":67,"value":5490},"Best for custom requirements",{"type":61,"tag":700,"props":5492,"children":5494},{"id":5493},"_3-critical-gotchas-most-common-issues",[5495],{"type":67,"value":5496},"3. Critical Gotchas (MOST COMMON ISSUES)",{"type":61,"tag":70,"props":5498,"children":5499},{},[5500],{"type":61,"tag":107,"props":5501,"children":5502},{},[5503],{"type":61,"tag":195,"props":5504,"children":5505},{"href":446},[5506],{"type":67,"value":446},{"type":61,"tag":253,"props":5508,"children":5509},{},[5510,5519,5529,5539],{"type":61,"tag":119,"props":5511,"children":5512},{},[5513,5517],{"type":61,"tag":107,"props":5514,"children":5515},{},[5516],{"type":67,"value":3537},{"type":67,"value":5518}," - Delayed webhook responses cause duplicates",{"type":61,"tag":119,"props":5520,"children":5521},{},[5522,5527],{"type":61,"tag":107,"props":5523,"children":5524},{},[5525],{"type":67,"value":5526},"Only 1 connection per stream",{"type":67,"value":5528}," - New connections kick out existing",{"type":61,"tag":119,"props":5530,"children":5531},{},[5532,5537],{"type":61,"tag":107,"props":5533,"children":5534},{},[5535],{"type":67,"value":5536},"Heartbeat required",{"type":67,"value":5538}," - Must respond to keep-alive or connection dies",{"type":61,"tag":119,"props":5540,"children":5541},{},[5542,5547],{"type":61,"tag":107,"props":5543,"children":5544},{},[5545],{"type":67,"value":5546},"Track active sessions",{"type":67,"value":5548}," - Prevent duplicate join attempts",{"type":61,"tag":4632,"props":5550,"children":5551},{},[],{"type":61,"tag":95,"props":5553,"children":5555},{"id":5554},"key-learnings",[5556],{"type":67,"value":5557},"Key Learnings",{"type":61,"tag":700,"props":5559,"children":5561},{"id":5560},"critical-discoveries",[5562],{"type":67,"value":5563},"Critical Discoveries:",{"type":61,"tag":253,"props":5565,"children":5566},{},[5567,5597,5626,5661,5733,5762],{"type":61,"tag":119,"props":5568,"children":5569},{},[5570,5575],{"type":61,"tag":107,"props":5571,"children":5572},{},[5573],{"type":67,"value":5574},"Two-Phase WebSocket Design",{"type":61,"tag":115,"props":5576,"children":5577},{},[5578,5583,5588],{"type":61,"tag":119,"props":5579,"children":5580},{},[5581],{"type":67,"value":5582},"Signaling: Control plane (handshake, heartbeat, start\u002Fstop)",{"type":61,"tag":119,"props":5584,"children":5585},{},[5586],{"type":67,"value":5587},"Media: Data plane (audio, video, transcript, chat, share)",{"type":61,"tag":119,"props":5589,"children":5590},{},[5591,5593],{"type":67,"value":5592},"See: ",{"type":61,"tag":195,"props":5594,"children":5595},{"href":264},[5596],{"type":67,"value":267},{"type":61,"tag":119,"props":5598,"children":5599},{},[5600,5605],{"type":61,"tag":107,"props":5601,"children":5602},{},[5603],{"type":67,"value":5604},"Webhook Response Timing",{"type":61,"tag":115,"props":5606,"children":5607},{},[5608,5613,5618],{"type":61,"tag":119,"props":5609,"children":5610},{},[5611],{"type":67,"value":5612},"MUST respond 200 BEFORE any processing",{"type":61,"tag":119,"props":5614,"children":5615},{},[5616],{"type":67,"value":5617},"Delayed response -> Zoom retries -> duplicate connections",{"type":61,"tag":119,"props":5619,"children":5620},{},[5621,5622],{"type":67,"value":5592},{"type":61,"tag":195,"props":5623,"children":5624},{"href":457},[5625],{"type":67,"value":449},{"type":61,"tag":119,"props":5627,"children":5628},{},[5629,5634],{"type":61,"tag":107,"props":5630,"children":5631},{},[5632],{"type":67,"value":5633},"Heartbeat is Mandatory",{"type":61,"tag":115,"props":5635,"children":5636},{},[5637,5642,5647,5652],{"type":61,"tag":119,"props":5638,"children":5639},{},[5640],{"type":67,"value":5641},"Signaling: Receive msg_type 12, respond with msg_type 13",{"type":61,"tag":119,"props":5643,"children":5644},{},[5645],{"type":67,"value":5646},"Media: Same pattern",{"type":61,"tag":119,"props":5648,"children":5649},{},[5650],{"type":67,"value":5651},"Failure to respond = connection closed",{"type":61,"tag":119,"props":5653,"children":5654},{},[5655,5656],{"type":67,"value":5592},{"type":61,"tag":195,"props":5657,"children":5659},{"href":5658},"references\u002Fconnection.md#heartbeat",[5660],{"type":67,"value":4528},{"type":61,"tag":119,"props":5662,"children":5663},{},[5664,5669],{"type":61,"tag":107,"props":5665,"children":5666},{},[5667],{"type":67,"value":5668},"Signature Generation",{"type":61,"tag":115,"props":5670,"children":5671},{},[5672,5683,5701,5719,5724],{"type":61,"tag":119,"props":5673,"children":5674},{},[5675,5677],{"type":67,"value":5676},"Format: ",{"type":61,"tag":76,"props":5678,"children":5680},{"className":5679},[],[5681],{"type":67,"value":5682},"HMAC-SHA256(clientSecret, \"clientId,meetingUuid,streamId\")",{"type":61,"tag":119,"props":5684,"children":5685},{},[5686,5688,5693,5695],{"type":67,"value":5687},"For Video SDK, use ",{"type":61,"tag":76,"props":5689,"children":5691},{"className":5690},[],[5692],{"type":67,"value":644},{"type":67,"value":5694}," in place of ",{"type":61,"tag":76,"props":5696,"children":5698},{"className":5697},[],[5699],{"type":67,"value":5700},"meetingUuid",{"type":61,"tag":119,"props":5702,"children":5703},{},[5704,5706,5711,5713,5718],{"type":67,"value":5705},"Webinars still use ",{"type":61,"tag":76,"props":5707,"children":5709},{"className":5708},[],[5710],{"type":67,"value":562},{"type":67,"value":5712}," (not ",{"type":61,"tag":76,"props":5714,"children":5716},{"className":5715},[],[5717],{"type":67,"value":5242},{"type":67,"value":1007},{"type":61,"tag":119,"props":5720,"children":5721},{},[5722],{"type":67,"value":5723},"Required for both signaling and media handshakes",{"type":61,"tag":119,"props":5725,"children":5726},{},[5727,5728],{"type":67,"value":5592},{"type":61,"tag":195,"props":5729,"children":5731},{"href":5730},"examples\u002Fmanual-websocket.md#signature-generation",[5732],{"type":67,"value":295},{"type":61,"tag":119,"props":5734,"children":5735},{},[5736,5741],{"type":61,"tag":107,"props":5737,"children":5738},{},[5739],{"type":67,"value":5740},"Media Types are Bitmasks",{"type":61,"tag":115,"props":5742,"children":5743},{},[5744,5749,5754],{"type":61,"tag":119,"props":5745,"children":5746},{},[5747],{"type":67,"value":5748},"Audio=1, Video=2, Share=4, Transcript=8, Chat=16, All=32",{"type":61,"tag":119,"props":5750,"children":5751},{},[5752],{"type":67,"value":5753},"Combine with OR: Audio+Transcript = 1|8 = 9",{"type":61,"tag":119,"props":5755,"children":5756},{},[5757,5758],{"type":67,"value":5592},{"type":61,"tag":195,"props":5759,"children":5760},{"href":306},[5761],{"type":67,"value":309},{"type":61,"tag":119,"props":5763,"children":5764},{},[5765,5770],{"type":61,"tag":107,"props":5766,"children":5767},{},[5768],{"type":67,"value":5769},"Screen Share is SEPARATE from Video",{"type":61,"tag":115,"props":5771,"children":5772},{},[5773,5778,5783,5788],{"type":61,"tag":119,"props":5774,"children":5775},{},[5776],{"type":67,"value":5777},"Different msg_type (16 vs 15)",{"type":61,"tag":119,"props":5779,"children":5780},{},[5781],{"type":67,"value":5782},"Different media flag (4 vs 2)",{"type":61,"tag":119,"props":5784,"children":5785},{},[5786],{"type":67,"value":5787},"Must subscribe separately",{"type":61,"tag":119,"props":5789,"children":5790},{},[5791,5792],{"type":67,"value":5592},{"type":61,"tag":195,"props":5793,"children":5795},{"href":5794},"references\u002Fmedia-types.md#screen-share",[5796],{"type":67,"value":309},{"type":61,"tag":4632,"props":5798,"children":5799},{},[],{"type":61,"tag":95,"props":5801,"children":5803},{"id":5802},"quick-reference",[5804],{"type":67,"value":5805},"Quick Reference",{"type":61,"tag":700,"props":5807,"children":5809},{"id":5808},"connection-fails",[5810],{"type":67,"value":5811},"\"Connection fails\"",{"type":61,"tag":70,"props":5813,"children":5814},{},[5815,5817],{"type":67,"value":5816},"-> ",{"type":61,"tag":195,"props":5818,"children":5819},{"href":446},[5820],{"type":67,"value":449},{"type":61,"tag":700,"props":5822,"children":5824},{"id":5823},"duplicate-connections",[5825],{"type":67,"value":5826},"\"Duplicate connections\"",{"type":61,"tag":70,"props":5828,"children":5829},{},[5830,5831],{"type":67,"value":5816},{"type":61,"tag":195,"props":5832,"children":5833},{"href":457},[5834],{"type":67,"value":5835},"Webhook timing",{"type":61,"tag":700,"props":5837,"children":5839},{"id":5838},"no-audiovideo-data",[5840],{"type":67,"value":5841},"\"No audio\u002Fvideo data\"",{"type":61,"tag":70,"props":5843,"children":5844},{},[5845,5846,5850],{"type":67,"value":5816},{"type":61,"tag":195,"props":5847,"children":5848},{"href":306},[5849],{"type":67,"value":309},{"type":67,"value":5851}," - Check configuration",{"type":61,"tag":700,"props":5853,"children":5855},{"id":5854},"how-do-i-implement-manually",[5856],{"type":67,"value":5857},"\"How do I implement manually?\"",{"type":61,"tag":70,"props":5859,"children":5860},{},[5861,5862],{"type":67,"value":5816},{"type":61,"tag":195,"props":5863,"children":5864},{"href":292},[5865],{"type":67,"value":295},{"type":61,"tag":700,"props":5867,"children":5869},{"id":5868},"what-message-types-exist",[5870],{"type":67,"value":5871},"\"What message types exist?\"",{"type":61,"tag":70,"props":5873,"children":5874},{},[5875,5876],{"type":67,"value":5816},{"type":61,"tag":195,"props":5877,"children":5878},{"href":370},[5879],{"type":67,"value":373},{"type":61,"tag":700,"props":5881,"children":5883},{"id":5882},"how-do-i-integrate-ai",[5884],{"type":67,"value":5885},"\"How do I integrate AI?\"",{"type":61,"tag":70,"props":5887,"children":5888},{},[5889,5890],{"type":67,"value":5816},{"type":61,"tag":195,"props":5891,"children":5892},{"href":4480},[5893],{"type":67,"value":4483},{"type":61,"tag":4632,"props":5895,"children":5896},{},[],{"type":61,"tag":95,"props":5898,"children":5900},{"id":5899},"document-version",[5901],{"type":67,"value":5902},"Document Version",{"type":61,"tag":70,"props":5904,"children":5905},{},[5906,5908,5913],{"type":67,"value":5907},"Based on ",{"type":61,"tag":107,"props":5909,"children":5910},{},[5911],{"type":67,"value":5912},"Zoom RTMS SDK v1.x",{"type":67,"value":5914}," and official documentation as of 2026.",{"type":61,"tag":4632,"props":5916,"children":5917},{},[],{"type":61,"tag":70,"props":5919,"children":5920},{},[5921],{"type":61,"tag":107,"props":5922,"children":5923},{},[5924],{"type":67,"value":5925},"Happy coding!",{"type":61,"tag":70,"props":5927,"children":5928},{},[5929,5931,5935,5937,5941],{"type":67,"value":5930},"Remember: Start with ",{"type":61,"tag":195,"props":5932,"children":5933},{"href":278},[5934],{"type":67,"value":281},{"type":67,"value":5936}," for the fastest path, or ",{"type":61,"tag":195,"props":5938,"children":5939},{"href":292},[5940],{"type":67,"value":295},{"type":67,"value":5942}," if you need full control.",{"type":61,"tag":5944,"props":5945,"children":5946},"style",{},[5947],{"type":67,"value":5948},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":5950,"total":6067},[5951,5967,5983,5999,6017,6036,6052],{"slug":5952,"name":5952,"fn":5953,"description":5954,"org":5955,"tags":5956,"stars":26,"repoUrl":27,"updatedAt":5966},"accessibility-review","run WCAG accessibility audits","Run a WCAG 2.1 AA accessibility audit on a design or page. Trigger with \"audit accessibility\", \"check a11y\", \"is this accessible?\", or when reviewing a design for color contrast, keyboard navigation, touch target size, or screen reader behavior before handoff.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5957,5960,5963],{"name":5958,"slug":5959,"type":16},"Accessibility","accessibility",{"name":5961,"slug":5962,"type":16},"Design","design",{"name":5964,"slug":5965,"type":16},"WCAG","wcag","2026-04-06T17:58:05.682394",{"slug":5968,"name":5968,"fn":5969,"description":5970,"org":5971,"tags":5972,"stars":26,"repoUrl":27,"updatedAt":5982},"account-research","research accounts for sales intel","Research a company or person and get actionable sales intel. Works standalone with web search, supercharged when you connect enrichment tools or your CRM. Trigger with \"research [company]\", \"look up [person]\", \"intel on [prospect]\", \"who is [name] at [company]\", or \"tell me about [company]\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5973,5976,5979],{"name":5974,"slug":5975,"type":16},"CRM","crm",{"name":5977,"slug":5978,"type":16},"Research","research",{"name":5980,"slug":5981,"type":16},"Sales","sales","2026-04-06T17:56:41.410418",{"slug":5984,"name":5984,"fn":5985,"description":5986,"org":5987,"tags":5988,"stars":26,"repoUrl":27,"updatedAt":5998},"analyze","answer data questions and run analyses","Answer data questions -- from quick lookups to full analyses. Use when looking up a single metric, investigating what's driving a trend or drop, comparing segments over time, or preparing a formal data report for stakeholders.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5989,5992,5995],{"name":5990,"slug":5991,"type":16},"Analytics","analytics",{"name":5993,"slug":5994,"type":16},"Data Analysis","data-analysis",{"name":5996,"slug":5997,"type":16},"SQL","sql","2026-04-06T17:57:21.593647",{"slug":6000,"name":6000,"fn":6001,"description":6002,"org":6003,"tags":6004,"stars":26,"repoUrl":27,"updatedAt":6016},"architecture","create and evaluate architecture decision records","Create or evaluate an architecture decision record (ADR). Use when choosing between technologies (e.g., Kafka vs SQS), documenting a design decision with trade-offs and consequences, reviewing a system design proposal, or designing a new component from requirements and constraints.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6005,6008,6010,6013],{"name":6006,"slug":6007,"type":16},"ADR","adr",{"name":6009,"slug":6000,"type":16},"Architecture",{"name":6011,"slug":6012,"type":16},"Documentation","documentation",{"name":6014,"slug":6015,"type":16},"Engineering","engineering","2026-04-06T17:57:49.26444",{"slug":6018,"name":6018,"fn":6019,"description":6020,"org":6021,"tags":6022,"stars":26,"repoUrl":27,"updatedAt":6035},"audit-support","support SOX 404 control testing","Support SOX 404 compliance with control testing methodology, sample selection, and documentation standards. Use when generating testing workpapers, selecting audit samples, classifying control deficiencies, or preparing for internal or external audits.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6023,6026,6029,6032],{"name":6024,"slug":6025,"type":16},"Audit","audit",{"name":6027,"slug":6028,"type":16},"Finance","finance",{"name":6030,"slug":6031,"type":16},"Regulatory Compliance","regulatory-compliance",{"name":6033,"slug":6034,"type":16},"SOX","sox","2026-04-06T17:57:36.714815",{"slug":6037,"name":6037,"fn":6038,"description":6039,"org":6040,"tags":6041,"stars":26,"repoUrl":27,"updatedAt":6051},"brand-review","review content against brand voice","Review content against your brand voice, style guide, and messaging pillars, flagging deviations by severity with specific before\u002Fafter fixes. Use when checking a draft before it ships, when auditing copy for voice consistency and terminology, or when screening for unsubstantiated claims, missing disclaimers, and other legal flags.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6042,6045,6048],{"name":6043,"slug":6044,"type":16},"Branding","branding",{"name":6046,"slug":6047,"type":16},"Marketing","marketing",{"name":6049,"slug":6050,"type":16},"Writing","writing","2026-04-06T17:58:19.548331",{"slug":6053,"name":6053,"fn":6054,"description":6055,"org":6056,"tags":6057,"stars":26,"repoUrl":27,"updatedAt":6066},"brand-voice-enforcement","enforce brand voice in content","This skill applies brand guidelines to content creation. It should be used when the user asks to \"write an email\", \"draft a proposal\", \"create a pitch deck\", \"write a LinkedIn post\", \"draft a presentation\", \"write a Slack message\", \"draft sales content\", or any content creation request where brand voice should be applied. Also triggers on \"on-brand\", \"brand voice\", \"enforce voice\", \"apply brand guidelines\", \"brand-aligned content\", \"write in our voice\", \"use our brand tone\", \"make this sound like us\", \"rewrite this in our tone\", or \"this doesn't sound on-brand\". Not for generating guidelines from scratch (use guideline-generation) or discovering brand materials (use discover-brand).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6058,6059,6062,6065],{"name":6043,"slug":6044,"type":16},{"name":6060,"slug":6061,"type":16},"Communications","communications",{"name":6063,"slug":6064,"type":16},"Content Creation","content-creation",{"name":6049,"slug":6050,"type":16},"2026-04-06T18:00:23.528956",200,{"items":6069,"total":6245},[6070,6088,6100,6112,6131,6142,6163,6183,6193,6208,6216,6229],{"slug":6071,"name":6071,"fn":6072,"description":6073,"org":6074,"tags":6075,"stars":6085,"repoUrl":6086,"updatedAt":6087},"algorithmic-art","create algorithmic art with p5.js","Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6076,6079,6080,6083],{"name":6077,"slug":6078,"type":16},"Creative","creative",{"name":5961,"slug":5962,"type":16},{"name":6081,"slug":6082,"type":16},"Generative Art","generative-art",{"name":6084,"slug":1116,"type":16},"JavaScript",161831,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills","2026-04-06T17:56:15.455818",{"slug":6089,"name":6089,"fn":6090,"description":6091,"org":6092,"tags":6093,"stars":6085,"repoUrl":6086,"updatedAt":6099},"brand-guidelines","apply Anthropic brand colors and typography","Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6094,6095,6096],{"name":6043,"slug":6044,"type":16},{"name":5961,"slug":5962,"type":16},{"name":6097,"slug":6098,"type":16},"Typography","typography","2026-04-06T17:56:05.042852",{"slug":6101,"name":6101,"fn":6102,"description":6103,"org":6104,"tags":6105,"stars":6085,"repoUrl":6086,"updatedAt":6111},"canvas-design","create posters and visual art as PNG or PDF","Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6106,6107,6108],{"name":6077,"slug":6078,"type":16},{"name":5961,"slug":5962,"type":16},{"name":6109,"slug":6110,"type":16},"PDF","pdf","2026-04-06T17:56:03.794732",{"slug":6113,"name":6113,"fn":6114,"description":6115,"org":6116,"tags":6117,"stars":6085,"repoUrl":6086,"updatedAt":6130},"claude-api","build apps with the Claude API","Reference for the Claude API \u002F Anthropic SDK — model ids, pricing, params, streaming, tool use, MCP, agents, caching, token counting, model migration.\nTRIGGER — read BEFORE opening the target file; don't skip because it \"looks like a one-liner\" — whenever: the prompt names Claude\u002FAnthropic in any form (Claude, Anthropic, Fable, Opus, Sonnet, Haiku, `anthropic`, `@anthropic-ai`, `claude-*`, `us.anthropic.*`, `[1m]`); the user asks about an LLM (pricing\u002Fmodel choice\u002Flimits\u002Fcaching) — never answer from memory; OR the task is LLM-shaped with provider unstated (agent\u002FMCP\u002Ftool-definition\u002Fmulti-agent\u002FRAG\u002FLLM-judge\u002Fcomputer-use; generate\u002Fsummarize\u002Fextract\u002Fclassify\u002Frewrite\u002Fconverse over NL; debugging refusals\u002Fcutoffs\u002Fstreaming\u002Ftool-calls\u002Ftokens).\nSKIP only when another provider is being worked on (overrides all triggers): OpenAI\u002FGPT\u002FGemini\u002FLlama\u002FMistral\u002FCohere\u002FOllama named in the query; OR `grep -rE 'openai|langchain_openai|google.generativeai|genai|mistralai|cohere|ollama'` over the project hits (run this grep FIRST if no provider named — don't Read the file).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6118,6121,6122,6125,6127],{"name":6119,"slug":6120,"type":16},"Agents","agents",{"name":9,"slug":8,"type":16},{"name":6123,"slug":6124,"type":16},"Anthropic SDK","anthropic-sdk",{"name":6126,"slug":6113,"type":16},"Claude API",{"name":6128,"slug":6129,"type":16},"LLM","llm","2026-07-28T05:36:08.213335",{"slug":6132,"name":6132,"fn":6133,"description":6134,"org":6135,"tags":6136,"stars":6085,"repoUrl":6086,"updatedAt":6141},"doc-coauthoring","co-author documentation and technical specs","Guide users through a structured workflow for co-authoring documentation. Use when user wants to write documentation, proposals, technical specs, decision docs, or similar structured content. This workflow helps users efficiently transfer context, refine content through iteration, and verify the doc works for readers. Trigger when user mentions writing docs, creating proposals, drafting specs, or similar documentation tasks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6137,6138],{"name":6011,"slug":6012,"type":16},{"name":6139,"slug":6140,"type":16},"Technical Writing","technical-writing","2026-04-06T17:56:14.18897",{"slug":6143,"name":6143,"fn":6144,"description":6145,"org":6146,"tags":6147,"stars":6085,"repoUrl":6086,"updatedAt":6162},"docx","create and edit Word documents","Use this skill whenever the user wants to create, read, edit, or manipulate Word documents (.docx files) or Word templates (.dotx files). Triggers include: any mention of 'Word doc', 'word document', '.docx', '.dotx', or requests to produce professional documents with formatting like tables of contents, headings, page numbers, or letterheads. Also use when extracting or reorganizing content from .docx or .dotx files, inserting or replacing images in documents, performing find-and-replace in Word files, working with tracked changes or comments, or converting content into a polished Word document. If the user asks for a 'report', 'memo', 'letter', 'template', or similar deliverable as a Word or .docx file, use this skill. Do NOT use for PDFs, spreadsheets, Google Docs, or general coding tasks unrelated to document generation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6148,6151,6153,6156,6159],{"name":6149,"slug":6150,"type":16},"Documents","documents",{"name":6152,"slug":6143,"type":16},"DOCX",{"name":6154,"slug":6155,"type":16},"Office","office",{"name":6157,"slug":6158,"type":16},"Templates","templates",{"name":6160,"slug":6161,"type":16},"Word","word","2026-07-18T05:16:23.136271",{"slug":6164,"name":6164,"fn":6165,"description":6166,"org":6167,"tags":6168,"stars":6085,"repoUrl":6086,"updatedAt":6182},"frontend-design","design production-grade frontend interfaces","Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6169,6170,6173,6176,6179],{"name":5961,"slug":5962,"type":16},{"name":6171,"slug":6172,"type":16},"Frontend","frontend",{"name":6174,"slug":6175,"type":16},"React","react",{"name":6177,"slug":6178,"type":16},"Tailwind CSS","tailwind-css",{"name":6180,"slug":6181,"type":16},"UI Components","ui-components","2026-04-06T17:56:16.723469",{"slug":6184,"name":6184,"fn":6185,"description":6186,"org":6187,"tags":6188,"stars":6085,"repoUrl":6086,"updatedAt":6192},"internal-comms","write internal company communications","A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6189,6190,6191],{"name":6060,"slug":6061,"type":16},{"name":6157,"slug":6158,"type":16},{"name":6049,"slug":6050,"type":16},"2026-04-06T17:56:20.695522",{"slug":6194,"name":6194,"fn":6195,"description":6196,"org":6197,"tags":6198,"stars":6085,"repoUrl":6086,"updatedAt":6207},"mcp-builder","build MCP servers","Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node\u002FTypeScript (MCP SDK).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6199,6200,6203,6204],{"name":6119,"slug":6120,"type":16},{"name":6201,"slug":6202,"type":16},"API Development","api-development",{"name":6128,"slug":6129,"type":16},{"name":6205,"slug":6206,"type":16},"MCP","mcp","2026-04-06T17:56:10.357665",{"slug":6110,"name":6110,"fn":6209,"description":6210,"org":6211,"tags":6212,"stars":6085,"repoUrl":6086,"updatedAt":6215},"read edit and manipulate PDF files","Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text\u002Ftables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting\u002Fdecrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6213,6214],{"name":6149,"slug":6150,"type":16},{"name":6109,"slug":6110,"type":16},"2026-04-06T17:56:02.483316",{"slug":6217,"name":6217,"fn":6218,"description":6219,"org":6220,"tags":6221,"stars":6085,"repoUrl":6086,"updatedAt":6228},"pptx","create and edit PowerPoint presentations","Use this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates (.potx), layouts, speaker notes, or comments. Trigger whenever the user mentions \"deck,\" \"slides,\" \"presentation,\" or references a .pptx or .potx filename, regardless of what they plan to do with the content afterward. If a .pptx or .potx file needs to be opened, created, or touched, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6222,6225],{"name":6223,"slug":6224,"type":16},"PowerPoint","powerpoint",{"name":6226,"slug":6227,"type":16},"Presentations","presentations","2026-07-18T05:16:24.1471",{"slug":6230,"name":6230,"fn":6231,"description":6232,"org":6233,"tags":6234,"stars":6085,"repoUrl":6086,"updatedAt":6244},"skill-creator","create and optimize agent skills","Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6235,6236,6237,6240,6243],{"name":6119,"slug":6120,"type":16},{"name":6011,"slug":6012,"type":16},{"name":6238,"slug":6239,"type":16},"Evals","evals",{"name":6241,"slug":6242,"type":16},"Performance","performance",{"name":6139,"slug":6140,"type":16},"2026-04-19T06:45:40.804",490]