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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kirill Shevchenko
May 19, 2018
Programming
290
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
[Ruby Meditation #22] Building Slack Apps with Ruby
Kirill Shevchenko
May 19, 2018
More Decks by Kirill Shevchenko
See All by Kirill Shevchenko
[RubyWine #1] Event-Driven Architecture and Messaging Patterns for Ruby Microservices
kirillshevch
1
7.7k
Other Decks in Programming
See All in Programming
継続モナドとリアクティブプログラミング
yukikurage
3
680
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
1.6k
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
280
数百円から始めるRuby電子工作
tarosay
0
130
OpenSpecのproposalにbrainstormingを持たせてみた
tigertora7571
1
200
Google Apps Script で Ruby を動かす
kawahara
0
130
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
230
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
140
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
200
作るコストが小さくなった時代 幸せに働くために改めて考えたいこと 〜エンジニアとして価値を出し続けるために注視している二分野〜
yuppeeng
0
180
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
170
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
1
120
Featured
See All Featured
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
450
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
620
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
250
Raft: Consensus for Rubyists
vanstee
141
7.6k
Building an army of robots
kneath
306
46k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.3k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
390
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
1k
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