Edited at

rubyでslack apiを叩いてbotを動かす

More than 3 years have passed since last update.

今回はとりあえず、あまり時間をかけずにslackでbotを動かすことを目的としてるので、hubotとかrubotyとか使ってません。


slackにbotユーザを作る

slackを開いてApps & Custom Integrations → Configure → Custom Integrations → Bots → Add Configuration

と移動して、飼いたいbotを登録する。登録したらbotを操るためのTOKENを取得できるのでメモっておく。


Gemを入れる

slack apiのRTM(Real Time Messaging)を楽に扱えるラッパー(aki017/slack-ruby-gem)を入れる。

$ gem install slack-api


botに何か喋らせる


slack.rb

require 'slack-ruby-client'

# 先ほど取得したTOKENをセット
TOKEN = 'xxxxxx'

Slack.configure do |conf|
conf.token = TOKEN
end

# RTM Clientのインスタンス生成
client = Slack::RealTime::Client.new

# slackに接続できたときの処理
client.on :hello do
puts 'connected!'
client.message channel: 'your_channel_id', text: 'connected!'
end


$ ruby slack.rb

これだけ。すごい簡単。


botと会話する

RTMではユーザからのメッセージをmessageイベントで検知できるので、botとインタラクティブに会話できる。


slack.rb

require 'slack-ruby-client'

# 先ほど取得したTOKENをセット
TOKEN = 'xxxxxx'

Slack.configure do |conf|
conf.token = TOKEN
end

# RTM Clientのインスタンス生成
client = Slack::RealTime::Client.new

# slackに接続できたときの処理
client.on :hello do
puts 'connected!'
client.message channel: 'your_channel_id', text: 'connected!'
end

# ユーザからのメッセージを検知したときの処理
client.on :message do |data|
if data['text'].include?('こんにちは')
client.message channel: data['channel'], text: "Hi!"
end
if data['text'].include?('かしこい') || data['text'].include?('えらい')
client.message channel: data['channel'], text: "Thank you!"
end
if data['text'].include?('おやすみ')
client.message channel: data['channel'], text: "Good night"
end
end


$ ruby slack.rb

RTMでは他にも色々イベントを取れるようになってるので、他にも試したい人はここ https://api.slack.com/rtm を見ると幸せになれると思う。


おしまい

今回はとりあえずbotを動かすことを目的とした記事なので、細かい説明とかかなり省いてます。はい。

詳しく知りたい方は公式ドキュメントとか他の方の記事が参考になると思います。

時間あったらherokuにのっけてbotを常駐させたい。