メニュー

Googleカレンダー│予定が始まる直前にLineへ通知を送る方法

18445_google-calendar-line-notify

Googleカレンダーの通知音って、聞き逃してしまうことはないでしょうか?

オンライン英会話の時間を忘れそうになるので、いつもアラームもセットしているのですが、いい加減設定が手間なので、15分前になったらLineに通知するようにしてみました。

本記事ではその設定方法を解説します。

海外でフリーランスをしているテクニカルアーティスト
ゲーム開発・映像制作・WEB制作等を請け負っています。
当ブログは作業効率化のための技術ブログです。

目次

Googleカレンダーの予定が始まる直前にLineへ通知を送る方法

下記の2つのサービスを利用します。

  1. Line Notify
  2. GAS (Google Apps Script)
STEP
LINE Notifyにログイン

下記のURLから自分のLineアカウントでログインします。

STEP
アクセストークンの発行

ログイン名をクリックして、マイページ>トークンを発行するを押して下記の設定をします。

  1. トークン名
  2. 通知したいグループ

を選んで発行するボタンを押します。

STEP
アクセストークンの発行

トークンは発行されるのでコピーして控えておきましょう。

STEP
新しくスプレッドシートを作成

次に新しくスプレッドシートを作成します。

名前は「Line Notify」にしました。

URLにhttp://spreadsheets.new/と打つとすぐシートが作成できるので便利です。

シートが作成できたら、ツール>スクリプトエディタにアクセスしましょう。

STEP
スクリプトの作成

下記の記事のコードを引用させていただきました。

コードをコピペします。

var lineToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; //LINEトークン
var googleAccount = "xxxxxxxxx@gmail.com"; //Googleアカウント
var notifytime = 15 ;//何分前通知

var calenderSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
var calenderSheet = calenderSpreadSheet.getActiveSheet();

function dailyCalenderCheck() { 
  var myCal = CalendarApp.getCalendarById(googleAccount); 
  var myEvents = myCal.getEventsForDay(new Date());
  var addCellList = [];
  for (var i = 0; i < myEvents.length; i++) {
    var title = myEvents[i].getTitle();
    var startTime = Utilities.formatDate(myEvents[i].getStartTime(), 'JST', 'HH:mm')
    if (startTime != "00:00") {
      addCellList.push([startTime, title]);
    }
  } 
  addCellList.sort(function (a, b) {
    var aTime = a[0].split(":");
    var bTime = b[0].split(":");
    if (parseInt(aTime[0]) == parseInt(bTime[0])) {
      return parseInt(aTime[1]) - parseInt(bTime[1]);
    } else {
      return parseInt(aTime[0]) - parseInt(bTime[0]);
    }
  });
  var addRange = calenderSheet.getRange("A1:B" + addCellList.length);
  addRange.setValues(addCellList);
}

function sendRemind() {
  var range = calenderSheet.getRange("A1:B1");
  var schedule = range.getValues();
  var time = schedule[0][0];
  var title = schedule[0][1];
  var tmpDate = new Date();
  tmpDate.setMinutes(tmpDate.getMinutes() + notifytime);
  var hour = tmpDate.getHours();
  if (hour < 10) {
    hour = "0" + hour;
  }
  var minute = tmpDate.getMinutes();
  if (minute < 10) {
    minute = "0" + minute;
  }
  var triggeredTime = hour + ":" + minute;
  if (time == "" || time != triggeredTime) {
    return;
  }
  var sendText = time + "に" + title + "の予定が始まります。";
  sendLineMessage(sendText);
  range.deleteCells(SpreadsheetApp.Dimension.ROWS);
}

function sendLineMessage(sendText) {
  var token = lineToken;
  var opt = {
    "method": "POST",
    "payload": "message=" + sendText,
    "headers": {
      "Authorization": "Bearer " + token
    }
  };
  UrlFetchApp.fetch("https://notify-api.line.me/api/notify", opt);
}

冒頭の3行の部分に必要なデータを入力します。

  1. LINEトークン
  2. Googleアカウント
  3. 何分前通知
STEP
トリガーの作成

虫眼鏡のアイコンを押して、トリガーを作成します。

まずカレンダー情報の取得は1日1回にします。

時間になるとスプレッドシートに時刻と予定が書き込まれます。

※スプレッドシートは書式なしの状態にしてください。
書式を付けてしまうと余計な記述が入ってしまいます。

トリガーの設定は下記のとおりです。

  1. dailyCalenderCheck
  2. 時間主導型>日付ベースのタイマー>午前8時

次にリマインダーの設定をします。

こちらは1分おきにします。

1分おきに現在時刻とスプレッドシート記載された予定時刻とを比べて、N分前になったらLineに通知を飛ばすという仕組みになっています。

  1. sendRemind
  2. 時間主導型>分ベースのタイマー>1分おき
STEP
LINEグループにLINE Notifyを追加

初めにLINE Notifyを登録したグループに「LINE Notify」という友達を招待しておきましょう。

※招待しないと通知されません!

以上で設定完了です。

もしテストするときは、カレンダーに15分後移行の予定を作成。

dailyCalenderCheckを実行して予定が読み込まれているか確認。

最後にsendRemindを実行すると通知されます。

うまくいけば下記のような感じでLINEに通知されます。

すいみん

通知音も設定しておけば、よりGoogleカレンダーの予定に気が付きやすくなりますよ!

海外にいるときの場合

バンクーバーに住み始めたので、設定を東京からバンクーバーに変更してみます。

STEP
Googleカレンダーの設定を海外に

コード側の変更だけでなく、情報取得元のカレンダーも設定を変更する必要があります。

STEP
コード側のタイムゾーンを海外設定に

ますappscript.json(マニュフェスト ファイル)のコードを変更します。

timeZone": "America/Vancouver

リマインダー.gsのタイムゾーンのコードを変更。

var startTime = Utilities.formatDate(myEvents[i].getStartTime(), 'America/Vancouver', 'HH:mm')

Googleカレンダーの予定が始まる直前にLineへ通知を送る方法

本記事では「予定が始まる直前にLineへ通知を送る方法」を書きました。

GASとLINE Notifyを連動させることで、LINEでもN分前に通知を送ることができますので、興味のある方が是非試してみてください。

全記事一覧

  • URLをコピーしました!
目次