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

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

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

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

Google スプレッドシート

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

Google Apps Script

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

解決済

line bot でスプレッドシートの語句(複数列)を応答したい。GAS使用。

BBA
BBA

総合スコア57

LINE Messaging API

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

Google スプレッドシート

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

Google Apps Script

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

1回答

0リアクション

0クリップ

222閲覧

投稿2022/09/21 08:09

GASを使用しスプレッドシートの語句を返信するLINE BOTを作成してます。

【シリーズ第4話】コピペでOK!スプレッドシートの語句を返信するLINE BOTをGASで作成する方法(実践編)

を参考に作成しました。
このままのコードではうまくいきましたが、アレンジしたく検討中です。

複数の列の返答をしたいです。

イメージ説明

A3の「も」を送信すると、B3の「じょ」とC3の「ファ」が返信されるようにしたいです。

コード

gas

//★★LINE Messaging APIのチャネルアクセストークン★★ var LINE_ACCESS_TOKEN = "*********"; //★★スプレッドシートID★★ var ss = SpreadsheetApp.openById("***********"); //★★シート名★★ var sh = ss.getSheetByName("a"); //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,3).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:2]); } } //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); }

試したコード

gas

//シートの全受信語句と返信語句を二次元配列で取得する //試したコード var wordList = sh.getRange(1,1,lastRow,3).getValues(); //もとのコード var wordList = sh.getRange(1,1,lastRow,2).getValues(); //LINEで受信した語句がシートの受信語句と同じ場合、返信語句をreplyTextにpushする for(var i = 1; i < wordList.length; i++) { //試したコード if(wordList[i][0] == text) {  replyTextList.push(wordList[i][1][2]);←ここの表記?が問題かなと } }

getRangeは下記のサイトを参考にしました。
参考
replyTextList.push(wordList[i][1]);の方が検索してもなかなか出てこず困ってます。

助けていただけると幸いです。

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

YAmaGNZ

2022/09/21 08:29 編集

wordList[i][1][2]と書いてもwordList[i][1]とwordList[i][2]が連結される訳ではありません。 配列など基本的な文法を学習されるべきかと思います。 また、ご自身の作成されたものでどうなるのか詳細に(ここでこういうエラーが出るとか)書きましょう。
YAmaGNZ

2022/09/21 09:59

>replyTextList.push(wordList[i][1]);の方が検索してもなかなか出てこず困ってます。 ちなみにどのようなキーワードで検索していますか?
BBA

2022/09/22 01:23

wordList[i][1][2]きっと違うだろなと思いながらとりあえず、試しました。すみません。 gasの基本まとめのサイトなど読んでみましたが、配列についても調べてみます。 検索は、gas push で検索したり、replyTextList.pushを検索したりしました。

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

LINE Messaging API

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

Google スプレッドシート

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

Google Apps Script

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