Zoom
Zoom integration
LLM Engine can integrate with Zoom! It supports:
- live transcription
- sending and receiving direct messages
Zoom integration requires the use of Recall.ai, a third party service.
Set up Recall.ai
We provide a Zoom adapter that saves real-time transcription of a Zoom meeting to LLM Engine. We use the meeting bot API provided by Recall.ai to connect to Zoom. Follow these steps to integrate with Recall:
One Time Setup
- Complete Step 1 of these instructions to create a Zoom marketplace app and connect it to Recall.
- In Zoom Marketplace, Set up Zoom event subscriptions in your app to receive meeting started and ended events. Choose Webhook method and set the event notification endpoint URL to [baseUrl]/v1/webhooks/zoom
- Create a new Webhook from the Recall.ai dashboard. Use [baseUrl]/v1/webhooks/recall/status as the endpoint. Subscribe to
bot.call_ended,bot.in_call_recording, andbot.in_call_not_recordingevents. Copy the signing secret displayed on the webhook page for setting theRECALL_SVIX_SECRETenvironment variable. - Set the Recall environment variables and Zoom event subscription variable in
.env
RECALL_API_KEY
RECALL_BASE_URL: the URL used to connect to your Recall account
RECALL_BASE_URL: The URL Recall should use to send events to this server, e.g. a static ngrok domain if running locally
# Verification secrets for webhook signature validation
# For legacy accounts (created before Dec 15, 2025), you need TWO secrets:
# - RECALL_REALTIME_SECRET: from API keys dashboard for real-time endpoints (chat, join, transcript)
# - RECALL_SVIX_SECRET: from webhooks dashboard for bot.status_change events
# For newer accounts, only RECALL_REALTIME_SECRET is needed (same for both)
# Get these from: https://[region].recall.ai/dashboard/developers/api-keys
RECALL_REALTIME_SECRET=whsec_...
RECALL_SVIX_SECRET=whsec_...
ZOOM_SECRET_TOKEN: the secret token found in your app configuration in the Zoom marketplace
Zoom Webinar One Time Setup
Recall bots can join Zoom webinars as well as meetings, but they must be added to the webinar as panelists. To enable this, create a dedicated email address for your bots. Then update this environment variable in .env
ZOOM_WEBINAR_USER_EMAIL=[bot email address]
Using LLM Engine in a Zoom Meeting
- Ensure ngrok tunnel is running (for local development) or LLM Engine is otherwise remotely accessible from the wider internet.
- Schedule a Zoom meeting and copy the full invite link, including any passcodes and meeting IDs.
- Create a
Conversationwith atranscriptchannel and provide themeetingUrlin the Zoomadapter config.
Example conversation body:
{
"name": "Should plastic water bottles be banned?",
"topicId": "{{defaultTopic}}",
"channels": [ { "name": "transcript"}],
"adapters": [ {"type": "zoom", "config" : {"meetingUrl": "{{ZOOM_MEETING_URL}}"}}]
}
NOTE: A unique Zoom meeting URL can only be associated with one active Conversation
Zoom Webinars
You must add the bot as a panelist when scheduling a webinar in order to allow recording. Invite the bot to the webinar as a panelist using the email address you created in the one-time setup. Be sure to use the specific Zoom invite link sent to the panelist bot as the meetingUrl. You can get this link by copying the invitation when you add the panelist. If your webinar requires registration, the bot user does NOT have to register.
Note: Webinar participants in a Zoom session cannot DM a single panelist, so agents that interact through DMs in Zoom meetings will not function the same in a webinar.
Data Retention
By default, Zoom meeting recordings are retained on the Recall server for one hour after the meeting. You can specify a different retention policy in your adapter config. Set retention to null for zero data retention (but note, this will impact your ability to debug Recall issues). Otherwise, see Recall documentation for supported options.
Example setting data retention to four hours:
{
"name": "Should plastic water bottles be banned?",
"topicId": "{{defaultTopic}}",
"channels": [ { "name": "transcript"}],
"adapters": [ {"type": "zoom", "config" : {"meetingUrl": "{{ZOOM_MEETING_URL}}", "retention": {"type": "timed",hours: 4}}, "audioChannels": [{"name": "transcript"}]}]
}
- Start your Zoom meeting. After a minute or two, LLM Engine should join the meeting and ask for recording permission.
- Grant permission to record and real-time transcription should start.
Enabling Direct Messages
If you wish to enable direct messages between agents and users, you must set the enableDMs": ["agents"] property during Conversation creation. You must also specify a dmChannel in the Adapter configuration for each agent that should receive DMs.
{
"name": "Should plastic water bottles be banned?",
"topicId": "{{defaultTopic}}",
"enableDMs": ["agents"]
"channels": [ { "name": "transcript"}],
"adapters": [ {"type": "zoom", "config" : {"meetingUrl": "{{ZOOM_MEETING_URL}}"},
"dmChannels": [{"direct": true, "agent": "eventAssistant", "direction": "both"}],
"audioChannels": [{"name": "transcript"}]}]
}
If you do not need transcription, remove the transcript channel from the configuration.