/workers-slack

Slack API for Cloudflare Workers

Primary LanguageJavaScriptMIT LicenseMIT

workers-slack

@sagi.io/workers-slack allows you to use Slack's Web API within Cloudflare Workers.

⭐ We use it at OpenSay to access Slack's REST API through Cloudflare Workers.

Here is a blog post that explains why I built it.

CircleCI MIT License version

Installation

$ npm i @sagi.io/workers-slack

Cloudflare Workers Usage

If you use Cloudflare's Wrangler you must set the node_compat flag in your wrangler.toml - the reason for this is that this library is built both for Cloudflare Workers and Node.js (for which we need globals).

Initialize SlackREST:

// Without token:
const SlackREST = require('@sagi.io/workers-slack')
const SlackAPI = new SlackREST()

// With token:
const botAccessToken = process.env.SLACK_BOT_ACCESS_TOKEN;
const SlackREST = require('@sagi.io/workers-slack')
const SlackAPI = new SlackREST({ botAccessToken })

You can then use supported Slack methods. For instance, here's how to use the chat.postMessage method:

// SlackREST was initialized with a token
const formData = { channel: 'general', text: 'hello world'}

// SlackREST wasn't initialized with a token
const botAccessToken = process.env.SLACK_BOT_ACCESS_TOKEN;
const formData = { token: botAcccessToken, channel: 'general', text: 'hello world' }

const result = await SlackREST.chat.postMessage(formData)

Verifying requests from Slack

More information here.

The SlackREST.helpers.verifyRequestSignature method returns true when a signature from Slack is verified. Otherwise it throws an error.

const SlackREST = require('@sagi.io/workers-slack')
const SlackAPI = new SlackREST()

const signingSecret = process.env.SLACK_SIGNING_SECRET
const isVerifiedRequest = await SlackAPI.helpers.verifyRequestSignature(request, signingSecret)