前提・実現したいこと
非エンジニアながらスプレッドシートとGASを使いLINEbotを作成してます。
スプレッドシートに登録している語句に一致しなかった場合に、任意の語句、例えば「質問の答えがありません。ほかの質問をお願いします。」と返答させたい場合のコードをご教示ください。
発生している問題・エラーメッセージ
この部分を終了させずに任意の語句を送信させるときのコードを教えてください。
//LINEで受信した語句がシートの受信語句と一致しない場合、関数を終了する if(replyType.length < 1) { return;
該当のソースコード
javascript
1//★★LINE Messaging APIのチャネルアクセストークン★★ 2var LINE_ACCESS_TOKEN = "チャネルアクセストークンをここに入力"; 3 4//★★スプレッドシートID★★ 5var ss = SpreadsheetApp.openById("スプレッドシートIDをここに入力"); 6 7//★★シート名★★ 8var sh = ss.getSheetByName("シート名をここに入力"); 9 10//LINEからPOSTリクエストを受けたときに起動する 11//eはJSON文字列 12function doPost(e){ 13 if (typeof e === "undefined"){ 14 //動作を終了する 15 return; 16 } else { 17 //JSON文字列をパース(解析)し、変数jsonに格納する 18 var json = JSON.parse(e.postData.contents); 19 20 //変数jsonを関数replyFromSheetに渡し、replyFromSheetを実行する 21 replyFromSheet(json) 22 } 23 } 24 25//返信用の関数replyFromSheet 26//dataには変数jsonが代入される 27function replyFromSheet(data) { 28 //返信先URL 29 var replyUrl = "https://api.line.me/v2/bot/message/reply"; 30 31 //シートの最終行を取得する 32 var lastRow = sh.getLastRow(); 33 34 //シートのA~G列を二次元配列で取得する 35 var wordList = sh.getRange(1,1,lastRow,7).getValues(); 36 37 //受信したメッセージ情報を変数に格納する 38 var reply_token = data.events[0].replyToken; //reply token 39 var text = data.events[0].message.text; //ユーザーが送信した語句 40 41 //返信メッセージのタイプを格納するための空配列を宣言する 42 var replyType = []; 43 44 //返信メッセージを格納するための空配列を宣言する 45 var replyList = []; 46 47 //LINEで受信した語句がシートの受信語句と同じ場合、 48 //返信メッセージのタイプをreplyTypeにpushし、 49 //さらにその行のA列~G列をreplyListにpushする 50 for(var i = 1; i < wordList.length; i++) { 51 if(wordList[i][0] == text) { 52 replyType.push(wordList[i][1]); 53 replyList.push(wordList[i]); //ポイント: 一次元配列をpushする 54 } 55 } 56 57 //LINEで受信した語句がシートの受信語句と一致しない場合、関数を終了する 58 if(replyType.length < 1) { 59 return; 60 61 //replyTypeのLengthが5より大きい場合、messageLengthを5にする 62 //※※一度に最大5つの吹き出ししか返信できないため※※ 63 } else if(replyType.length > 5) { 64 var messageLength = 5; 65 } else { 66 var messageLength = replyType.length; 67 } 68 69 //"messages"に渡す配列を格納するための空配列を宣言する 70 var messageArray = []; 71 72 //replyTypeに格納されている返信メッセージのタイプと 73 //replyListに格納されている返信メッセージを最大5つ、 74 //messageArrayにpushする 75 for(var j = 0; j < messageLength; j++) { 76 switch (replyType[j]) { 77 case "text": 78 messageArray.push({"type": replyType[j], "text": replyList[j][2]}); 79 break; 80 81 case "sticker": 82 messageArray.push({"type": replyType[j], "packageId": replyList[j][3], "stickerId": replyList[j][4]}); 83 break; 84 85 case "image": 86 messageArray.push({"type": replyType[j], "originalContentUrl": replyList[j][5], "previewImageUrl": replyList[j][6]}); 87 break; 88 89 case "video": 90 messageArray.push({"type": replyType[j], "originalContentUrl": replyList[j][5], "previewImageUrl": replyList[j][6]}); 91 break; 92 93 //replyList[j][2]はJSON.parseを使ってパースする必要がある 94 case "flex": 95 messageArray.push({"type": replyType[j], "altText": "this is a flex message", "contents": JSON.parse(replyList[j][2])}); 96 break; 97 } 98 } 99 100 var headers = { 101 "Content-Type": "application/json; charset=UTF-8", 102 "Authorization": "Bearer " + LINE_ACCESS_TOKEN, 103 }; 104 105 var postData = { 106 "replyToken": reply_token, 107 "messages": messageArray 108 }; 109 110 var options = { 111 "method" : "post", 112 "headers" : headers, 113 "payload" : JSON.stringify(postData) 114 }; 115 116 //LINE Messaging APIにデータを送信する 117 UrlFetchApp.fetch(replyUrl, options); 118}
試したこと
以下参照しながら載っているとおりに動作しました。
https://www.yukibnb.com/entry/linemessagingapi_gas_sticker
補足情報(FW/ツールのバージョンなど)

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。