1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

シフト勤務の職場で明日誰が出社するのかがわかるSlack用BotをGAS(GoogleAppsScript)で実装した

Posted at

現在リモート勤務になっていますが、フルリモートではなくシフト制です。
時々出社日を忘れる人が出てくるようになったので、上司がスプレッドシートで作るシフトデータをベースに、夕方ごろ自動的に翌日の出社メンバーをSlackに投稿するBotを作りました。

元にするデータと最終出力

Slackへの投稿例

夕方5時~6時の間に翌営業日のシフトが投稿されます
image.png

元となるデータ例

上司がExcelで作るものをGoogleSpreadSheetにコピペしています(「シフト表」シート)
image.png

実装方法

翌営業日のシフト用のシートを作る

シフト表が入ったシートと同じスプレッドシートに新規にシートを作成し、「翌営業日の出社予定」と名前をつけて、A1セルに以下の関数をコピーします。
=query('シフト表'!A:D,"WHERE A= date '"&TEXT(WORKDAY(TODAY(),1),"YYYY-MM-DD")&"'",-1)
image.png

翌営業日の予定からテキストを組み立て、Slackに投稿するコードを書く

Spreadsheetのスクリプトエディタを起動し、以下のソースをコピペして、(1)スプレッドシートのID(2)Slack通知用のWebhook URLの部分を埋めます。
この2つの取得方法については、参考にさせていただいた別の記事が詳しいので末尾にURLを付記してあります。そちらを参照してください

function doPostSlack() {
  //土日の場合は実行しない
  var today_week = new Date().getDay();
  if (today_week == 0 || today_week == 6) { return true; }
  
  // 平日の場合のみ実行
  postSlack();
}

function postSlack() {
  // スプレッドシートを取得
  var obj = SpreadsheetApp.openById('(1)スプレッドシートのID'); 
  // 対象のシートを取得
  var sheet = obj.getSheetByName("翌営業日の出社予定"); 
  
  // 予定の日付を取得し、フォーマットして曜日をつける
  var date = sheet.getRange("A2").getValue()
  var week_ary = ['', '', '', '', '', '', ''];
  var week_num = date.getDay();
  var week = '('+week_ary[week_num]+')';
  date = Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/MM/dd');
  date = date + week;
  
  // 出力する情報をフォーマット
  // 出力例: 2020/11/24(火)---羽川:出社 /
  var values = sheet.getRange("B1:E2").getValues()
  var output = "";
  for (var j = 0; j < values[0].length; j++) {
    if (values[1][j] !== "") {
      output = output + values[0][j] + ":" + values[1][j] + " / ";
    }
  }
  output = date + "---" + output;
  Logger.log(output);

  // payload=データ本体のこと  Slackに送信(post)する内容
  var payload  = {
    'text'      :  output,
    'username'  : '出社予定',      //botの名前
    'channel'   : 'remote',   //投稿するチャンネル名
    'icon_emoji': ':hedgehog:',   //botのアイコン 
  };

  // Slackに送信
  var options = {
    'method'      : 'post',
    'contentType' : 'application/json',
    'payload'     : JSON.stringify(payload), // jsの値をJSON文字列に変換
  };

  var url = '(2)Slack通知用のWebhook URL';
  UrlFetchApp.fetch(url, options);
}

毎日の自動投稿を設定する

「編集」「現在のプロジェクトのトリガー」から「トリガーの追加」を押し、毎日17時~18時の間に動かすようにする
image.png

完成!

あとは指定した時間まで待って実際に動くことを確認して完了です。

参考&謝辞

以下の記事を主に参考にさせていただきました。良い記事を公開してくださりありがとうございます。
(1)スプレッドシートのID(2)Slack通知用のWebhook URLの取得方法 についてもこちらが詳しいです。

【初心者向け】GASを使ったスプレッドシートとSlackの連携(bot制作)
https://qiita.com/unadesuga/items/971c5f7587a7bf8d076d

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?