How to identify users using SDK during live meetings

Meeting SDK Type and Version
We are using linux meeting SDK, version 5.16.1

Hi team, we have implemented a bot using the meeting SDK that joins our user’s meetings, subscribes to raw audio, and transcribes the audio in realtime. For this purpose, we currently associate all the user information against the user name that we get using the IUserInfo->GetUserName() method. But this approach doesn’t scale well as users can join from conference rooms, and multiple participants in the meeting may have same name. We do have API access via the zoom admin OAuth, and hence can use zoom APIs for this purpose.

We are exploring options to get the email info of the participants from a live meeting which our bot has joined. These are the following approaches that we figured, and wanted to check with the community on how they solve similar use-cases -

  1. Subscribe to zoom webhook events (specifically meeting:participant_joined), and then cross match the participant_user_id with the persistent_id that we get back from the meeting SDK: IUserInfo->GetPersistentId(). Wanted to check which of the id from the webhook event payload would match the id that we get back in meeting SDK for participants.
    This approach has some drawbacks like we would receive webhook events for all meetings irrespective of whether our bot has joined the meeting or not.

  2. Use ListMeetingParticipants API to get the same information as the webhook event but this API is only available for Business or higher plans.

  3. Receive callbacks for onUserJoin event in the meeting SDK and use some other API to cross match the user_id from the meeting SDK with the zoom user.

Note that we also want to be able to identify external participant emails who have been invited to the meeting using calendar (Google or Outlook).
Thanks in advance!

1 Like

Hey @harsh3 ,

This is a bit of a tricky one. As you’ve deduced, the emails of users external to your Zoom account aren’t exposed, and so you need a way to map a user ID to their email. You can get the user_id in several ways, but the key here is actually mapping that ID to an email.

There a few ways to go about this.

1. OAuth permission

The first way involves getting access to the user:read scope for the user by having the user install your app via OAuth. Then, you can use the Get a User endpoint to map the user ID to their email.

In practice, this means adding this scope to your Meeting SDK App and directing the user through an OAuth flow to receive a token with the necessary permissions.

The obvious downside here is that this would require every participant in the call to provide this permission by going through the OAuth flow.

At , we have an API and managed infrastructure for meeting bots, and use a similar mechanism in our Zoom OAuth integration.

2. Meeting Registration

Another potential solution here is to leverage meeting registration.

When users register, you’ll have access to the registrant_id (e.g. from the participant_joined webhook).

Then you can then use the Get a Meeting Registrant endpoint to fetch their email.


A final alternative is to use instead.

It’s a simple 3rd party API that lets you use meeting bots to get raw audio/video from meetings without you needing to spend months to build, scale and maintain these bots.

We have a calendar integration with Google Calendar and Microsoft Outlook that ties the meeting data to a user’s calendar, making it simple to map a given meeting participant’s data to their email.

Let me know if you have any questions!

Thanks for the detailed explanation @amanda-recallai!

I understood #2, however I’m not sure if we would be able to apply meeting registration for the meetings of our customers.
However, for #1 and for Recall, how does it map the user’s id from the meeting SDK? (For the linux SDK there are two different user ids that we can get back for a meeting - user_id and persistent_id).

GetUserId() returns an ID for the user that is only valid for the duration of the meeting.

GetPersistentId() returns a persistent ID for the user, and so you should use this ID to resolve a user across all of their meetings/to their specific user info.