LINEとメールを連携させて、LINE未利用ユーザとLINEする方法(Ver.1)

【追記】更新版(Ver.2)の記事を作りました。



新年度となり、新たなLINEグループが作られる事の多い時期となりましたね。
そんな時問題になるのが、LINEを利用していない方との連絡手段。
1対1のやり取りなら、メールを利用すれば済む話です。
一方、グループLINEの場合、LINEを利用していない方は「会話に参加できない」「決定事項などを誰かにメールで伝えてもらう必要がある」等、面倒なところがあります。
メーリングリスト等を利用するのも手ですが、それはそれでLINEユーザー側から面倒と言われかねません。

そこで、LINE未利用ユーザがLINEグループに参加できるよう、以下のようなシステムを作ってみました。
①LINE未利用ユーザ→特定のGmailアドレス→LINEグループ
②LINE未利用ユーザ←特定のGmailアドレス←LINEグループ
LINE未利用ユーザは特定のGmailアドレスにメールを送ると、その内容がLINEグループに投稿されます。
また、LINEグループ内に投稿があると、その内容が特定のGmailアドレスからLINE未利用ユーザに送信されます。
このシステムを実現することで、LINE未利用ユーザもLINEグループでの会話に参加できます。
というわけで、①、②に分けて内容を紹介したいと思います。

①LINE未利用ユーザがLINEグループに投稿


こちらを参考にさせていただきました。


コードは若干変更し、以下のようにしました。
今回の場合、メールのタイトルではなく送信者がLINE未利用ユーザであるかどうかを判定できれば良いので、Google Apps Scriptの2行目は以下のように改変しました。
"test@ezweb.ne.jp"はLINE未利用ユーザのメールアドレスです。適宜変更してください。
また、gmailではメールはスレッド単位で扱われるため、スレッドにおける最新の返信のみを投稿することで、「ガラケー等から返信で投稿した際にスレッドの全投稿がLINE上に再投稿される」という現象を回避しています。


  1. // 適合条件をセット
  2. var FindSubject = 'from:test@ezweb.ne.jp;
  3. function getMail(){
  4.   
  5.   //指定した件名のメールを検索して最大5件取得
  6.   var myThreads = GmailApp.search(FindSubject, 0, 5);
  7.   //メール情報を取得し配列に格納
  8.   var myMessages = GmailApp.getMessagesForThreads(myThreads);
  9.   
  10.   
  11.   for(var i in myMessages){
  12.     //スレッドにおける最新の返信のみ利用
  13.     j = myMessages[i].length-1
  14.     
  15.     //スターがついていないものを処理
  16.     if(!myMessages[i][j].isStarred()){
  17.       
  18.       var strDate = myMessages[i][j].getDate();
  19.       var strSubject = myMessages[i][j].getSubject();
  20.       var strMessage = myMessages[i][j].getBody().slice(0,200);
  21.       
  22.       //LINEにメッセージを送信する関数に日付、件名、メッセージをセット
  23.       sendLine(strDate,strSubject,strMessage);
  24.       
  25.       //処理済みフラグとしてスターをつける
  26.       myMessages[i][j].star();
  27.     }
  28.   }
  29. }
  30. function sendLine(strDate,strSubject,strMessage){
  31.   
  32.   //Lineに送信するためのトークン情報は書き換えてください
  33.   var strToken = "トークンを貼り付け";
  34.   var options =
  35.       {
  36.         "method" : "post",
  37.         "payload" : "message=" + strMessage,
  38.         "headers" : {"Authorization" : "Bearer "+ strToken}
  39.   
  40.   };
  41. UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options);
  42. }




②LINEグループの投稿をLINE未利用ユーザに転送


まず、こちらのページの「1.チャネルの作成」の内容を実行します。



アクセストークンの有効期限は0時間=無制限にしておきましょう。
続いて、こちらのページを参考にLINEグループへの投稿内容をメールで送信するプログラムを作ります。



コードは若干変更し、以下のようにしました。
LINEグループに投稿を行うコードをメールを送信するコードに変更した点と、ユーザーの表示名を取得する点が変更点です。


  1. var ACCESS_TOKEN = 'アクセストークンを貼り付け';
  2. var url = 'https://api.line.me/v2/bot/message/reply'; // 応答メッセージ用のAPI URL
  3. /**
  4. * doPost
  5. * ユーザーがLINEにメッセージ送信した時の処理
  6. **/
  7. function doPost(e) {
  8.   
  9.   // メッセージ返信
  10.   replyMessage(e);
  11.   return ContentService.createTextOutput(JSON.stringify({ content: 'post ok' })).setMimeType(ContentService.MimeType.JSON);
  12. };
  13. /**
  14. * replyMessage
  15. * メッセージの返信
  16. **/
  17. var replyMessage = function (e) {
  18.   var strBody = JSON.parse(e.postData.contents).events[0].message.text;
  19.   var replyToken = JSON.parse(e.postData.contents).events[0].replyToken;
  20.   var userId = JSON.parse(e.postData.contents).events[0].source.userId;
  21.   var username = getUsername(userId);
  22.   if (username == 0){
  23.     username = '不明なユーザ';
  24.   }
  25.   
  26.   var strTo="test@ezweb.ne.jp";
  27.   var strSubject="LINE転送";
  28.   
  29.   //メッセージが無かったら殺す
  30.   if (String(strBody) == "undefined") {
  31.     return;
  32.   }
  33.   
  34.   GmailApp.sendEmail(strTo, strSubject, "[" + username + "]" + strBody);
  35. }
  36. //Userの表示名取得
  37. function getUsername(userId) {
  38.   var url = 'https://api.line.me/v2/bot/profile/' + userId;
  39.   try {//エラー処理
  40.     var response = UrlFetchApp.fetch(url, {
  41.       'headers': {
  42.         'Authorization': 'Bearer ' + ACCESS_TOKEN
  43.       }
  44.     })
  45.     }catch(e){ //表示名を取得できなかったら
  46.       return 0;
  47.     }
  48.   return JSON.parse(response.getContentText()).displayName;
  49. }


注意点として、LINEグループ内のユーザがLINE Botのアカウントを友達登録していないとユーザ名が取得できず「不明なユーザ」としてメールが転送されますので、グループ内ユーザに友達登録をお願いする必要があります。





というわけで当方ではこのシステムを活用しております。後は画像と動画に対応したいところです。

コメント

このブログの人気の投稿

湾岸ミッドナイトの聖地についてまとめてみる

MakeMKVでリッピングに失敗する時の対処方法

中華タブレットのバッテリー交換に挑戦した話