【業務効率化】GmailをLINEに自動転送する方法

とある飲食店のオーナー様から「Gmailへ届くメールをスタッフ用のLINEグループに転送したい」という相談を受けました。今回は「メール文面に特定キーワードがあるメールを、LINEグループに転送する」という仕様で仕組みを作ってみたいと思います。

事の発端は、コロナ禍でのテイクアウト注文の増加

ご相談いただいたオーナー様のお店では、コロナ前まではテイクアウトの注文は、日に1件程度だったとの事です。しかし、コロナ禍になり、テイクアウトの需要が増加。店先での受注数も二桁の日が増え、調理が間に合わず、お客様をお待たせするケースが増えてしまったとのことでした。
そこで、調理時間の閾値と、1時間あたりの注文上限を設けた、Webでの事前予約制に変更したそうです。
利用しているWeb予約ツールは、受注時にメールでお知らせする仕組みでしたので「日常的にスタッフが利用してるLINEグループへ通知はできないか?」とのご相談でした。

準備するもの

今回は以下のツールを利用します

  • LINE Notify
  • Google App Script

事前準備としては、通知の管理を行いたいLINEのアカウントで、LINE IDを取得しておいてください。
また、メールを受信しているGmailのアカウントへもログインできる状態にしておいてください。

ステップ1:LINE Notifyでアクセストークンをもらう

以下のURLを開き、右上の「ログイン」から、通知の管理を行いたいLINEのアカウントでログインしてください。(LINE IDが必要です)

https://notify-bot.line.me/ja/

ログイン後は、右上のメニューから「マイページ」を開きます。

「アクセストークンの発行(開発者向け)」から「トークンを発行する」を選択します。

「トークン名」は何でも良いですが、LINEで通知される時に表示される文字になりますので、実際の利用目的に近い名称にする方が良いです。また、通知を送信するトークルームに関しては、通知をしたいLINEグループ(上記では自分自身にしています)を選択してください。

「発行する」を押すことで、アクセストークンというものが発行されます。画面にも書いてありますが、2度と表示されないので、メモ帳などのアプリにコピペし、内容をメモしておきましょう。

ここまでで、LINE Notifyのせて血は終わりです。
続いて、Google App Scriptの設定を行います。

ステップ2:Google App Scriptの設定

続いて、Gmail側の設定を行います。以下のURLを開きます。その際、LINEに転送したいメールを受信しているメールアドレスで、Googleにログインしてください。

https://script.google.com/home

上記の画面が開いたら、左上にある「新しいプロジェクト」をクリックします。

もともと入力されている項目を削除します、上記の画像の赤枠部分です。
削除後、以下のコードをコピペしてください。

//書き換えはここから
var lineToken = "xxxxx"; //LINE notifyで発行したトークンを入力
var words = ""; //メール内で検索したい文字を入力(スペースで区切りで複数入力できます)
var f_body = 1; //0:LINEの通知に本文を表示させない場合は0、LINE通知に本文を表示させる場合は1
//書き換えるのはここまで

var interval = 1; //未読確認時間(分単位):例)1の場合、1分前に未読だったメールを通知します

function send_line(Me){
 var payload = {'message' :   Me};
 var options ={
   "method"  : "post",
   "payload" : payload,
   "headers" : {"Authorization" : "Bearer "+ lineToken}  
 };
 UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}


function fetchContactMail() {
 //取得間隔
 var now_time= Math.floor(new Date().getTime() / 1000) ;//現在時刻を変換
 var time_term = now_time - ((60 * interval) + 3); //秒にして+3秒しておく
 
 //検索条件指定
  var strTerms = '(subject:{' + words + '} is:unread after:'+ time_term + ')';
 
 //取得
 var myThreads = GmailApp.search(strTerms);
 var myMsgs = GmailApp.getMessagesForThreads(myThreads);
 var valMsgs = [];
 for(var i = 0; i < myMsgs.length;i++){
   valMsgs[i] = " " + myMsgs[i].slice(-1)[0].getDate().getMonth() + "/"+ myMsgs[i].slice(-1)[0].getDate().getDate() 
    + " " + myMsgs[i].slice(-1)[0].getDate().getHours() + ":" + myMsgs[i].slice(-1)[0].getDate().getMinutes() 
    + "\n[from]" + myMsgs[i].slice(-1)[0].getFrom()
    + "\n" + myMsgs[i].slice(-1)[0].getSubject()
   
   if(f_body == 1){
     valMsgs[i] = valMsgs[i] + "\n\n[Message]\n"+ myMsgs[i].slice(-1)[0].getPlainBody();
   }
 }
 
 return valMsgs;
}


function main() {
 new_Me = fetchContactMail()
 if(new_Me.length > 0){
   for(var i = new_Me.length-1; i >= 0; i--){
     send_line(new_Me[i])
   }
 }
}

コピペが済んだら、必要な箇所の書き換えを行います。以下の赤枠部分です。
lineTokenのXXXXXの部分は、先ほどLINE Notifyで取得したトークンをそのまま入力しましょう。
wordsの部分は、メールの文面内の単語を入力します、入力しない場合すべてのメールがLINEに転送されます。今回は「予約」というキーワードで登録します。
f_bodyの部分は1にしました、LINE通知にメール本文を表示させる設定です。
最後に下の画像の矢印部分のアイコンをクリックして保存しましょう。「無題のプロジェクト」の部分をクリックするとタイトルの変更も可能です。

ここまでできたら、下の画像の赤枠部分を「main」に変更し、すぐ横にある「実行」クリックします。

実行すると、以下のような画面が別ウインドウで開きます。

左下の「詳細」をクリックすると、項目が展開します。

「無題のプロジェクト(安全では無いページ)に移動」をクリックします。
※プロジェクトのタイトルを変更している場合は、「無題のプロジェクト」ではなく、変更したタイトル名が表示されます。

進むと、アカウントの選択画面になります。複数アカウント表示される場合がありますが、LINEに転送したいGmailを受信しているアカウントを選択してください。

気にせず「許可」を押してください。
これで、テストが実行されます。画面下の実行ログの部分に「実行完了」と表示されれば大丈夫です。
(キャプチャ使い回しですみません)

トリガーの設定

次に、画面左側の目覚まし時計マークをクリックします。
トリガーという画面が開いたら、右下(ギリギリ見えない感じ)にある「トリガーを追加」をクリックします。

とりあえず、以下の赤枠内と同じになるように設定を変更してください。
また、見切れてますが下部に保存ボタンがあります。設定変更後は「保存」をしてください。

以下の状態で完成です。

ステップ3:テスト

ここまでの設定で、Gmailに届いたメールのうち「予約」という単語が入ったものを、指定したLINE送るという仕組みができているはずです。Gmailに「予約」の文字を含んだメールを送ってみましょう。
1分程度でLINEに通知が届くはずです。送信主は「LINE Notify」です。

まとめ

今回は、GmailをLINEに転送する方法でした。初めは少し難しいかもしれませんが、プログラミングの知識も不要ですので、慣れると簡単です。今回のように、普段使っているツールを工夫して、ちょっとした業務効率化に取り組んでみるのもいいですね。
依頼いただいたオーナーさんの店舗では、予約から概ね1分以内にLINEグループへ予約通知が届いているそうです。