GMail to Line Bot
小学校からの緊急メールが埋もれてしまい、見落としが発生した。
このため、使用頻度の高いLINEで管理できるよう以下に変更した。
GMAILを指定条件(未読かつ指定ラベル)で検索した結果をLINE BOTに通知する。
これはNotifyでも可能だが、LINE BOTならお友達にも使ってもらえるため選択した。
version
date | ver | note |
---|---|---|
2020-07-08 | v0.0.1 | |
2020-07-14 | v0.0.2 | label複数条件の設定方法を追記 |
Prerequisites
- registration line-developers
Messaging API利用 こちらから
フリープランOK
- 月額利用料: 無料
- メッセージ配信数(無料分): 1000通
- 追加メッセージ料金: 追加購入不可
-
registration google account
google Apps Script利用 こちらから
Preparation
- line-developersログイン
line-developersを開いて、ログインする。
- Provider選択
Providerがない場合、CreateしてProviderをクリックする。
- Create a channel
Messaging APIを選択し、必要情報を入力してCreateする。
Messaging API settingsの「Channel access token」は後で使います。
Program
- 新しい空のプロジェクトを作成
google apps Scriptを開いて、新しい空のプロジェクトをクリックする。
- ソースコード
Apps Scriptのエディタに下記ソースを貼り付ける。
■ 設定について
- LINEBOT_CHANNEL_TOKEN : Messaging API settingsのChannel access tokenから取得したもの
- LINE_NOTIFY_TOKEN : LINE Notifyを使う場合はこちら
- GMAIL_QUERY : gmailのラベル名を指定する
/* ------------------------------------------------------- */
// setting: LINE BOT
var LINEBOT_CHANNEL_TOKEN = 'XXXXXXXXXXXXXXXX';
// setting: Line Notify ※必要であれば
var LINE_NOTIFY_TOKEN = "XXXXXXXXXXXXXXXX";
// setting: GAMIL ※未読 かつ ラベル名(下記サンプルのラベル条件は複数指定[OR])
var GMAIL_QUERY = "is:unread label:{ラベル名1 ラベル名2}";
/* ------------------------------------------------------- */
// func: LINE BOT
function pushMessageLineBot( _message ) {
var _postData = {
"messages": [{
"type": "text",
"text": _message,
}]
};
var _url = "https://api.line.me/v2/bot/message/broadcast";
var _headers = {
"Content-Type": "application/json",
'Authorization': 'Bearer ' + LINEBOT_CHANNEL_TOKEN,
};
var _options = {
"method": "post",
"headers": _headers,
"payload": JSON.stringify(_postData)
};
var response = UrlFetchApp.fetch(_url, _options);
}
// func: LINE Notify ※必要であれば
function pushLineNotify(_message){
var _options = {
"method" : "post",
"payload" : {'message' : _message},
"headers" : {"Authorization" : "Bearer "+ LINE_NOTIFY_TOKEN}
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify", _options);
}
// func: get GMAIL message
function getMessageGmail() {
// Search Gmail with the given query.
var _gmailThread = GmailApp.search(GMAIL_QUERY);
var _messages = GmailApp.getMessagesForThreads(_gmailThread);
var _items = [];
for(var _idx = 0; _idx < _messages.length;_idx++){
_items[_idx] =
"\n[from]\n" + _messages[_idx].slice(-1)[0].getFrom()
+ "\n"
+ "\n[date]\n"
+ _messages[_idx].slice(-1)[0].getDate().getFullYear()
+ "/" + _messages[_idx].slice(-1)[0].getDate().getMonth()
+ "/" + _messages[_idx].slice(-1)[0].getDate().getDate()
+ " " + _messages[_idx].slice(-1)[0].getDate().getHours()
+ ":" + _messages[_idx].slice(-1)[0].getDate().getMinutes()
+ "\n"
+ "\n[sbject]\n" + _messages[_idx].slice(-1)[0].getSubject()
+ "\n"
+ "\n[Message]\n"+ _messages[_idx].slice(-1)[0].getPlainBody()
+ "\n";
_messages[_idx][0].markRead();
}
return _items;
}
// func: main
function main() {
_items = getMessageGmail()
if( _items.length > 0 ){
for( var _idx = ( _items.length - 1) ; _idx >= 0; _idx-- ){
//pushLineNotify( _items[ _idx ] );
pushMessageLineBot( _items[ _idx ] );
}
}
}
- トリガー作成
以上
Note
GmailApp.searchの複数条件について(追記:2020.07.14)
- AND条件:半角スペースで区切る ※必要に応じて()で囲む
- OR条件:{}で囲む