Ruby
JavaScript
Rails
Ajax
Slack

Railsでボタンを押したらSlack通知されるようにする

ボタン押したらSlack通知されれば便利だなーって思ったのでやってみました。

gemはslack-ruby-clientを使っております。


slack-ruby-client

https://github.com/slack-ruby/slack-ruby-client

まずはGemを追加します。


Gemfile

gem "slack-ruby-client"


そして次にconfig/initializers/に設定を追加します。


slack_api.rb

require "slack"

Slack.configure do |config|
config.token = Settings.slack_token
end

Slack:Web:Client.config do |config|
config.user_agent = 'Slack Ruby Client/1.0'
end


とし、slack_tokenをconfig/に入れます。


settings.yml

slack_token: token_name


そしてファイルを適当に作ってそこに処理を書いていきます。

def slack_api_clint

@client = Slack::Web::Client.new
end

こんな感じでslackとの連携を行っていきます。

連携については僕よりも詳しく書いている人がいるのでこちらなどを参考にするといいかもしれません。

https://qiita.com/_miki/items/d79ebae12227106a148c

次にいよいよボタンでのslack通知を実装していきます。


まず初めに、ボタンを押すためのルーティングを設定します。


routes.rb

resources :users do

get :user_notice, on: :member
end

次に、slack通知すべき物のcontrollerに処理を書いていきます。


users.controller.rb

def user_notice

SlackNotice.notice_slack_user(@user)
render json: { user_name: @user.name }
end

ここでは、notice_slack_userメソッドに処理を書くものとしそこに通知する値を入れています。

通知するものはそれぞれ違うと思うのでこちらの処理は各々やります。チャンネルやメンションなどもできるのでいろいろ試してみると面白いですね。

そして次の行では、Ajax処理のための値を入れています。

次はフロントの実装です。

僕はbootstrapを使ってボタンを作ったので次のようにしました。


user.html

<button class="btn btn-primary slack-notice" type="button">Slack通知</button>


こちらでslack-noticeというクラス名をつけておきます。

そしてラストにJSで動くようにしていきます。

JSではAjaxの部分を載せておきます。


user.js

$(".slack-notice").on("click",function(e){

var user_id = document.getElementById("user_id").value;
var val = $(this).val();
var slack_user_path = "/users/" + user_id + "/user_notice";
$ajax({
url: slack_user_path,
async: true,
type: "GET",
data: {user: val},
dataType: "json"
}).success(function(data){
//成功時の処理
})error(function(data){
//失敗時の処理
});
});

成功時にはモーダルで表示させるのがいいかもしれません。

ここではajaxの非同期通信により発火させてます。


おわりに

こんな感じでボタンによるslack通知ができるようになります。

ですがslack連携の部分がまだ書き足りないので追記していきます。