概要
プロジェクトのスケジュールをスプレッドシートで管理しているのですが、それを見に行くのが億劫と言われたので、毎日SLACKにリマインドさせることにしました
slack通知用のwebhookをチャンネルに追加
「プロジェクトのメニュー 」 -> 「その他管理項目」 -> 「App管理」 -> 「カスタムインテグレーション」 -> 「Incoming Webhook」 -> 「設定の追加」
から、追加するチャンネルを選択して追加
単純な通知機能を実装
function sendTest()
{
var postUrl = "Webhook URL";
var postChannel = "チャンネル名";
var sendMessage = "test";
sendHttpPost(sendMessage, postUrl, postChannel);
}
/**
* slackへのリクエスト送信
*/
function sendHttpPost(message, postUrl, postChannel)
{
var jsonData = {
"channel" : postChannel,
"text" : message
};
var payload = JSON.stringify(jsonData);
var options = {
"method" : "post",
"contentType" : "application/json",
"payload" : payload
};
UrlFetchApp.fetch(postUrl, options);
}
スプレッドシートの値を読み込んで結果を通知させる処理
function scheduleReminder() {
var postUrl = "Webhook URL";
var postChannel = "チャンネル名";
var sendMessage = "<!here>\n";
var jpDateList = ['日', '月', '火', '水', '木', '金', '土'];
var dateObject = new Date();
if (dateObject.getHours() == 9) {
datetime = Utilities.formatDate(dateObject, "Asia/Tokyo", "yyyy/MM/dd");
} else {
dateObject.setDate(dateObject.getDate() + 1);
datetime = Utilities.formatDate(dateObject, "Asia/Tokyo", "yyyy/MM/dd");
}
sendMessage += "[" + datetime + " (" + jpDateList[dateObject.getDay()] + ")] の予定です。\n";
sendMessage = sendMessage + getRemindMessage(datetime);
// 送信
sendHttpPost(sendMessage, postUrl, postChannel);
}
function getRemindMessage(date) {
var message = "";
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var workingSheet = spreadsheet.getSheetByName("スケジュール");
// ここで今日のrowを取得
var dateColumn = 1; // 日付が入力されているカラム
var contentRow = 2;
var startRow = 2;
var lastRow = workingSheet.getLastRow();
var isFind = 0;
for (var rowCount = startRow; rowCount <= lastRow; rowCount++) {
var tmpValue = workingSheet.getRange(rowCount, dateColumn).getValue();
if(typeof(tmpValue) == "string"){
// 日付型じゃない
continue;
}
if (date == Utilities.formatDate(tmpValue, "Asia/Tokyo", "yyyy/MM/dd")) {
contentRow = rowCount;
isFind = 1;
break;
}
}
if (isFind == 0) {
return "見つかりませんでした。";
}
// 今日の予定が入っている部分を抜き出してメッセージに追加
var titleRow = 1; // タイトルが入力されている行
for (var titleColumn = 3; titleColumn < 7; titleColumn++) {
var titleName = "◆ " + workingSheet.getRange(titleRow, titleColumn).getValue() + "\n";
var content = workingSheet.getRange(contentRow, titleColumn).getValue();
if (content == "") {
// 予定がなければSKIP
continue;
}
content = "```" + content + "```\n\n";
message = message + titleName + content;
}
if (message == "") {
return "何も予定はありません。";
}
return message;
}
function sendHttpPost(message, postUrl, postChannel) {
var jsonData = {
"channel" : postChannel,
"text" : message
};
var payload = JSON.stringify(jsonData);
var options = {
"method" : "post",
"contentType" : "application/json",
"payload" : payload
};
UrlFetchApp.fetch(postUrl, options);
}