/

Triggers

All 9 triggers and the variables each one hands to your workflow.

A trigger's fields are available anywhere in the workflow it starts, as {{trigger_key.field}} — so the attendance flag from Meeting Ended is {{zwa_meeting_ended.attended}}.

Triggers fire for anything that happens on the connected Zoom account, not only for calls this app created. That is deliberate, and it is what catches a rep booking directly in Zoom. It also means two of them can start a loop if you are not careful — see the note on Meeting Created.

Choosing a filter

The builder's trigger filters offer String, Select, Multi-select and Dynamic field types. None of them is a boolean. A filter comparing against a true/false field compares the text "false" to a real false and matches nothing — which, on a trigger, is indistinguishable from the trigger never firing.

Where that matters, there is a string spelling of the same fact: participantRole is host or guest, and it is the one to filter on. Use the true/false fields in workflow conditions, where they behave normally.

Meeting Created

A meeting appeared on the connected Zoom account, including one booked directly in Zoom.

zwa_meeting_created

Variables

Variable Type What it is
meetingId text Zoom's numeric id.
meetingUuid text The per-occurrence id. A recurring meeting reuses meetingId but not this.
topic text The title.
startTime text When it starts.
scheduledMinutes number Booked length.
timezone text The meeting's timezone.
joinUrl text The attendee link.
hostEmail text Which Zoom user hosts it.
createdByThisApp true/false True when this app created it. The field that prevents a loop.
contactId text The contact it was created for, when we created it. Empty otherwise.

Worth knowing

  • Read before wiring this up. It fires for meetings the Create Meeting action makes, so a workflow triggered by Meeting Created whose action is Create Meeting will create a meeting, hear about it, and create another, indefinitely. Gate the workflow on createdByThisApp being false.
  • The event is reported rather than filtered because a customer may legitimately want to react to meetings the app created, and swallowing those silently would make that impossible with no way to tell why.
  • Its real value is the meetings you did not create: a rep booking directly in Zoom, or a Zoom scheduler outside the CRM. Those never reach the CRM otherwise.

Meeting Started

The host opened the call.

zwa_meeting_started

Variables

Variable Type What it is
meetingId text Zoom's numeric id.
meetingUuid text The per-occurrence id.
topic text The title.
startedAt text When Zoom says the host opened it.
scheduledStart text When it was booked to start, from our own record.
minutesLate number Minutes after the booked start that the host opened it. Negative when early, 0 when the meeting was not one of ours.
scheduledMinutes number Booked length.
hostEmail text Which Zoom user hosts it.
contactId text The contact, when known.
joinUrl text The attendee link.

Worth knowing

  • Fires once per occurrence. A host who leaves and rejoins does not re-fire it.
  • A late host is a real operational fact and nothing else in either platform reports it.

Meeting Updated

A meeting was rescheduled or edited, including in Zoom.

zwa_meeting_updated

Variables

Variable Type What it is
meetingId text Zoom's numeric id.
meetingUuid text The per-occurrence id.
topic text The new title.
startTime text The new start.
scheduledMinutes number The new length.
timezone text The new timezone.
joinUrl text The attendee link.
changedFields text Comma-joined names of what changed, such as start_time,duration.
timeChanged true/false True when the start time moved. The change customers actually act on.
previousStartTime text The old start, or empty when Zoom sent no previous state.
hostEmail text Which Zoom user hosts it.
contactId text The contact, when known.

Worth knowing

  • Branch on timeChanged rather than on the field list. changedFields is empty when Zoom sends no previous state, which is not the same as nothing having changed.
  • This is the trigger that catches a host moving a call in Zoom without telling the CRM. Use it to text the client on a time change and stay quiet for a renamed topic.

Meeting Ended

The call finished, with who joined and for how long.

zwa_meeting_ended

Variables

Variable Type What it is
meetingId text Zoom's numeric id.
meetingUuid text The per-occurrence id.
topic text The title.
startedAt text When it began.
endedAt text When it finished.
scheduledMinutes number What it was booked for.
actualMinutes number How long it actually ran, computed from the start and end times.
attended true/false True if anyone joined at all. The blunt instrument, and often enough.
attendedMinutes number The longest single attendance.
attendeeCount number Distinct people who joined. Rejoins after a dropped connection count once.
attendeeEmails text Comma-joined emails of everyone who joined. Empty string when nobody did, never null.
hostEmail text Which Zoom user hosted it, for routing follow-up on a round-robin team.
contactId text The contact the meeting was created for, or empty.
joinUrl text The attendee link.

Worth knowing

  • Three views of the same events, so the strictness lives in your workflow condition rather than in our contract: branch on attended for 'did anyone show', on attendedMinutes for 'did they stay', on attendeeCount for 'was the group big enough'.
  • actualMinutes is computed from the start and end times, never from Zoom's own duration field — that one reports the scheduled length and arrives as 0 for instant meetings, which would show every meeting as zero-length.
  • attendedMinutes is exact only when the Zoom app subscribes to participant_left. Without that there is no leave time and the figure is computed to the end of the meeting, which reads as 'stayed to the end' for someone who dropped off early.

