Add customer_key property to ZoomMtg.join() and webhook notifications

Is your feature request related to a problem? Please describe.

We have a system that connects interpreters with translation requestors and have recently added Zoom integration using WebHook-enabled Zoom Marketplace App and Zoom SDK. The workflow looks like this:

  1. A requestor user of our system starts a Zoom meeting and sends a meeting invitation email to a specific email address that belongs to our system. This email address is unique and is associated with specific translation parameters (from and to languages, etc).

  2. Our system receives Zoom invitation and parses it.

  3. Our system finds matching online interpreters and notifies them about a new translation request from language L1 to L2.

  4. One of the matching interpreters in our system receives a notification and accepts the translation request.

  5. Our system generates a meeting joining link for that interpreter. The link looks like this:

/meeting?username={Base64Encode(username)}&email={Base64Encode(userEmail)}&role=0&mn={meetingNumber}&pwd={password}&signature={signature}&apiKey={apiKey}&meetingEnd=/meetingend.html

When interpreter opens it, he is joined the meeting. We are using ZoomMtg.join(…) and passing all the data from the query string as described in Zoom Web SDK docs here.

A username our app generates for the joining link above always looks like this: “John 123456 (Spanish Interpreter)”, or “{FirstName} {OurId} ({Language} Interpreter)”.

  1. When interpreter joins Zoom meeting, Zoom sends a WebHook notification to our system. At this point, we expect to receive a “meeting.participant_joined” webhook with participant.user_name equal to “John 123456 (Spanish Interpreter)” so that we can parse it, find, and update user with Id = 123456 in our system.

The problem with this workflow is that client can enable HIPAA BAA Security setting on their Zoom account that prevents Zoom from sharing attendee names and emails. So, if username is not present due to this security setting, our marketplace app will not be able to find user in our system and to do the required processing on our side.

We need a way to reliably pass user ID to Zoom and receive it back from Zoom WebHook. At this point we use username for this purpose but turns out it’s unreliable.

Describe the solution you’d like

Add a new customer_key parameter to ZoomMtg.join() API function specifically to differentiate participants who were joined using Web SDK. It might be a simple string tag that will be sent back to us in the participant_joined WebHook payload, so that we can figure out that it’s the user we need to update in our system. For regular Zoom users joining from the web or native app, this parameter will be empty. Attendee usernames ad emails will always be hidden as well if HIPAA BAA Security setting is enabled.