Googleカレンダーの予定を開始15分前とか1時間前にLINEで通知する方法【Google Apps Script】

プログラミング

この記事は、Google Apps Script(以下「GAS」) を使って、Googleカレンダーの予定を、開始1時間前とかにLINEに通知する方法について書いています。

通知は、60分前と5分前とか、複数決めることができるので、通知してほしい時間を調整して使ってください。

以下の記事では、受信したGmailをLINEに通知する方法について書いているので、こちらも興味がある方はご覧ください。

Gmailを受信したらLINEに通知する方法【Google Apps Script】




Googleカレンダーの予定を開始15分前とか1時間前にLINEで通知する方法

以下、ざっくりと手順を載せておきます。

  • ① LINE Notifyで通知するためのトークンを取得する
  • ② GASで通知用のコードを書く
  • ③ GASで通知するタイミング(間隔)を指定する

という感じです。

この記事では、Googleカレンダーから予定を取得するためのコード以外はあまり触れないので、「GASでLINEに通知する」というところは、以下の記事を参考にしてください。

はじめての人は、実際に手を動かして試してみると分かりやすいかと。

LINEで自動的にメッセージを定期送信する方法【LINE Notify, Google Apps Script】

Googleアカウントもっていない方は、以下のGoogleの公式ページから、アカウントの作成をしてください。

Googleアカウント

Googleカレンダーから予定を取得するGoogle Apps Scriptコード

以下、コード全文です。
3行目の「const token = “★LINE Notifyのトークン★”;」の星マークで囲っているところに、取得したトークンを記入すればOKです。

// Lineに通知する ------------------------------//
function send(content) {
  const token = "★LINE Notifyのトークン★";
  const options = {
    "method" : "post",
    "payload" : "message=" + content,
    "headers" : {"authorization" : "Bearer " + token}
  }

  UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options)
}

// カレンダーの予定取得 ------------------------------//
function fetchCalendar() {
 
  // 取得間隔
  const minutes = 60;
  const startTime = new Date();
  const endTime = new Date(Date.parse(startTime) + (1000 * 60 * minutes));

  //取得
  const calendar = CalendarApp.getDefaultCalendar();
  const events = calendar.getEvents(startTime, endTime);

  const value = [];

  for(const event of events) {
    // 要素を取得
    const eventStart =event.getStartTime();
    const eventEnd =event.getEndTime();
    const title = event.getTitle();
    const location = event.getLocation();
    const desc = event.getDescription();
    
    // 告知時間の調整
    const checkTime = (event.getStartTime() - startTime) / 1000 / 60;
    const timeToStartArray = [60, 15]; 
    
    // 整形
    function shape(timeToStart) {
      const eventStartTime = eventStart.getMonth() + '月' +eventStart.getDate() + '日 ' 
                      + eventStart.getHours() + '時' +  (("00" + eventStart.getMinutes()).slice(-2)) + '分';
      const eventEndTime = eventEnd.getMonth() + '月' +eventEnd.getDate() + '日 ' 
                      + eventEnd.getHours() + '時' +  (("00" + eventEnd.getMinutes()).slice(-2)) + '分';
      const locationCheck = location ? "▼場所\n" + location  + "\n\n" : "";
      const descCheck = desc ? "▼詳細\n" + desc : "";

      const detail =  "\n"
        + "開始「" + timeToStart + "分前」です!\n\n"
        + "▼予定\n" + title + "\n\n"
        + "開始: " + eventStartTime + "\n"
        + "終了: " + eventEndTime + "\n\n"
        + locationCheck
        + descCheck;

      value.push(detail);
    }
    
    // 条件に当てはまる予定の取得
    for(const i in timeToStartArray) {
      if(checkTime <= timeToStartArray[i] && checkTime > (timeToStartArray[i] - 1)) {
        const timeToStart = timeToStartArray[i]
        shape(timeToStart);
      }
    }
  }

  return value;
}

