現在リモート勤務になっていますが、フルリモートではなくシフト制です。
時々出社日を忘れる人が出てくるようになったので、上司がスプレッドシートで作るシフトデータをベースに、夕方ごろ自動的に翌日の出社メンバーをSlackに投稿するBotを作りました。
元にするデータと最終出力
Slackへの投稿例
元となるデータ例
上司がExcelで作るものをGoogleSpreadSheetにコピペしています(「シフト表」シート)
実装方法
翌営業日のシフト用のシートを作る
シフト表が入ったシートと同じスプレッドシートに新規にシートを作成し、「翌営業日の出社予定」と名前をつけて、A1セルに以下の関数をコピーします。
=query('シフト表'!A:D,"WHERE A= date '"&TEXT(WORKDAY(TODAY(),1),"YYYY-MM-DD")&"'",-1)
翌営業日の予定からテキストを組み立て、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時の間に動かすようにする
完成!
あとは指定した時間まで待って実際に動くことを確認して完了です。
参考&謝辞
以下の記事を主に参考にさせていただきました。良い記事を公開してくださりありがとうございます。
(1)スプレッドシートのID
、(2)Slack通知用のWebhook URL
の取得方法 についてもこちらが詳しいです。
【初心者向け】GASを使ったスプレッドシートとSlackの連携(bot制作)
https://qiita.com/unadesuga/items/971c5f7587a7bf8d076d