【GAS】時間起動でGoogleカレンダー情報を取得してチャットボットで通知する

スキルアップ

はじめに

GASの解説では、Googleカレンダー連携やGoogle Chat連携など個別の説明が多いと考えています。
それぞれの内容を深く理解することも重要ですが、今回は複数の機能を連結することに注目して説明をします。

作成するGASプログラムは次のような場面をイメージして仕様を整理しました。

リモートワークで働くチームのスケジュールをGoogleカレンダーで共有しています。
Googleカレンダーには、会議スケジュールだけでなく、持ち回りの当番、提出物の締切、休暇予定を登録して情報共有しています
しかし、これでは「本日の当番は誰か?」を調べるのが面倒で煩わしいです

そこで、「本日の当番」を毎朝通知するGASプログラムを作成することにしました。

<GASプログラムの仕様>

  • 毎日、決まった時間に自動で実行する。
  • Googleカレンダーから特定キーワード(xxx当番、xxx締切、休暇など)を含むイベントを取得する。
  • Google Chatへメッセージを投稿する。
この記事を読んで分かること
・GASで「定時起動→Googleカレンダー情報取得→Google Chat投稿」を行う方法

この記事で作成するプログラムは次の記事を参考にしています。

(準備)連携サービスの設定

Googleカレンダーへのスケジュール設定

GASを利用してスケジュールを取得するカレンダーを参照できることを確認します。
参照できたら、今回取得するテスト用イベント「朝礼当番」を設定しておきます。

Google Chatでのチャットスペース作成とWebhook設定

チャットボットがメッセージを投稿するチャットスペースを左
新規にチャットスペースを作成する場合は、左サイドバースペース横の[+]から作成します。

スペースに紐付けられたWebhookのURLを確認します。

GASでチャットボットを作成

Google Apps Script(GAS)を作成するために、Googleドライブを表示します。
右上の[+ 新規]ボタンをクリックし、Google Apps Scriptを選択します。

Google Apps Script(GAS)のコード作成画面が表示されます。
ここにGoogle Chatへ設定したWebhookへリクエストを送信するためのプログラムを記述します。

プログラムはJavaScriptをベースにした記載ルールとなります。

下記ソースコードは別記事で紹介した転記+微調整し、それらの呼び出すmain()関数を作成しました。
その上で、[keyword][calenderIds][WEBHOOK_URL][msg]を修正すれば、自分好みのプログラムが作成できます。

function main() {
  //イベント検索のためのキーワードを設定
  var keyword = '朝礼当番';

  //検索対象のカレンダーIDを設定
  var calenderIds = {
    'トビネズミ':'~~~~~~~~~~@xxxx.com'
    };

  //Googleカレンダーのイベント検索を実行
  var hitKeys = getEventsByKeyword(keyword, calenderIds);

  //Google Chatへの投稿を実行
  googleChatBot(keyword, hitKeys);

}


function getEventsByKeyword(keyword, calenderIds) {
  //検索対象の日付を設定
  var startDate = new Date();

  //検索条件にヒットしたカレンダーのKey値を設定
  var hitKeys = [];

  //連想配列のデータを全て繰り返してイベントを検索
  Object.keys(calenderIds).forEach(function(key){
    //カレンダーIDと日付からイベント取得
    var myCalendar = CalendarApp.getOwnedCalendarById(calenderIds[key]);
    var myEvents = myCalendar.getEventsForDay(startDate);

    //取得したイベントがキーワードを含むかを判定
    myEvents.some(function(myEvent){
      var title = myEvent.getTitle();
      if(title.indexOf(keyword)!=-1){
        //条件に合致した場合は、Key値を配列に格納
        hitKeys.push(key);
        //キーワードを含むイベントが見つかればループを終了
        return true;
      };
    });
  });

  return hitKeys;
}


function googleChatBot(keyword, hitKeys) {
  //GoogleChatで設定したWebhookのURLを設定
  const WEBHOOK_URL = "https://chat.googleapis.com/v1/spaces/AAAAINWW1ME/messages?key=AIzaSyDdI0hCZtE6vySjMm-WEfRq3CPzqKqqsHI&token=waBnJBRUeWrxcnsqGh2VdkWjM9RMrnp7_AV6SsF_Lrc";

  //メッセージを作成
  var msg = '';
  msg += '【今日の${keyword}】\n'.replace('${keyword}', keyword);
  if(hitKeys.length == 0){
    msg += ' 担当なし'
  }else{
    hitKeys.forEach(function(name){
      msg += ' ・${name}さん\n'.replace('${name}', name);
    });
  }

  //メッセージを連想配列に格納
  var message = {
    'text' : msg
  };

  //HTTPリクエストのパラメータを設定
  var options = {
    'payload' : JSON.stringify(message),
    'myamethod' : 'POST',
    'contentType' : 'application/json'
  };

  //Google Chatへ投稿(WebhookURLへHTTP POSTを実行)
  var response = UrlFetchApp.fetch(WEBHOOK_URL,options);
}

ソースコードが完成したら、画面上部にある[実行]ボタンをクリックして動作確認します。
実行ログに正常終了したことを伝えるメッセージが表示され、Google Chatスペースにメッセージが投稿されれば成功です。

Googleカレンダーから情報を取得するプログラムは、以下の記事で説明を記載しています。
詳細はこちらをご参照ください。

Google Chatへメッセージを投稿するプログラムは、以下の記事で説明を記載しています。
詳細はこちらをご参照ください。

時刻起動するためのトリガーを設定

[トリガー]画面がにある[+ トリガーを追加]ボタンをクリックしてトリガー作成します。
今回は毎朝8時台に実行する設定を行いました。

[トリガー]画面に設定したトリガーが表示されればOKです。

トリガーの設定方法は、以下の記事で説明を記載しています。
詳細はこちらをご参照ください。

チャットボットの実行結果

チャットボットの実行結果を確認するため、Google Chatのスペースを表示します。
起動条件が8〜9時」なので、予定通りメッセージが投稿されていることが確認できました。

最後に

GASは関数(function)の単位でプログラムを作成します。
そのため、WEBサイト紹介されているサンプルコードを流用したい場合、その関数を転記し、それを呼び出す関数(mainなど)を作成することで自分好みにカスタマイズできます。

このような自動化ツールによって人間が定例作業から解放されれば、本当に必要な仕事に専念できるようになります
是非、本記事を業務効率化の参考にしてください。

コメント

タイトルとURLをコピーしました