Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
[Ruby Meditation #22] Building Slack Apps with ...
Search
Kirill Shevchenko
May 19, 2018
Programming
4
230
[Ruby Meditation #22] Building Slack Apps with Ruby
Kirill Shevchenko
May 19, 2018
Tweet
Share
More Decks by Kirill Shevchenko
See All by Kirill Shevchenko
[RubyWine #1] Event-Driven Architecture and Messaging Patterns for Ruby Microservices
kirillshevch
1
7.2k
Other Decks in Programming
See All in Programming
これだけは知っておきたいクラス設計の基礎知識 version 2
masuda220
PRO
24
5.8k
フロントエンドテストの育て方
quramy
11
2.9k
PHPのガベージコレクションを深掘りしよう
rinchoku
0
260
AHC 044 混合整数計画ソルバー解法
kiri8128
0
320
Qiita Bash
mercury_dev0517
1
180
タイムゾーンの奥地は思ったよりも闇深いかもしれない
suguruooki
1
500
Going Structural with Named Tuples
bishabosha
0
200
マルチアカウント環境での、そこまでがんばらない RI/SP 運用設計
wa6sn
0
700
Enterprise Web App. Development (1): Build Tool Training Ver. 5
knakagawa
1
110
AI Coding Agent Enablement - エージェントを自走させよう
yukukotani
13
5.6k
海外のアプリで見かけたかっこいいTransitionを真似てみる
shogotakasaki
1
160
技術選定を未来に繋いで活用していく
sakito
3
100
Featured
See All Featured
The Language of Interfaces
destraynor
157
24k
Product Roadmaps are Hard
iamctodd
PRO
52
11k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Making the Leap to Tech Lead
cromwellryan
133
9.2k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The Cost Of JavaScript in 2023
addyosmani
48
7.7k
Docker and Python
trallard
44
3.3k
Producing Creativity
orderedlist
PRO
344
40k
For a Future-Friendly Web
brad_frost
176
9.7k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
380
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
8
740
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Transcript
Building Slack Building Slack Apps with Apps with Ruby Ruby
Integrations Overview Integrations Overview Slash Commands Custom Integrations Bot Users
Incoming Webhooks
Incoming webhooks Incoming webhooks A way to send messages to
Slack https://slack.com/apps/A0F7XDUAZ-incoming-webhooks
Incoming webhooks Incoming webhooks require 'slack/incoming/webhooks' slack = Slack::Incoming::Webhooks.new( 'WEBHOOK_URL'
) slack.post 'Useful information' https://github.com/shoyan/slack-incoming-webhooks
Example Example
Slash commands Slash commands A way to add /slash commands
Creating a new Slack App Command request authorization Command validation and response
Creating a Slack App Creating a Slack App https://api.slack.com/apps
Response Permission Response Permission
Adding a command Adding a command
Local HTTPS-Proxy Local HTTPS-Proxy ./ngrok http 9292
Response Sample Response Sample require 'sinatra' post '/' do 'OK'
end
None
Legacy custom integrations Legacy custom integrations Custom integrations Custom integrations
https://api.slack.com/custom-integrations/legacy-tokens
Bot users Bot users
Authentication Authentication
{ "access_token": "xoxp-XXXXXXXX-XXXXXXXX-XXXXX", "scope": "commands,bot", "team_name": "Team Installing Your Bot",
"team_id": "XXXXXXXXXX", "bot":{ "bot_user_id":"UTTTTTTTTTTR", "bot_access_token":"xoxb-XXXXXXXXXXXX-TTTTTTTTTTTTTT" } } Response Response
Tools Tools https://github.com/slack-ruby (not affiliated with Slack) slack-ruby-bot slack-ruby-bot Provides
DSL for building text commands. slack-ruby-client slack-ruby-client A Ruby and command-line client for the Slack Web and Real Time Messaging APIs.
slack-ruby-bot slack-ruby-bot require 'slack-ruby-bot' class PongBot < SlackRubyBot::Bot command 'ping'
do |client, data, match| client.say(text: 'pong', channel: data.channel) end end PongBot.run A Minimal Bot SLACK_API_TOKEN=... bundle exec ruby pongbot.rb
Slack Web API Slack Web API The Web API is
a collection of , all with URLs in the form: HTTP RPC-style methods https://slack.com/api/FAMILY_METHOD.method
slack-ruby-client slack-ruby-client client = Slack::Web::Client.new( token: 'SLACK_BOT_TOKEN' ) client.chat_postMessage( channel:
'#general', text: 'Hello World' ) https://api.slack.com/methods/chat.postMessage
Web API rate limit Web API rate limit https://api.slack.com/methods/chat.update
Interactive messages Interactive messages https://api.slack.com/interactive-messages
Message Formatting Message Formatting https://api.slack.com/docs/messages/builder
Walkie Bot Walkie Bot Prototyping Tool for Slack Bots https://github.com/FoundersAS/walkiebot
None
Slack RTM Slack RTM The Real Time Messaging API is
a WebSocket-based API that allows you to receive from Slack in real time. events
rtm.connect rtm.connect Workspace https://api.slack.com/methods/rtm.connect wss://slack-msgs.com/websocket/uid These URLs are only valid
for 30 seconds, so connect quickly!
client = Slack::RealTime::Client.new( token: 'SLACK_BOT_TOKEN' ) client.on :message do |data|
client.message( channel: data.channel, text: "Hi <@#{data.user}>!" ) end client.start!
Ruby Websocket Clients Ruby Websocket Clients Faye::Websocket websocket-client-simple
Multiple connections Multiple connections Workspace 1 Workspace 2 Workspace N
wss://slack-msgs.com/websocket/uid wss://slack-msgs.com/websocket/uid wss://slack-msgs.com/websocket/uid
Concurrent Processing Concurrent Processing eventmachine celluloid concurrent-ruby
slack-ruby-client slack-ruby-client Slack::RealTime.configure do |config| config.concurrency = Slack::RealTime::Concurrency::Celluloid # config.concurrency
= Slack::RealTime::Concurrency::Eventmachine end
None
Alternatives Alternatives https://github.com/slackapi/node-slack-sdk https://github.com/BlakeWilliams/Elixir-Slack
None
Testing? Testing?
API Updates API Updates https://slack.com/apps/A0F81R7U7-rss
Community Community https://community.botkit.ai
Thanks! Thanks! kirillshevch kirillshevch @kirill_shevch @kirill_shevch @kirill_shevch @kirill_shevch