Gmail から LINE にプッシュ通知する
特定の差出人、かつ本文の内容に特定の文字があったら、LINE グループにメールの本文を投稿する仕組みです。関連する情報が沢山あるので、ここでは流れと設定する場所について集中的にメモを残します。やりたいことに必要な登場人物と、流れは以下図のとおりです。
①狙ったメールが Gmail のメールボックスに到着します。
②Gmail のフィルターを使用して、「特定の差出人メールアドレス」と「本文に特定文字列」があったら、指定のラベルを付与させます。
③Google Apps Script(以降GAS)のコード(後述)が1分おきに Gmail のメールボックスをチェックしていて、指定のラベルがついたメールを見つけます。
※補足
Gmail のフィルターを使用せず、特定条件のメールを見つける役割も GAS のコードに担当させてもいいのですが、コードが煩雑になることと、少しの条件を変更する必要が発生したときに Gmail のフィルター操作で済むことから、メールを特定する役割を Gmail と GAS コードに分けました。
④GAS のコードは、LINE Notify の API をコールして、指定の LINE アカウントの指定のグループに、メール本文の内容とともに通知依頼します。
⑤LINE Notify API は、指定の LINE アカウントのグループに、メール本文の内容を、LINE Notify というロボットアカウントを通じて投稿します。
以上がざっくりとした流れです。
ここから設定が必要な場所について説明します。
■LINE Notify API の設定
①LINE マイページにログイン
https://notify-bot.line.me/ja/
上記ページの右上にある「ログイン」をクリックし、 LINE アプリのアカウント(LINE アプリで登録したメールアドレスとパスワード)でログインします。
②LINE アクセストークンの発行と取得
正常にログインが完了すると、右上のログインが「LINE の名前」に変わるので、再びクリックし、「マイページ」をクリックします。以下の「トークンを発行する」をクリックします。
トークンの発行に必要な情報は以下のとおり。最後に「発行する」をクリックするとアクセストークンが表示されます。トークンは Google Apps Script で使用するためメモしておきます。
■Google Apps Script(以降GAS)
①GAS にログインする
https://script.google.com/home
上記に Gmail アカウントでログインします。Google にログインしていない場合、英語の Home 画面に遷移するので「Start Scripting」をクリックしてログインします。
②プロジェクトの作成
コードを記述する前にプロジェクトを作成します。左上の「新しいプロジェクト」をクリックします。
③GAS のコードを記載する
GAS のコードは JavaScript で記述します。以下はあつもり様のコードをもとに記載しています(あつもり様ありがとうございます)。なお、私の環境に合わせて主に二点の変更を行っています。
・特定の件名にマッチさせる条件から、特定のラベル名にマッチさせる条件に変更
※”subject” から “label” に変更する
・メールの本文にURLでよく使用される”&”(アンパサンド)が入っていても、投稿文で途切れないように変更
※payload の変数セパレータを “+” から “:” に変更するだけですが。。
そのまま使用するとしても、1行目と16行目は修正が必要です。なお、検索演算子で他には以下のようなものがあります。
subject 演算子
記載例:subject:test(件名にtestと含まれているものがマッチ)
from 演算子
記載例:from:xxxxx@gmail.com(差出人アドレスとマッチ)
var FindWord = '{label:ラベル名}';
function getMail(){
var myThreads = GmailApp.search(FindWord, 0, 10);
var myMessages = GmailApp.getMessagesForThreads(myThreads);
for(var i in myMessages){
for(var j in myMessages[i]){
if(!myMessages[i][j].isStarred()){
var strMessage = myMessages[i][j].getPlainBody().slice(0,600);
sendLine(strMessage);
myMessages[i][j].star();
}
}
}
}
function sendLine(strMessage){
var strToken = "LINEアクセストークン";
var options =
{
"method" : "post",
"payload" : {"message" : strMessage},
"headers" : {"Authorization" : "Bearer "+ strToken}
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options);
}
なお、コードについては、仮の実行テストができます。今回の例だと、通知したいメールが Gmail に存在していることを確認し、フィルターが適用されていて、かつ、★マークがついていない状態になっていることを確認してから、テストをします。
何回かテストするならば、都度、Gmail のメールの★マークを外して実行します。
但し、本番のアクセストークンを記述している場合、うまく動作するとターゲットの LINE グループにも投稿されます。
■GAS コードの実行トリガーを設定する
①プロジェクトの右側の ⁝ をクリックし、続いて「トリガー」をクリックします。画面が変わったら右下の「トリガーの追加」をクリックします。
②トリガーの設定
以下は1分間隔でコードを実行させる例となります。
重要な点ですが、1アカウントかつ24時間あたりのトリガーの実行回数や実行時間などに上限があります。簡単な処理のコードを1分間隔で実行させた場合は上限に引っ掛かりませんが、さらに別のコードを並列で1分間隔で実行すると確実に24時間以内に上限に達してエラーとなります。
なので、今回のやりたい例では、メールが到着したらLINEグループのメンバーにすぐに知らせたいので1分間隔としていますが、そこまで即時性を求めないならば、5分間隔以上にしておけば、ほかのコードの実行も可能となります。
制限については以下のページがよくまとまっています。
【GAS】Google Apps Scriptの制限・上限まとめ【実行回数・時間・容量】
https://monoblog.jp/archives/2349
Google、Gmail および Google、Gmail のロゴは、Google LLC の登録商標です。
LINE および LINE ロゴは、LINE 株式会社の商標または登録商標です。