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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

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

Q&A

1回答

683閲覧

現在○○分待ちですと表示したい

ysuke1217

総合スコア0

Google Apps Script

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

0グッド

0クリップ

投稿2021/02/10 13:48

編集2021/02/11 12:30

前提・実現したいこと

GASでLINEの順番待ちボットを作成したのですが、

sendMessage(replyToken, UserData+"さんは"+ranges[0].getRow()+'番目です');

のコードにスプレッドシートのセルと掛け合わせて、現在何分待ちかを知らせたいのですがどうすればよろしいでしょうか?
(例.1人待ちだと「あなたは現在1番目です。現在○○分待ちです」ということを伝えたいです)(1×5分で5分待ち)

拙い文章で申し訳ありません。
またご意見ありがとうございます。

大学の卒論発表のために作成しているのですが、GASを使っているのが自分だけで質問をすることが出来ず、こちらで質問させて頂きました。

お時間ある際にご連絡やご指摘頂けると幸いです。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

var SHEET_ID = '1URdDj_e0bogKDlXFVcUhnDBPoAp_gFBDl0cZ01D2rHM'; var SHEET_NAME = 'data'; //アクセストークン var ACCESS_TOKEN = 'a6tyQt4bsxWCQlwmr6q5cfgsGM6e1lA0OR2RRChjzZy/YPQWQwpdTEV4V0cg2VEKkAW4u5Plfn4J/TDOhTImJZeFz/luYjKlh+iLH5vIFDo3qogz0PEfjR/jiQfb868mZfXdXxt3XoqALFsWeJ5XEgdB04t89/1O/w1cDnyilFU='; // 応答メッセージURL var REPLY = "https://api.line.me/v2/bot/message/reply"; function doPost(e) { //メッセージ受信 var data = JSON.parse(e.postData.contents).events[0]; //ユーザーID取得 var lineUserId = data.source.userId; //リプレイトークン取得 var replyToken = data.replyToken; //送信されたメッセージ取得 var postMsg = data.message.text; //順番待ちがあるかの確認 var UserData = findUser(lineUserId); if (typeof UserData === "undefined") { //順番待ちがなかった場合の処理 if (postMsg === '予約') { var userName = getUserDisplayName(lineUserId); var userIMG = getUserDisplayIMG(lineUserId); flexMessage(replyToken, userName, userIMG); userlog(lineUserId); }else{ sendMessage(replyToken, '「予約」と送信ください。'); } }else{ //順番待ち登録があった場合の処理 if (postMsg === '順番') { var spread = SpreadsheetApp.getActiveSpreadsheet() ; var sheet = spread.getSheets()[0] ; var textFinder = sheet.createTextFinder(lineUserId); var ranges = textFinder.findAll(); sendMessage(replyToken, UserData+"さんは"+ranges[0].getRow()+'番目です。'); }else{ sendMessage(replyToken, UserData+"さんはすでに順番待ちです。"); } } debug(postMsg, lineUserId); } //ユーザー検索 function findUser(uid) { return getUserData().reduce(function(uuid, row) { return uuid || (row.key === uid && row.value); }, false) || undefined; } //ユーザー検索 function getUserData() { var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(SHEET_NAME); var data = sheet.getDataRange().getValues(); var d = 0; return data.map(function(row) { return {key: row[0], value: row[1]}; }); } //テキストreplyメッセージ function sendMessage(replyToken, replyText) { var postData = { "replyToken" : replyToken, "messages" : [ { "type" : "text", "text" : replyText } ] }; return postMessage(postData); } //JSON形式データをPOST function postMessage(postData) { var headers = { "Content-Type" : "application/json; charset=UTF-8", "Authorization" : "Bearer " + ACCESS_TOKEN }; var options = { "method" : "POST", "headers" : headers, "payload" : JSON.stringify(postData) }; return UrlFetchApp.fetch(REPLY, options); } //ユーザーのプロフィール名取得 function getUserDisplayName(userId) { var url = 'https://api.line.me/v2/bot/profile/' + userId; var userProfile = UrlFetchApp.fetch(url,{ 'headers': { 'Authorization' : 'Bearer ' + ACCESS_TOKEN, }, }) return JSON.parse(userProfile).displayName; } //ユーザーのプロフィール画像取得 function getUserDisplayIMG(userId) { var url = 'https://api.line.me/v2/bot/profile/' + userId; var userProfile = UrlFetchApp.fetch(url,{ 'headers': { 'Authorization' : 'Bearer ' + ACCESS_TOKEN, }, }) return JSON.parse(userProfile).pictureUrl; } //デバック記録 function debug(text, userId) { var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName('debug'); var date = new Date(); var userName = getUserDisplayName(userId); sheet.appendRow([userId, userName, text, Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy-MM-dd HH:mm:ss')]); } //ユーザー登録(順番待ち登録) function userlog(userId) { var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(SHEET_NAME); var date = new Date(); var userName = getUserDisplayName(userId); var userIMG = getUserDisplayIMG(userId); sheet.appendRow([userId, userName, userIMG, Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy-MM-dd HH:mm:ss')]); } function flexMessage(replyToken, userName, userIMG) { // replyするメッセージの定義 var postData = { "replyToken" : replyToken, "messages" : [ { "type": "flex", "altText": "Flex Message", "contents": { "type": "bubble", "hero": { "type": "image", "url": userIMG, "size": "full", "aspectRatio": "20:13", "aspectMode": "cover", "action": { "type": "uri", "label": "Line", "uri": "https://linecorp.com/" } }, "body": { "type": "box", "layout": "vertical", "contents": [ { "type": "text", "text": userName+"さん", "size": "xl", "weight": "bold" }, { "type": "box", "layout": "baseline", "margin": "md", "contents": [ { "type": "text", "text": "順番待ちを受付けました。", "flex": 0, "margin": "md", "size": "md", "color": "#000000" } ] } ] }, "footer": { "type": "box", "layout": "vertical", "flex": 0, "spacing": "sm", "contents": [ { "type": "button", "action": { "type": "message", "label": "順番待ち確認", "text": "順番" }, "height": "sm", "style": "link" }, { "type": "spacer", "size": "sm" } ] } } } ] }; return postMessage(postData); }

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

y_waiwai

2021/02/10 14:16

現状はどういうコードを書いてるんでしょうか。 そのコードを提示して、どういうところに不具合があるのか説明しましょう
papinianus

2021/02/11 07:39

この状態からは回答不可能です。 待ち行列はデキューしていくはずなので、シートの内容と全体の処理がわからなければどうすべきかの提案は困難です。
ysuke1217

2021/02/11 12:31

質問の内容を変更しました。 コードの全体を提示しました。 読みにくいとは思いますがお時間ある際に返信頂けると幸いです。 宜しくお願いいたします。
guest

回答1

0

質問のコードで何人待ちか伝達できているなら、下記で良いと思います。

ranges[0].getRow()*5+'分まちです'

これ以上は、現在の情報では回答不能です

投稿2021/02/11 07:42

papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問