Participant Joined

Someone entered the call, while it is still running.

zwa_participant_joined

Variables

Variable Type What it is
meetingId text Zoom's numeric id.
meetingUuid text The per-occurrence id.
topic text The title.
participantName text Whatever name they typed into Zoom. Often not their CRM name.
participantEmail text Their Zoom email, or empty. Empty far more often than expected — Zoom reports it only for signed-in participants.
participantUuid text Stable per person across the meeting.
isHost true/false True when the person joining is the host. Use this in conditions.
participantRole text host or guest. The same fact as a string, because trigger filters cannot express a boolean.
joinedAt text When they joined.
scheduledStart text When the meeting was booked to start.
minutesLate number Minutes after the booked start that they joined. Negative when early.
hostEmail text Which Zoom user hosts it.
contactId text The contact, when known.
joinUrl text The attendee link.

Worth knowing

  • Use participantRole in a trigger filter and isHost in a condition. The builder's filters offer String, Select, Multi-select and Dynamic — no boolean — so a filter on isHost compares the text "false" against a real false and matches nothing, which on a trigger looks exactly like the trigger not firing.
  • Match on the contact the meeting was created for, not on participantEmail. A guest joining from a link is anonymous to Zoom.
  • Fires once per join, and a reconnect after a dropped call is a second join. A workflow that must run only once should gate on the contact.
  • This is what makes 'text the rep if the client has been waiting five minutes' possible — minutesLate is computed from our own record of the booked start, and nothing else in either platform has both halves.

Webinar Created

A webinar was scheduled on the account.

zwa_webinar_created A paid plan with the webinar add-on

Variables

Variable Type What it is
webinarId text Zoom's numeric id.
webinarUuid text The per-occurrence id.
topic text The title.
startTime text When it starts.
scheduledMinutes number Booked length.
timezone text The webinar's timezone.
joinUrl text The attendee link.
registrationUrl text The public sign-up page.
hostEmail text Which Zoom user hosts it.
createdByThisApp true/false True when this app created it.
contactId text The contact, when we created it.

Worth knowing

  • Carries the same loop hazard as Meeting Created. Gate on createdByThisApp being false if the workflow also runs Create Webinar.

Webinar Updated

A webinar was rescheduled or edited.

zwa_webinar_updated A paid plan with the webinar add-on

Variables

Variable Type What it is
webinarId text Zoom's numeric id.
webinarUuid text The per-occurrence id.
topic text The new title.
startTime text The new start.
scheduledMinutes number The new length.
timezone text The new timezone.
joinUrl text The attendee link.
registrationUrl text The sign-up page.
changedFields text Comma-joined names of what changed.
timeChanged true/false True when the start time moved.
previousStartTime text The old start, or empty.
hostEmail text Which Zoom user hosts it.
contactId text The contact, when known.

Worth knowing

  • The higher-stakes half of the pair. A moved webinar has to be communicated to everyone registered, and Zoom's own notification does not reach them through your CRM.

Recording Completed

A cloud recording is ready.

zwa_recording_completed

Variables

Variable Type What it is
meetingId text Zoom's numeric id.
meetingUuid text The per-occurrence id.
topic text The title.
startTime text When the meeting started.
recordingMinutes number Length of the recording, which is not the length of the meeting.
shareUrl text Send this one. The viewer-facing page.
downloadUrl text Requires an access token. Not a link to email.
password text The recording's own passcode, separate from the meeting's. Empty when the account does not require one.
fileCount number How many files Zoom produced — video, audio and chat count separately.
fileTypes text Comma-joined, such as MP4,M4A,CHAT.
hostEmail text Which Zoom user hosted it.
contactId text The contact, when known.

Worth knowing

  • shareUrl and downloadUrl are the single easiest thing to get wrong here. downloadUrl is not a public link — fetching it needs an access token, so a recipient gets a login prompt at best. It exists for workflows piping recordings into their own storage.
  • When password is set, a share link sent without it is useless.

Transcript Completed

The audio transcript is ready.

zwa_transcript_completed

Variables

Variable Type What it is
meetingId text Zoom's numeric id.
meetingUuid text The per-occurrence id.
topic text The title.
startTime text When the meeting started.
transcriptUrl text Token-authenticated. For piping into your own tooling, not for sending.
fileType text VTT, usually.
shareUrl text The viewer-facing page.
hostEmail text Which Zoom user hosted it.
contactId text The contact, when known.

Worth knowing

  • Separate from Recording Completed because Zoom finishes it separately, often minutes later. A workflow that waits for the recording and expects a transcript alongside it gets an empty field.