Description
@gianni.zoom
Hi, we has been requested by Zoom review team to post our problem in the devforum to solve it. We have almost exactly the problem described in this thread: https://devforum.zoom.us/t/sporadic-joining-meeting-timeout-fail-to-join-meeting-no-error-detail-error-callback-not-called/93507.
The only difference is that for us, the error is not random and sporadic, it’s happening every time a external Zoom account try to join the meeting as host. However, there is no problem when we use our own account and managed sub-accounts, the problem is only with external accounts.
From 2022 until the last month, we had a published OAuth app in the marketplace for the API calls to create / delete meeting and ZAK retrieval, and an unpublished SDK app for an integrated Client View to connect the created meeting as host / attendees.
That was the way of doing this flow in 2022, a standalone OAuth app that need to be in the marketplace, and a standalone SDK app that don’t need to be in the marketplace.
That setup was working well until a month ago, when external users started to see the same problem of that thread. When the host join in the Client View to the meeting created by the API with the signature and ZAK, that dialog prompts: Joining meeting timeout. Fail to join the meeting. As same as that thread, there is no error code presented, or error callbacks fired.
When it stopped working, we saw that the old SDK app now it’s called Meeting SDK app, and thought that maybe we need to update it. In the developer marketplace when accessing the Meeting SDK app, a dialog was prompted to us requesting to update it to the new version with OAuth 2.0 integrated. So now we have both, SDK Key & SDK Secret, and Client ID & Client secret, all in the same Meeting SDK app.
When we saw this, we thought that the problem was that the old setup (published OAuth app + unpublished SDK app) now need to be done only with the Meeting SDK app, that integrates both functionalities. So we adapt all our keys and integration to the new Meeting SDK app, and start the review process to publish to the marketplace.
However, the same problem is happening with the Meeting SDK to the review team (review team uses accounts that can bypass the external account limit for unpublished apps, so that it’s not the problem), and we need to resolve the issue before publishing the Meeting SDK and remove the old OAuth app from the marketplace.
We are a health app, and have hundred of users and thousand of patients affected by this issue, and we have hospitals too, so is critical to resolve it. In the meantime we are including their accounts as sub-accounts inside our developer account, but this is patch for the situation, not a real fix.
As we didn’t changed anything before it stopped working, and the problem is exactly the same no matter the old published OAuth+SDK or the new Meeting SDK (is working well with own account, not for external accounts), we have started to think that Zoom has changed something in the SDK / Meeting SDK that is conflicting with external accounts, and we cannot resolve it from our side.
According to Zoom documentation, we still need to use the SDK Key & SDK Secret in the signature generation. If we try to use the new Client ID / Client Secret in the Meeting SDK, a error is received with invalid signature and cannot be used with or without our own account, so it’s obvious that we need to use the SDK key & SDK Secret.
We really need support with this.
Browser Console Error
No errors shown. Only dialog: Joining Meeting Timeout. Fail to join the meeting.
By inspecting the networking, the only error thing we see is the last message received by the WebSocket connection that Zoom opens:
{
"body": {
"conID": "DC4824C5-8C21-080E-2CF2-F598250D9D8B",
"error_desc": "FailedFromWeb, RESULT_UNKOWN_ERROR, 200",
"mn": "75320454820",
"res": 200,
"svcUrl": "zoomiad20624714233rwg.iad.zoom.us"
},
"evt": 4098,
"seq": 1
}
Which Web Meeting SDK version?
Latest, 2.16.0. Same happens with 2.9.0 and 2.15.2.
Meeting SDK Code Snippets
To generate SDK Signature:
let iat = Math.round(new Date().getTime() / 1000) - 60,
expirationTime = iat + (60 * 60 * 24);
const oHeader = { alg: 'HS256', typ: 'JWT' };
const oPayload = {
sdkKey: SDK_PUBLIC_KEY,
mn: MEETING_NUMBER_FROM_API_CALL,
role: ROLE_1_FOR_HOST_0_FOR_ATTENDEE,
iat: iat,
exp: expirationTime,
appKey: SDK_PUBLIC_KEY,
tokenExp: expirationTime
};
const sHeader = JSON.stringify(oHeader);
const sPayload = JSON.stringify(oPayload);
const signature = KJUR.jws.JWS.sign('HS256', sHeader, sPayload, SDK_SECRET_KEY);
To create Meeting SDK:
axios.post('https://api.zoom.us/v2/users/me/meetings', {
"topic": "Optonet",
"type": 1,
"password": MEETING_PASSWORD, //max length 10 chars and only alphanumeric and @ - _ *
"default_password": false,
"settings": {
"host_video": true,
"participant_video": true,
"cn_meeting": false,
"in_meeting": false,
"mute_upon_entry": false,
"watermark": false,
"use_pmi": false,
"approval_type": 2,
"join_before_host": false,
"jbh_time": 0,
"audio": "voip",
"auto_recording": "none",
"close_registration": false,
"waiting_room": false,
"contact_name": USER_NAME,
"contact_email": USER_EMAIL,
"registrants_email_notification": false,
"registrants_confirmation_email": false,
"meeting_authentication": false,
"additional_data_center_regions": "US",
"show_share_button": false,
"allow_multiple_devices": true,
"encryption_type": "enhanced_encryption",
"focus_mode": true,
"enforce_login": false
}
}, {
timeout: 5000,
responseType: 'json',
headers: {
'Authorization': 'Bearer ' + ACCESS_TOKEN,
'Content-Type': 'application/json'
}
});
To retrieve Zak token:
axios.get('https://api.zoom.us/v2/users/me/zak', {
timeout: 5000,
responseType: 'json',
headers: {
'Authorization': 'Bearer ' + ACCESS_TOKEN
}
});
To init Zoom and Join as host from Client View:
const initAndJoinZoom = (signatureResponse)=>{
ZoomMtg.init({
debug: false,
showMeetingHeader: true,
disableInvite: false,
disableCallOut: true,
disableRecord: false,
disableJoinAudio: false,
audioPanelAlwaysOpen: false,
showPureSharingContent: false,
isSupportAV: true,
isSupportChat: true,
isSupportQA: true,
isSupportPolling: true,
isSupportBreakout: true,
isSupportCC: true,
screenShare: true,
videoDrag: false,
sharingMode: 'both',
videoHeader: true,
isLockBottom: true,
isSupportNonverbal: true,
isShowJoiningErrorDialog: true,
disablePreview: true,
enableFullHD: true,
enableHD: true,
leaveUrl: location.origin + '/?zoomLeave=true',
disableCORP: false,
meetingInfo: [
'topic',
'host',
'participant',
'dc',
'enctype'
],
disableVoIP: false,
disableReport: false,
success: (success) => {
console.log(success);
ZoomMtg.join({
signature: signatureResponse.zoomWebSignature,
sdkKey: signatureResponse.sdkKey,
zak: signatureResponse.zak,
userEmail: '',
meetingNumber: signatureResponse.meetingNumber,
userName: USER_NAME,
passWord: signatureResponse.meetingPwd,
success: (success) => {
console.log(success);
//Rest of code
},
error: (error) => {
console.log(error);
if(error && error.errorCode == 3000)
this.props.actions.showSnackbar('Your Zoom account have reached the concurrent meetings limit. You need to finish your other meetings before starting a new one, or upgrade your Zoom subscription to increase your limits.');
this.endMeeting();
}
});
},
error: (error) => {
console.log(error)
this.endMeeting();
}
});
}
To Reproduce
- Authorize external Zoom user account with OAuth.
- Create the meeting and retrieve the user ZAK token with the above API calls. Then response to frontend with the created meeting number and password, user ZAK token, sdk signature and public sdk key.
- Init and join zoom meeting from Client Client view with the server response of step 2 by calling the above initAndJoinZoom function.
- Error dialog is shown for external accounts: Joining Meeting Timeout. Fail to join the meeting.
No matter how much times we press retry, same dialog.
Screenshots
The same dialog image as the thread link commented at the start (I cannot upload / put more than 2 links).
Troubleshooting Routes
We have tried everything from our side: decreasing IAT time by 30, 60, 300 seconds and 1 day, increasing exp time from the iat time by 1800 seconds and 1 day, removing tokenExp and appKey from signature, try with https://github.com/zoom/meetingsdk-web-sample , nothing works.
Device:
- Device: Gigabyte Z390 Aorus Pro, i7-8700K, Nvidia RTX 3090, 32GB RAM DDR4
- OS: Windows 10 x64
- Browser: Chrome 116.0.5845.142, Chrome Canary 119.0.5994.0, Firefox 115.0.2