目次
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
予定の取得自体はすぐできたのですが、今日の予定から抜き出すという条件式がよくわからず・・・
一気に取得してその後絞るのは比較的簡単にできそうだったので、機会があれば試してみたいと思います。
