前提・実現したいこと
LINE BOTの開発をしています。
受信メッセージの中にスプレッドシート内の文字列が含まれていれば
メッセージを送信できるようにしたいです。
追記:受信メッセージの文字列がスプレッドシート内の文字と部分一致していれば
メッセージを送信できるようにしたいです。
発生している問題
受信メッセージ(text_str)からスプレッドシート内のA列の文字と一致するものを探して
あれば右のセルにある文字を送信するものになってますが、
text_strとエクセルの文字列が一致しないと送れません。
一致時のみ返信は確認済みです。
GAS
1/* 2スプレッドシート 3[ 4[おはよう,はい、朝ですね。], 5[こんにちは,はい、いい一日ですね。] 6] 7*/ 8var API_URL = 'https://api.line.me/v2/bot/message/reply'; // 固定です 9var CHANNEL_ACCESS_TOKEN = 'XXXXXX'; 10 11function doPost(e) { 12 13 var reply_token= JSON.parse(e.postData.contents).events[0].replyToken; 14 if (typeof reply_token === 'undefined') { 15 return; 16 } 17 18var user_message=""; 19var text_str = JSON.parse(e.postData.contents).events[0].message.text;//"おはようございます"を代入 20 21var sheet = SpreadsheetApp.openById('YYYYYY').getSheets()[0]; 22var arrData = sheet.getDataRange().getValues(); 23 24var _ = Underscore.load(); 25var arrTrans = _.zip.apply(_, arrData); 26var gyo = arrTrans[0].indexOf(text_str); 27 28if (gyo != -1){ 29user_message=sheet.getRange(gyo+1,2).getValue();//期待してる返事:はい、朝ですね。 30}else{ 31user_message="失敗です。"; 32} 33 34UrlFetchApp.fetch(API_URL, { 35 'headers': { 36 'Content-Type': 'application/json; charset=UTF-8', 37 'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN, 38 }, 39 'method': 'post', 40 'payload': JSON.stringify({ 41 'replyToken': reply_token, 42 'messages': { 43 'type': 'text', 44 'text': user_message 45 }, 46 }), 47 }); 48 return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON); 49}
試したこと
ここよりGASのUnderscoreを導入済、コードも参考にしています。
https://tonari-it.com/gas-array-underscore-zip-apply/
indexOf(/text_str/)では返ってこないようです。
var gyo = arrTrans[0].indexOf(text_str);
↑この行の一つ手前で
Logger.log(arrTrans)を実行するとどのようなログが出力されるのでしょうか?
返信ありがとうございます!
[
[おはよう,はい、朝ですね。],
[こんにちは,はい、いい一日ですね。]
]
です。
Logger.log(arrData)を実行するとどのようなログが出力されるのでしょうか?
[[おはよう,はい、朝ですね。],[こんにちは,はい、いい一日ですね。]]
です。
中身が変化してないですね
var gyo = arrTrans[0].indexOf(text_str);
の手前でのLogger.log(arrTrans)実行で
[[おはよう,こんにちは],[はい、朝ですね。,はい、いい一日ですね。]]
でした。
すみません読み違えてました…訂正です
あれ、じゃあ上手くいってそうですね。
これって何が上手くいかないんですか?
「失敗です。」が表示される感じですか?
すみません私の質問がかなり良くなかったようです
text_str(受信メッセージ)の文字列がシートの文字と「部分一致」した行を探そうとしています。
要は「おはようございます」と受信すれば「おはよう」と書かれている行を返したかったのです。
混乱を招いて申し訳ありません。質問を修正するつもりです。
なるほど 完全一致は出来るけど部分一致ができないという質問だったのですね。
teritamaさんの回答で上手くできそうですね。
回答についてteritamaさんと相談したいと思います。
長く相談に乗っていただきありがとうございました。
回答1件
あなたの回答
tips
プレビュー