GASを用いてLINE_BOTの開発を取り組み始めた初心者です。
メッセージアクションの表示、入力された内容をスプレッドシートに飛ばして内容を返信 どちらも別々のbotで作った場合はどちらも正常に動きます。
ですが2つを1つにしたい場合、メッセージアクションは表示できmessege形式で選択された内容の表示までは出来るのですが、スプレッドシートに飛ばし内容を引っ張ってくるという作業が行われず困っている状態です。
作ろうとしているものは
メニューと入力されるとメッセージアクションで選択肢が複数出てきて、
選択肢を選択するとその内容をスプレッドシートに飛ばし、ヒットする語句が見つかった場合
その内容を表示させる
というものです。
至らぬ質問内容になってしまっているかもしれません。
宜しくお願い致します。
gas
1//LINE Messaging APIのチャネルアクセストークン 2var CHANNEL_ACCESS_TOKEN = トークン ; 3 4//スプレッドシートID 5var ss = ID 6 7//シート名 8var sh = シート名 9 10 11 12 13 14function doPost(e) { 15 var contents = e.postData.contents; 16 var obj = JSON.parse(contents); 17 var events = obj["events"]; 18 for (var i = 0; i < events.length; i++) { 19 if (events[i].type == "message") { 20 reply_message(events[i]); 21 } else if (events[i].type == "postback") { 22 post_back(events[i]); 23 } 24 } 25} 26 27function reply_message(e) { 28 var input_text = e.message.text; 29 if (input_text == "メニュー") { 30 var postData = { 31 "replyToken": e.replyToken, 32 33 "messages": [{ 34 "type": "template", 35 "altText": "this is a carousel template", 36 "template": { 37 "type": "carousel", 38 "columns": [{ 39 "thumbnailImageUrl": "画像URL", 40 "imageBackgroundColor": "#000000", 41 "title": "テスト1", 42 "text": "test2", 43 "actions": [{ 44 "type": "message", 45 "label": "テスト1", 46 "text": "テスト1" 47 }, 48 49 50 ] 51 }, 52 { 53 "thumbnailImageUrl": "画像URL", 54 "imageBackgroundColor": "#000000", 55 "title": "テスト2", 56 "text": "test2", 57 "actions": [{ 58 "type": "message", 59 "label": "テスト2", 60 "text": "テスト2", 61 62 }, 63 64 ] 65 } 66 ] 67 } 68 }] 69 }; 70 }else{ 71 72 //JSON文字列をパース(解析)し、変数jsonに格納する 73 var json = JSON.parse(e.postData.contents); 74 75 //変数jsonを関数replyFromSheetに渡し、replyFromSheetを実行する 76 replyFromSheet(json) 77 } 78 79 80 81//返信用の関数replyFromSheet 82// data には変数jsonが代入される 83function replyFromSheet(data) { 84 //返信先URL 85 var replyUrl = "https://api.line.me/v2/bot/message/reply"; 86 87 //シートの最終行を取得する 88 var lastRow = sh.getLastRow(); 89 90 //シートの全受信語句と返信語句を二次元配列で取得する 91 var wordList = sh.getRange(1,1,lastRow,2).getValues(); 92 93 //受信したメッセージ情報を変数に格納する 94 var reply_token = data.events[0].replyToken; //reply token 95 var text = data.events[0].message.text; //ユーザーが送信した語句 96 97 //返信語句を格納するための空配列を宣言する 98 var replyTextList = []; 99 100 //LINEで受信した語句がシートの受信語句と同じ場合、返信語句をreplyTextにpushする 101 for(var i = 1; i < wordList.length; i++) { 102 if(wordList[i][0] == text) { 103 replyTextList.push(wordList[i][1]); 104 } 105 } 106 107 108 //LINEで受信した語句がシートの受信語句と一致しない場合、関数を終了する 109 if(replyTextList.length < 1) { 110 return; 111 112 //replyTextListのLengthが5より大きい場合、messageLengthを5にする 113 //※※一度に最大5つの吹き出ししか返信できないためです※※ 114 } else if(replyTextList.length > 5) { 115 var messageLength = 5; 116 } else { 117 var messageLength = replyTextList.length; 118 } 119 120 //"messages"に渡す配列を格納するための空配列を宣言する 121 //[{"type": "text", "text": "返信語句その1"},{"type": "text", "text": "返信語句その2"}....] 122 var messageArray = []; 123 124 //replyTextListに格納されている返信語句を最大5つ、messageArrayにpushする 125 for(var j = 0; j < messageLength; j++) { 126 messageArray.push({"type": "text", "text": replyTextList[j]}); 127 } 128 129 var headers = { 130 "Content-Type": "application/json; charset=UTF-8", 131 "Authorization": "Bearer " + LINE_ACCESS_TOKEN, 132 }; 133 134 var postData = { 135 "replyToken": reply_token, 136 "messages": messageArray 137 }; 138 139 var options = { 140 "method" : "post", 141 "headers" : headers, 142 "payload" : JSON.stringify(postData) 143 }; 144 145 //LINE Messaging APIにデータを送信する 146 UrlFetchApp.fetch(replyUrl, options); 147} 148 149 150 151 152 153 154 155 156 fetch_data(postData); 157 158 function fetch_data(postData) { 159 var options = { 160 "method": "post", 161 "headers": { 162 "Content-Type": "application/json", 163 "Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN 164 }, 165 "payload": JSON.stringify(postData) 166 }; 167 UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", options); 168 } 169} 170
あなたの回答
tips
プレビュー