Googleカレンダーの通知音って、聞き逃してしまうことはないでしょうか?
オンライン英会話の時間を忘れそうになるので、いつもアラームもセットしているのですが、いい加減設定が手間なので、15分前になったらLineに通知するようにしてみました。
本記事ではその設定方法を解説します。
Googleカレンダーの予定が始まる直前にLineへ通知を送る方法
下記の2つのサービスを利用します。
- Line Notify
- GAS (Google Apps Script)
下記のURLから自分のLineアカウントでログインします。
ログイン名をクリックして、マイページ>トークンを発行するを押して下記の設定をします。
- トークン名
- 通知したいグループ
を選んで発行するボタンを押します。
トークンは発行されるのでコピーして控えておきましょう。
次に新しくスプレッドシートを作成します。
名前は「Line Notify」にしました。
シートが作成できたら、ツール>スクリプトエディタにアクセスしましょう。
下記の記事のコードを引用させていただきました。
コードをコピペします。
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行の部分に必要なデータを入力します。
- LINEトークン
- Googleアカウント
- 何分前通知
虫眼鏡のアイコンを押して、トリガーを作成します。
まずカレンダー情報の取得は1日1回にします。
時間になるとスプレッドシートに時刻と予定が書き込まれます。
トリガーの設定は下記のとおりです。
- dailyCalenderCheck
- 時間主導型>日付ベースのタイマー>午前8時
次にリマインダーの設定をします。
こちらは1分おきにします。
1分おきに現在時刻とスプレッドシート記載された予定時刻とを比べて、N分前になったらLineに通知を飛ばすという仕組みになっています。
- sendRemind
- 時間主導型>分ベースのタイマー>1分おき
初めにLINE Notifyを登録したグループに「LINE Notify」という友達を招待しておきましょう。
以上で設定完了です。
もしテストするときは、カレンダーに15分後移行の予定を作成。
dailyCalenderCheckを実行して予定が読み込まれているか確認。
最後にsendRemindを実行すると通知されます。
うまくいけば下記のような感じでLINEに通知されます。
通知音も設定しておけば、よりGoogleカレンダーの予定に気が付きやすくなりますよ!
海外にいるときの場合
バンクーバーに住み始めたので、設定を東京からバンクーバーに変更してみます。
コード側の変更だけでなく、情報取得元のカレンダーも設定を変更する必要があります。
ます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分前に通知を送ることができますので、興味のある方が是非試してみてください。