July 21, 2022
Slack API for Cloudflare Workers
Supercharge your Slack app with Cloudflare's edge
#slack #cloudflare-workers #serverless #javascriptTL;DR
I’m happy to open source a battle-tested library for using Slack’s API through Cloudflare Workers:
We built it out of necessity - we needed to speed up the response times of our app and still use a serverless architecture.
Read on to learn more.
Background
One of the core features of OpenSay (a tool for responsible anonymity in organizations) is the ability to do real-time AI classification of content and dynamically render the results as an image.
It looks like this:
It is a serial process - the AI classification must come before the image rendering.
It is also a time intensive process - usually less than 2 seconds, which is forever in terms of user experience.
We needed a way to shave some time off.
How Slack Bots Work?
When a Slack user, within a Slack workspace, interacts with a bot (e.g. with a slash command) an event is sent to Slack’s regional servers which then relays the event to the bot’s backend server.
💡 Aha, if we can bring our backend closer to Slack’s regional servers we can definitely shave some time off!
Enter Cloudflare Workers
Cloudflare Workers is a highly performant serverless runtime with an almost infinite scale and ~0ms cold starts which runs at network’s edge with over 250 locations.
Cloudflare uses anycast routing to make sure that when an origin sends a request it triggers the closest (in terms of network speed or region) worker.
Fits like a glove to what we are trying to achieve.
How It Works?
Code speaks louder than words.
$ npm install @sagi.io/workers-slackExample code:
const SlackREST = require('@sagi.io/workers-slack')
const botAccessToken = process.env.SLACK_BOT_ACCESS_TOKEN;
const SlackAPI = new SlackREST({ botAccessToken })
const formData = {
token: botAcccessToken,
channel: 'general',
text: 'hello world'
}
const result = await SlackREST.chat.postMessage(formData)It mimicks Slack’s Web API. For example, under SlackREST you have the chat.postMessage method.
If you need methods that weren’t implemented, just change the METHODS object here and open a pull request.
I hope the above made sense and that it helps you build faster Slack apps.
Comments and thoughts are welcome on this tweet:
Just open sourced a battle-tested @SlackHQ API library for @Cloudflare Workers!@CloudflareDev @SlackAPI #opensource https://t.co/tsiBIqTswK
— Sagi Kedmi (@SagiKedmi) July 21, 2022
