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

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

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

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

Google スプレッドシート

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

Google Apps Script

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

受付中

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

linebot_center
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評価

0クリップ

220閲覧

投稿2021/02/17 07:32

GASを用いてLINE_BOTの開発を取り組み始めた初心者です。
メッセージアクションの表示、入力された内容をスプレッドシートに飛ばして内容を返信 どちらも別々のbotで作った場合はどちらも正常に動きます。
ですが2つを1つにしたい場合、メッセージアクションは表示できmessege形式で選択された内容の表示までは出来るのですが、スプレッドシートに飛ばし内容を引っ張ってくるという作業が行われず困っている状態です。

作ろうとしているものは

メニューと入力されるとメッセージアクションで選択肢が複数出てきて、
選択肢を選択するとその内容をスプレッドシートに飛ばし、ヒットする語句が見つかった場合
その内容を表示させる

というものです。

至らぬ質問内容になってしまっているかもしれません。
宜しくお願い致します。

gas

//LINE Messaging APIのチャネルアクセストークン var CHANNEL_ACCESS_TOKEN = トークン ; //スプレッドシートID var ss = ID //シート名 var sh = シート名 function doPost(e) { var contents = e.postData.contents; var obj = JSON.parse(contents); var events = obj["events"]; for (var i = 0; i < events.length; i++) { if (events[i].type == "message") { reply_message(events[i]); } else if (events[i].type == "postback") { post_back(events[i]); } } } function reply_message(e) { var input_text = e.message.text; if (input_text == "メニュー") { var postData = { "replyToken": e.replyToken, "messages": [{ "type": "template", "altText": "this is a carousel template", "template": { "type": "carousel", "columns": [{ "thumbnailImageUrl": "画像URL", "imageBackgroundColor": "#000000", "title": "テスト1", "text": "test2", "actions": [{ "type": "message", "label": "テスト1", "text": "テスト1" }, ] }, { "thumbnailImageUrl": "画像URL", "imageBackgroundColor": "#000000", "title": "テスト2", "text": "test2", "actions": [{ "type": "message", "label": "テスト2", "text": "テスト2", }, ] } ] } }] }; }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); } fetch_data(postData); function fetch_data(postData) { var options = { "method": "post", "headers": { "Content-Type": "application/json", "Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN }, "payload": JSON.stringify(postData) }; UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", options); } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

LINE Messaging API

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

Google スプレッドシート

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

Google Apps Script

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