WEB制作 ブローガー GmailをLINEに転送する

 2021年7月6日 蒸し暑い梅雨

コールハートのHPに、各種書類をWEB申請できるシステムを作った。
その情報を役員全員と共有する方法として、役員のLINEグループにHPからのメールが届くシステムを作っれないかと思案。

最近は便利だ、WEBで調べると色々出てくる。
美味しいとこだけ、いただきま~す。
いくつか調べて寄せ集め。

まずはLINEの設定
WEBページのLINE Notifyでアクセストークンを取得する。
アクセストークンを取得するとLINE NotifyがLINEのトーク画面にできる。
グループを作ってLINE Notifyを招待する。

GASで作ったプログラムにトークンコード記入、保存。
トリガーを設定して完了。

GASプログラム

WEBで見つけたプログラムには、LINE Notifyのトークンを、GASのプロジェクプロパティに格納となっていた。
しかし2019年以降どうも動作が不安定との記述もある。
試しにやってみたが、トークンを読み込んでいるようだが、LINEに転送されない。
やっぱり。
プログラムにトークンコードを直書きすることにした。
トークンのプロパティへの格納はトークンが外に漏れないためだが、現金支払機のプログラムコードなら心配だろうが、メールの転送では問題ないだろう。

2021年7月8日

テストでは上手くいったので役員グループに登録した。
最初は上手く作動していたが、エラーが発生。
5分ごとにエラーメールが配信される。
この手の設定は少しの手順を間違ってもエラーがでる。
再度すべてのプログラムを消去して、新しいプロジェクトで作り変える。
無事作動。

エラー原因
1テスト用のプロジェクトが生きていた?
2トークン直書きコードのミス?
3設定ミス?
ううう、どれも考えられる~。

時間をかけないと頭が回らない。
毎日ちょろちょろ、3日かかってしまった。



//下記の行を変更

const LINE_NOTIFY_TOKEN = PropertiesService
  .getScriptProperties()
  .getProperty('LINE_NOTIFY_TOKEN')


//以下がコード全文、と言ってもWEBで探したコードにトークンコードを直書きにしただけだけど。//


const LINE_NOTIFY_TOKEN = ”トークンコード ”
const ENDPOINT = 'https://notify-api.line.me/api/notify'

const FROM_ADDRESS = [''].join(' OR ') // ’ ’ ここ転送アドれるが指定できる//
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)
  const query = `(is:unread from:(${FROM_ADDRESS}) after:${intervalMinutesAgo})`
  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()}
受信日: ${latestMessage.getDate().toLocaleString()}
From: ${latestMessage.getFrom()}
--------------------------------------

${latestMessage.getPlainBody().slice(0, 350)}  //ここを0,0にすると件名のみ//
`    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)
}


少しコードに手なおしをして、上手く作動している。