Googleカレンダーから予定の件名に指定された文字がある予定を抜き出してSlackへ通知する

目次

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

 

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次