Gmail から LINE にプッシュ通知する

5034

特定の差出人、かつ本文の内容に特定の文字があったら、LINE グループにメールの本文を投稿する仕組みです。関連する情報が沢山あるので、ここでは流れと設定する場所について集中的にメモを残します。やりたいことに必要な登場人物と、流れは以下図のとおりです。

(c) 2021 makorin.

狙ったメールが 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 株式会社の商標または登録商標です。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です