3 minute read

Mindful Messages is a proof of concept Webex integration that provides a message scheduling service.

Init

For some time I’ve felt the absence of a schedule send feature in Webex. I use this feature in email and other platforms to schedule messages for a later time. I do this because I want to respect others’ working and non-working hours. I don’t want to cause a push notification to intrude on their personal time.

I explained this to someone and they asked if this problem should be solved at the near end or far end? Meaning, couldn’t people just ignore notifications when they’re not working? Could they turn on DND or simply ignore notifications? Sure. And I can stop drinking coffee anytime I want.

In my experience, notifications cause us to context switch too much. They break concentration and attention. They have gravity and pull us to our devices. This is especially true when an important stakeholder sends us a message. I think we solve this problem at both ends, by rate limiting output at the device (notifications) and scheduling input (messages and other events that cause notifications).

My desire for this feature drove me to make a simple Webex integration that provides a message scheduling service. I call it Mindful Messages. The web app gives users an option to schedule a 1:1 message to someone else on Webex for a later time.

Demo or tl;dr

Demo gif

Why does it exist?

It exists because I wanted a way to schedule messages to people on the Webex platform in an effort to preserve others’ off work hours. I don’t want to cause notifications on other people’s phones late in the evening or early in the morning. The pandemic has caused many changes in my daily schedule and I sometimes work odd hours. An asynchronous work style helps me support my family. Of course, other peoples’ schedules can be different as well due to family needs, time zones, or myriad other reasons. Due to the somewhat frequent lack of synchrony between my coworkers, I wanted to schedule messages instead of sending right away.

When I figured out that this option doesn’t yet exist in Webex, I decided to make a simple proof of concept integration to fill the gap. I run an instance for myself that only allows my organization to use it, but I posted the code on my GitHub for anyone interested.

What does it do?

Mindful Messages provides a service to compose a message and schedule it for a later time. It is a proof of concept Webex integration that solves a real problem I had. Scheduled messages can be reviewed and deleted as desired. If someone decides to end their use of the service, there’s a forget me button on the about page that deletes the user’s records completely.

To schedule a message, enter a person’s name in the Email field and the organization’s directory will be searched. If there are matches, a list will appear with choices. Click on a choice to fill in an email address. Choose a date and time, time zone, and write a message. When done click Schedule. That’s it!

Click on Messages in the top menu to review previously scheduled messages. Messages will display with an email of the recipient, date and time, and message text. Messages can be deleted in this view. Deleting a message will remove it completely and it will not be sent at the previously scheduled time.

When a scheduled message is sent, Webex will display to you and the recipient the message was sent by You via Mindful Messages or FirstName LastName via Mindful Messages, respectfully.

And that is all this proof of concept integration does: schedule a message to be sent later and view and delete scheduled messages.

How does it work?

Mindful Messages integrates with Webex and acts on behalf of a person to send messages at the scheduled time. This integration uses OAuth2 to request and gain permissions to send messages and list an organization’s directory for the purposes of people search. This integration is primarily built with Cisco Webex, Cisco UI Kit, AWS API Gateway, Lambda, and DynamoDB.

Diagram

The UI for Mindful Message could generously be called the frontend. It is vanilla javascript and HTML/CSS a la Cisco UI Kit. The backend consists of two Lambda functions, API Gateway routes, and a DynamoDB table. Users schedule messages via the frontend, API calls are made to the API Gateway and subsequently the Lambda functions, and records are stored in the table. The second Lambda function runs periodically (prompted by EventBridge, like a cron job) and queries the table for any messages that are scheduled to be sent, then sends them.

You can find more detail at the repo:
https://github.com/sambyers/mindful-messages

Thank you for reading!

Updated: