きっかけ
娘が通っている保育園では、毎朝登園したときに登園通知がきます。
(保護者が登園時にタブレットでボタンを押す -> 連携アプリからPUSH通知とメールが来る)
ただ、仮に車に置き去り…なんてことがあれば、通知が来ないわけで。 通知が来ないことに気づく って私には難しいと思っていたんです。
そんな時、こちらの素晴らしいNoteをみて、これを応用したら 通知が来ないことの通知 を作れそうだなと思ったので作ってみました。
準備
このあたりの準備が必要ですが、上記のNoteに詳しく記載があったので、ここでは省略します。
異なるのはスクリプトと、実行時間(毎分ではなく毎朝9~10時)くらいです。
- Gmailで登園メールにラベルを付ける。(今回は「保育園入室」というラベル)
- Line Notifyでアクセストークンの発行してLINEグループに紐づける。
- GoogleDriveからGoogle Apps Scriptを立ち上げる。
Script
const accessToken = '******************'; // LINE Notifyのアクセストークン
// 平日9時になっても保育園入室の通知がない場合、LINEに通知を送信する。
function sendNotificationOfNoEntry() {
// 最新1件のスレッドのメッセージを取得
const label = GmailApp.getUserLabelByName('保育園入室'); // ラベル名を指定
const message = label.getThreads(0, 1)[0].getMessages()[0];
// 当日の入室通知が既に来ている場合は何もせず終了
let today = new Date();
today.setHours(0, 0, 0, 0);
if (today < message.getDate()) {
console.log('既に入室メールが来ています');
return 0;
}
// 当日が土日祝日なら何もせず終了
if (isWeekend(today) || isHoliday(today)) {
console.log('本日は土日祝日のため対象外です');
return 0;
}
// LINEへ通知
const options = {
'method' : 'post',
'payload' : {'message': '【緊急!】本日まだ保育園に入室していません。至急保育園に確認してください。'},
'headers' : {'Authorization': 'Bearer ' + accessToken}
};
const result = UrlFetchApp.fetch('https://notify-api.line.me/api/notify', options);
if (result.getResponseCode() === 200) {
console.log('LINE通知が送信されました。');
} else {
console.log('LINE通知送信に失敗しました。', result.toString());
}
}
// 当日が週末か
function isWeekend(targetDate) {
const day = targetDate.getDay();
return (day === 0 || day === 6)
}
// 当日が祝日か
function isHoliday(targetDate) {
const calendar = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com');
const startDate = new Date(targetDate.getFullYear(), targetDate.getMonth(), targetDate.getDate(), 0, 0, 0);
const endDate = new Date(targetDate.getFullYear(), targetDate.getMonth(), targetDate.getDate(), 23, 59, 59);
const events = calendar.getEvents(startDate, endDate);
return events.length > 0
}