Google Apps ScriptでGoogle ChatとGoogle Calendar連携bot作ってみた

こないだのこのツイート、さっそく試してみた。

最初に参考にしたのは、ツイートにも載せたQiitaのこの記事。

GoogleカレンダーのイベントをHangouts Chatに通知するbotを作った話 – Qiita

ただ、この記事のままだとちょっと使えなかったので(for each文でgasがsyntax error吐いたのと、期間指定が不要)、ちょこちょこ修正したら投稿はできたんだけどカレンダーのイベント取得がうまくできず。

で、カレンダーのイベント取得には、こっちの記事を参照した。

毎朝、当日の予定をGoogleカレンダーから取得してチャットワークに送る – いつも隣にITのお仕事

ただ、カレンダーのイベントは取得できそうだったけど、チャットワークの投稿とGoogle Chatの投稿だと構成が違ってたのでJSONエラーで大分詰まり。

あれこれ悩んで出来上がったハイブリッドタイプがこれ↓。
javascriptド素人なので色々コードが汚いのは置いといてくださいまし(^^;)
動けば正義(おい)

function sendSchedule() {
    var myCals=CalendarApp.getCalendarById('カレンダーID'); //取得したいカレンダーのIDを取得
    var myEvents=myCals.getEventsForDay(new Date()); //カレンダーの本日のイベントを取得
    var webhookUrl = 'webhookの値'; // 投稿先googleチャットのチャットルーム着信Webhook
    var head  = '【カレンダー名】本日の予定' // メッセージのヘッダ
    
     /* イベントの数だけ繰り返し */
     var msg = head;
     for(var i=0;i<myEvents.length;i++){
         var strTitle=myEvents[i].getTitle(); //イベントのタイトル
         var strStart=_HHmm(myEvents[i].getStartTime()); //イベントの開始時刻
         var strEnd=_HHmm(myEvents[i].getEndTime()); //イベントの終了時刻
         msg = msg + '\n' + strStart + ' - ' + strEnd + " " + strTitle + '\n'; //Googleチャットに送る文字列にイベント内容を追加
       }
     
         
     /* Googleチャットにメッセージを送る */
 
     var botMessage = { 'text' : msg }
     var options = {
        'method': 'POST',
        'headers' : {
          'Content-Type': 'application/json; charset=UTF-8'
        },
        'payload':JSON.stringify(botMessage)
       }
            var result = UrlFetchApp.fetch(webhookUrl, options);
       Logger.log(result);
     }
 
 /* 時刻の表記をHH:mmに変更 */
 function _HHmm(str){
 
   return Utilities.formatDate(str, 'JST', 'HH:mm');
 
 }


一応botへの投稿も無事動くことは確認済み。
残念なのは、終日のイベントの場合、開始時刻と終了時刻が0:00-0:00になっちゃう事。
あと、まだ確認したりできたら修正や実装したい機能はいくつかあるにはある…けど、とりあえず動いたからこれ以上の修正は他の人に丸投げするかもしんない(^^;)

一応メモ程度に確認事項(まだ増えるかも)

  • 日をまたがるイベントの挙動確認
  • イベントが無い時の挙動
  • 週次のサマリの取得の仕方

あと、話はちょっとずれるけど、投稿メッセージに絵文字含みたい場合は、コードとか入れるんじゃなくて、スクリプト内に絵文字を直打ち(🆗とか)すればいいらしい。
これ、別のgs書いてる時に、一生懸命コード入れてもそのまま出力されるから、めっちゃ悩んだ…

コメントを残す

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