Googleカレンダーの予定をSlackにリマインドしてみた

2018-03-20 19:14:58


Gooble Apps Scriptが便利そうだなーと思いまして、いろいろ調べていましたところ、
Googleカレンダーの予定をメールでリマインドする方と、
GASを使ってSlackのBotを立てている方がいらっしゃいました。


いいとこどりしてみました。


Googleドライブにスクリプトを作成する


まずはGoogleドライブにアクセスしまして、「新規」→「その他」→「Gooble Apps Script」を選択します。


gas.png

上記のようなテンプレートが現れます。


SlackAppライブラリをインポートする


メニューの「リソース」→「ライブラリ...」を選択します。ダイアログの「ライブラリを追加」のボックスに「M3W5Ut3Q39AaIwLquryEPMwV62A3znfOO」を入力、追加ボタンを押します。この辺の詳細はご本家の方の記事参照


スクリプトプロパティの登録


先に、他人様に見せたくないアクセストークンなどの情報を、スクリプトのプロパティに登録します。(こういうことができるんだ、とビックリ仰天しました!)


メニューの「ファイル」「プロジェクトのプロパティ」「スクリプトのプロパティ」タブを選択します。「行を追加」で、キーと値のペアを追加していきます。



SLACK_POST_ID => SlackのメンバーID("@XXXXXXXX" といった形式)
GCAL_WATCH_ID => リマインドしたいGoogleカレンダーのID(だいたいメールアドレスの形式)
SLACK_ACCESS_TOKEN => Slackの投稿用アクセストークン(xoxp-XXXXXXXXXXXXXXXXXXXXXXXXXXX...とながーいやつ)



GASを書く


さあ、準備はできました。ガッと以下を書き上げます。


function postCalendarNotify() {
var calID = PropertiesService.getScriptProperties().getProperty('GCAL_WATCH_ID');
var cal = CalendarApp.getCalendarById(calID);
var dt = new Date();
dt.setDate(dt.getDate());
var events = cal.getEventsForDay(dt);
var slack = SlackApp.create(PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN'));
var listMsg = [
"本日の予定",
"----------"
]
for(var i = 0; i < events.length; i++)
{
var msg = events[i].getStartTime() + "~ " + events[i].getTitle();
listMsg.push(msg);
}
if(events.length == 0)
{
listMsg.push("ありません");
}
var channelID = PropertiesService.getScriptProperties().getProperty('SLACK_POST_ID');
var text = listMsg.join("\
");
var option = {as_user: "true"};
slack.postMessage(channelID, text, option);
}

定時実行の設定


メニューの「編集」「現在のプロジェクトのトリガー」を選択します。「新しいトリガーを追加」で追加します。一日一回動かしたいので、時間主導型、日タイマー、午前3時~4時、を選択しました。この辺はお好きに設定してください。


あとは待つだけ


夜な夜な、当日の予定がSlackに届きます。