### Local Development Setup (Bash) Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-apps-sdk/examples/quick-start.md This snippet outlines the steps to set up the project for local development. It includes installing Node.js dependencies, starting an ngrok tunnel for external access, configuring environment variables with the ngrok URL, and starting the development server. ```bash # 1. Install dependencies npm install # 2. Start ngrok tunnel ngrok http 3000 # 3. Copy the https URL (e.g., https://abc123.ngrok.io) # 4. Update .env with ngrok URL # ZOOM_APP_REDIRECT_URI=https://abc123.ngrok.io/auth # 5. Start server npm run dev ``` -------------------------------- ### Zoom Cobrowse SDK - Quick Start: Token Server Setup Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-cobrowse-sdk/SKILL.md Guides users through setting up a token server for the Zoom Cobrowse SDK using the provided sample repository. ```APIDOC ## Zoom Cobrowse SDK - Quick Start ### 1. Get Credentials 1. Go to [Zoom Marketplace](https://marketplace.zoom.us/) 2. Open your **Video SDK App** (or create one) 3. Navigate to the **Cobrowse** tab 4. Copy SDK Key, SDK Secret (and optionally API Key, API Secret) ### 2. Set Up Token Server Deploy the auth endpoint: [cobrowsesdk-auth-endpoint-sample](https://github.com/zoom/cobrowsesdk-auth-endpoint-sample) ```bash git clone https://github.com/zoom/cobrowsesdk-auth-endpoint-sample.git cd cobrowsesdk-auth-endpoint-sample npm install # Add ZOOM_SDK_KEY and ZOOM_SDK_SECRET to .env npm run start ``` **Token Request:** ```javascript // POST http://localhost:4000 { "role": 1, // 1 = customer, 2 = agent "userId": "user123", "userName": "John Doe" } // Response { "token": "eyJhbGciOiJIUzI1NiIs..." } ``` ``` -------------------------------- ### Quick Start: Initialize and Join Zoom Video SDK Session (JavaScript) Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-video-sdk/web/SKILL.md A concise guide to getting started with the Zoom Video SDK. This snippet covers creating a client instance, initializing the SDK, joining a session with provided credentials, and starting video and audio streams. It emphasizes retrieving the media stream *after* joining the session and attaching video to a DOM element. ```javascript import ZoomVideo from '@zoom/videosdk'; // 1. Create client (singleton - returns same instance) const client = ZoomVideo.createClient(); // 2. Initialize SDK await client.init('en-US', 'Global', { patchJsMedia: true }); // 3. Join session await client.join(topic, signature, userName, password); // 4. CRITICAL: Get stream AFTER join const stream = client.getMediaStream(); // 5. Start media await stream.startVideo(); await stream.startAudio(); // 6. Attach video to DOM const videoElement = await stream.attachVideo(userId, VideoQuality.Video_360P); document.getElementById('video-container').appendChild(videoElement); ``` -------------------------------- ### Set up Authentication Endpoint (Bash) Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-meeting-sdk/web/SKILL.md This command sequence outlines how to set up the Zoom Meeting SDK's authentication endpoint sample. It involves cloning the repository, navigating into the directory, copying the environment example file, and then installing dependencies and starting the server. This endpoint is crucial for generating JWT signatures required for joining meetings. ```bash # Clone Zoom's official auth endpoint git clone https://github.com/zoom/meetingsdk-auth-endpoint-sample --depth 1 cd meetingsdk-auth-endpoint-sample cp .env.example .env # Edit .env with your SDK Key and Secret npm install && npm run start ``` -------------------------------- ### Clone and Setup Zoom Auth Endpoint Sample Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-meeting-sdk/web/references/web.md Clones the sample authentication endpoint repository from GitHub, navigates into the directory, copies the environment example, and installs dependencies. This is required for generating meeting signatures. ```bash # Clone Zoom's auth endpoint sample git clone https://github.com/zoom/meetingsdk-auth-endpoint-sample --depth 1 cd meetingsdk-auth-endpoint-sample cp .env.example .env # Edit .env with your SDK credentials npm install && npm run start ``` -------------------------------- ### Client View Full Example Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-meeting-sdk/web/references/web.md A comprehensive example demonstrating the initialization and joining process for the Zoom Meeting SDK's Client View. ```APIDOC ## Client View Full Example ### Description This example illustrates the complete workflow for initializing the Zoom Meeting SDK and joining a meeting using the Client View. It includes system requirement checks, WebAssembly preloading, and error handling for initialization and joining. ### Code Example ```javascript import { ZoomMtg } from '@zoom/meetingsdk'; // Check system requirements console.log(ZoomMtg.checkSystemRequirements()); // Preload WebAssembly for faster init ZoomMtg.preLoadWasm(); ZoomMtg.prepareWebSDK(); // Initialize and join ZoomMtg.init({ leaveUrl: '/meeting-ended', disableCORP: !window.crossOriginIsolated, // Disable if no COOP/COEP success: () => { ZoomMtg.join({ meetingNumber: '123456789', userName: 'User Name', signature: signature, // From auth endpoint userEmail: 'user@example.com', passWord: 'meeting-password', success: (res) => { console.log('Joined meeting'); ZoomMtg.getAttendeeslist({}); ZoomMtg.getCurrentUser({ success: (res) => console.log('Current user:', res.result.currentUser) }); }, error: (err) => console.error('Join error:', err) }); }, error: (err) => console.error('Init error:', err) }); ``` ``` -------------------------------- ### Zoom REST API - Quick Start Path Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-rest-api/INDEX.md A step-by-step guide for new users to understand and integrate with the Zoom REST API. ```APIDOC ## Quick Start Path If you're new to the Zoom REST API, follow this order: 1. **Understand the API design** - Concepts: [API Architecture](concepts/api-architecture.md) - Details: Base URLs, regional endpoints, `me` keyword rules, Meeting ID vs UUID, double-encoding, time formats 2. **Set up authentication** - Concepts: [Authentication Flows](concepts/authentication-flows.md) - Methods: Server-to-Server OAuth, User OAuth with PKCE, Cross-reference: [zoom-oauth](../zoom-oauth/SKILL.md) 3. **Create your first meeting** - Examples: [Meeting Lifecycle](examples/meeting-lifecycle.md) - Features: Full CRUD with curl and Node.js examples, Webhook event integration 4. **Handle rate limits** - Concepts: [Rate Limiting Strategy](concepts/rate-limiting-strategy.md) - Details: Plan-based limits, retry patterns, request queuing 5. **Set up webhooks** - Examples: [Webhook Server](examples/webhook-server.md) - Features: CRC validation, signature verification, event handling 6. **Troubleshoot issues** - Troubleshooting: [Common Issues](troubleshooting/common-issues.md) - Topics: Token refresh, pagination pitfalls, common gotchas ``` -------------------------------- ### Headless Linux Setup for Zoom Video SDK Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-video-sdk/linux/linux.md This section provides instructions for setting up a headless Linux environment (Docker/WSL) for the Zoom Video SDK. It includes installing PulseAudio, starting it, creating virtual audio devices (speaker and mic), and configuring Zoom's audio type. ```bash # Install PulseAudio sudo apt install -y pulseaudio pulseaudio --start # Create virtual devices pactl load-module module-null-sink sink_name=virtual_speaker pactl load-module module-null-source source_name=virtual_mic # Configure mkdir -p ~/.config cat > ~/.config/zoomus.conf << EOF [General] system.audio.type=default EOF ``` -------------------------------- ### Complete Breakout Room Workflow Example (C++) Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-meeting-sdk/windows/examples/breakout-rooms.md Illustrates a comprehensive C++ workflow for managing breakout rooms, including setting up listeners, configuring options, creating rooms, assigning users, starting rooms, and handling role reception for attendees. This example demonstrates the sequence of operations for a full breakout room lifecycle. ```cpp void OnInMeeting() { // Set up listener first SetupBreakoutRoomListener(); // Wait for role callbacks... } void OnCreatorRoleReceived(IBOCreator* creator, IBOData* data) { // Step 1: Configure options ConfigureBreakoutRooms(creator); // Step 2: Create rooms creator->CreateBO(L"Team Alpha"); creator->CreateBO(L"Team Beta"); // Step 3: Wait for onCreateBOResponse callback... } void OnRoomsCreated(IBOCreator* creator, IBOData* data, IBOAdmin* admin) { // Step 4: Assign users PreassignUser(creator, data, L"John", L"Team Alpha"); PreassignUser(creator, data, L"Jane", L"Team Beta"); // Step 5: Start rooms StartBreakoutRooms(admin); } void OnAttendeeRoleReceived(IBOAttendee* attendee) { // As a participant, join your assigned room JoinMyBreakoutRoom(attendee); } ``` -------------------------------- ### Start Cloud Recording Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-video-sdk/web/examples/recording.md Initiate the cloud recording process for the current Zoom session. ```APIDOC ## Start Cloud Recording ### Description Starts the cloud recording for the ongoing Zoom session. ### Method `startCloudRecording()` ### Endpoint N/A (Client-side method) ### Parameters None ### Request Example ```javascript try { await recordingClient.startCloudRecording(); console.log('Recording started'); } catch (error) { console.error('Failed to start recording:', error); } ``` ### Response - **Success Response (200)**: Indicates the recording has been successfully initiated. - **Error Response**: Throws an error if the recording fails to start. ``` -------------------------------- ### Start Cloud Recording - JavaScript Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-video-sdk/web/examples/recording.md Initiates cloud recording for the current Zoom session. It includes error handling to catch and log any issues that occur during the start process. ```javascript try { await recordingClient.startCloudRecording(); console.log('Recording started'); } catch (error) { console.error('Failed to start recording:', error); } ``` -------------------------------- ### Install and Configure jsoncpp using vcpkg (PowerShell) Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-video-sdk/windows/troubleshooting/build-errors.md Installs the jsoncpp library using vcpkg and configures the necessary include paths for Visual Studio. This resolves 'Cannot open include file: 'json/json.h'' errors. ```powershell git clone https://github.com/Microsoft/vcpkg.git C:\vcpkg cd C:\vcpkg .\bootstrap-vcpkg.bat .\vcpkg integrate install .\vcpkg install jsoncpp:x64-windows ``` -------------------------------- ### Quick Start: Configure Zoom SDK and Get Meeting Context Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-general/use-cases/in-meeting-apps.md This snippet demonstrates the initial setup for a Zoom App. It configures the Zoom SDK with required capabilities and retrieves basic meeting information like the meeting ID. Ensure the '@zoom/appssdk' is installed. ```javascript import zoomSdk from '@zoom/appssdk'; await zoomSdk.config({ capabilities: ['shareApp', 'getMeetingContext', 'getUserContext'], version: '0.16' }); const context = await zoomSdk.getMeetingContext(); console.log('Meeting ID:', context.meetingID); await zoomSdk.shareApp(); ``` -------------------------------- ### Qt Framework Quickstart Build and Run Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-video-sdk/linux/linux.md Instructions for building and running the Qt framework quickstart for the Zoom Video SDK on Linux. It details the necessary prerequisites, the build steps using CMake, and how to execute the demo application. ```bash # Prerequisites sudo apt install -y qt6-base-dev qt6-tools-dev libasound2-dev cmake # Build cd videosdk-linux-qt-quickstart/src mkdir build && cd build export Qt6_DIR=/usr/lib/x86_64-linux-gnu/cmake/Qt6 cmake .. && make -j$(nproc) # Run ./run_qt_demo.sh ``` -------------------------------- ### GTK Framework Quickstart Build and Run Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-video-sdk/linux/linux.md Instructions for building and running the GTK framework quickstart for the Zoom Video SDK on Linux. It lists the required packages, the CMake build process, and how to execute the SkeletonDemo application. ```bash # Prerequisites sudo apt install -y libgtkmm-3.0-dev libsdl2-dev libasound2-dev libcurl4-openssl-dev cmake # Build cd videosdk-linux-gtk-quickstart/src mkdir build && cd build cmake .. && make # Run cd ../bin && ./SkeletonDemo ``` -------------------------------- ### Environment Setup for RTMS Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-rtms/references/quickstart.md Sets up environment variables required for RTMS integration. This includes Zoom Client ID, Client Secret, and a Webhook Secret Token, typically stored in a .env file. ```bash # .env file ZOOM_CLIENT_ID=your_client_id # From App Credentials ZOOM_CLIENT_SECRET=your_client_secret # From App Credentials ZOOM_SECRET_TOKEN=your_webhook_token # From Feature → Webhook ``` -------------------------------- ### Project Structure Example Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-video-sdk/windows/examples/dotnet-winforms/README.md Illustrates the directory structure for a sample project using Zoom Video SDK with both C++/CLI wrapper and a C# WPF application. ```tree C:\tempsdk\videosdk-windows-dotnet-desktop-framework-quickstart\ ├── ZoomVideoSDK.Wrapper\ # C++/CLI Bridge (shared with WinForms) │ ├── ZoomSDKManager.h │ └── ZoomSDKManager.cpp │ └── ZoomVideoSDK.WPF\ # C# WPF App ├── ZoomSDKInterop.cs # WPF-specific interop (BitmapSource) ├── MainWindow.xaml # XAML layout ├── MainWindow.xaml.cs # Code-behind with Dispatcher └── App.xaml # Application entry ``` -------------------------------- ### Get Install Analytics Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-rest-api/references/marketplace-apps.md Retrieves installation analytics for a specific Zoom app, including total installs, uninstalls, net installs, and daily data. ```APIDOC ## GET /marketplace/apps/{appId}/analytics ### Description Retrieves installation analytics for a specific Zoom app within a given date range. ### Method GET ### Endpoint `/marketplace/apps/{appId}/analytics` ### Parameters #### Path Parameters - **appId** (string) - Required - The unique identifier of the app. #### Query Parameters - **from** (string) - Required - The start date for the analytics period (YYYY-MM-DD). - **to** (string) - Required - The end date for the analytics period (YYYY-MM-DD). ### Response #### Success Response (200) - **period** (object) - The date range for the analytics. - **from** (string) - The start date. - **to** (string) - The end date. - **summary** (object) - Summary statistics for the period. - **total_installs** (integer) - Total number of app installations. - **total_uninstalls** (integer) - Total number of app uninstalls. - **net_installs** (integer) - Net change in installations (installs - uninstalls). - **active_users** (integer) - Number of active users during the period. - **daily_data** (array) - An array of daily analytics data. - **date** (string) - The specific date. - **installs** (integer) - Installations on that date. - **uninstalls** (integer) - Uninstalls on that date. - **active_users** (integer) - Active users on that date. #### Response Example ```json { "period": { "from": "2024-01-01", "to": "2024-01-31" }, "summary": { "total_installs": 500, "total_uninstalls": 50, "net_installs": 450, "active_users": 4200 }, "daily_data": [ { "date": "2024-01-01", "installs": 20, "uninstalls": 2, "active_users": 4000 } ] } ``` ``` -------------------------------- ### Webhook Payload Example for Meeting Started Event Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-rest-api/examples/meeting-lifecycle.md Illustrates the structure of a JSON payload received when a Zoom meeting starts. This payload contains event details, timestamp, and information about the meeting object, including its ID, host, topic, start time, and duration. This is used for real-time event notifications. ```json { "event": "meeting.started", "event_ts": 1707486720000, "payload": { "account_id": "abc123", "object": { "id": "93123456789", "uuid": "xyzAbC1234==", "host_id": "def456", "topic": "Q1 Planning Meeting", "type": 2, "start_time": "2025-03-15T14:00:00Z", "duration": 60, "timezone": "America/New_York" } } } ``` -------------------------------- ### Full Zoom Meeting SDK Initialization and Join Example (JavaScript) Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-meeting-sdk/web/references/web.md This comprehensive example demonstrates the complete process of initializing the Zoom Meeting SDK, checking system requirements, preloading WebAssembly, and joining a meeting. It includes success and error handling for both initialization and joining. ```javascript import { ZoomMtg } from '@zoom/meetingsdk'; // Check system requirements console.log(ZoomMtg.checkSystemRequirements()); // Preload WebAssembly for faster init ZoomMtg.preLoadWasm(); ZoomMtg.prepareWebSDK(); // Initialize and join ZoomMtg.init({ leaveUrl: '/meeting-ended', disableCORP: !window.crossOriginIsolated, // Disable if no COOP/COEP success: () => { ZoomMtg.join({ meetingNumber: '123456789', userName: 'User Name', signature: signature, // From auth endpoint userEmail: 'user@example.com', passWord: 'meeting-password', success: (res) => { console.log('Joined meeting'); ZoomMtg.getAttendeeslist({}); ZoomMtg.getCurrentUser({ success: (res) => console.log('Current user:', res.result.currentUser) }); }, error: (err) => console.error('Join error:', err) }); }, error: (err) => console.error('Init error:', err) }); ``` -------------------------------- ### Zoom GraphQL API - Query Examples Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-rest-api/references/graphql.md Examples of common GraphQL queries for retrieving data from the Zoom API, including listing users, getting user details, listing meetings, getting meeting details with participants, and retrieving recordings. ```APIDOC ## Query Examples ### List Users Retrieves a list of users with specified fields. ```graphql query ListUsers { users(first: 100) { edges { node { id firstName lastName email department type status } } pageInfo { hasNextPage endCursor } } } ``` ### Get User Details Retrieves detailed information for a specific user by their ID. ```graphql query GetUser($userId: ID!) { user(id: $userId) { id firstName lastName email department timezone type createdAt lastLoginTime } } ``` **Variables**: ```json { "userId": "user_abc123" } ``` ### List Meetings Retrieves a list of meetings for a specific user. ```graphql query ListMeetings($userId: ID!) { user(id: $userId) { meetings(first: 50) { edges { node { id topic type startTime duration timezone joinUrl } } } } } ``` ### Get Meeting with Participants Retrieves detailed information about a specific meeting, including its participants. ```graphql query GetMeetingDetails($meetingId: ID!) { meeting(id: $meetingId) { id topic type startTime duration host { id firstName lastName email } participants { edges { node { id name email joinTime leaveTime } } } } } ``` ### Get Recordings Retrieves cloud recordings for a specific user within a given date range. ```graphql query GetRecordings($userId: ID!, $from: DateTime!, $to: DateTime!) { user(id: $userId) { recordings(from: $from, to: $to, first: 50) { edges { node { id topic startTime duration totalSize recordingFiles { id fileType fileSize downloadUrl } } } } } } ``` ``` -------------------------------- ### Project Dependencies - package.json Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-apps-sdk/examples/quick-start.md Defines the project's name, version, scripts for starting the server (development and production), and lists essential dependencies like Express, cookie-session, axios, and dotenv. These are crucial for setting up the backend server and handling API requests. ```json { "name": "zoom-app-hello-world", "version": "1.0.0", "scripts": { "start": "node server.js", "dev": "nodemon server.js" }, "dependencies": { "express": "^4.18.0", "cookie-session": "^2.0.0", "axios": "^1.6.0", "dotenv": "^16.0.0" } } ``` -------------------------------- ### Get Agent Status Example Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-rest-api/references/contact-center.md Example of how to retrieve the current status of a specific agent in the Zoom Contact Center. ```APIDOC ## Get Agent Status Example ### Description Example of how to retrieve the current status of a specific agent in the Zoom Contact Center. ### Method GET ### Endpoint `/contact_center/agents/{agentId}/status` ### Parameters #### Path Parameters - **agentId** (string) - Required - The unique identifier of the agent. ### Request Example ```bash curl -X GET "https://api.zoom.us/v2/contact_center/agents/{agentId}/status" \ -H "Authorization: Bearer {accessToken}" ``` ``` -------------------------------- ### Configuration File Example (JSON) Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-video-sdk/windows/references/samples.md Provides an example of the `config.json` file used by the samples. This file typically contains authentication tokens, session details, and user information required to connect to a Zoom session. ```json { "jwt": "your-jwt-token", "session_name": "test-session", "password": "", "user_name": "Bot" } ``` -------------------------------- ### Error Handling Example Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-meeting-sdk/windows/examples/captions-transcription.md Example C++ code demonstrating how to handle errors when starting live transcription. ```APIDOC ## Error Handling ```cpp SDKError err = g_captionController->StartLiveTranscription(); switch (err) { case SDKERR_SUCCESS: std::cout << "Transcription started" << std::endl; break; case SDKERR_NO_PERMISSION: std::cerr << "No permission (need host or feature disabled)" << std::endl; break; case SDKERR_WRONG_USAGE: std::cerr << "Feature not available in this meeting" << std::endl; break; case SDKERR_SERVICE_FAILED: std::cerr << "Service failed to start" << std::endl; break; default: std::cerr << "Error: " << err << std::endl; } ``` ``` -------------------------------- ### Get Helper After Initialization Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-video-sdk/windows/concepts/singleton-hierarchy.md Shows the correct sequence for obtaining helper objects from the SDK. It is crucial to call `sdk->initialize(params)` before attempting to get any helper instances like `getVideoHelper()`, as they will be null otherwise. ```cpp // WRONG - SDK not initialized IZoomVideoSDKVideoHelper* helper = sdk->getVideoHelper(); // nullptr! sdk->initialize(params); // CORRECT sdk->initialize(params); IZoomVideoSDKVideoHelper* helper = sdk->getVideoHelper(); // Valid ``` -------------------------------- ### Zoom Video SDK - Web Quick Start Source: https://context7.com/tanchunsiong/agent-skills/llms.txt Guides on initializing the Zoom Video SDK client, joining a video session with a topic, signature, username, and password, and managing media streams. ```APIDOC ## Zoom Video SDK Initialization and Joining ### Description This section covers the initial steps for using the Zoom Video SDK in a web application. It includes initializing the client, joining a video session, and obtaining the media stream for participants. ### Method Asynchronous JavaScript functions ### Endpoint N/A (Client-side SDK) ### Parameters #### Initialization - **language** (string) - Optional - The language for the SDK (e.g., 'en-US'). - **domain** (string) - Optional - The domain for the SDK (e.g., 'Global'). - **options** (object) - Optional - Configuration options, e.g., `{ patchJsMedia: true }`. #### Joining Session - **topic** (string) - Required - The topic or meeting ID for the session. - **signature** (string) - Required - The JWT signature obtained from server-side generation. - **userName** (string) - Required - The display name for the user. - **password** (string) - Optional - The password for the meeting, if required. ### Request Example (Initialization) ```javascript import ZoomVideo from '@zoom/videosdk'; const client = ZoomVideo.createClient(); await client.init('en-US', 'Global', { patchJsMedia: true }); ``` ### Request Example (Joining) ```javascript await client.join(topic, signature, userName, password); ``` ### Response #### Success Response (after join) - **stream** (object) - The media stream object, used for controlling video and audio. ### Media Stream Operations - **stream.startVideo()**: Starts the participant's video. - **stream.startAudio()**: Starts the participant's audio. - **stream.attachVideo(userId, VideoQuality)**: Attaches a participant's video feed for rendering. Returns an HTML element. - **stream.detachVideo(userId)**: Detaches a participant's video feed. ### Response Example (Attaching Video) ```javascript import { VideoQuality } from '@zoom/videosdk'; const element = await stream.attachVideo(userId, VideoQuality.Video_360P); container.appendChild(element); ``` ``` -------------------------------- ### Install @zoom/rtms SDK and Express Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-rtms/examples/sdk-quickstart.md Installs the necessary @zoom/rtms SDK and Express.js for handling webhooks. Requires Node.js version 20.3.0 or higher, with 24 LTS recommended. ```bash # Requires Node.js 20.3.0+ (24 LTS recommended) npm install @zoom/rtms express ``` -------------------------------- ### Recommended Fix for Audio Connection in Win32 Sample Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-video-sdk/windows/examples/dotnet-winforms/README.md Demonstrates the recommended fix for an issue where audio callbacks might be missed due to the `audioOption.connect` flag being set incorrectly during session join. It shows the problematic code and the corrected approach, including invoking `startAudio()` within the `onSessionJoin` callback. ```cpp // BEFORE (current - problematic) sessionContext.audioOption.connect = true; // May miss audio callbacks // AFTER (recommended) sessionContext.audioOption.connect = false; // Then in onSessionJoin callback: void CustomZoomDelegate::onSessionJoin() { if (m_pManager) { // Now safe to connect audio IZoomVideoSDKAudioHelper* audioHelper = m_pManager->GetSDK()->getAudioHelper(); audioHelper->startAudio(); } } ``` -------------------------------- ### Recording Started Event Example Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-websockets/references/events.md Illustrates the JSON payload for a 'recording.started' event, sent when cloud recording begins. It contains meeting details and the recording start time. ```json { "event": "recording.started", "payload": { "account_id": "abcD3ojkdbjfg", "object": { "id": 1234567890, "uuid": "abcdefgh-1234-5678-abcd-1234567890ab", "host_id": "xyz789", "topic": "Weekly Team Sync", "start_time": "2024-01-25T10:00:00Z", "recording_start": "2024-01-25T10:01:00Z" } } } ``` -------------------------------- ### Initialize and Authenticate Zoom SDK (C++) Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-meeting-sdk/windows/examples/authentication-pattern.md Demonstrates the core steps for initializing the Zoom SDK, authenticating with a JWT token, and waiting for authentication confirmation. Includes error handling for initialization and authentication failures. ```cpp #include #include #include #include #include // Assuming these functions and variables are defined elsewhere extern bool InitializeSDK(); extern bool AuthenticateSDK(const std::wstring& jwt_token); extern void CleanUPSDK(); extern void* g_authService; extern bool g_authenticated; extern void DestroyAuthService(void* authService); // Placeholder for WaitForAuthentication logic bool WaitForAuthentication() { // In a real scenario, this would involve waiting for a callback or event // For demonstration, we'll simulate a short wait and assume success if g_authenticated is true std::this_thread::sleep_for(std::chrono::seconds(2)); // Simulate waiting return g_authenticated; } // Main function int main() { // Your JWT token here std::wstring jwt_token = L"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."; // Step 1: Initialize SDK if (!InitializeSDK()) { std::cerr << "ERROR: Failed to initialize SDK" << std::endl; return 1; } // Step 2: Authenticate if (!AuthenticateSDK(jwt_token)) { std::cerr << "ERROR: Authentication failed" << std::endl; return 1; } // Step 3: Wait for callback if (!WaitForAuthentication()) { std::cerr << "ERROR: Timed out waiting for authentication" << std::endl; return 1; } std::cout << "\n✓ Authentication complete! Ready to join meeting." << std::endl; // Now you can join meetings... // Cleanup if (g_authService) { DestroyAuthService(g_authService); g_authService = nullptr; // Prevent double free } CleanUPSDK(); return 0; } ``` -------------------------------- ### Meeting Sharing Started Event Example Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-websockets/references/events.md Provides an example of the 'meeting.sharing_started' event payload, indicating the beginning of a screen sharing session. It includes participant and sharing details. ```json { "event": "meeting.sharing_started", "payload": { "account_id": "abcD3ojkdbjfg", "object": { "id": 1234567890, "uuid": "abcdefgh-1234-5678-abcd-1234567890ab", "participant": { "id": "participant123", "user_name": "John Doe" }, "sharing_details": { "content": "screen", "date_time": "2024-01-25T10:15:00Z" } } } } ``` -------------------------------- ### Get Available Slots using Zoom Scheduler API Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-rest-api/references/scheduler.md This example shows how to retrieve available time slots for a given schedule using the Zoom Scheduler API. It requires the schedule ID and a date range for the query, along with an OAuth 2.0 access token. The API returns a list of available time slots, each with a start time, end time, and availability status. ```bash curl -X GET "https://api.zoom.us/v2/scheduler/schedules/{scheduleId}/slots?start_date=2024-01-20&end_date=2024-01-27" \ -H "Authorization: Bearer {accessToken}" ``` -------------------------------- ### SDK Initialization and Cleanup in C++ Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-meeting-sdk/windows/examples/authentication-pattern.md This C++ code demonstrates the proper initialization, authentication, and cleanup of an SDK. It includes error handling for initialization and authentication failures, ensuring that resources are cleaned up using the Cleanup() function in all scenarios, including success and failure. ```cpp void Cleanup() { if (g_authService) { DestroyAuthService(g_authService); g_authService = nullptr; } CleanUPSDK(); } int main() { if (!InitializeSDK()) { return 1; } if (!AuthenticateSDK(jwt_token)) { Cleanup(); // Always cleanup on failure return 1; } if (!WaitForAuthentication()) { Cleanup(); return 1; } // ... use SDK ... Cleanup(); // Cleanup on success too return 0; } ``` -------------------------------- ### Webinar RTMS Started Event Payload Example (JSON) Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-rtms/references/webhooks.md Example JSON payload for the 'webinar.rtms_started' event, signifying that an RTMS stream is ready for a webinar. Note that it uses 'meeting_uuid' instead of 'webinar_uuid'. ```json { "event": "webinar.rtms_started", "payload": { "account_id": "account_id", "object": { "meeting_id": "meeting_id", "meeting_uuid": "meeting_uuid", "host_id": "host_user_id", "rtms_stream_id": "stream_id", "server_urls": "wss://rtms-sjc1.zoom.us/", "signature": "auth_signature" } } } ``` -------------------------------- ### Get Install Analytics (Bash) Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-rest-api/references/marketplace-apps.md Retrieves installation analytics for a specific Zoom app within a given date range. Requires the app ID and an access token for authorization. The response includes summary statistics and daily data on installs, uninstalls, and active users. ```bash curl "https://api.zoom.us/v2/marketplace/apps/{appId}/analytics?from=2024-01-01&to=2024-01-31" \ -H "Authorization: Bearer {accessToken}" ``` -------------------------------- ### Zoom SDK Initialization and Client Creation Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-video-sdk/web/concepts/singleton-hierarchy.md Demonstrates how to initialize the Zoom video SDK and create a client instance. This is the starting point for interacting with the SDK's functionalities, such as joining sessions and managing media streams. ```javascript const client = ZoomVideo.createClient(); ``` -------------------------------- ### Install Recommended Zoom App SDK Version Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-apps-sdk/troubleshooting/migration.md Specifies the recommended stable version of the @zoom/appssdk package to be installed as a dependency. This ensures you are using a version with the latest features and stability improvements. ```json { "dependencies": { "@zoom/appssdk": "^0.16.26" } } ``` -------------------------------- ### Audio Connection Strategy for Zoom SDK in C++ Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-video-sdk/windows/SKILL.md This example illustrates a best practice for handling audio connections in the Zoom Video SDK for C++. It involves setting `audioOption.connect = false` during session join and then explicitly calling `startAudio()` within the `onSessionJoin()` callback for more reliable audio initialization. ```cpp // During join session_context.audioOption.connect = false; // Don't connect yet session_context.audioOption.mute = true; // In onSessionJoin() callback void onSessionJoin() override { IZoomVideoSDKAudioHelper* audioHelper = video_sdk_obj->getAudioHelper(); if (audioHelper) { audioHelper->startAudio(); // Connect now } } ``` -------------------------------- ### Get Meeting Details API Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-rest-api/examples/meeting-lifecycle.md Retrieve the details of a specific Zoom meeting. ```APIDOC ## GET /meetings/{meetingId} ### Description Retrieves the details of a specific Zoom meeting using its meeting ID. ### Method GET ### Endpoint `/meetings/{meetingId}` ### Parameters #### Path Parameters - **meetingId** (integer) - Required - The ID of the meeting to retrieve. #### Query Parameters None ### Response #### Success Response (200 OK) - **id** (integer) - The meeting ID. - **uuid** (string) - The meeting UUID. - **host_id** (string) - The host's user ID. - **topic** (string) - The meeting topic. - **type** (integer) - The meeting type. - **start_time** (string) - The meeting start time. - **duration** (integer) - The meeting duration. - **timezone** (string) - The meeting timezone. - **created_at** (string) - The time the meeting was created. - **join_url** (string) - The URL to join the meeting. - **start_url** (string) - The URL to start the meeting. - **settings** (object) - The meeting settings. #### Response Example ```json { "id": 93123456789, "uuid": "xyzAbC1234==", "host_id": "abc123def456", "topic": "Q1 Planning Meeting", "type": 2, "start_time": "2025-03-15T10:00:00Z", "duration": 60, "timezone": "America/New_York", "created_at": "2025-02-09T12:30:00Z", "join_url": "https://zoom.us/j/93123456789", "start_url": "https://zoom.us/s/93123456789?zak=...", "settings": { "host_video": true, "participant_video": false, "waiting_room": true, "auto_recording": "cloud" } } ``` ``` -------------------------------- ### Start Audio with C++ SDK Source: https://github.com/tanchunsiong/agent-skills/blob/main/zoom-video-sdk/windows/concepts/singleton-hierarchy.md Initiates the audio stream. This functionality is accessible via the getAudioHelper. ```cpp sdk->getAudioHelper()->startAudio(); ```