Help us understand the problem. What is going on with this article?

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を常駐させたい。

saekis
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away