Description
We used the given zoom bot example (github → /zoom/meetingsdk-web-bot-sample/tree/main) to make a bot app.
We have:
- set up auth endpoint (github → /zoom/meetingsdk-auth-endpoint-sample) with our Meeting SDK credentials
- created a zoom meeting with default configuration (no account-level meeting configs changed) on the developers account zoom profile, retrieved its url
- set up the bot with our Meeting SDK credentials and meeting url
- started the meeting and bot app
- got the bot connected to the meeting
When the bot was in the meeting, it tried to invoke SDK method ZoomMtg.mediaCapturePermission
in a bot-driver web browser. But no recording indication (a modal “this meeting is being recorded” and appropriate voice prompt) happened.
We have noticed the error log in the console of the bot’s browser and a modal “Permission needed from Meeting Host”.
Then we tried to disable ZoomMtg.mediaCapturePermission call and to call directly ZoomMtg.mediaCapture({ record: "start" });
instead, but observed the same behavior.
Browser Console Error
The error that’s being returned on ZoomMtg.mediaCapturePermission
method call:
{
method: "mediaCapturePermission"
erroCode: 1
errorMessage: "not support grant local record permissin"
result : null
status: false
}
Which Web Meeting SDK version?
We tried 2.15.2 and prior versions containing mediaCapturePermission
methods.
Additional context
Similar issue is described in this topic: Web Meeting SDK MediaCapturePermission not working
Our troubleshooting
After experimenting with different meeting configurations, we found, that bot enables recording indication with same SDK methods without any error, if we:
- enable an option “Automatically record meeting on the local computer” for the Free zoom profile (with corresponding Meeting SDK zoom app creds on developer account for it)
- enable an option “Automatically record meeting” for the Paid zoom profile (with corresponding Meeting SDK zoom app creds on developer account for it)
Found workaround
Since this option requires manual setting of this option from our users for each meeting, we kept looking for alternatives and found one.
We found an recordingToken
argument in method ZoomMtg.join
that gives permission for recording for the meetings for which we can obtain the local recording token via REST API method*(developers zoom us → /docs/api/rest/reference/zoom-api/methods/#operation/meetingLocalRecordingJoinToken)*.
So, we introduced an extra zoom app of Server-to-Server OAuth type and implemented the usage flow:
- Obtain access token via REST API method (developers zoom us → /docs/internal-apps/s2s-oauth/) with Server-to-Server app creds
- Using access token and meeting_id, retrieve local recording token via REST API method*(developers zoom us → /docs/api/rest/reference/zoom-api/methods/#operation/meetingLocalRecordingJoinToken)*
- In bot:
- Set local recording token value to
recordingToken
during callingZoomMtg.join
- perform same recording method calls as earlier:
ZoomMtg.mediaCapturePermission
, thenZoomMtg.mediaCapture
- Set local recording token value to
Of course, both apps are connected to developer accounts, so we could test them without publishing.
With such implementation we could make recording indication work for meeting with any option of “automatic recording”, even when this option is not enabled, without any errors.
However, this workaround is forcing us to use two Zoom apps to make bot properly working. So we’d need to verify and publish both of them and ask users to add Server-To-Server OAuth app and consent appropriate permissions that may look complicated and confusing for users.
Would be great to find a solution that would allow us to use only the Meeting SDK app for correct recording indication.