ボタン押したらSlack通知されれば便利だなーって思ったのでやってみました。
gemはslack-ruby-client
を使っております。
##slack-ruby-client
https://github.com/slack-ruby/slack-ruby-client
まずはGemを追加します。
gem "slack-ruby-client"
そして次にconfig/initializers/
に設定を追加します。
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/
に入れます。
slack_token: token_name
そしてファイルを適当に作ってそこに処理を書いていきます。
def slack_api_clint
@client = Slack::Web::Client.new
end
こんな感じでslackとの連携を行っていきます。
連携については僕よりも詳しく書いている人がいるのでこちらなどを参考にするといいかもしれません。
https://qiita.com/_miki/items/d79ebae12227106a148c
次にいよいよボタンでのslack通知を実装していきます。
まず初めに、ボタンを押すためのルーティングを設定します。
resources :users do
get :user_notice, on: :member
end
次に、slack通知すべき物のcontrollerに処理を書いていきます。
def user_notice
SlackNotice.notice_slack_user(@user)
render json: { user_name: @user.name }
end
ここでは、notice_slack_userメソッドに処理を書くものとしそこに通知する値を入れています。
通知するものはそれぞれ違うと思うのでこちらの処理は各々やります。チャンネルやメンションなどもできるのでいろいろ試してみると面白いですね。
そして次の行では、Ajax処理のための値を入れています。
次はフロントの実装です。
bootstrapを使ったので次のようにしました。
<button class="btn btn-primary slack-notice" type="button">Slack通知</button>
こちらでslack-notice
というクラス名をつけておきます。
そしてラストにJSで動くようにしていきます。
JSではAjaxの部分を載せておきます。
$(".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連携の部分がまだ書き足りないので追記していきます。