// 予定の確認とLINEへの通知処理 ------------------------------//
function checkCalendar() {
  const result = fetchCalendar()

  if(result.length > 0){
    for(const i in result) {
      send(result[i]);
    }
  }
}

ここからはいくつか調整できるポイントを紹介します。

  • ① どれくらい先までの予定を確認するか決める
  • ② 予定を通知するタイミング
  • ③ 通知する内容

① どれくらい先までの予定を確認するか決める

// 取得間隔
const minutes = 60;
const startTime = new Date();
const endTime = new Date(Date.parse(startTime) + (1000 * 60 * minutes));

上記の「const minutes = 60;」の数字を分単位で調整してください。
この例では60分としています。

これは、開始時間の何分前に通知するかで決めるとよいです。

たとえば、一番早い通知を2時間前にしたい場合は、「const minutes = 120;」です。

② 予定を通知するタイミング

// 告知時間の調整
const checkTime = (event.getStartTime() - startTime) / 1000 / 60;
const timeToStartArray = [60, 15]; 

上記の「const timeToStartArray = [60, 15]; 」の[]の中の数字を分単位で調整してください。

上記の例は60分前と15分前に通知するという設定です。

数字はコンマで区切ってください。

③ 通知する内容

// 整形
function shape(timeToStart) {
const eventStartTime = eventStart.getMonth() + '月' +eventStart.getDate() + '日 ' 
                     + eventStart.getHours() + '時' +  (("00" + eventStart.getMinutes()).slice(-2)) + '分';
const eventEndTime = eventEnd.getMonth() + '月' +eventEnd.getDate() + '日 ' 
                   + eventEnd.getHours() + '時' +  (("00" + eventEnd.getMinutes()).slice(-2)) + '分';
const locationCheck = location ? "▼場所\n" + location  + "\n\n" : "";
const descCheck = desc ? "▼詳細\n" + desc : "";

const detail =  "\n"
        + "開始「" + timeToStart + "分前」です!\n\n"
        + "▼予定\n" + title + "\n\n"
        + "開始: " + eventStartTime + "\n"
        + "終了: " + eventEndTime + "\n\n"
        + locationCheck
        + descCheck;

value.push(detail);
}

以下のような感じで取得しています。

  • timeToStart = 開始までの時間
  • title = 予定
  • eventStartTime = 開始時間
  • eventEndTime = 終了時間
  • location = 場所
  • desc = 詳細

ここで表示する内容を決めて、改行などで整形しています。

改行は「\n」です。

トリガーの設定とまとめ

コードの入力が終わったら、トリガーを設定しましょう。

トリガーの設定

GASの左側のメニューアイコンにカーソルを合わせると、以下の画像のように右側にメニューが伸びます。

「トリガー」→「トリガーの追加」とクリックしてください。

設定は以下の通りです。

実行する関数を選択実行する関数
実行するデプロイを選択Head
イベントのソースを選択時間主導型
時間ベースのトリガーのタイプを選択分ベースのタイマー
時間の間隔を選択(時間)1分おき

「実行する関数」はそのままなんですが、前項のサンプルコードの場合だと「checkCalendar」です。

まとめ

最後にまとめておきます。

Googleカレンダーの予定を開始時間の前にLINEに通知する方法は以下の通りです。

  • ① LINE Notifyで通知するためのトークンを取得する
  • ② GASで通知用のコードを書く
  • ③ GASで通知するタイミング(間隔)を指定する

①と③は、以下の記事を参考にしてください。

LINEで自動的にメッセージを定期送信する方法【LINE Notify, Google Apps Script】

②の部分が、本記事で紹介しているところです。

最初に記載したコードをまるまる貼り付けて、LINEトークンだけ入力すれば動作しますが、予定の通知タイミングや表示内容を変えたい場合は、前項の内容を参考にしてください。

以上、GASを使って、Googleカレンダーの予定を開始時間の前にLINEに通知する方法でした。