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

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("\n");
var option = {as_user: "true"};
slack.postMessage(channelID, text, option);
}

定時実行の設定

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

あとは待つだけ

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です