Gmailに届いた塾の出退通知を、LINEに自動で通知させてみる

LINE表示 子育て

子どもが通ってる塾では、着いた(教室に入る)時/帰る(教室を出る)時 に、個人のカードを通すことで、登録した保護者のメールに通知してくれるサービスがあります。

これは、とっても安心できるのですが、いくつか課題がありまして。
1)保護者のメールは1つしか登録することができない……。→ 両親どっちに通知する問題。
2)メールだと気づきにくい……。→ いっそLINEに送ってくれたほうが助かる問題。

塾に、家族などの複数人登録も許可してください/LINEで送ってください。 と訴えても、そう簡単には変わらないだろうことが予想されます。
こんな時こそ、ITのチカラを活用しなくては! と、LINEの家族のグループに自動通知する仕組みを入れることにしました。
何かアクションがあったら/起きたら、これをする! という自動化は、IFTTTというサービスがとても手軽で、わかりやすいものなので、これを使おうと考えたのですが・・。「Gmail と LINEのサービスに連携する」とが)できない・・・ ということで、もう少しあれこれ調べてみると、「GAS(Google App Script)と、LINE Notify の2つのサービスを使うとよい。」ということで、久々にコードを読み解くことになりました。

偉大なる先人の方のコードを拝借です(ありがとうございます)

  優秀な芸術家は模倣し、偉大な芸術家は盗む(ピカソ)

  1)Gmailの新着メールをLINEに転送する by Google Apps Script

    https://panda-program.com/posts/gmail-to-line

  2)Gmailの新着通知をLINEで受け取る by Google App Script

    https://note.com/yuut6/n/nb3528b53ddfa

おっと
おっと

ここで解説されているコードが秀逸で、
活用させていただくことに!

では、早速、手順を まとめていきます。

LINE Notify を登録

  1. LINE Notify(ify-bot.line.me/ja/)を開く
  2. アクセストークン発行
    後でGASでコピペします
     トークン名:通知の頭に必ず付く文字になります
     トークルーム:通知先のルーム(家族のグループを指定)
  3. LINEアプリで、家族のグループに「LINE notify」を招待

GAS(Google App Script)でコード作成

  1. コード全文を エディタにはりつける
  2. 転送したいメールの送信元アドレス(★部分)を追記
     ★部分を、送信元のアドレスに置き換えて、記入します。
     記載した送信者アドレスからのメールにだけ反応させることができます。
     ここには、@example.comといった記載の仕方をすることで、ドメインでの指定もできます。
  3. 通知したいメッセージの内容を指定(ヘッダ部分を編集、送りたい本文の文字数を変更)
     送られてくるメールが定型文になっていることを利用して、LINEへの通知をシンプル化しています。ご自身のメール通知パターンに合わせて、変更してください。
    私が行っているおKとは・・
    ①メールの件名から、一部を取り出し(★★部分;★は削除してください)
       このコード例では、0-7文字を抜き出します
    ②件名と本文の間に”—”を区切りとして入れています(★★★部分;★は削除してください)
    ③メールの本文から、一部を取り出し(★★★★部分;★は削除してください)
       このコード例では、27-47文字目を抜き出します

<コード全文>

const LINE_NOTIFY_TOKEN = PropertiesService
  .getScriptProperties()
  .getProperty('LINE_NOTIFY_TOKEN')
const ENDPOINT = 'https://notify-api.line.me/api/notify'

// 1. 転送したいメールの送信元アドレスを指定する
const FROM_ADDRESS = ['★'].join(' OR ')
// 2. トリガーの設定間隔と合わせる
const MINUTES_INTERVAL = 5

function main() {
  const notices = fetchNotices()

  if (notices.length === 0) {
    return
  }

  for (const notice of notices) {
    send(notice)
  }
}

function fetchNotices() {
  const now = Math.floor(new Date().getTime() / 1000)
  const intervalMinutesAgo = now - (60 * MINUTES_INTERVAL)
    // 3. 検索条件を設定
  const query = `(is:unread from:(${FROM_ADDRESS}) after:${intervalMinutesAgo})`

  // 4. メールを取得する
  const threads = GmailApp.search(query)

  if (threads.length === 0) {
    return []
  }

  const mails = GmailApp.getMessagesForThreads(threads)
  const notices = []

  for (const messages of mails) {
    const latestMessage = messages.pop()
    const notice = `
${latestMessage.getSubject().slice(0,7)}★★
---★★★
${latestMessage.getPlainBody().slice(27, 47)}★★★★
`
    notices.push(notice)

    latestMessage.markRead()
  }

  return notices
}

function send(notice) {
  if (LINE_NOTIFY_TOKEN === null) {
    Logger.log('LINE_NOTIFY_TOKEN is not set.')
    return
  }

  const options = {
    'method': 'POST',
    'headers': {'Authorization': `Bearer ${LINE_NOTIFY_TOKEN}`},
    'payload': {'message': notice},
  }

  UrlFetchApp.fetch(ENDPOINT, options)
}

GASでトリガーを設定

  1. GASで、(編集)>(現在のプロジェクトのトリガー)をクリック
  2. トリガーの設定画面になったら、(トリガーを追加)をクリック
  3. 下記のように設定

GASのプロパティに、アクセストークン値を保存

  1. (以前のエディタ)に変えて
  2. GASから (ファイル)>(プロジェクトのプロパティ)>(スクリプトのプロパティ)を開いて入力
  3. 行を追加して、プロパティに LINE_NOTIFY_TOKEN を。
  4. 値に 発行したアクセストークン値 を入れます
  5. で、保存。

完成! 実際にテストしてみましょう

届いたメールが思った通りにLINEに転送されるか、トライ!
指定した文字数やパターンを、何度かリトライして、完成させることができました。

おっと
おっと

プログラミングに慣れていない方は、ちょっとひよってしまいそうですが、そんなに難しいことはないので、頑張って!

一度 自働化してしまえば、あとはラクチン生活です。

タイトルとURLをコピーしました