目次
Googleカレンダーから予定の件名に指定された文字がある予定を抜き出してSlackへ通知する
毎日に面接の予定を手動でSlackに通知しているのでどうにかできないかな?と相談されたので
GASで書いてみました。(情シスSlackの皆さんに大変お世話になりました)
下記のような予定だとして、この中で件名に面接/面談という文字列がある場合にその予定を抜き出してSlackへ通知します
Google Apps Scriptの中身
適当なスプレッドシートを作成し、スクリプトエディタを開きます
下記のように記載しました。
説明欄にリンクを張ったりするとHTMLタグがでてきてしまったので途中でタグ除去をしています。
(最初この原因がわからず悩んでました・・・)
function interViewSlackPost() { var Url = ""; var Result = ""; var num = 0; var str = ""; var myCal=CalendarApp.getCalendarById('取得したいカレンダーID'); var events = myCal.getEventsForDay(new Date()); for (var i in events) { var title = events[i].getTitle(); //面接、面談が含まれている場合に出力させる if ( title.match(/面接|面談/) ) { var start = _HHmm(events[i].getStartTime()); var description = events[i].getDescription(); str = str + start + " " + title + '\n' + description + '\n\n'; //Logger.log(description ); num++ } } if ( num >= 1 ) { str = str.replace(/<br>/g, "\n"); str = str.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g,''); Logger.log(str); SlackPost("SlackのincomingURLを記載",str); } } function _HHmm(str){ return Utilities.formatDate(str, 'JST', 'HH:mm'); } function SlackPost(Url,text) { var payload = { "text" : text, } // POSTオプション var options = { "method" : "POST", "payload" : JSON.stringify(payload) } // POSTリクエスト var response = UrlFetchApp.fetch(Url, options); Result = response.getContentText("UTF-8"); }
トリガーで毎朝実行するように設定し、自動的に今日の面接・面談の予定が関係者がいるSlackチャンネルに投稿されるようになりました。
ちょっとしたことですが、担当者が少し楽になったので簡単な改善をしていきたいですね。
MS Flowで同じことをやってみようと思ったのですが、予定の絞り込みでまずつまづきました・・・orz
予定の取得自体はすぐできたのですが、今日の予定から抜き出すという条件式がよくわからず・・・
一気に取得してその後絞るのは比較的簡単にできそうだったので、機会があれば試してみたいと思います。