A Serverless.js Slack App Boilerplate with OAuth and Bot actions
Branch: master
Clone or download
Latest commit d4990cb Nov 4, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
src initial commit Dec 15, 2016
.gitignore initial commit Dec 15, 2016
.npmignore initial commit Dec 15, 2016
LICENSE Create LICENSE Dec 18, 2016
README.md Update README.md Nov 4, 2018
package.json fixed urls Dec 15, 2016
serverless.yml Update serverless.yml Dec 15, 2016


Serverless Slack App Boilerplate

Create a serverless Slack App with AWS Lambda, API Gateway, DynamoDB, and CloudFormation. All services will be automatically provisioned for you. All that's needed is your Slack App keys.

Install Serverless and provision AWS


  1. Setup your AWS Credentials
  2. Install Serverless.js
npm install -g serverless
  1. Install The Serverless Slack App Template and provision all AWS services
serverless install --url https://github.com/johnagan/serverless-slack-app
cd serverless-slack-app
npm install
serverless deploy

Create a Slack App


  1. Create a new Slack App
  2. Use the generated POST url for Slack's slash commands, events, and interactive messages
  3. Update the serverless.yml with your new Slack App keys
Slack Serverless
slack-app-keys serverless-keys

Install the Slack App and Test


  1. Deploy the changes to AWS serverless deploy
  2. Navigate to the GET url provided from serverless
  3. Walk through the OAuth flow and install the App
  4. Goto the team and test the slash command /greet

Update the Code

// Slash Command handler
slack.on('/greet', (msg, bot) => {
  let message = {
    text: "How would you like to greet the channel?",
    attachments: [{
      fallback: 'actions',
      callback_id: "greetings_click",
      actions: [
        { type: "button", name: "Wave", text: ":wave:", value: ":wave:" },
        { type: "button", name: "Hello", text: "Hello", value: "Hello" },
        { type: "button", name: "Howdy", text: "Howdy", value: "Howdy" },
        { type: "button", name: "Hiya", text: "Hiya", value: "Hiya" }

  // ephemeral reply

// Interactive Message handler
slack.on('greetings_click', (msg, bot) => {
  let message = { 
    // selected button value
    text: msg.actions[0].value 

  // public reply
  1. Open the bot source code
  2. Add/Remove/Update the code with your bot functionality
  3. Run serverless deploy to deploy your changes to AWS
  4. Rinse and repeat.

All the tokens and urls above were invalidated before posting this tutorial. You will need to use your own tokens