LoginSignup
46

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-02-17

今回はとりあえず、あまり時間をかけずに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を常駐させたい。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46