実現したいこと
GAS
1var LINE_ACCESS_TOKEN = "XXXXXXXXXXXXXXXXXXXX"; 2var ss = SpreadsheetApp.openById("XXXXXXXXXXXXX"); 3var sh = ss.getSheetByName("XXXXXXXXXXXXXXXXX"); 4 5function doPost(e) { 6 if (typeof e === "undefined") { 7 return; 8 } else { 9 var json = JSON.parse(e.postData.getDataAsString()); 10 replyFromSheet(json) 11 } 12} 13 14function replyFromSheet(data) { 15 var replyUrl = "https://api.line.me/v2/bot/message/reply"; 16 var lastRow = sh.getLastRow(); 17 var wordList = sh.getRange(1, 1, lastRow, 2).getValues(); 18 var reply_token = data.events[0].replyToken; //reply token 19 var text = data.events[0].message.text; 20 var replyTextList = []; 21 22 for (var i = 1; i < wordList.length; i++) { 23 if (wordList[i][0].match(text)) { 24 replyTextList.push(wordList[i][1]); 25 } 26 } 27 28 if (replyTextList.length < 1) { 29 return; 30 31 } else if (replyTextList.length > 5) { 32 var messageLength = 5; 33 } else { 34 var messageLength = replyTextList.length; 35 } 36 37 var messageArray = []; 38 39 for (var j = 0; j < messageLength; j++) { 40 messageArray.push({ "type": "text", "text": replyTextList[j] }); 41 } 42 43 var headers = { 44 "Content-Type": "application/json; charset=UTF-8", 45 "Authorization": "Bearer " + LINE_ACCESS_TOKEN, 46 }; 47 48 var postData = { 49 "replyToken": reply_token, 50 "messages": messageArray 51 }; 52 53 var options = { 54 "method": "post", 55 "headers": headers, 56 "payload": JSON.stringify(postData) 57 }; 58 59 UrlFetchApp.fetch(replyUrl, options); 60}
発生している問題・分からないこと
部分一致で返信したいです。
wordList[i][0] ここを"あああ"のように定数にすると動作するのですが、スプレッドシートから取得した文字列だと動作しません。
該当のソースコード
for (var i = 1; i < wordList.length; i++) { if (wordList[i][0].match(text)) { replyTextList.push(wordList[i][1]); } }
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
wordList[i][0]を、定数"あああ"等にした場合は動作したが戻すと動作しなくなりました。
補足
特になし
スプレッドシートから取得した値がどのようになっているか確認してみてはいかがでしょうか?
下記のように実際にログ出力をして確認し、
textの文字列と一致しているかどうかを見てみてください。
または条件式をそのままログ出力してみて
trueになっているか確認する方法でもよいと思います。
for (var i = 1; i < wordList.length; i++) {
Logger.log(wordList[i][0]);
Logger.log(wordList[i][0].match(text));
if (wordList[i][0].match(text)) {
replyTextList.push(wordList[i][1]);
}
}
あなたの回答
tips
プレビュー