前提・実現したいこと
音楽URLをスプレッドシートよりLINEから受け取った特定のワードでランダムにURLをLINEに返し、かつ特定のワードを入力されたメッセージ+URLでスプレッドシートにURL部分のみを保存したい。
現在reply(json);を入れるか入れないかでどちらかの動きしかしてくれません。
reply(json);を入れると特定ワードに反応してbotがランダムで返してくれます。
reply(json);を入れないとスプレッドシートに書き込みは行ってくれるがワードに反応せずbotが返答してくれません。
```### 該当のソースコード // LINE Developerのアクセストークン var access_token = "botトークン" // リプライ先を特定するためのログ管理スプレッドシートID var spreadsheet_id = "ログスプレッド" // ご飯リストのスプレッドシートID var gohan_spreadsheet_id = "曲URL保存スプレッド" /** reply */ function reply(data) { var url = "https://api.line.me/v2/bot/message/reply"; var headers = { "Content-Type" : "application/json; charset=UTF-8", 'Authorization': 'Bearer ' + access_token, }; var text = ""; if (data.events[0].message.text === "今日の一曲") { // ご飯リストスプレッドシートを取得 var gohan = SpreadsheetApp.openById(gohan_spreadsheet_id).getSheetByName("曲シート"); // A1セルから入力されている最終行まで一気に取得 var gohanData = gohan.getRange(1, 1, gohan.getLastRow()); // ランダムで候補を選ぶ var intRandomNum = Math.round(Math.random()*gohan.getLastRow()); text = gohanData.getValues()[intRandomNum][0]; } else { text = "" } var postData = { "replyToken" : data.events[0].replyToken, "messages" : [ { 'type':'text', 'text':text, } ] }; var options = { "method" : "post", "headers" : headers, "payload" : JSON.stringify(postData) }; return UrlFetchApp.fetch(url, options); } /** LINEからのPOST受け取り */ function doPost(e) { // 投稿されたメッセージを取得 var json = JSON.parse(e.postData.contents); var data = SpreadsheetApp.openById(spreadsheet_id).getSheetByName('log').getRange(1, 1).setValue(json.events); reply(json); if(userMessage.match(/^$/)) { // $から始まるメッセージの場合、$を除いた文字列を再代入 userMessage = userMessage.substr(1); } else { // $から始まらない場合は何もしない(処理終了) return; } var gohan_spreadsheet_id = "曲URL保存スプレッド" var sheetName = "曲シート"; var spreadsheet = SpreadsheetApp.openById(spreadsheetId); var sheet = spreadsheet.getSheetByName(sheetName); // 空白・タブ・改行で区切り配列に変換 var arr = userMessage.split(/\s/); // セルの最下部に配列を転記 sheet.appendRow(arr); // ======================================= return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON); }
GAS
試したこと
コピペで作ったので知識がなくて申し訳ないですが。
コードを消したり足したりでfunction doPost(e) {の後に入れているreply(json);がボットの返答を担っているのは分かったのですが、両方の動きをしてくれる代用コードが分からず四苦八苦しております。
お力添えいただければ幸いです。
質問文だけだと詳細がちょっとわからないのですが、コードと合わせて推測したところ、下記のような理解でよろしいですか?
<前提>
曲URL保存用のスプレッドシートが1つある。
そのスプレッドシートは、
「曲シート」という名前のシートを持っている。
・「曲シート」には、A列に曲のURLが入力されている。(B列以降には何も入力されていない)
<やりたいこと>
・LINEから「今日の一曲」というメッセージが入力されたら、「曲シート」に記載されているURLからランダムに1つ選択し、そのURLをLINEにリプライとして表示させたい。
・LINEから、「$」という文字で始まるメッセージ(URLを含む)が入力されたら、入力されたメッセージのうち、URLだけを抜き出して、「曲シート」にそのURLを追記したい。
(この場合は、「曲シート」にURLを追記処理するだけで、LINEには何もリプライとして表示する必要はない)
---
上のような理解でよろしいでしょうか?誤っている点があれば、上記に沿って修正してください。
qnoir様
その理解であっております。
回答1件
あなたの回答
tips
プレビュー