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)
}
少しコードに手なおしをして、上手く作動している。