Bug Description
When an unauthenticated (guest) participant is the first to join a Zoom RTMS meeting, all subsequent meeting.participant_joined webhook events for authenticated users will omit the email field, even though those users are logged in.
If an authenticated user joins first (before any guest participants), their email field is correctly included in the webhook event. This suggests the RTMS webhook service may be setting a meeting-level flag or metadata based on the first participant who joins, which affects how participant identity information is populated for all subsequent participants.
Language/Runtime
Python
SDK Version
1.1.0
Environment Details
- OS: Ubuntu 24.04.4 LTS
- Node.js version: v24.14.0
Steps To Reproduce
- Create a new
rtms.Client() instance and connect to a meeting.
- Have an unauthenticated (guest) participant join the meeting first.
- Then have an authenticated Zoom user join the same meeting.
- Observe the
meeting.participant_joined webhook event for the authenticated user.
- Note that the
email field is empty in the participant data.
- For comparison, join a new meeting where the authenticated user joins first (before any guest).
- Observe the
meeting.participant_joined webhook event — the email field is now correctly populated.
Expected Behavior
The meeting.participant_joined webhook event should always include the email field for authenticated Zoom users, regardless of the order in which participants join the meeting.
Actual Behavior
Case 1: Guest joins first, then authenticated user — email is MISSING:
09:56:54 - sss 123() has been joined. ← Guest, no email (expected)
09:57:10 - user1() has been joined. ← Authenticated user, but email is EMPTY (BUG!)
Webhook payload for authenticated user:
{
"event": "meeting.participant_joined",
"payload": {
"participant": {
"user_id": "xxxxx",
"user_name": "user1",
"email": ""
}
}
}
Case 2: Authenticated user joins first — email is PRESENT:
09:58:31 - user1(user1@email.com) has been joined. ← Authenticated user, email is present
Webhook payload for authenticated user:
{
"event": "meeting.participant_joined",
"payload": {
"participant": {
"user_id": "xxxxx",
"user_name": "user1",
"email": "user1@email.com"
}
}
}
Code Example
Relevant Log Output
Additional Context
- This issue is specifically triggered when an unauthenticated (guest) participant is the first to join a meeting.
- The bug affects only the authenticated user's
participant_joined event — subsequent events (e.g., on_audio, on_transcript) may still work correctly.
- Guest participants correctly have empty email fields in all cases — this is expected behavior.
- This bug prevents downstream features that rely on participant email addresses, such as transcription email notifications.
Verification
Bug Description
When an unauthenticated (guest) participant is the first to join a Zoom RTMS meeting, all subsequent
meeting.participant_joinedwebhook events for authenticated users will omit theemailfield, even though those users are logged in.If an authenticated user joins first (before any guest participants), their
emailfield is correctly included in the webhook event. This suggests the RTMS webhook service may be setting a meeting-level flag or metadata based on the first participant who joins, which affects how participant identity information is populated for all subsequent participants.Language/Runtime
Python
SDK Version
1.1.0
Environment Details
Steps To Reproduce
rtms.Client()instance and connect to a meeting.meeting.participant_joinedwebhook event for the authenticated user.emailfield is empty in the participant data.meeting.participant_joinedwebhook event — theemailfield is now correctly populated.Expected Behavior
The
meeting.participant_joinedwebhook event should always include theemailfield for authenticated Zoom users, regardless of the order in which participants join the meeting.Actual Behavior
Case 1: Guest joins first, then authenticated user — email is MISSING:
Webhook payload for authenticated user:
{ "event": "meeting.participant_joined", "payload": { "participant": { "user_id": "xxxxx", "user_name": "user1", "email": "" } } }Case 2: Authenticated user joins first — email is PRESENT:
Webhook payload for authenticated user:
{ "event": "meeting.participant_joined", "payload": { "participant": { "user_id": "xxxxx", "user_name": "user1", "email": "user1@email.com" } } }Code Example
Relevant Log Output
Additional Context
participant_joinedevent — subsequent events (e.g.,on_audio,on_transcript) may still work correctly.Verification