Meeting Mate is a lightweight Discord bot that connects teams together by syncing the status of a Zoom meeting to a channel in a Discord server.
When the bot is active and commanded to watch a given Zoom meeting, it will post real-time updates to the Discord channel with the status of the meeting and the list of participants.
Due to the security restrictions on the Zoom API, Meeting Mate can only connect to one Zoom account at a time. Therefore, to use the bot with your own meetings and servers, you must configure your own instance of Meeting Mate to connect to your accounts.
To set up your own Meeting Mate, you must have the following in place before beginning the installation:
- A system that can satisfy Zoom's webhook endpoint requirements
- Admin access to the Zoom account hosting the meetings you wish to sync with Discord
- Ability to create a webhook-only app for the relevant Zoom account in the Zoom App Marketplace
- Ability to create a Discord app to provide the bot with credentials
If you don't already have a host that satisfies Zoom's requirements, I recommend setting up a VPS for your Meeting Mate app. Dreams of Code has a good tutorial for this.
Meeting Mate requires some environment variables in order to function. Two options are available to provide them to the program:
- Build from source with the necessary environment variables in the terminal environment (recommended!)
- Supply the file path to a
.env
file with the necessary environment variables enclosed at run time
This list can also be found in the provided
.env.sample
file for ease of reference
ZOOM_TOKEN
: The secret token from your Zoom appBOT_TOKEN
: The token key for your Discord botAPP_ID
: Your Discord bot's application ID
When running in production, the following variables are also required:
SSL_CERT
: The file path to your FQDN's SSL certificateSSL_KEY
: The file path to your FQDN's SSL key
Note: Before beginning the installation, ensure you meet the requirements for running your own Meeting Mate.
- Set up your Zoom app with the
meeting_end
,participant_joined
, andparticipant_left
webhook events enabled - Set up your Discord app and grab its token and app ID
- Configure the environment variables to be accessed by Meeting Mate
- If installing from source, follow the instructions below
- Run the binary with
./meeting-mate <your flags here>
(see the list of runtime flags)
To install Meeting Mate from its source, you will need Go 1.22 or higher installed on your system.
Before building, consider the required environment variables and decide whether to include them in the environment or through a .env
file. It is strongly recommended to include them in the environment at build time for increased security; however, they can be overwritten by a supplied .env
file at runtime if needed.
Clone the git repository and cd
into the project's root directory to run the build command:
go build -o ./meeting-mate ./cmd/meeting-mate
Alternatively, you can run go install ./cmd/meeting-mate
to build the binary directly into your $GOPATH
. This provides easy access to the program by name, meeting-mate
, instead of having to execute the binary from a specific folder each time.
Once it's successfully compiled, run the binary with ./meeting-mate
if built or meeting-mate
if installed and optionally add flags.
Meeting Mate has been designed with simplicity in mind for a smoother, more reliable operation. Simply add the bot to your Discord server, then begin watching a Zoom meeting with the command /watch meeting_ID: <your Zoom meeting ID>
in your channel of choice. The bot will take care of the rest! Until it receives the /cancel
command or the bot shuts down, it will continuously listen to Zoom webhooks and provide real-time status updates in Discord for the requested meeting(s).
--dev
: Runs the program in development mode, which disables TLS and prevents validation of webhook data source--envFile
: Provides the program with the path of a.env
file to source environment variables from -- overrides build time values--webhookPort
: Port at which the webhook listener will listen for incoming Zoom correspondence
There are two main parts to Meeting Mate: the Zoom webhook listener and the integration with the Discord API. These two processes work together to collect, parse, and distribute the Zoom meeting data, united by an orchestrator.
The webhook listener is a simple HTTP server that accepts JSON data from Zoom's servers.
When a meeting watch is active, the server will take incoming meeting data and send the relevant updates to the orchestrator to be formatted into data used by the bot process to send a Discord message. If there is no meeting watch active, it will toss the incoming data.
The Zoom API documentation for meeting webhooks can be referenced here.
Integration with the Discord API is achieved thanks to the discordgo package.
Meeting Mate has two primary commands: /watch
, which instructs the program to begin listening to Zoom updates for a given meeting, and /cancel
, which halts the tracking of further updates.
When a meeting watch is in progress, the bot will create a new message in the Discord channel when the meeting begins and continue to update the message as participants come and go. Once the meeting ends, the message is updated accordingly and is no longer stored. Instead, when the meeting begins again, a new message is sent to the channel.
If the program shuts down or a user instructs the bot to cancel the watch, any in-progress meeting messages are updated to notify users of their interruption.
For ease of development, Docker is the recommended way to run a development build of Meeting Mate. The Docker setup includes Air, which will automatically recompile and run the binary upon changes to the code.
To run the development build with Docker, simply run docker compose up
from within the project's root directory on your local machine.
If you do not wish to use Docker, see the instructions for building from source and run the binary with the --dev
flag.
Thank you so much for your interest in contributing to Meeting Mate! At this time, I am not open to outside code contributions; however, feedback is welcomed and very much appreciated.
If you discover a bug, wish for a new feature, or have other ideas for ways Meeting Mate could grow to better serve your community, please let me know by opening a detailed issue so I can take a look.