Googleスプレッドシートの値が変更されたらSlackに通知される仕組みを作ってみた

2024.02.20

皆様、新年あけましておめでとうございます。(遅)
前回のブログ投稿から13か月経ちました黒木です。(汗)
本年も宜しくお願いします。

私は普段、オフライン/オンラインのイベント対応をすることが多いのですが、今日はオフラインイベント時に活用した仕組みの紹介です。

先日、50名規模の既存顧客を招待してのオフラインイベントを実施いたしました。
既存顧客なので、それぞれ担当営業がついております。

お客様が受付を通過された際に、担当営業に速やかに知らせる方法は何かないかなと考えていた時に、同僚から 「スプレッドシートのステータスを変更したらSlackで担当にメンション飛ばす機能があるといいな」 と言われ、作ってみることにしました。

事前にやること

Slackに「Incoming Webhook」をインストールする。
※弊社の場合、Slackへのアプリ追加時は情シスの承認が必要なため「設定をリクエストする」となっています。

アプリインストール後、メンションを通知させたいチャンネル指定を行い、Webhook URLに発行されるURLを別で控える。

スプレッドシートに必要情報を入力する

  • A列:会社名
  • B列:姓
  • C列:名
  • D列:出欠(初期値は申込にしておく)
  • G列:担当営業名
  • J列:G列の担当営業のSlackID
  • Google Apps Script(GAS)を書く

    function notifyToSlack() {
      
      // 変更されたセルの特定
      const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();  // スプレッドシート 
      const sheet = spreadsheet.getActiveSheet();                 // シート  
      const activeCell = sheet.getActiveCell();                   // セル 
      const rows = activeCell.getRow();                           // 行 
      const columns = activeCell.getColumn();                     // 列 
      const activeValue = activeCell.getValue();                  // セルの値 
     
      const sheetName = sheet.getSheetName();
     
      if (sheet.getSheetName() == "申込リスト"){
        if ( columns == 4 ){ // ex.変更されたのがD列であれば、以下の処理に入る  
     
          if ( activeValue == "参加" ){ // ex.ステータスが「参加」の場合、以下の処理に入る 
     
            let ProjectFamilyName = sheet.getRange(rows,2).getValue(); // 2列目の値 
            let ProjectFirstName = sheet.getRange(rows,3).getValue(); // 3列目の値 
            let ProjectCompanyName = sheet.getRange(rows,1).getValue(); // 1列目の値
            let Projectmember_1 = sheet.getRange(rows,10).getValue(); // 10列目の値 
    
            // 投稿内容 自由記述 
            var message = Projectmember_1 + "さん\n" + ProjectCompanyName + "の" + ProjectFamilyName + ProjectFirstName + "様がお見えになりました"
     
            // 以下、通知時のお知らせ方法
            var jsonData =
            {
              'icon_emoji' : ':junbi_kanryou:',//★好きなアイコンを設定してください
              'text': message,
              "username" : "お客様来訪通知"//★アイコンの名前を入れてください
            };
            var payload = JSON.stringify(jsonData);
     
            var options = 
            {
              "method" : "post",
              "contentType" : "application/json",
              "payload" : payload
            };
            
            // WebhookURLを書き換える
    UrlFetchApp.fetch("https://hooks.slack.com/services/xxxxxxxxx/xxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxx", options);  
          }
        }
      }
    }
    

    トリガーの設定を行う


    今回は、ステータスが変更された直後に通知をさせるため、イベントの種類を編集時に設定。

    いざ、実行


    お客様が受付にご来社された際に、ステータスを申込参加に変更すると、、、


    無事、Slackでメンション付きメッセージが届くようになりました\(^o^)/
    ※セルを追加して担当営業やSlackIDを入れる欄を増やせば、複数人にメンションすることももちろん可能です。

    まとめ

    今回、初めてGASを書いてみましたが、思ったより簡単にできました。
    (今は色々な情報もネットに公開されているので探すことさえ出来れば誰でも書くことは容易だと思います)

    社内の小さな便利ツールをこれからも作っていきたいと思います。