Zoom Meetings Deployment Guide
This document is for OCG operators and deployment maintainers.
It is intentionally unlisted from the public docs navigation because it covers server configuration, Zoom app setup, webhook configuration, and internal operational caveats.
What This Enables
Once this setup is complete:
- OCG can create Zoom meetings automatically for supported events and sessions.
- OCG can end automatically created Zoom meetings when their scheduled end time is reached.
- OCG can receive Zoom recording webhooks and save the shared recording URL.
- Group administrators can use
Create meeting automaticallywith providerZoom.
Zoom Requirements
OCG's Zoom integration is built around:
- A Zoom Server-to-Server OAuth app for API access.
- A Zoom webhook endpoint for URL validation and recording updates.
- A pool of Zoom host users that OCG can schedule meetings under.
You need:
- A Zoom account with API app management access.
- A Server-to-Server OAuth app in Zoom.
- A public HTTPS URL for your OCG server.
- One or more Zoom host users that can be used for scheduled meetings.
- A decision about the participant limit your Zoom plan supports.
Useful Zoom references:
- Internal apps (Server-to-server)
- Meetings APIs
- Webhook URL validation enforcement and verification changes
- Enabling cloud recording
- Managing cloud recording settings
- Managing and sharing cloud recordings
- Hosting multiple meetings simultaneously
OCG Configuration
Helm Values
The Helm chart exposes Zoom configuration in charts/ocg/values.yaml:
meetings:
zoom:
enabled: true
accountId: "{YOUR_ZOOM_ACCOUNT_ID}"
clientId: "{YOUR_ZOOM_CLIENT_ID}"
clientSecret: "{YOUR_ZOOM_CLIENT_SECRET}"
hostPoolUsers:
- "host1@example.org"
- "host2@example.org"
maxParticipants: 100
maxSimultaneousMeetingsPerHost: 1
webhookSecretToken: "{YOUR_ZOOM_WEBHOOK_SECRET_TOKEN}"
Notes:
- Set
enabled: trueto make Zoom available in OCG automatic meeting flows. accountId,clientId, andclientSecretcome from the Zoom Server-to-Server OAuth app.hostPoolUsersmust be a non-empty list of unique email addresses.maxParticipantsshould match the real limit of your Zoom plan.maxSimultaneousMeetingsPerHostmust be at least1; set a higher value only if your Zoom plan and any purchased add-ons allow more concurrent meetings per host.webhookSecretTokenis required to verify Zoom webhook signatures.
Raw Server Config
If you are not using the Helm chart, the equivalent server.yml section is:
meetings:
zoom:
enabled: true
account_id: "{YOUR_ZOOM_ACCOUNT_ID}"
client_id: "{YOUR_ZOOM_CLIENT_ID}"
client_secret: "{YOUR_ZOOM_CLIENT_SECRET}"
host_pool_users:
- "host1@example.org"
- "host2@example.org"
max_participants: 100
max_simultaneous_meetings_per_host: 1
webhook_secret_token: "{YOUR_ZOOM_WEBHOOK_SECRET_TOKEN}"
The current server validates that:
host_pool_usersis not empty when Zoom is enabled.- Every
host_pool_usersvalue is a valid email address. host_pool_usersdoes not contain duplicates.max_simultaneous_meetings_per_hostis at least1. Higher values depend on your Zoom plan and any purchased add-ons.
Zoom App Setup
Step 1: Create a Server-to-Server OAuth App
Create a Zoom Server-to-Server OAuth app for the OCG deployment.
OCG uses that app to request access tokens and call the Zoom API for meeting creation, updates, deletion, and end-meeting operations.
Copy these values from Zoom:
Account IDClient IDClient Secret
Store them in OCG as:
- Helm:
meetings.zoom.accountId,meetings.zoom.clientId,meetings.zoom.clientSecret - Raw config:
meetings.zoom.account_id,meetings.zoom.client_id,meetings.zoom.client_secret
Reference: Internal apps (Server-to-server).
Step 2: Choose the Host Pool Users
OCG does not turn event organizers or speaker emails into Zoom hosts automatically.
Instead, OCG selects an available host from the configured hostPoolUsers
list when it creates a meeting.
Choose host users that:
- Exist in the Zoom account used by the OAuth app.
- Are allowed to schedule the kinds of meetings you want OCG to create.
- Can safely be used by automation.
If you expect overlapping meetings, increase the size of the host pool or raise
maxSimultaneousMeetingsPerHost to match the concurrency your Zoom plan and
any purchased add-ons actually support.
Reference: Hosting multiple meetings simultaneously.
Zoom Account Settings
Use these Zoom account settings for OCG-created meetings and recordings.
Meeting Defaults
Configure these settings in Zoom:
Require a passcode when scheduling new meetings: enabledEmbed passcode in invite link for one-click join: enabledAllow participants to join before host: enabledParticipants can join:15 minutes before start time
When Zoom shows multiple join before host choices, select the option that
lets participants join 15 minutes before start time.
These defaults align with the way OCG currently creates Zoom meetings:
- OCG requests a generated default password for new meetings.
- OCG enables
join_before_host. - OCG sets join-before-host time to
15minutes.
Reference: Meetings APIs.
Recording Defaults
Configure these settings in Zoom:
Cloud recording: enabledZoom Meeting: enabled under cloud recordingAutomatic recording: enabledRecord in the cloud: selected
These defaults align with current OCG behavior because OCG requests cloud
recording for created meetings and expects Zoom to send a
recording.completed webhook when the recording is ready.
References:
Recording Sharing Defaults
Configure these settings in Zoom:
Allow cloud recording sharing: enabledRequire users to authenticate before viewing cloud recordings: disabledRequire passcode to access shared cloud recordings: disabled
These settings are recommended so Zoom can produce usable shared recording URLs
for OCG to store when recording.completed webhooks arrive.
If recording sharing is disabled, or if Zoom does not generate a shareable URL, OCG cannot populate the recording link from the webhook payload.
Stored Zoom recording URLs are not published automatically. Zoom can send
multiple raw recording URLs for one OCG meeting when participants join before or
after the main meeting. Group administrators should review the raw URLs, copy
the correct one into the final public recording URL field or use a processed
upload, and enable Publish recording publicly before public visitors can see
a recording.
References:
Zoom Webhook Setup
Step 1: Register the Webhook Endpoint
Register this endpoint in Zoom:
https://{YOUR_OCG_BASE_URL}/webhooks/zoom
The endpoint must be publicly reachable over HTTPS.
Step 2: Set the Webhook Secret Token
Configure a Zoom webhook secret token and store it in OCG as:
- Helm:
meetings.zoom.webhookSecretToken - Raw config:
meetings.zoom.webhook_secret_token
OCG uses that token to verify the x-zm-signature header on incoming Zoom
webhooks.
Reference: Webhook URL validation enforcement and verification changes.
Step 3: Subscribe the Webhook to the Events OCG Uses
Configure the Zoom webhook to send these events:
endpoint.url_validationrecording.completed
These are the Zoom webhook events the current OCG implementation handles.
Current OCG Behavior
Meeting Creation Defaults
When OCG creates or updates a Zoom meeting, it currently applies these values:
- Scheduled meeting type
- Default password enabled
- Automatic recording set to
cloudwhenRecord meetingis enabled in OCG, ornonewhen it is disabled - Join before host enabled
- Join-before-host time set to
15minutes - Mute upon entry enabled
- Participant video disabled
- Waiting room disabled
Automatic Meeting Constraints
Automatic Zoom meetings currently require:
- Event type
virtualorhybrid - A start and end time
- A duration between
5and720minutes - Event capacity that does not exceed the configured
maxParticipants
Webhook Route Registration
OCG only mounts the Zoom webhook route when Zoom is enabled. The route is:
/webhooks/zoom
If Zoom is disabled, the route is not registered.
Recording URL Handling
OCG currently listens for recording.completed and stores every distinct
share_url provided by Zoom for the matching meeting.
If the webhook payload has no share_url, OCG skips the recording-link update.
Raw Zoom URLs remain organizer-only candidates. OCG does not use them as a public fallback because Zoom can produce extra recordings when isolated participants join before or after the main meeting.
Host Controls Limitation
Due to current technical limitations, host controls are not available in automatically created Zoom meetings.
Troubleshooting
Zoom Is Not Available In Automatic Meeting Setup
Check:
- Zoom is enabled in OCG configuration.
- All required Zoom credentials are present.
hostPoolUsersis configured with valid, unique emails.- The deployment was restarted or rolled out with the new config.
Zoom Webhook Validation Or Signature Checks Fail
Check:
- The webhook endpoint is exactly
https://{YOUR_OCG_BASE_URL}/webhooks/zoom. - The webhook secret token in OCG matches the secret configured in Zoom.
- The server is publicly reachable over HTTPS.
Recording Links Are Missing
Check:
Cloud recordingis enabled in Zoom.Automatic recordingis enabled and set toRecord in the cloudin Zoom.Record meetingis enabled for the event in OCG before OCG creates or updates the provider meeting.Allow cloud recording sharingis enabled.- The webhook is subscribed to
recording.completed. - Zoom has finished processing the recording.
- The correct raw Zoom URL has been copied into the final public recording URL field, or a processed recording URL has been provided.
Publish recording publiclyis enabled in OCG if the final recording exists but does not appear on the public event page.