Introduction
Getting started
Learn how to get ZoomDrive set up and sync to Google Drive or other cloud storages of your choice.
Quick Start
Step-by-step guide to set up ZoomDrive to sync recordings to Google Drive.
Bring your own cloud storage
A guide on how to extend to sync to other cloud storages.
You'll need a Zoom account with a Pro or higher plan and have Cloud Recording enabled to use ZoomDrive. See pre-requisites for more details.
Pre-requisites
You'll need the following before you can use ZoomDrive:
- A Zoom account with a Pro or higher plan and have Cloud Recording enabled
- A Zoom Server-to-Server OAuth app (see guide)
- A Google Service Account (see guide)
Create a Zoom Server-to-Server OAuth app
Go to Zoom Marketplace and create a new app. Select Server-to-Server OAuth as the app type. Follow the instructions available here to create the app.
The following scopes are required for ZoomDrive to work:
recording:read:admin
recording:write:admin
(only if recordings are to be deleted after syncing)
Once the app is created, copy the Account ID, Client ID and Client Secret. You'll need these to configure ZoomDrive.
Create a Google Service Account
A Google Service Account is required to access Google Drive. Follow the instructions here or head over to Service Accounts - IAM & Admin and create a new service account.
Make sure to enable the Google Drive API for the project by going to Google Drive - APIs & Services.
Once the service account is created, download the JSON key file. You'll need this to configure ZoomDrive.
Share the Google Drive folder(s) with the service account email address. This is required for ZoomDrive to be able to upload recordings to Google Drive. You can create multiple folders each for a unique Zoom Meeting ID or a single folder for all recordings.
Setting up ZoomDrive
Create a workflow file
You'll need a GitHub repository to run the ZoomDrive action. If you don't have one, you can create a new repository.
Create a new workflow file .github/workflows/zoomdrive.yml
in your repository. You can name the file anything you want, but it must be a YAML file in the .github/workflows
directory of your repository.
Configure the workflow
Add the following content to the workflow file:
name: ZoomDrive Sync
on:
workflow_dispatch:
schedule:
- cron: "0 0 * * *"
jobs:
sync:
runs-on: ubuntu-latest
environment: ZoomDrive Sync
steps:
- uses: coronasafe/zoomdrive@latest
with:
zoom_account_id: ${{ secrets.ZOOM_ACCOUNT_ID }}
zoom_client_id: ${{ secrets.ZOOM_CLIENT_ID }}
zoom_client_secret: ${{ secrets.ZOOM_CLIENT_SECRET }}
gsa_credentials: ${{ secrets.GOOGLE_SERVICE_ACCOUNT_CREDENTIALS }}
meeting_gdrive_folder_map: ${{ secrets.GDRIVE_FOLDER_MAP }}
delete_on_success: true
Configure Repository Environment Secrets
You'll need to create an environment and add the below secrets to the environment. See Creating and using encrypted secrets for more details.
ZOOM_ACCOUNT_ID
: The Zoom Account IDZOOM_CLIENT_ID
: The Zoom Client IDZOOM_CLIENT_SECRET
: The Zoom Client SecretGOOGLE_SERVICE_ACCOUNT_CREDENTIALS
: The Google Service Account CredentialsGDRIVE_FOLDER_MAP
: A base64 encoded JSON object containing the mapping of Zoom Meeting IDs to Google Drive folder IDs
Google Service Account Credentials
The GOOGLE_SERVICE_ACCOUNT_CREDENTIALS
secret is the base64 encoded contents of the JSON key file downloaded from Google Cloud Console. You can encode the file using the following command:
# on linux
base64 -w 0 <path-to-gsa-credentials.json>
# on mac
base64 -i <path-to-gsa-credentials.json>
Zoom Meeting ID to Google Drive Folder ID Mapping
The GDRIVE_FOLDER_MAP
secret is a base64 encoded JSON object containing the mapping of Zoom Meeting IDs to Google Drive folder IDs. The JSON object should have a default
property which is the Google Drive folder ID to use when a meeting ID is not found in the object. The default
property is mandatory. You can also set the value of a meeting ID or the default
property to false
to skip syncing for that meeting. See the example below:
{
"85177928324": "1E***********7iUQE",
"83123232335": "1T***********y49Bw",
"84898985619": false, // skips syncing for this meeting
"default": "1T***********y41Bw"
}
You can encode the JSON object using the following command:
# on linux
base64 -w 0 ./folder-map.json
# on mac
base64 -i ./folder-map.json
Configure the workflow schedule
The workflow is configured to run every day at 12:00 AM UTC. You can change the schedule by modifying the schedule
property of the schedule
event. See Events that trigger workflows for more details.
Commit and push the workflow file
Commit and push the workflow file to the repository. The workflow will run automatically at the scheduled time.