2016年9月29日木曜日

slack-ruby-client を使ってみた

概要

Slack の API をコールするのに前回slack-ruby-gem を使ってみました
今回はその派生の slack-ruby-client を使ってみました

環境

  • Mac OS X 10.10.5
  • Ruby 2.3.1
  • gem 2.5.1
  • slack-ruby-client 0.7.7

事前作業

  • bundle init
  • vim Gemfile
gem 'slack-ruby-client'
gem 'eventmachine'
gem 'faye-websocket'
  • bundle install

ソースコード

  • vim src-test.rb
require 'slack-ruby-client'

Slack.configure do |config|
  config.token = ENV['SLACK_API_TOKEN']
  config.logger = Logger.new(STDOUT)
  config.logger.level = Logger::INFO
  fail 'Missing ENV[SLACK_API_TOKEN]!' unless config.token
end

Slack::RealTime::Client.config do |config|
  config.websocket_ping = 30
end

client = Slack::RealTime::Client.new

client.on :hello do
  puts "Successfully connected, welcome '#{client.self.name}' to the '#{client.team.name}' team at https://#{client.team.domain}.slack.com."
end

client.on :message do |data|
  puts data

  client.typing channel: data.channel

  case data.text
  when 'bot hi' then
    client.message channel: data.channel, text: "Hi <@#{data.user}>!"
  when /^bot/ then
    client.message channel: data.channel, text: "Sorry <@#{data.user}>, what?"
  end
end

client.on :close do |_data|
  puts 'Connection closing, exiting.'
end

client.on :closed do |_data|
  puts 'Connection has been disconnected.'
  client.start!
end

client.start!

ほぼサンプルのままですが、再接続する機能をつけています
切断のイベントを取得したら client.start! を実行しているだけです

動作確認

  • export SLACK_API_TOKEN=xoxp-11111111111-11111111111-11111111111-xxxxxxxxxx
  • bundle exec ruby src-test.rb

で接続がはじまります
接続が完了すると「Successfully connected」が出力されるのでこれでブラウザから Slack にコメントすると以下のようにメッセージを取得することができます

channel=C1QD3RVNZ, team=T1QDA7KG9, text=hoge, ts=1475125556.000002, type=message, user=U1RK55Q20

今回のサンプルの場合だと切断時に「Connection closing, exiting. Connection has been disconnected.」というログが出力されるので、これが出力されたあと自動で Slack に再接続してくれます

最後に

slack-ruby-client を使って Slack からメッセージを取得してみました

ping を送信する設定や再接続時の処理を簡単に書けそうだった試したのですが、よくよく考えると slack-ruby-gem でも :close と :closed というイベントを拾えば再接続処理はできそうだなと、、、

上記も時間があれば試してポストしようと思います

参考サイト

0 件のコメント:

コメントを投稿