I wanted to attend fewer meetings, so I decided to create a bot to inconspicuously join zoom meetings, record the audio, and upload to a google cloud bucket on my behalf. I could then listen later, or summarize with an AI tool.
Secondly, I wanted to break away from Zoom's requirement of asking permission to record, as this could draw too much attention to my absense (as this would be for personal use only).
This sample demonstrates how you can run the Zoom Meeting SDK for Linux as a kubernetes job, and upload the meeting recordings to a google cloud bucket.
It includes the following features:
- Break out of the permissions model for recording the meeting (i.e. the audio will be recorded via a virtual linux device)
- Repackaged the docker contents & run via k8s job, with config.toml read as a secret
- Upload resulting wav file to gcloud bucket via signed upload URL
I have built off of Zoom's meetingsdk-headless-linux-sample
- Docker
- Zoom Account
- Zoom Meeting SDK Credentials (Instructions below)
- Client ID
- Client Secret
- Kubernetes cluster set up with kubectl
- Google cloud project and
gcloud
CLI
# Clone down this repository
git clone [email protected]:zoom/meetingsdk-headless-linux-sample.git
Download the latest version of the Zoom SDK for Linux from the Zoom Marketplace and place it in the lib/zoomsdk folder of this repository.
If you don't already have them, follow the section on how to Get your Zoom Meeting SDK Credentials.
cp sample.config.toml config.toml
Here, you can set any of the CLI options so that the bot has them available when it runs. Start by adding your Client ID and Client Secret in the relevant fields.
At a minimum, you need to provide an Client ID and Client Secret along with information about the meeting you would like to join.
You can either provide a Join URL, or a Meeting ID and Password.
cat config.toml | base64
Then copy this output into config-toml-secret.template.yaml
and remove "template" from the name.
kubectl apply -f config-toml-secret.yaml
First, build the image with docker build -f Dockerfile.k8s -t gcr.<REGISTRY_PATH> .
.
Then, upload to google cloud registry: docker push gcr.<REGISTRY_PATH>
Finally, update zoom-bot-job.template.yaml
with image name gcr.<REGISTRY_PATH>
.
gcloud storage signed-url generate gs://your-bucket-name/your-object-name --duration=1h
The invite link and audio upload path can be provided via environment variables:
JOIN_URL=<zoom invite link>
SIGNED_URL=<signed url from step 5>