作ったLineBotの概要です。
・LineからGmailにあるメールを取得
・gmail上でラベル指定し、受信するメールを選択
・届いたメールをLINEに通知する
実現したいこと
・LINEbotを登録した複数の端末で同じ内容のgmailを受信したい
自分の携帯では思い通りの動きになったのですが、別の携帯に登録したところメールは届きませんでした。
自分なりに調べたところ、下記のコードで一人のユーザーに送信する設定になっているかなと思いました。
var options = { "method" : "post", "headers" : { "Content-Type" : "application/json", "Authorization" : "Bearer " + CHANNEL_ACCESS_TOKEN }, "payload" : JSON.stringify(postData) }; UrlFetchApp.fetch("https://api.line.me/v2/bot/message/push", options); }
ドキュメントを読んでもどう編集したらいいのかもよくわかりませんでした。
また、Udemyで言われて通り作っただけなので、ほとんど知識はありません。
以下は全コードです。
google app scriptに貼り付けています。
ご教授いただけると嬉しいです。
よろしくお願い致します。
var CHANNEL_ACCESS_TOKEN = '********'; var LINE_USER_ID = '********'; var spreadsheet = SpreadsheetApp.openById('********'); //doPost関数(Lineからメッセージを受け取って設定変更) function doPost(e) { var replyToken = JSON.parse(e.postData.contents).events[0].replyToken; if (typeof replyToken === 'undefined') { return; } var messageText = JSON.parse(e.postData.contents).events[0].message.text; var cache = CacheService.getScriptCache(); var type = cache.get("type"); if (type === null) { //ラベル一覧取得 if (messageText === "ラベル") { cache.put("type", 1); var labels = GmailApp.getUserLabels(); reply_push(replyToken, "現在あるラベル一覧です。"); for(var n in labels) { if(labels[n].getName() != 'LineBot'){ labels_push(labels[n].getName()); } } labels_push("受信するラベルを教えてください。\n設定をキャンセルする場合は「キャンセル」と送ってください。"); } else if (messageText === "確認") { //設定確認 cache.put("type", 2); var cell = spreadsheet.getActiveSheet().getRange("A1").getValue(); if(cell === ''){ reply_push(replyToken, "すべての受信メールをLineで通知する設定です。\n設定を変更しますか?\n「はい」「いいえ」"); }else{ reply_push(replyToken, "ラベル名「"+cell+"」の受信する設定になっています。\n設定を変更しますか?「はい」「いいえ」"); } } else if (messageText === "全部") { //すべてのメール受信設定 spreadsheet.getRange("B1").setValue('all'); spreadsheet.getRange("A1").clear(); reply_push(replyToken, "すべての受信メールをLineで通知します。"); } else { //操作方法説明 reply_push(replyToken, "「全部」\nと送るとすべてのメールをLineで通知。\n「ラベル」\nと送ると受信するラベル設定。\n「確認」\nと送ると現在の設定を確認。"); } }else{ if (messageText === "キャンセル") { cache.remove("type"); reply_push(replyToken, "設定をキャンセルをしました"); return; } switch(type) { case "1": // ラベルの設定 var labels = GmailApp.getUserLabels(); for(var n in labels) { if(labels[n].getName() === messageText){ if(messageText === 'LineBot'){ var body = 'LineBotラベルはBotが使用するラベルになります。\n他のラベル名を送ってください。\nキャンセルの場合は「キャンセル」と送ってください。'; }else{ var messageText = hankakuhenkan(messageText); spreadsheet.getRange("A1").setValue(messageText); spreadsheet.getRange("B1").clear(); var cell = spreadsheet.getActiveSheet().getRange("A1").getValue(); var body = "「"+cell+"」ラベルのメールを受信設定しました。"; cache.remove("type"); break; } }else{ var body = 'ラベルが一致しません。\n存在するラベルを送ってください。\nキャンセルの場合は「キャンセル」と送ってください。'; } } reply_push(replyToken, body); break; case "2": //設定確認からの設定変更 if (messageText === "はい") { cache.remove("type"); reply_push(replyToken, "「全部」\nと送るとすべてのメールをLineで通知。\n「ラベル」\nと送ると受信するラベル設定。"); } else if (messageText === "いいえ") { cache.remove("type"); reply_push(replyToken, "このままの設定です。"); } else{ reply_push(replyToken, "「はい」か「いいで」でお答えください。"); break; } break; } } } // replay返信 function reply_push(replyToken, messageText) { var url = "https://api.line.me/v2/bot/message/reply"; UrlFetchApp.fetch(url, { "headers": { "Content-Type": "application/json; charset=UTF-8", "Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN, }, "method": "post", "payload": JSON.stringify({ "replyToken": replyToken, "messages": [{ "type": "text", "text": messageText, }], }), }); return ContentService.createTextOutput(JSON.stringify({"content": "post ok"})).setMimeType(ContentService.MimeType.JSON); } // ラベル用プッシュ通知 function labels_push(messages1) { var postData = { "to": LINE_USER_ID, "messages" : [ { "type" : "text", "text" : messages1 } ] }; var options = { "method" : "post", "headers" : { "Content-Type" : "application/json", "Authorization" : "Bearer " + CHANNEL_ACCESS_TOKEN }, "payload" : JSON.stringify(postData) }; UrlFetchApp.fetch("https://api.line.me/v2/bot/message/push", options); } function hankakuhenkan(val) { var regex = /[A-Za-z0-9!"#$%&'()*+,-./:;<=>?@[\]^_`{|}]/g; value = val .replace(regex, function(s) { return String.fromCharCode(s.charCodeAt(0) - 0xfee0); }) .replace(/[‐-―]/g, "-") // ハイフンなど .replace(/[~?]/g, "~") // チルダ .replace(/ /g, " "); // スペース return value; }
var CHANNEL_ACCESS_TOKEN = '********'; var LINE_USER_ID = '********'; var spreadsheet = SpreadsheetApp.openById('********'); var cell = spreadsheet.getActiveSheet().getRange("A1").getValue(); var date = new Date() ; var unixTime = date.getTime();//UNIX TIMEに変換 var now = Math.floor(unixTime/1000); var term = now - 300; //Gmailのafterフィルター用 現在時刻から5分(300秒)前 var tereEnd = now - 120; //スレッド受信時間用 現在時刻から2分前(120秒)前 function getMail(){ //指定した内容でメール受信 if(cell === ''){ var FindSubject = '-label:LineBot after:'+term; }else{ var FindSubject = '-label:LineBot label:'+cell+' after:'+term; } var myThreads = GmailApp.search(FindSubject,0,1); //スレッドからメールを取得し二次元配列に格納 var myMessages = GmailApp.getMessagesForThreads(myThreads); var target_label = 'LineBot'; var mail_by_label = GmailApp.getUserLabelByName(target_label); if(!mail_by_label){ GmailApp.createLabel('LineBot'); } for(var i=0;i<myMessages.length;i++){ for(var j=0;j<myMessages[i].length;j++){ var strDate = myMessages[i][j].getDate(); var strSubject = "タイトル["+myMessages[i][j].getSubject()+"]\nスレッド番号["+j+"]"; var strMessage = myMessages[i][j].getPlainBody().slice(0,200); var mailID = myMessages[i][j].getId(); var mailURL = "https://mail.google.com/mail/mu/mp/362/#cv/priority//"+mailID; var mailunixTime = strDate.getTime();//UNIX TIMEに変換 var mailTime = Math.floor(mailunixTime/1000); //ミリ秒を秒に変換 if(tereEnd < mailTime){ //LINEにメッセージを送信 line_push(strSubject,strMessage,mailURL); //通知済みのメッセージにラベルをつける var label_treated = GmailApp.getUserLabelByName('LineBot'); myThreads[i].addLabel(label_treated); } } } } // LINEにプッシュ通知する function line_push(messages1,messages2,messages3) { var postData = { "to": LINE_USER_ID, "messages" : [ { "type" : "text", "text" : messages1+"\n\n" + messages2 + "\n\n<メールを開く>\n" + messages3 } ] }; var options = { "method" : "post", "headers" : { "Content-Type" : "application/json", "Authorization" : "Bearer " + CHANNEL_ACCESS_TOKEN }, "payload" : JSON.stringify(postData) }; UrlFetchApp.fetch("https://api.line.me/v2/bot/message/push", options); }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/04 09:52
2020/06/04 10:13
2020/06/04 10:40
2020/06/04 11:45
2020/06/04 16:32