# Zoom
Pipedream provides a serverless programming platform for building event-driven workflows that integrate apps. Pipedream comes with prebuilt actions for interacting with the Zoom API, and allows you to listen for Zoom events in your account and trigger code when they happen.
Pipedream is fully programmable - you can write any Node.js code to control your workflows - but also fully-managed: Pipedream runs your code, so you don't have to manage any infrastructure and can focus on your workflow's logic.
# Overview
Pipedream workflows allow you to run any Node.js code that connects to the Zoom API. Just create a new workflow, then add prebuilt Zoom actions (create a meeting, send a chat message, etc.) or write your own Node code. These workflows can be triggered by HTTP requests, timers, email, or on any app-based event (new tweets, a Github PR, Zoom events, etc).
Pipedream event sources expose real-time event streams for any Zoom event - just connect your Zoom account, and get an event stream. Event sources can trigger workflows, running custom code each time an event occurs in Zoom. For example, to run a workflow each time a meeting ends, you can create a Meeting Ended source. This source emits an event as soon as a meeting ends in your account, which can trigger a workflow that pulls participant stats, emails those participants a survey, or anything else you'd like.
You can also subscribe to a private SSE stream that lets you listen for these events in your own application, in real time. This allows you to use Pipedream to host the event source, which can trigger existing code in your own infrastructure (vs. a Pipedream workflow).
# Zoom vs. Zoom Admin app
Zoom users can be classified into two groups: non-admins and admins. Admins have account-level permissions that users do not, and Zoom has corresponding admin-level scopes that aren't relevant for normal users. Therefore, Pipedream exposes two apps — Zoom and Zoom Admin — to serve the two groups.
In the Zoom Marketplace, these apps are named Pipedream, and Pipedream for Zoom Admins, respectively.
Non-admins have permissions to manage standard Zoom resources in their account: meetings, webinars, recordings, and more. If you're a non-admin, you'll want to use the Zoom app.
Zoom admins have permissions to manage account-level resources, like users and reports. They can also manage webinars and meetings across their organization. If you're an admin and need to manage these resources via API, you'll want to use the Zoom Admin app.
The Zoom API docs on permissions provide detailed information on these permissions and their associated OAuth scopes.
# Connecting to Zoom from Pipedream
- First, sign up for Pipedream at https://pipedream.com.
- Visit https://pipedream.com/accounts.
- Click the button labeled Click Here to Connect an App.
- Search for "Zoom" and select either Zoom or Zoom Admin (see the differences above):
This will open up a new window prompting you to authorize Pipedream's access to your Zoom account. Once you authorize access, you should see your Zoom account listed among your apps.
- Create a new workflow, add a new step, search for "Zoom" or "Zoom Admin". Once you've selected either app, you can choose to either "Run Node.js code" or select one of the prebuilt actions for performing common API operations.
- At this stage, you'll be asked to link the Zoom account you connected above, authorizing the request to the Zoom API with your credentials:
# Zoom Event Sources
Pipedream event sources expose real-time event streams for any Zoom event - just connect your Zoom account, and get an event stream.
Event sources can trigger workflows, running custom code each time an event occurs in Zoom. For example, to run a workflow each time a meeting ends, you can create a Meeting Ended source. This source emits an event as soon as a meeting ends in your account, which can trigger a workflow that pulls participant stats, emails those participants a survey, or anything else you'd like.
There are two categories of Zoom event sources:
- Event-specific sources listen for a specific Zoom event (Meeting Created, Recording Completed, etc). Event-specific sources exist only for the most common Zoom events, but you can request another source here.
- The Custom Events source allows you to listen for any event from Zoom, and even lets you listen for multiple events at the same time. For example, if you want to run a workflow on both Meeting Started and Webinar Started events, you can create a custom source that listens for them both, and use that event source as your workflow's trigger.
# Creating a Zoom event source
- Visit https://pipedream.com/sources.
- Click the Create Source button.
- In the Select an App drop-down, select either Zoom or Zoom Admin (see the difference above).
- In the Select a Source drop-down, you can either choose from the list of sources tied to a specific event (Meeting Created, Recording Completed, etc.), or create an event source that listens for any Zoom event by selecting the Zoom Custom Events or Zoom Admin Custom Events source.
# Event-specific sources
You can create event sources tied to common Zoom events, like Meeting Created and Recording Completed, by selecting one of the corresponding event sources. These event sources are built to process specific events, and emit data in a format that makes sense for the event type.
For example, the Recording Completed source lets you filter on options specific to recordings:
and it emits each recording file as its own event - that is, if you're listening for video, audio, and chat recordings, this source will emit up to 3 events for each meeting: one for each file type.
You can find the source code for each of these event sources in the PipedreamHQ/pipedream Github repo:
If you can't find the source you're looking for, you can use the Zoom Custom Events source to listen for any events from Zoom. You can also request another source here, or develop your own Zoom source and open up a pull request in the PipedreamHQ/pipedream Github repo to add that source to the Pipedream platform for anyone to use.
# Zoom Custom Events source
The Zoom Custom Events or Zoom Admin Custom Events source allows you to listen for any event from Zoom, and even lets you listen for multiple events at the same time.
For example, if you want to run a workflow on both Meeting Started and Webinar Started events, you can create a custom source that listens for them both, and use that event source as your workflow's trigger. Just create the Zoom Custom Events source and select meeting.started
and webinar.started
from the list of events in the Zoom Events drop-:down:
# List of Custom Events
Below, you'll find a full list of the events that you can listen for, with links to the corresponding Zoom docs. Some events are also only available for either the Zoom or Zoom Admin apps, which is indicated by the Zoom and Zoom Admin columns.
Event | Description | Zoom | Zoom Admin |
---|---|---|---|
account.created | New Sub Account created | ✓ | |
account.updated | An Account or a Sub Account's profile is updated | ✓ | |
account.settings_updated | An account or a Sub Account’s settings are updated | ✓ | |
account.disassociated | Sub Account Disassociated from a Master Account | ✓ | |
meeting.alert | Meeting service issue encountered | ✓ | ✓ |
meeting.created | Meeting created in my Zoom account | ✓ | |
meeting.created.by_me | Meeting created by me | ✓ | |
meeting.created.for_me | Meeting created where I'm the host | ✓ | |
meeting.updated | Meeting updated | ✓ | ✓ |
meeting.deleted | Meeting deleted in my Zoom account | ✓ | |
meeting.deleted.by_me | Meeting deleted by me | ✓ | |
meeting.deleted.for_me | Meeting deleted where I was the host | ✓ | |
meeting.started | Meeting started | ✓ | ✓ |
meeting.ended | Meeting ended | ✓ | ✓ |
meeting.registration_created | User registered for meeting | ✓ | ✓ |
meeting.registration_approved | Meeting registration approved | ✓ | ✓ |
meeting.registration_cancelled | Meeting registration cancelled | ✓ | ✓ |
meeting.registration_denied | Meeting registration denied | ✓ | ✓ |
meeting.sharing_started | A host or attendee shared their screen | ✓ | |
meeting.sharing_started.host | A host shared their screen | ✓ | |
meeting.sharing_started.participant | An attendee shared their screen | ✓ | |
meeting.sharing_ended | A host or attendee stopped sharing their screen | ✓ | |
meeting.sharing_ended.host | A host stopped sharing their screen | ✓ | |
meeting.sharing_ended.participant | An attendee stopped sharing their screen | ✓ | |
meeting.participant_jbh_joined | Attendee joined meeting before host | ✓ | ✓ |
meeting.participant_jbh_waiting | Attendee waiting for host to join meeting | ✓ | ✓ |
meeting.participant_joined | Host or attendee joined meeting | ✓ | ✓ |
meeting.participant_joined_waiting_room | Participant joined waiting room | ✓ | ✓ |
meeting.participant_admitted | Participant was admitted to meeting from waiting room | ✓ | ✓ |
meeting.participant_put_in_waiting_room | Participant placed in waiting room from meeting | ✓ | ✓ |
meeting.participant_left_waiting_room | Participant left waiting room, or was removed | ✓ | ✓ |
recording.started | Recording started | ✓ | ✓ |
recording.paused | Recording paused | ✓ | ✓ |
recording.resumed | Recording resumed | ✓ | ✓ |
recording.stopped | Recording stopped | ✓ | ✓ |
recording.completed | Recording completed | ✓ | ✓ |
recording.renamed | Recording renamed | ✓ | |
recording.renamed.by_me | Recording renamed by me | ✓ | |
recording.renamed | Recording renamed for an event where I was the host | ✓ | |
recording.trashed | Recording trashed | ✓ | |
recording.trashed.by_me | Recording trashed by me | ✓ | |
recording.trashed.for_me | Recording trashed for an event where I was the host | ✓ | |
recording.deleted | Recording deleted | ✓ | |
recording.deleted.by_me | Recording deleted by me | ✓ | |
recording.deleted.for_me | Recording deleted for an event where I was the host | ✓ | |
recording.recovered | Recording recovered | ✓ | |
recording.recovered | Recording recovered by me | ✓ | |
recording.recovered | Recording recovered for an event where I was the host | ✓ | |
recording.transcript_completed | Recording transcript completed | ✓ | ✓ |
recording.registration_completed | User registered for an on-demand recording | ✓ | ✓ |
recording.registration_approved | User approved to view recording | ✓ | ✓ |
recording.registration_denied | User denied access to cloud recording | ✓ | ✓ |
user.created | User created | ✓ | |
user.invitation_accepted | User accepted account invitation | ✓ | |
user.updated | User profile updated | ✓ | ✓ |
user.settings_updated | User settings updated | ✓ | ✓ |
user.activated | User activated | ✓ | ✓ |
user.deactivated | User deactivated | ✓ | |
user.disassociated | User disassociated | ✓ | |
user.deleted | User deleted | ✓ | |
user.signed_in | User signed in | ✓ | ✓ |
user.signed_out | User signed out | ✓ | ✓ |
webinar.created | Webinar created in my account | ✓ | |
webinar.created.by_me | Webinar created by me | ✓ | |
webinar.created.for_me | Webinar created where I'm the host | ✓ | |
webinar.updated | Webinar updated | ✓ | ✓ |
webinar.deleted | Webinar deleted in my account | ✓ | |
webinar.deleted.by_me | Webinar deleted by me | ✓ | |
webinar.deleted | Webinar deleted where I'm the host | ✓ | |
webinar.started | Webinar started | ✓ | ✓ |
webinar.ended | Webinar ended | ✓ | ✓ |
webinar.alert | Webinar service issue encountered | ✓ | ✓ |
webinar.sharing_started | A host or attendee shared their screen | ✓ | ✓ |
webinar.sharing_started.host | A host shared their screen | ✓ | ✓ |
webinar.sharing_started.participant | An attendee shared their screen | ✓ | ✓ |
webinar.sharing_ended | A host or attendee stopped sharing their screen | ✓ | ✓ |
webinar.registration_created | User registered for webinar | ✓ | ✓ |
webinar.registration_approved | Webinar registration approved | ✓ | ✓ |
webinar.registration_cancelled | Webinar registration cancelled | ✓ | ✓ |
webinar.registration_denied | Webinar registration denied | ✓ | ✓ |
webinar.participant_joined | Host or attendee joined webinar | ✓ | ✓ |
webinar.participant_left | Host or attendee left webinar | ✓ | ✓ |
# Example workflows
You can copy any of the workflows below by clicking Copy in the top-right corner of the workflow. This will create a copy of the workflow in your account, where you can connect your Zoom account.
- Save Zoom recordings to Amazon S3, email host, then delete Zoom recording
- Send meeting metrics to host via email
# Common Issues
If you encounter any issues connecting to Zoom with Pipedream, please reach out to our Support team.
# My Zoom event source isn't receiving events
It's likely that you need to re-authorize Pipedream's access to your Zoom account to start receiving events. Here's how to do that:
- Visit https://pipedream.com/sources
- Select your event source, and click on the Configuration tab.
- Press unlink next to your connected Zoom account, then press the Connect Zoom button.
- When your list of connected Zoom accounts appears, click New. This will prompt you to authorize Pipedream's access to your Zoom account again, creating a new auth grant.
- This should renew the link between your Zoom account and Pipedream. Try triggering your Zoom event again.
# Removing Pipedream's access to your Zoom account
You can revoke Pipedream's access to your Zoom account by visiting your list of installed apps in Zoom.
As soon as you do, any Pipedream workflows that connect to Zoom will immediately fail to work.
You can delete any Zoom connected accounts in your list of Pipedream Accounts, as well.
# Usage
Please see the section on Connecting to Zoom from Pipedream to create a Pipedream workflow that connects to the Zoom API.
Pipedream's Zoom app requests all Zoom user-managed App Scopes.
Pipedream's Zoom Admin app requests all Zoom account-level App Scopes.