こんにちは、Forkwell事業部の正徳です。 先日、Forkwell Jobsの採用担当者様向けにSlack通知機能をリリースしましたので、お知らせさせて頂きます。
また、Slack ButtonをRailsで実装する方法も後述しているので、エンジニアの方々にも参考になるかと思います。
どんな機能?
Forkwell Jobs では、ユーザーが掲載されている求人に対して「話を聞きたい」「応募」のアクションを行うことができます。
このアクションが発生したとき、採用担当者様にメール通知だけではなく、Slack にも通知する機能です。
なぜ作ったか?
もともと、通知にはメール通知しか使用できませんでした。 ほとんどの企業では採用活動のためにメーリングリストを作成し、そのメールアドレスを使用しています。
しかし、弊社groovesのようにSlackを全社導入している企業の場合、Slack通知の方が気づきやすいのではないでしょうか? ユーザーのアクションに素早く気付けることは大きな利点になると考え、試しに実装してみました。
テスト運用期間
実装できたので、まずは社内で1ヶ月ほどテスト運用をしてみました。
ヒアリング、ブラッシュアップ
弊社の採用担当者にヒアリングを行いました。その結果、下記のような感想を頂けました。
- メールよりもSlackの方が気づきやすい
- 面接の関係者への連絡がスムーズに進む
- エンジニアにもエントリーがあったことがすぐに伝わる
また、他エンジニアからのフィードバックにも対応し、UI/UXをブラッシュアップしました。
- 人事担当者がWebHook URLを直接入力するのは大変
- 対応:「Slack Button」の導入
- 通知のテストをAjaxで行いたい(初期verでは普通に画面遷移してました)
- 対応: Ajax化
ちなみに、Slack Buttonを押した後の設定画面は下記のようになります。
締め
Slack通知機能の設定は人事向けの管理画面から簡単に設定できます。 Forkwell Jobsで求人を掲載している企業の採用担当者様はぜひお試しください。
(エンジニア向け)Slack Button の実装方法
せっかくなので、Slack Buttonを使ってみたいエンジニア向けに、導入手順もまとめておきます。参考にどうぞ。
まぁ、基本的にSlack Buttonの手順に沿って設定すれば動きます。
1. アプリ登録
Step1. の説明にあるように、Create your appからアプリ登録を行います。
ちなみに、この画面で入力した項目は後から変更が可能です。
2. Slack Button の配置
Step2 にタグが表示されるので、コピーして使います。
Forkwell Jobsではhamlを使ったり、 return_uri
を使っている関係で少し変更して使いました。
%a.add_to_slack(href="https://slack.com/oauth/authorize?scope=incoming-webhook&client_id=#{Settings.slack.client_id}&redirect_uri=#{callback_admin_slack_notification_url(@company.user_name)}") %img(alt="Add to Slack" height="40" width="139" src="https://platform.slack-edge.com/img/add_to_slack.png" srcset="https://platform.slack-edge.com/img/add_to_slack.png 1x, https://platform.slack-edge.com/img/add_to_slack@2x.png 2x")
3. WebHook URLの取得
Slack Buttonを押した後、ユーザーが Team や channel の選択をすると、 return_uri
に戻ってきます。
戻ってきたらoauth.accessを参考に、WebHook URLを取得します。
- Controller
def callback(code) redirect_uri = callback_admin_slack_notification_url(username: @company.user_name) if @company.update_slack_url_by(code, redirect_uri) notice = 'Webhook URLの設定に成功しました' else notice = 'Webhook URLの設定に失敗しました' end redirect_to edit_admin_slack_notification_path(username: @company.user_name), notice: notice end
- Model
def update_slack_url_by(code, redirect_uri) ret = false params = { client_id: Settings.slack.client_id, client_secret: Settings.slack.client_secret, code: code, redirect_uri: redirect_uri } uri = URI.parse "https://slack.com/api/oauth.access?#{params.to_query}" res = Net::HTTP.get(uri) json = ActiveSupport::JSON.decode res ret = update slack_url: json['incoming_webhook']['url'] if json['ok'] rescue => e Airbrake.notify e ensure return ret end