LoginSignup
2
1

[GAS + Line Notify] 保育園の登園メールが来ないときにLINE通知する

Last updated at Posted at 2024-02-02

きっかけ

娘が通っている保育園では、毎朝登園したときに登園通知がきます。
(保護者が登園時にタブレットでボタンを押す -> 連携アプリから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
}

実行

とりあえずテスト送信してみたところ無事LINEに送信されました。簡単!
tmp_1706835872106.jpg

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1