はじめに
便利なチャットアプリslackとの連携をRailsで実現したい思います。
ここでは、メッセージの送信とリポジトリの作成をやってみます。
思っていた以上に簡単だったので、お手軽にアプリケーションからslackへ通知を送れます!
方針1. gem slack-apiを使う
方針2. gem httpartyを使う
実装
方針1. gem slack-apiを使う
Gemfileに追加
gem 'slack-api'
bundle install
bundle install
アクセストークンの取得
下記URLから、アクセストークンを取得します。Authenticationの項目にて、トークンを作成、確認出来ます。
https://api.slack.com/web
設定ファイルの作成
require "slack"
Slack.configure do |config|
config.token = "取得したトークン"
end
メッセージを送る
Slack.chat_postMessage(text: 'テキスト', username: '適当な名前', channel: "#チャンネル名")
例:
Slack.chat_postMessage(text: 'hello!', username: 'slack_test_bot', channel: "#slack_test")
これを好きなとこで実行するだけ!
チャンネルを作成する
Slack.channels_create({name: 'slack_test'})
名前はお好きに!これだけ!
他のメソッド
他にも便利なメソッドがあるので下記を参考に。
https://api.slack.com/methods
参考
方針2. gem httpartyを使う
方針1でOKなのですが、slack-apiを使わずにslackのapiを叩く方法で実装出来るみたいなのでメモ。
Railsアプリからslackのchannelを自動作成する方法
Gemfileに追加
gem 'httparty'
bundle install
bundle install
チャンネルを作成する
HTTParty.get("https://slack.com/api/channels.create?token=zzzzzzzzzzzzzzzzzzz=#{channelname}")
他のメソッドも方針1と同様に使えそうです。
おまけ
チャンネル作成時のresponse
response = Slack.channels_create({name: params[:name]})
を実行したときのresponse
{"ok"=>true, "channel"=>{"id"=>"hogehoge", "name"=>"aaaaaaa", "is_channel"=>true, "created"=>11111111, "creator"=>"hogehoge",
"is_archived"=>false, "is_general"=>false, "is_member"=>true, "last_read"=>"0000000000.000000", "latest"=>nil, "unread_count"=>0,
"unread_count_display"=>0, "members"=>["hogehoge"], "topic"=>{"value"=>"", "creator"=>"", "last_set"=>0}, "purpose"=>{"value"=>"",
"creator"=>"", "last_set"=>0}}}
のようなのものが返ってきます。
ふむふむ、
response[:ok]で作成成功か失敗か返ってくるのね。
既にchannelがある場合はfalseで返ってきました。
def create
response = Slack.channels_create({name: params[:name]})
if response[:ok]
render 'create'
else
redirect_to new_channel_path, alert: 'チャンネル作成に失敗しました。既に同名のチャンネルがないか確認して下さい。'
end
end
こんな感じに実装すれば良いな。
slack連携、お手軽なのでぜひ!