Presence Scheduler

Ever wonder how our presence scheduler works to keep you active on slack? In this article we talk about how it works as well as some of the challenges we came across while creating this app.

Presence scheduler is an Slack application registered and created through the website. The ‘Presence Scheduler’ app lets you grant permissions to the owner of the app to perform some actions on your behalf - ie keep your status active. To do this, it uses the Slack API - this is where all of the permissions get granted and how we can interact with your slack channel to keep you active without ever logging into your slack account.

Once we have your permission we keep use the slack API to keep you active. With the free version of the app, we use the ‘set.Presence’ method this will keep your status turned to ‘auto’, and if you don’t know what that means, read more about the type of presence !!!here!!!. With the paid version of the application, we use a number of methods to help keep you active - and its not just as simple as simply sending a request to slack. Its much more complicated to force a use to stay active because there is no API endpoint specifically designed for this.

For the free version, we needed to send a message to slack every 15 minutes, to do this we used ‘cron’ which is a time based scheduler in linux, and set its schedule to execute every 15 minutes. When executed it runs a php script which checks all of the schedules on the presence scheduler site and sends a request to slack (using the set.presence method) to keep that slack channel online.

Since it takes a few seconds to get a response from the API for each request sent, we noticed that if the app got any bigger, it would actually take longer then 15 minutes to send all of the requests, and this would lead to problems with the scheduler. To fix this, we actually created a number of cron jobs which would execute different php scripts, and then these scripts would organize the users into groups of 50 so that - no matter what - the time it would take to send all of the requests to slack would be under 2 minutes. This solved most of our problems relating to scheduling and is how the app is currently functioning.