6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

週次で運用担当者にSlackでメンションするリマインダーBOTをサクッと作る

Last updated at Posted at 2023-12-05

本記事は ZOZO Advent Calendar 2023 シリーズ 7 の 6 日目の記事です。

概要

この記事では、Google Apps Script(GAS)を使用して、Slackで定期的に担当者にメンションしてリマインドする Slack bot をササっと作成する方法をご紹介します。

背景

推薦基盤ブロックでは、ZOZOTOWNのHOME面に掲載しているモジュールの管理・運用を担当しています。モジュールに関する詳細な説明は 3日目の記事 で行っていますので、興味があればご参照ください。

モジュールは定期的に更新されたり、施策のモジュールが差し込まれたりするため、運用業務が頻繁に発生します。これまでは毎月、担当者をランダムに選定していましたが、差し込み依頼が増えてきたため、誰かが負担を抱える可能性もありました。

そこで、毎週担当者を指名する Slack bot を作成し、指名された担当者が一週間モジュールの運用を担当するような運用フローを導入しました。これにより、差し込み依頼が発生した際に『『誰が担当するんだ...!?』』といった曖昧な時間がなくなり、開発業務により集中できるようになりました。

Slack APPの作成

  1. slack api > Your Apps から「Create New App」を選択し、新しいアプリを作成します。今回の用途が限られているため、「From scratch」を選択し、App NameとWorkspaceを指定してアプリを作成します。
    image.png

  2. 「Incoming Webhooks」を選択し、「Activate Incoming Webhooks」をONにします。
    image.png

  3. 「Add New Webhook to Workspace」を選択し、メッセージを送信するチャンネルを選択します。
    image.png

  4. これにより、Webhook URLが生成されます。このURLを後で使用します。
    image.png

これでSlack Appの設定が完了し、後続の手順でこのWebhook URLを使用します。

Google Apps Script(GAS)の作成

GASの実装はこちらの記事を参考にしました。コードの詳細も詳しく説明されているので、実装がスムーズに進みました。関数の説明などはこちらを参考にしてみてください!

  1. スプレットシートを用意します。

  2. 以下のような表を作成します。メンション先は"<@userid>"という形式にする必要があるので、注意してください。
    image.png

  3. 上部タブから「拡張機能 > Apps Script」を選択します。

  4. 以下のコードをコピーして、適宜書き換えてください。

    // slackに通知する関数
    function notifyMondayMorningInfo() {
      messageBody = fetchMembers() ;
      setForSlack(messageBody, 'チャンネル名'); // 先ほど選択したチャンネルを指定する
    }
    
    // 担当者の取得と通知メッセージを成形する関数
    function fetchMembers() {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート名'); // 表が記載されているsheetの名前を指定する
      var member = sheet.getRange('B2').getValues();
      var message =
        '今週の担当者は、' + member + 'です!\n' +
        '参考資料はこちら: <https://XXXXXXX>\n' +
        '今週も一週間よろしくお願いします!!';
    
      rotateMembers(sheet);
      return message;
    }
    
    // 表の担当者のセルをローテーションする関数
    function rotateMembers(sheet) {
      var memberRange = sheet.getRange('B2:B7'); // 人数によってセルを変更する
      var members = memberRange.getValues();
      members.push(members.shift());
      memberRange.setValues(members);
    }
    
    // SlackのWebhook URLにHTTPリクエストを送る関数
    function setForSlack(body, channel) {  
      var url = 'https://hooks.slack.com/services/ハッシュ値'; // 生成した Webhook URL をコピペする
      var data = {
        'channel' : channel,
        'username' : '今週の担当者をお知らせ',
        'attachments': [{
          'color': '#008000',
          'text' : body,
        }],
      };
    
      var payload = JSON.stringify(data);
      var options = {
        'method' : 'POST',
        'contentType' : 'application/json',
        'payload' : payload
      };
    
      UrlFetchApp.fetch(url, options);
    }
    
  5. コードを保存した後、トリガーを設定します。
    image.png
    設定内容は以下のようにしました。
    image.png

  6. これでSlackに毎週メンションが飛ぶようになりました。
    image.png

6
3
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
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?