💬
シフト表を作ってSlackで連絡する
はじめに
前回作った祝日対応の応用例です。
翌日のシフト担当者を通知するか、営業日でないか、担当者が設定されてないかを通知します。
手順
- Slackのincomming Webhookを使う
- GASでSlackに通知
SlackのIncomming Webhooksを使う
ここから自分のワークスペースに追加できます。
Webhook URLを取得して後ほどGASに設定します。
GASでSlackに通知
//日付計算用の定数
const MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
//編集するシート
const SHEET_ID ="<シートのID>";
const SHEET_NAME = "<シートの名前>";
const SLACK_INCOMMING_WEBHOOK ="<Webhook URLを記載する>";
const RANGE_A1_HOLIDAY = "B2:E400";//日付,曜日,祝日,担当者
function sendSlack(message) {
var payload = JSON.stringify({
text: message
})
//POSTデータ
var option = {
"Content-Type":"application/json; charset=utf-8",
"method" : "POST",
"payload" : payload
};
UrlFetchApp.fetch(SLACK_INCOMMING_WEBHOOK, option);
}
function getBusinessDayValues() {
var sheet = SpreadsheetApp.openById(SHEET_ID);
var editSheet = sheet.getSheetByName(SHEET_NAME);
var rangeValues = editSheet.getRange(RANGE_A1_HOLIDAY).getValues();
var dateArray = {};
for (var v of rangeValues){
//日付のカラ行、曜日の土日、祝日に記載がある場合は担当者を取得しない
if ((v[0] == "") || (v[1] == "土" || v[1] == "日") || (v[2] != "")){
continue;
}
dateArray[v[0]] = v[3];
}
return dateArray;
}
function slackToShiftMember (){
var now = new Date();
//今日の0時
var startOfToday = new Date(now.getFullYear(), now.getMonth(), now.getDate() ,
0, 0, 0);
var sheetDates = getBusinessDayValues();
var nextDay = new Date(startOfToday.getTime() + MILLIS_PER_DAY);
var member = sheetDates[nextDay];
var message = "";
if (member && member !="") {
message = "明日の担当は" + member + "さんです";
} else if(member == ""){
message = "明日の担当は決まっていません";
} else {
message = "明日は営業日ではありません";
}
sendSlack(message);
}
さいごに
コードだけで土日判定と祝日判定、担当者が決まってるかを書くともうちょっと大変なので
Google Sheetにさきに記載して利用すれば、だいぶハードルは下がる気がします。
Discussion