Skip to content

roborourke/serverless-slack

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Serverless Slack

This is a micro-framework designed to create Slack Apps with serverless.js.

Demonstration

A complete template and tutorial can be found at johnagan/serverless-slack-app.

API

Events

// handle RTM messages
slack.on('message', (payload, bot) => { });

// handle all slash commands
slack.on('slash_command', (payload, bot) => { });

// handle the outgoing webhooks trigger word "googlebot"
slack.on('googlebot', (payload, bot) => { });

// wildcard support
slack.on('*', (payload, bot) => { });
Event Description
  • | All events message | All RTM events slash_command | All Slash Commands event | All Event API callbacks webhook | All WebHook callbacks interactive_message | All Interactive message callbacks [/command] | Any specific slash command [event type] | Any specific event type [trigger word] | Any trigger from outgoing webhooks

Bot

Bots are preloaded with the appropriate token and are context aware. So you can reply to messages and send ephemeral updates to a message.

slack.on('message', (payload, bot) => {
  bot.replyPrivate('loading...');

  bot.reply({
    text: 'Everything is working!',
    attachments: [{
      title: "Slack API Documentation",
      title_link: "https://api.slack.com/",
      text: "Optional text that appears within the attachment",
      fields: [{
        title: "Priority",
        value: "High",
        short: false
      }]
    }]
  });

  // the token is already set
  bot.send('channels.info', { channel: 'C1234567890' }).then(data => {
    // results from API call
  });
});
Methods Description
say Send a message
reply Send a public reply to the event
replyPrivate Send an ephemeral reply to the event
send Call any Slack API endpoint

Data Store

A key/value store to maintain team/bot information and store custom setings. The store should contain a uniquie id field.

slack.store.save(data).then(results => {
  // the save results
});

slack.store.get(id).then(record => {
  // return a single record by key
});
Methods Description
get Get a single record by id
all Get all saved records
save Save a record

Client

The Slack client is a way to call the API outside of an event.

let message = {
  unfurl_links: true,
  channel: 'C1QD223DS1',
  token: 'xoxb-12345678900-ABCD1234567890',
  text: "I am a test message http://slack.com",
  attachments: [{
    text: "And here's an attachment!"
  }]
}

// send message to any Slack endpoint
slack.send('chat.postMessage', message).then(data => {
  // Success!
});

// respond to webhooks
slack.send('https://hooks.slack.com/services/T0000/B000/XXXX', message);

You can also respond to events directly without an API call using the callback method. This is useful if you need the in_channel response type to show the users slash command too.

// Example for a command that takes a name eg: /greet Bob
slack.on('/greet', msg => slack.callback({ 
  response_type: 'in_channel', 
  text: `Hey there ${msg.text}!`
}))

About

A Slack App Framework for AWS Lambda / Serverless.js

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors