Skip to navigation

Calendar Emails on Participants

View as Markdown

Calendar emails on participants

When a bot joins a meeting that is on a calendar connected to your MeetStream account, each person the bot actually saw can be labeled with the email address from that calendar invite. The field is calendar_email.

Meeting platforms do not give the bot other participants’ account emails. participant.email stays whatever the platform reported (usually null). calendar_email is a separate field, filled from your calendar after the meeting.

Where to read it

After the bot is done, calendar_email is on every observed participant in:

  • GET /bots/{bot_id}/get_participants
  • participants.json
  • participant_events.json (on the participant object of each event)
[
{
"deviceId": "abc123def456",
"fullName": "Jane Smith",
"displayName": "Jane",
"calendar_email": "jane.smith@acme.com"
},
{
"deviceId": "xyz789",
"fullName": "Walk-in Guest",
"displayName": "Walk-in Guest",
"calendar_email": null
}
]

Real-time participant_events.join webhooks sent while the meeting is still running do not include calendar_email. Read it after post-call processing has finished.

What is matched

MeetStream only labels people the bot observed. Someone who was invited but never joined is not added. Someone who joined but was not invited stays in the file with calendar_email: null.

The name taken from the meeting, in order, is fullName, then displayName, then name. That name is compared with each invitee on the calendar event, including the organizer.

CalendarEmailName used for matching
GoogleemaildisplayName, when the invite has one
OutlookemailAddress.addressemailAddress.name

The local part of the email is also used as a name (jane.smith@acme.com can match “Jane Smith”) so an invite that has an address and no display name can still match.

These are never used as invitees:

  • Meeting rooms and other calendar resources
  • The bot’s own tile (the bot username is never given an email)

The same person rejoining on another device keeps the same calendar_email. One invitee email is given to at most one distinct name in the meeting.

Which calendar event

  1. The event the bot was scheduled from, when that event still belongs to your account.
  2. Otherwise, if the bot joined by meeting link, the event on your connected calendar with the same link whose start time is closest to when the bot joined. For Zoom, the link is compared by meeting id, so extra query parameters do not matter.

An event on another MeetStream account is never used. If no event is found, or the event was removed before processing, every calendar_email is null.

How a name becomes an email

Names are compared after light cleanup: case and accents are ignored, digits are dropped, and tags such as (Guest) or [Acme] are removed. Word order does not matter (Doe, Jane and Jane Doe are the same name).

An email is written only when one invitee is a clear match and is clearly ahead of every other invitee. Otherwise the field is null.

A match is clear in these cases:

What the meeting showsWhat the invite hasResult
The invitee’s email addressjane.smith@acme.comjane.smith@acme.com
The same words as the invite display nameJane Doethat invitee’s email
First name and last name, including a short first name or nicknameInvite says Robert Smith, meeting shows Bob Smiththat invitee’s email
A name built from the emailjane.doe@acme.com or jdoe@acme.comthat invitee’s email
A close spelling of the display nameJonathan Smithson on the invite, Jonathon Smithson in the meetingthat invitee’s email
A first name or short form onlyChris and the only fitting invitee is christopher@acme.com, or Sam Lee and the only fitting invitee is samantha.lee@acme.comthat invitee’s email

Short forms have to be at least three letters and have to be the start of the name (Chris matches Christopher; Al does not match Alexandra). Common English nicknames that are not a prefix are also recognized, such as Mike for Michael, Bob for Robert, and Bill for William.

A first-name-only match is kept only when no other invitee fits as well. Dan stays null when both daniel@acme.com and danielle@acme.com are invited. Mike stays null when both Michael Foo and Mike Bar are invited.

If two different names in the meeting both point at the same invitee, only the stronger name gets the email. Jane Doe wins over a bare Jane when the invite has a single Jane Doe.

When calendar_email stays null

  • The person was not on the invite.
  • The meeting name does not clearly match any invitee.
  • Two invitees match about equally well.
  • The only clue is a one- or two-letter fragment.
  • The calendar event has no display name and the email local part does not resemble the meeting name.
  • There is no calendar event for this bot.
  • The row is the bot itself, a room, or a resource.

How to invite so the match succeeds

Put a display name on the guest when you add them. The meeting name is compared with that display name first, and with the email local part when no display name was saved.

Google Calendar often stores only the email when a guest is added by typing an address. It does not fill in that person’s Google or Meet profile name later. Set the display name on the invite itself:

{ "email": "jane.smith@acme.com", "displayName": "Jane Smith" }

Outlook invites already carry emailAddress.name next to emailAddress.address. The organizer is included, so the organizer’s meeting name can match the organizer address.

A group address such as team@acme.com matches only if someone in the meeting is named like that address. It does not expand into the group’s members.

What this does not change

  • participant.email is still the email from the meeting platform, not the calendar.
  • People who never joined are not inserted into the participant list.
  • Emails come only from the calendar connected to your account and are returned only with that bot’s participant data. They are removed when that bot’s data is deleted.