GASを使用しスプレッドシートの語句を返信するLINE BOTを作成してます。
【シリーズ第4話】コピペでOK!スプレッドシートの語句を返信するLINE BOTをGASで作成する方法(実践編)
を参考に作成しました。
このままのコードではうまくいきましたが、アレンジしたく検討中です。
複数の列の返答をしたいです。
A3の「も」を送信すると、B3の「じょ」とC3の「ファ」が返信されるようにしたいです。
コード
gas
1 2 3//★★LINE Messaging APIのチャネルアクセストークン★★ 4var LINE_ACCESS_TOKEN = "*********"; 5 6//★★スプレッドシートID★★ 7var ss = SpreadsheetApp.openById("***********"); 8 9//★★シート名★★ 10var sh = ss.getSheetByName("a"); 11 12 13//LINE Messaging APIからPOST送信を受けたときに起動する 14// e はJSON文字列 15function doPost(e){ 16 if (typeof e === "undefined"){ 17 //動作を終了する 18 return; 19 } else { 20 //JSON文字列をパース(解析)し、変数jsonに格納する 21 var json = JSON.parse(e.postData.contents); 22 23 //変数jsonを関数replyFromSheetに渡し、replyFromSheetを実行する 24 replyFromSheet(json) 25 } 26} 27 28//返信用の関数replyFromSheet 29// data には変数jsonが代入される 30function replyFromSheet(data) { 31 //返信先URL 32 var replyUrl = "https://api.line.me/v2/bot/message/reply"; 33 34 //シートの最終行を取得する 35 var lastRow = sh.getLastRow(); 36 37 //シートの全受信語句と返信語句を二次元配列で取得する 38 var wordList = sh.getRange(1,1,lastRow,3).getValues(); 39 40 //受信したメッセージ情報を変数に格納する 41 var reply_token = data.events[0].replyToken; //reply token 42 var text = data.events[0].message.text; //ユーザーが送信した語句 43 44 //返信語句を格納するための空配列を宣言する 45 var replyTextList = []; 46 47 //LINEで受信した語句がシートの受信語句と同じ場合、返信語句をreplyTextにpushする 48 for(var i = 1; i < wordList.length; i++) { 49 if(wordList[i][0] == text) { 50 replyTextList.push(wordList[i][1:2]); 51 } 52 } 53 54 55 //LINEで受信した語句がシートの受信語句と一致しない場合、関数を終了する 56 if(replyTextList.length < 1) { 57 return; 58 59 //replyTextListのLengthが5より大きい場合、messageLengthを5にする 60 //※※一度に最大5つの吹き出ししか返信できないためです※※ 61 } else if(replyTextList.length > 5) { 62 var messageLength = 5; 63 } else { 64 var messageLength = replyTextList.length; 65 } 66 67 //"messages"に渡す配列を格納するための空配列を宣言する 68 //[{"type": "text", "text": "返信語句その1"},{"type": "text", "text": "返信語句その2"}....] 69 var messageArray = []; 70 71 //replyTextListに格納されている返信語句を最大5つ、messageArrayにpushする 72 for(var j = 0; j < messageLength; j++) { 73 messageArray.push({"type": "text", "text": replyTextList[j]}); 74 } 75 76 var headers = { 77 "Content-Type": "application/json; charset=UTF-8", 78 "Authorization": "Bearer " + LINE_ACCESS_TOKEN, 79 }; 80 81 var postData = { 82 "replyToken": reply_token, 83 "messages": messageArray 84 }; 85 86 var options = { 87 "method" : "post", 88 "headers" : headers, 89 "payload" : JSON.stringify(postData) 90 }; 91 92 //LINE Messaging APIにデータを送信する 93 UrlFetchApp.fetch(replyUrl, options); 94} 95 96 97
試したコード
gas
1 //シートの全受信語句と返信語句を二次元配列で取得する 2 //試したコード 3var wordList = sh.getRange(1,1,lastRow,3).getValues(); 4 //もとのコード 5 var wordList = sh.getRange(1,1,lastRow,2).getValues(); 6 7 8 //LINEで受信した語句がシートの受信語句と同じ場合、返信語句をreplyTextにpushする 9 for(var i = 1; i < wordList.length; i++) { 10 //試したコード 11 if(wordList[i][0] == text) { 12 replyTextList.push(wordList[i][1][2]);←ここの表記?が問題かなと 13 } 14 }
getRangeは下記のサイトを参考にしました。
参考
replyTextList.push(wordList[i][1]);の方が検索してもなかなか出てこず困ってます。
助けていただけると幸いです。
回答1件
あなたの回答
tips
プレビュー