serverless-slack-app
serverless-slack-app copied to clipboard
A Serverless.js Slack App Boilerplate with OAuth and Bot actions
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

- Setup your AWS Credentials
- Install Serverless.js
npm install -g serverless
- 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

- Create a new Slack App
- Use the generated POST url for Slack's slash commands, events, and interactive messages
- Update the serverless.yml with your new Slack App keys
| Slack | Serverless |
|---|---|
![]() |
![]() |
Install the Slack App and Test

- Deploy the changes to AWS
serverless deploy - Navigate to the GET url provided from serverless
- Walk through the OAuth flow and install the App
- 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
bot.replyPrivate(message);
});
// Interactive Message handler
slack.on('greetings_click', (msg, bot) => {
let message = {
// selected button value
text: msg.actions[0].value
};
// public reply
bot.reply(message);
});
- Open the bot source code
- Add/Remove/Update the code with your bot functionality
- Run
serverless deployto deploy your changes to AWS - Rinse and repeat.
All the tokens and urls above were invalidated before posting this tutorial. You will need to use your own tokens

