質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

0回答

74閲覧

LINEbot:部分一致で返信したい(GAS、スプレッドシート利用)

ebisun

総合スコア1

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2024/11/07 17:50

実現したいこと

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]を、定数"あああ"等にした場合は動作したが戻すと動作しなくなりました。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dadadaiiiiiii

2024/11/13 12:54

スプレッドシートから取得した値がどのようになっているか確認してみてはいかがでしょうか? 下記のように実際にログ出力をして確認し、 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]); } }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問