How I Built a Meeting Reminder Bot in Slack With Google Calendar, Zapier, and a Bit of Zoom

A meeting reminder and a crash course in medium-to-advanced Zapier

All of us need reminding of something occasionally.

I don’t feel like people on our team miss meetings too much but it can sometimes happen. As we all know, building something which works is a mixture of creating cool new stuff and reducing errors in the stuff you already have.

Missed meetings are an error.

Our Process Street team largely operates out of Slack. We were doing remote work before COVID and we’ll be remote after it, so we try to be pretty present on Slack. Overcommunicate twice is one of our company values.

That said, some things need doing in meetings. The density of information in a face to face meeting (online or off) is high and being synchronous means information can be shaped and reshaped with a Socratic bent in a way which just isn’t possible effectively via asynchronous communication in Slack, or wherever. Given how infrequent our meetings are, it is extra important that we attend them.

“It’s meeting reminders all the way down…”

So, we want to increase attendance of team-wide meetings which are organised through Google Calendar by signalling them to an audience which spends most its time on Slack.

The simple way of doing this would just be me pinging everyone with an @channel reminder before each meeting. But I have enough things to worry about. And also, where’s the fun in that?

If we want to get a wee bit more technical, a meeting reminder is an example of a poka-yoke - the Japanese concept of mistake-proofing. A poka-yoke works best when it is permanent or automated. Otherwise you need to set a reminder for the person who sends the reminder, and suddenly it’s turtles all the way down…

Hardly lean six sigma but it all adds up - and it helps keep you agile by removing the need to expend extra brain energy on menial tasks.

“If you build it, they will come”

The next simple way of approaching this is to just set a reminder to fire at x time on y day. With most automated reminders you’ll tie it to a timezone so it can adapt to that fine.

But what if the meeting gets moved? Do I have to go and reset the reminder? Am I going to have to worry about things like that?

What I’d want, ideally, is a Slack reminder which is tied to a specific meeting event in Google Calendar. That way, any change to the event - Zoom link, agenda, day, time - can feed right into my reminder.

Now, you can get something close via Slack’s native integration with Google Calendar, but it’s not flexible, doesn’t really work well for announcements, and it’s visually less appealing.

The ideal then is a reminder with all those features but which I can control every detail of, and adapt to meet whatever needs the Google devs hadn’t thought of. The perfect meeting reminder.

But how would one go about building that?

“Look upon my zaps, ye mighty, and despair!”

For those not familiar with Zapier, it’s a third-party automation platform. It basically helps you connect different websites so that something happening in one can trigger something to happen in another.

Platforms choose to integrate with Zapier (or IFTTT, Integromat, Flow, etc) and build specific Triggers or Actions. Zapier also builds some of its own mini-tools which you can use to complicate things, as we’ll see.

We’re going to use Google Calendar as our first app, and use its trigger: Event Start. This trigger means the automation fires in relation to a new event starting. So we’ll set it to trigger 15 minutes before that event starts. It will know what event I want it to track by simply adding a filter where the name of the event needs to match a set phrase.

Our next app is a built-in one. I’m going to use Formatter by Zapier. This app takes the information we’ve pushed in from Google Calendar and then lets us reformat it to make it easier to play with later. We need to use the Formatter step to extract any important information we’ll need later on; the Zoom meeting link and the URL for the agenda, from the description.

After these steps, we’ll finish off with an Action to post a new message in Slack and include some of the information in that message: location & agenda. All sounds pretty simple.

Basically: Zapier checks my calendar for when a meeting with a certain name is coming, it then pulls the information from that event, juggles it round a bit, and then throws it into Slack once it looks pretty.

“If you judge a fish on its ability to set a meeting reminder…”

Staying true to the theme of revealing internal communication to the world, below is a slightly more detailed description of how this zap is built.

This was my documentation note which I added as a Slack message and pinned to the channel where the automation was going to fire. It’s also copied and stored in Notion - our knowledge base.

Fictional lawyer’s note: Some names and identifying details have been changed to protect the privacy of individuals.

Meeting reminder documentation notes:

This bot fires 15 minutes before the event is scheduled to begin, based upon an event on [MY] calendar matching the search term "[THE NAME OF THE MEETING]".

The Google Calendar event-match triggers a channel message to be sent in Slack to #[CHANNEL-NAME] which has some funky formatting to make it look pretty.

The beef of the work however is done by Formatter by Zapier which reads the content of the GCal event and extracts certain key bits of information. There are 3 Formatter steps.

Formatter 1 is quite simple; it's a Text action and it looks at the Description from the GCal event. It uses the Extract Url option to extract the first url from the description - which is the presentation share link.

Formatter 2 is the same but it extracts from the Conference Data Entry Points URI value which represents the native integration between Google Calendar and Zoom. This formatter turns the 3 values in there into a list.

Formatter 3 then is a Utilities action which takes that list and extracts each value from it and turns them into their own separate variables. One of the items in that list is the Zoom meeting url with a password attached - this is then added into the Slack message to create a password protected link.

And that is how the [MEETING NAME] announcement bot works.

“What day is it?” asked Pooh. “It’s today” squeaked Piglet. “Oh shit, my meeting!” said Pooh

I hope this is all nice and clear.

If it’s not, the first best place to go is inside Zapier to try to build this yourself.

The second best place to go is the comment section below. Ping me and let me know where it hurts and I can clarify some bits.

The end result for us is a really simple little safety net with all the key info reminding people about an important meeting, sprinkled with some custom emojis. It took me about 20 minutes to figure out how I’d build it, put it together, and make it look nice - but now it’s done.

Do it once and it’s done forever. If you want to make another, just duplicate the zap and reconfigure. Fun, fast, and faultless.

If you found this post handy you can share this post on your social media of choice and subscribe to get future posts in your inbox once a fortnight.