Description
We are experiencing an issue where one participant successfully joins a Zoom Video SDK session, while another participant attempting to join the same session receives a JOIN_MEETING_FAILED error.
Scenario:
- Participant A (Web/Browser): Joins the session successfully
- Participant B (Desktop/Electron): Fails to join with
JOIN_MEETING_FAILEDerror after 3 retry attempts
This issue occurs intermittently.
Session that agent (web) successfully joined:
- Session ID:
MekJFqDjQyGIJ8kYHHyMMg== - Session Topic:
d3087f56-7b6c-4
Browser Console Error
{
"type": "JOIN_MEETING_FAILED",
"errorCode": 200,
"reason": "connection error"
}
Full error from logs:
[ERROR] [desktop]: ZoomSDKManager :: setupVideoCall :: Attempt 2/3 failed
{"type":"JOIN_MEETING_FAILED","errorCode":200,"reason":"connection error"}
[ERROR] [desktop]: ZoomSDKManager :: setupVideoCall :: Attempt 3/3 failed
{"type":"JOIN_MEETING_FAILED","errorCode":200,"reason":"connection error"}
[ERROR] [desktop]: ZoomSDKManager :: setupVideoCall :: All retries exhausted
{"type":"JOIN_MEETING_FAILED","errorCode":200,"reason":"connection error"}
Which Web Video SDK version?
Video SDK Code Snippets
Client initialization and join (Desktop - failing):
this.zoomClient = ZoomVideo.createClient();
await this.zoomClient.init('en-US', 'CDN', {
stayAwake: true
});
// This call fails with JOIN_MEETING_FAILED
await this.zoomClient.join(session, signature, agentName);
Cleanup between calls:
async forceCleanup(listeners) {
this.zoomClient?.off('peer-video-state-change', listeners.peerVideoListener);
this.zoomClient?.off('user-updated', listeners.onUserUpdated);
this.zoomClient?.off('user-removed', listeners.onUserRemoved);
await this.zoomClient?.leave();
ZoomVideo.destroyClient();
this.zoomClient = null;
this.stream = null;
}
Troubleshooting Routes
Implemented retry logic with 3 attempts and 1000ms delay between attempts
Called ZoomVideo.destroyClient()between each call session
Called zoomClient.leave()before destroying client
Removed all event listeners before cleanup
Verified the JWT signature is valid (same signature works for web client)
Verified the session name is correct (same session joined successfully by web client)
Confirmed network connectivity is stable (desktop is online, can make API calls)
Device (please complete the following information)
Failing Device (Desktop/Electron):
- Device: Windows PC
- OS: Windows 10.0.26200
- Browser: Chromium (Electron)
- Browser Version: 140.0.7339.133
Working Device (Web):
- Device: Windows PC
- OS: Windows 19.0.0
- Browser: Google Chrome
- Browser Version: 143.0.7499.193
Additional Context
- Timestamp of failure: 2026-01-21 14:09:27 - 14:09:30 UTC
- Session ID (web successfully joined):
MekJFqDjQyGIJ8kYHHyMMg== - Session topic:
d3087f56-7b6c-4
Key observation: Both participants are using the same session and JWT signature. The web client joins successfully at 14:09:29.617 UTC, while the desktop client fails at 14:09:29.763 UTC with the same session. This suggests the session is valid and the issue is specific to the desktop/Electron client after consecutive calls.
Questions:
- What does
errorCode: 200withreason: "connection error"indicate? - Is there a recommended cooldown period between destroying and recreating the Zoom client?
- Are there any known issues with rapid consecutive session joins in Electron environments?
- Is there internal SDK state that persists after
destroyClient()that could cause this?
