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

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

新規登録して質問してみよう
ただいま回答率
85.35%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

Q&A

0回答

1176閲覧

GASを用いたLINE BOTでメッセージアクションで選択された内容をスプレッドシートに飛ばして内容を返信させたい。

linebot_center

総合スコア0

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

0グッド

0クリップ

投稿2021/02/17 07:32

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

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問