LoginSignup
0
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-06-12

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

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

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連携の部分がまだ書き足りないので追記していきます。

0
0
0

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
0
0