前提
完全なる初心者で、GASとスプレッドシートによるLINEbotを作成しようとしています。
恥ずかしながら、有識者様のブログを参考にしているだけの状況です。
実現したいこと
現在は、A列セル内の文字、完全一致で、B列の文字が返ってきます。
例:A列「おはよう」B列「おはよ~」
LINE「おはよう」→「おはよ~」と返ってくる。
LINE「おはよう、いい朝だね」→返ってこない。
今後は、A列セル内の文字が含まれる文章がきたら、B列の文字を返したいです。
例:A列「おはよう」B列「おはよ~」
LINE「おはよう、いい朝だね」→「おはよ~」
発生している問題・エラーメッセージ
indexOfを挿入するも、正常に動作しなくなる
該当のソースコード
GAS(Java)
//★★LINE Messaging APIのチャネルアクセストークン★★
var LINE_ACCESS_TOKEN = "●●●";
//★★スプレッドシートID★★
var ss = ●●●");
//★★シート名★★
var sh = ss.getSheetByName("●●●");
//LINE Messaging APIからPOST送信を受けたときに起動する
// e はJSON文字列
function doPost(e){
if (typeof e === "undefined"){
//動作を終了する
return;
} else {
//JSON文字列をパース(解析)し、変数jsonに格納する
var json = JSON.parse(e.postData.contents);
//変数jsonを関数replyFromSheetに渡し、replyFromSheetを実行する replyFromSheet(json)
}
}
//返信用の関数replyFromSheet
// data には変数jsonが代入される
function replyFromSheet(data) {
//返信先URL
var replyUrl = "https://api.line.me/v2/bot/message/reply";
//シートの最終行を取得する
var lastRow = sh.getLastRow();
//シートの全受信語句と返信語句を二次元配列で取得する
var wordList = sh.getRange(1,1,lastRow,2).getValues();
//受信したメッセージ情報を変数に格納する
var reply_token = data.events[0].replyToken; //reply token
var text = data.events[0].message.text; //ユーザーが送信した語句
//返信語句を格納するための空配列を宣言する
var replyTextList = [];
//LINEで受信した語句がシートの受信語句と同じ場合、返信語句をreplyTextにpushする
for(var i = 1; i < wordList.length; i++) {
if(wordList[i][0] == text) {
replyTextList.push(wordList[i][1]);
}
}
//LINEで受信した語句がシートの受信語句と一致しない場合、関数を終了する
if(replyTextList.length < 1) {
return;
//replyTextListのLengthが5より大きい場合、messageLengthを5にする
//※※一度に最大5つの吹き出ししか返信できないためです※※
} else if(replyTextList.length > 5) {
var messageLength = 5;
} else {
var messageLength = replyTextList.length;
}
//"messages"に渡す配列を格納するための空配列を宣言する
//[{"type": "text", "text": "返信語句その1"},{"type": "text", "text": "返信語句その2"}....]
var messageArray = [];
//replyTextListに格納されている返信語句を最大5つ、messageArrayにpushする
for(var j = 0; j < messageLength; j++) {
messageArray.push({"type": "text", "text": replyTextList[j]});
}
var headers = {
"Content-Type": "application/json; charset=UTF-8",
"Authorization": "Bearer " + LINE_ACCESS_TOKEN,
};
var postData = {
"replyToken": reply_token,
"messages": messageArray
};
var options = {
"method" : "post",
"headers" : headers,
"payload" : JSON.stringify(postData)
};
//LINE Messaging APIにデータを送信する
UrlFetchApp.fetch(replyUrl, options);
}
試したこと
for (var i = 0; i < wordList.length; i++) {
if (json.indexOf(wordList[i][0]) > -1) {
gyo = i;
break;
}
}
などに置き換えたりしてみましたが、動作自体が止まります。
(上記と似たようなパターンで何度か置き換えしてみましたがダメでした。。)
補足情報(FW/ツールのバージョンなど)
特になし。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/01/24 07:32
2023/01/24 07:35
2023/01/24 07:46
2023/01/25 05:38
2023/01/25 17:35
2023/02/02 14:28
2023/02/03 02:11