Zoom General
OpenAIOfficialCreated by ZoomDistributed by OpenAI
- Skill
- Tool integration
- Automation and integrations
- MIT
- Medium risk
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
Zoom General serves as a strategic starting point for developers and architects to navigate the Zoom ecosystem. It provides a structured workflow to classify integration requirements, identify the correct Zoom product surface (such as APIs, SDKs, or webhooks), and determine the necessary authentication model. By guiding users through a decision-making process, it ensures that developers select the right tool for their specific use case before routing to more specialized skills.
What it does
- Classifies integration jobs based on desired outcomes like embedding meetings or automating resources.
- Maps requirements to specific Zoom surfaces including REST APIs, WebSockets, and various SDKs.
- Provides guidance on selecting the correct authentication and scope model for an integration.
- Facilitates routing to specialized skills once the product context is established.
- Offers comparative context for tasks that span multiple Zoom product boundaries.
When to use it
- When you are in the early stages of planning a Zoom integration and need to choose the right app type.
- When you need to compare different Zoom surfaces to determine which fits your technical requirements.
- When a task involves multiple Zoom products and requires a high-level architectural approach.
- When you need to confirm the correct authentication flow for a specific integration scenario.
Advantages
- Prevents premature selection of tools by enforcing a structured classification process.
- Clarifies the distinction between user-level OAuth, account-level OAuth, and SDK signatures.
- Reduces complexity by routing users to narrow, specialized skills after initial planning.
- Provides a clear decision matrix for choosing between General Apps, Server-to-Server OAuth, and Webhook Only apps.
Usage examples
- “I want to build an app that automates meeting reports. Which Zoom app type should I use?”
- The agent will guide you to classify the job as backend automation, leading to the recommendation of Server-to-Server OAuth for its lack of user interaction requirements.
- “Should I use the Meeting SDK or the Video SDK for my project?”
- The agent will help you compare the two based on your specific embedding needs and surface requirements, ensuring you choose the correct SDK for your use case.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/openai/zoom-general/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip zoom-general.zip -d .agents/skills
Documentation by Zoom
Zoom General
Use this skill for cross-product platform context after the user’s goal is understood. For first-step routing, prefer start, plan-zoom-product, or plan-zoom-integration.
Workflow
Classify the job by outcome: embed meetings, custom video, automate resources, consume events, process media, use meeting intelligence, or publish a Marketplace app.
Choose the Zoom surface that owns the behavior: REST API, webhooks, WebSockets, Meeting SDK, Video SDK, Zoom Apps SDK, Phone, Contact Center, Virtual Agent, Scribe, Rivet, or Cobrowse.
Confirm auth and scope model before implementation; Zoom surfaces differ on user-level OAuth, account-level OAuth, and SDK signatures.
Route to the narrow skill once the surface is chosen rather than keeping broad guidance in context.
Use the preserved guide only when a task crosses product boundaries or needs detailed comparison tables.
References
Full preserved guide: references/full-guide.md
App types: references/app-types.md
Authentication: references/authentication.md
Scopes: references/scopes.md
Marketplace: references/marketplace.md
Query routing playbook: references/query-routing-playbook.md
Files
- ATTRIBUTION.mdAdded by AutoGineer866 B
- LICENSELicence file added by AutoGineer1.1 KiB
- RUNBOOK.md2.4 KiB
- SKILL.md1.4 KiB
- agents/openai.yaml133 B
- references/app-types.md2.6 KiB
- references/authentication.md2.0 KiB
- references/authorization-patterns.md21.2 KiB
- references/automatic-skill-chaining-rest-webhooks.md5.5 KiB
- references/community-repos.md9.1 KiB
- references/distributed-meeting-fallback-architecture.md14.0 KiB
- references/environment-variables.md3.0 KiB
- references/full-guide.md5.3 KiB
- references/interview-answer-routing.md796 B
- references/known-limitations.md2.5 KiB
- references/marketplace.md1.6 KiB
- references/meeting-webhooks-oauth-refresh-orchestration.md5.3 KiB
- references/query-routing-playbook.md2.7 KiB
- references/routing-implementation.md3.7 KiB
- references/scopes.md3.4 KiB
- references/sdk-logs-troubleshooting.md5.7 KiB
- references/sdk-upgrade-guide.md4.1 KiB
- references/sdk-upgrade-workflow.md3.5 KiB
- use-cases/ai-companion-integration.md9.8 KiB
- use-cases/ai-integration.md7.2 KiB
- use-cases/backend-automation-s2s-oauth.md4.9 KiB
- use-cases/collaborative-apps.md2.6 KiB
- use-cases/contact-center-app-lifecycle-and-context-switching.md1.2 KiB
- use-cases/contact-center-integration.md1.1 KiB
- use-cases/custom-meeting-ui-web.md2.8 KiB
- use-cases/custom-video.md5.6 KiB
- use-cases/customer-support-cobrowsing.md12.5 KiB
- use-cases/electron-meeting-embed.md1020 B
- use-cases/embed-meetings.md4.8 KiB
- use-cases/enterprise-app-deployment.md1.0 KiB
- use-cases/flutter-video-sessions.md910 B
- use-cases/form-completion-assistant.md15.3 KiB
- use-cases/hd-video-resolution.md8.8 KiB
- use-cases/high-volume-meeting-platform.md1.9 KiB
- use-cases/immersive-experiences.md2.9 KiB
- use-cases/in-meeting-apps.md7.4 KiB
- use-cases/marketplace-publishing.md9.2 KiB
- use-cases/meeting-automation.md6.1 KiB
- use-cases/meeting-bots.md10.6 KiB
- use-cases/meeting-details-with-events.md20.8 KiB
- use-cases/meeting-links-vs-embedding.md988 B
- use-cases/minutes-calculation.md22.5 KiB
- use-cases/native-meeting-sdk-multi-platform.md1.5 KiB
- use-cases/native-video-sdk-multi-platform.md1.2 KiB
- use-cases/prebuilt-video-ui.md12.4 KiB
- use-cases/probe-sdk-preflight-readiness-gate.md1.2 KiB
- use-cases/qss-monitoring.md2.7 KiB
- use-cases/raw-recording.md5.1 KiB
- use-cases/react-native-meeting-embed.md1.0 KiB
- use-cases/react-native-video-sessions.md953 B
- use-cases/real-time-media-streams.md5.4 KiB
- use-cases/recording-download-pipeline.md8.7 KiB
- use-cases/recording-transcription.md7.2 KiB
- use-cases/retrieve-meeting-and-subscribe-events.md32.9 KiB
- use-cases/rivet-event-driven-api-orchestrator.md1.3 KiB
- use-cases/saas-app-oauth-integration.md4.8 KiB
- use-cases/scribe-transcription-pipeline.md1.8 KiB
- use-cases/sdk-size-optimization.md5.0 KiB
- use-cases/sdk-wrappers-gui.md18.4 KiB
- use-cases/server-to-server-oauth-with-webhooks.md1.7 KiB
- use-cases/team-chat-llm-bot.md6.7 KiB
- use-cases/testing-development.md7.2 KiB
- use-cases/token-and-scope-troubleshooting.md2.4 KiB
- use-cases/transcription-bot-linux.md14.3 KiB
- use-cases/usage-reporting-analytics.md8.5 KiB
- use-cases/user-and-meeting-creation.md16.9 KiB
- use-cases/video-sdk-bring-your-own-storage.md6.9 KiB
- use-cases/virtual-agent-campaign-web-mobile-wrapper.md1.4 KiB
- use-cases/virtual-agent-knowledge-base-sync-pipeline.md1.1 KiB
- use-cases/web-sdk-embedding.md4.5 KiB
- use-cases/zoom-phone-smart-embed-crm.md876 B
use-cases/customer-support-cobrowsing.md
Customer Support Co-Browsing
Enable real-time collaborative browsing between support agents and customers for efficient issue resolution and form completion assistance.
Use Case Overview
Problem: Customers struggle to describe issues or complete complex forms, leading to long support calls and high frustration.
Solution: Implement Zoom Cobrowse SDK to allow support agents to view and assist customers' browsers in real-time, with privacy controls for sensitive data.
Related Skills:
Zoom Cobrowse SDK
Architecture
┌──────────────────────┐ ┌──────────────────────┐
│ Customer Browser │ │ Support Agent │
│ • View form/page │◄───────►│ • View customer │
│ • Share PIN │ Sync │ • Provide guidance │
│ • Get assistance │ │ • Draw annotations │
└──────────────────────┘ └──────────────────────┘
│ │
└────────────┬───────────────────┘
▼
┌──────────────────────┐
│ Your Auth Server │
│ • Generate JWTs │
│ • Log sessions │
│ • Track agents │
└──────────────────────┘Implementation Steps
1. Set Up Authentication Server
// server.js - JWT token generation
const express = require('express');
const { KJUR } = require('jsrsasign');
app.post('/cobrowse-token', (req, res) => {
const { role, userId, userName, caseId } = req.body;
const iat = Math.floor(Date.now() / 1000);
const exp = iat + 60 * 60 * 2; // 2 hours
const payload = {
app_key: process.env.ZOOM_SDK_KEY,
role_type: role, // 1 = customer, 2 = agent
user_id: userId,
user_name: userName,
iat,
exp
};
const token = KJUR.jws.JWS.sign('HS256',
JSON.stringify({ alg: 'HS256', typ: 'JWT' }),
JSON.stringify(payload),
process.env.ZOOM_SDK_SECRET
);
// Log session for tracking
logCobrowseSession(caseId, userId, role);
res.json({ token });
});2. Integrate Customer Support Page
<!-- support.html -->
<!DOCTYPE html>
<html>
<head>
<script type="module">
const ZOOM_SDK_KEY = 'YOUR_SDK_KEY';
// Load Cobrowse SDK
(function(r, a, b, f, c, d) {
r[f] = r[f] || { init: function() { r.ZoomCobrowseSDKInitArgs = arguments }};
var fragment = a.createDocumentFragment();
function loadJs(url) {
c = a.createElement(b);
d = a.getElementsByTagName(b)[0];
c["async"] = false;
c.src = url;
fragment.appendChild(c);
}
loadJs(`https://us01-zcb.zoom.us/static/resource/sdk/${ZOOM_SDK_KEY}/js/2.13.2`);
d.parentNode.insertBefore(fragment, d);
})(window, document, "script", "ZoomCobrowseSDK");
</script>
</head>
<body>
<div id="support-widget">
<button id="start-cobrowse">Get Support Help</button>
<div id="pin-display" style="display:none;">
<p>Share this PIN with your support agent:</p>
<div id="pin-code"></div>
</div>
</div>
<!-- Customer form with sensitive fields -->
<form id="customer-form">
<input name="name" placeholder="Full Name">
<input name="email" placeholder="Email">
<input name="ssn" class="pii-mask" placeholder="SSN">
<input name="account" class="pii-mask" placeholder="Account Number">
</form>
<script>
let sessionRef = null;
const settings = {
allowAgentAnnotation: true, // Agent can highlight fields
allowCustomerAnnotation: false, // Customer can't annotate
piiMask: {
maskType: "custom_input",
maskCssSelectors: ".pii-mask" // Hide sensitive fields from agent
}
};
ZoomCobrowseSDK.init(settings, function({ success, session, error }) {
if (success) {
sessionRef = session;
session.on("pincode_updated", (payload) => {
document.getElementById("pin-code").innerText = payload.pincode;
document.getElementById("pin-display").style.display = "block";
});
session.on("agent_joined", () => {
console.log("Support agent connected");
showNotification("Agent is now viewing your screen");
});
}
});
document.getElementById("start-cobrowse").addEventListener("click", async () => {
const caseId = getCurrentCaseId();
const response = await fetch("/cobrowse-token", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
role: 1,
userId: "customer_" + Date.now(),
userName: "Customer",
caseId: caseId
})
});
const { token } = await response.json();
sessionRef.start({ sdkToken: token });
});
</script>
</body>
</html>3. Agent Portal Integration
<!-- agent-portal.html -->
<!DOCTYPE html>
<html>
<head>
<title>Support Agent - Co-Browse</title>
</head>
<body>
<div class="agent-dashboard">
<div class="case-info">
<h2>Case #<span id="case-id"></span></h2>
<p>Customer: <span id="customer-name"></span></p>
</div>
<iframe
id="cobrowse-frame"
width="1024"
height="768"
allow="autoplay *; camera *; microphone *; display-capture *; geolocation *;"
></iframe>
</div>
<script>
async function loadCobrowseSession(caseId) {
const response = await fetch("/cobrowse-token", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
role: 2,
userId: "agent_" + Date.now(),
userName: getAgentName(),
caseId: caseId
})
});
const { token } = await response.json();
const iframe = document.getElementById("cobrowse-frame");
iframe.src = `https://us01-zcb.zoom.us/sdkapi/zcb/frame-templates/desk?access_token=${token}`;
}
// Load cobrowse when case requires it
const caseId = getCurrentCaseId();
loadCobrowseSession(caseId);
</script>
</body>
</html>Key Features
Privacy Masking
Automatically hide sensitive customer data:
const settings = {
piiMask: {
maskType: "custom_input",
maskCssSelectors: ".pii-mask, .sensitive, [data-private]",
maskHTMLAttributes: "data-private=true"
}
};What gets masked:
Social Security Numbers
Credit Card Numbers
Bank Account Numbers
Passwords
Any field with
.pii-maskclass
Annotation Tools
Agents can guide customers visually:
Pen tool: Highlight form fields
Rectangle: Circle important sections
Pointer: Direct attention to specific elements
Session Management
Track and log all cobrowse sessions:
function logCobrowseSession(caseId, userId, role) {
const log = {
caseId,
userId,
role: role === 1 ? 'customer' : 'agent',
timestamp: new Date(),
sessionType: 'cobrowse'
};
database.sessions.insert(log);
}Use Case Scenarios
Scenario 1: Complex Form Assistance
Context: Customer struggles with multi-step insurance application
Flow:
Customer clicks "Get Help" on form page
PIN generated and displayed
Customer calls support, shares PIN
Agent enters PIN, sees customer's form
Agent uses annotation to highlight next field
Customer fills form with real-time guidance
Sensitive fields (SSN, medical info) masked from agent
Outcome: Form completed in 5 minutes vs 20 minutes phone call
Scenario 2: Technical Troubleshooting
Context: Customer can't find account settings
Flow:
Customer initiates cobrowse from help chat
Agent joins session
Agent uses pointer to show navigation path
Customer follows visual guidance
Issue resolved in real-time
Outcome: No screen sharing software needed, instant resolution
Scenario 3: Onboarding New Users
Context: First-time user needs guided tour
Flow:
Onboarding specialist starts cobrowse
Customer joins via PIN
Specialist guides through features
Annotations highlight key functions
Customer follows along in their browser
Outcome: Interactive onboarding, higher completion rate
Security Considerations
1. Privacy Compliance
// GDPR/CCPA compliant data handling
const privacySettings = {
piiMask: {
maskType: "custom_input",
maskCssSelectors: ".pii-mask"
},
sessionRecording: false, // Don't record sessions
dataRetention: "24h" // Auto-delete session logs
};2. Agent Authentication
// Verify agent credentials before token generation
async function validateAgent(agentId) {
const agent = await database.agents.findOne({ id: agentId });
if (!agent || !agent.cobrowseEnabled) {
throw new Error("Agent not authorized for cobrowse");
}
return agent;
}3. Session Limits
Max 5 agents per customer session
2-hour token expiration
Automatic session end on inactivity (10 minutes)
HTTPS required for all connections
Metrics and Analytics
Track cobrowse effectiveness:
// Track session metrics
const metrics = {
sessionDuration: calculateDuration(startTime, endTime),
issueResolved: true,
customerSatisfaction: 5,
formFieldsCompleted: 12,
annotationsUsed: 8
};
analytics.track('cobrowse_session_completed', metrics);Key Metrics:
Average session duration
Issue resolution rate
Customer satisfaction (CSAT)
Time saved vs phone support
Conversion rate (form completion)
Integration with Existing Systems
Salesforce Integration
// Log cobrowse session to Salesforce case
async function logToSalesforce(caseId, sessionData) {
await salesforce.cases.update(caseId, {
Cobrowse_Session_Date__c: new Date(),
Cobrowse_PIN__c: sessionData.pin,
Agent_Id__c: sessionData.agentId,
Session_Duration__c: sessionData.duration
});
}Zendesk Integration
// Add cobrowse note to Zendesk ticket
await zendesk.tickets.addComment(ticketId, {
body: `Cobrowse session completed. PIN: ${pin}. Duration: ${duration}`,
public: false
});Best Practices
Clear Privacy Disclosure
Inform customer what agent can see
Display "Agent is viewing your screen" banner
Selective Masking
Mask by default, unmask if needed
Use
.pii-maskclass liberally
Session Logging
Track all sessions for compliance
Log agent actions for quality assurance
Agent Training
Train agents on privacy controls
Establish annotation best practices
Customer Consent
Get explicit consent before starting
Allow customer to end session anytime
Cost Considerations
Zoom SDK Pricing:
Pay per cobrowse minute
SDK Universal Credits required
See Zoom pricing
Estimated Costs:
100 sessions/day × 10 min avg = 1,000 minutes/day
~$30-50/day depending on plan
Related Resources
Zoom Cobrowse SDK Documentation
Get Started Guide
Session Events Reference
Privacy Masking Example
Common Issues
Issue: Customer can't see PIN
Solution: Check pincode_updated event handler is properly attached
Issue: Agent sees sensitive data
Solution: Verify .pii-mask class applied to sensitive fields
Issue: Session disconnects on page refresh Solution: Implement auto-reconnection pattern (see Auto-Reconnection)
Next Steps
Review Get Started Guide
Set up auth server using JWT Authentication
Integrate customer page with Customer Integration
Deploy agent portal with Agent Integration
Test privacy masking with Privacy Masking Example
Requirements and compatibility
Written for: OpenAI Codex
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Security
What our scanner noticed· Medium risk
- Possible data-exfiltration endpoints
- Instructions that use the network
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- Zoom
- Publisher
- OpenAI (Official)
- Distributed by
- OpenAI
- Source
- openai/plugins · plugins/zoom/skills/general · commit d420d13
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from plugins/zoom/LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Zoom or OpenAI.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download zoom-general.zip