2018/03/20(火)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に届きます。

OK キャンセル 確認 その他