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

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

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

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

Google Apps Script

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1419閲覧

GAS Line Massaging Api if文の後に計算をして結果を表示させたい

SN____R

総合スコア8

LINE Messaging API

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

Google Apps Script

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/07/08 13:00

編集2021/07/08 21:44

初心者です。現在GASにてline用のbotを作っているのですが、if文を使用し、特定のメッセージに特定のメッセージを返信→数値を入力すると自動で計算し、結果をメッセージとして送信するというプログラムを作成したいのですが、特定のメッセージを返信した後の記述方法が分からなく行き詰ってしまいました。ご教授のほどよろしくお願いいたします。

Javascript

1var ACCESS_TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXX="; 2var PUSH = "https://api.line.me/v2/bot/message/push"; 3var REPLY = "https://api.line.me/v2/bot/message/reply"; 4var line_endpoint = 'https://api.line.me/v2/bot/message/reply'; 5var ID = '1CIyC69Mn7mCOgLpW2wObf_fVMDLD301kVYwTs4QsCKg/'; 6 7var URL = 'https://api.line.me/v2/bot/message/reply'; 8 9function doPost(e) { 10 var contents = e.postData.contents; 11 var obj = JSON.parse(contents); 12 var events = obj["events"]; 13 for (var i = 0; i < events.length; i++) { 14 if (events[i].type == "message") { 15 reply_message(events[i]); 16 } 17 } 18} 19 20function reply_message(e) { 21 if (e.message.type == "text") { 22 var input_text = e.message.text; 23 var reply_text = ""; 24 if (input_text == "70%*2") { 25 reply_text = "軽減率70%×70%で計算します。\n計算したいパーティーの最大HPを入力してください。"; 26 } else if (input_text == "70%*25%") { 27 reply_text = "軽減率70%×25%で計算します。\n計算したいパーティーの最大HPを入力してください。"; 28 } else if (input_text == "70%*50%") { 29 reply_text = "軽減率70%×50%で計算します。\n計算したいパーティーの最大HPを入力してください。"; 30 }else if (input_text == "25%*2") { 31 reply_text = "軽減率25%×25%で計算します。\n計算したいパーティーの最大HPを入力してください。"; 32 } 33 var postData = { 34 "replyToken": e.replyToken, 35 "messages": [{ 36 "type": "text", 37 "text": reply_text 38 }] 39 }; 40 } 41 var options = { 42 "method": "post", 43 "headers": { 44 "Content-Type": "application/json", 45 "Authorization": "Bearer " + ACCESS_TOKEN 46 }, 47 "payload": JSON.stringify(postData) 48 }; 49 UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", options); 50}

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

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

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

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

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

guest

回答1

0

ベストアンサー

やり取りの履歴をスプレッドシート等に保存しておき、直前のやり取りを見て処理をするといいんじゃないでしょうか。


(追記)
適当に実装してみました。空のスプレッドシートを用意してからためして見てください。
バリデーションと計算部分は自分で実装してください。

JavaScript

1var ACCESS_TOKEN = "*************"; 2var URL = "https://api.line.me/v2/bot/message/reply"; 3var SS_ID = "****************"; //スプレッドシートのID 4 5var HistorySheet = SpreadsheetApp.openById(SS_ID).getSheets()[0]; 6 7function doPost(e) { 8 var contents = e.postData.contents; 9 var obj = JSON.parse(contents); 10 var events = obj["events"]; 11 for (var i = 0; i < events.length; i++) { 12 if (events[i].type == "message" && events[i].message.type == "text") { 13 reply_message(events[i]); 14 } 15 } 16} 17 18function reply_message(e) { 19 var input_text = e.message.text; 20 var reply_text = ""; 21 const userId = e.source.userId; 22 const history = getLastUserHistory(userId); 23 24 if (history && history.continuous) { 25 if (history.text == "70%*2") { 26 reply_text = input_text + " を 軽減率70%×70% で計算した結果"; 27 } else if (history.text == "70%*25%") { 28 reply_text = input_text + " を 軽減率70%×25% で計算した結果"; 29 } else if (history.text == "70%*50%") { 30 reply_text = input_text + " を 軽減率70%50% で計算した結果"; 31 } else if (history.text == "25%*2") { 32 reply_text = input_text + " を 軽減率25%×25% で計算した結果"; 33 } 34 setLastUserHistory(userId, input_text, false); 35 } 36 else { 37 if (input_text == "70%*2") { 38 reply_text = "軽減率70%×70%で計算します。\n計算したいパーティーの最大HPを入力してください。"; 39 } else if (input_text == "70%*25%") { 40 reply_text = "軽減率70%×25%で計算します。\n計算したいパーティーの最大HPを入力してください。"; 41 } else if (input_text == "70%*50%") { 42 reply_text = "軽減率70%×50%で計算します。\n計算したいパーティーの最大HPを入力してください。"; 43 } else if (input_text == "25%*2") { 44 reply_text = "軽減率25%×25%で計算します。\n計算したいパーティーの最大HPを入力してください。"; 45 } 46 if (reply_text) { 47 setLastUserHistory(userId, input_text, true); 48 } 49 else { 50 setLastUserHistory(userId, input_text, false); 51 } 52 } 53 54 var postData = { 55 "replyToken": e.replyToken, 56 "messages": [{ 57 "type": "text", 58 "text": reply_text 59 }] 60 }; 61 62 var options = { 63 "method": "post", 64 "headers": { 65 "Content-Type": "application/json", 66 "Authorization": "Bearer " + ACCESS_TOKEN 67 }, 68 "payload": JSON.stringify(postData) 69 }; 70 const response = UrlFetchApp.fetch(URL, options); 71 if (response.getResponseCode() !== 200) { 72 throw new Error(response.getContentText()); 73 } 74} 75 76function getLastUserHistory(userId) { 77 const userHistory = HistorySheet.getDataRange().getValues(); 78 for (let i = userHistory.length - 1; 0 < i; i--) { 79 if (userHistory[i][1] === userId) { 80 return { 81 date: userHistory[i][0], 82 userId: userHistory[i][1], 83 text: userHistory[i][2], 84 continuous: userHistory[i][3] 85 }; 86 } 87 } 88 return undefined; 89} 90 91function setLastUserHistory(userId, text, continuous) { 92 const values = [new Date(), userId, text, continuous]; 93 HistorySheet.appendRow(values); 94} 95

投稿2021/07/09 00:21

編集2021/07/09 01:10
draq

総合スコア2577

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

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

SN____R

2021/07/09 04:17

お陰様で計算し、計算結果を返信してくれるbotが作成できました。本当にありがとうございます。 さらに要求する形で申し訳ないのですが、実装して下さったプログラムを軽く解説していただけると本当に助かります。
draq

2021/07/09 08:14

解説と言っても見たままです。 ①メッセージが来たらスプレッドシートからメッセージを送信したユーザーの最後のメッセージを取得する。 ②過去にメッセージがありかつ継続するメッセージの場合は、過去のメッセージの内容によって計算方法を変更し、スプレッドシートに継続不要フラグ付きで今回受信したメッセージを保存する。 ③過去にメッセージが無いまたは継続しないメッセージの場合は、計算方法を尋ねるメッセージを送付し、スプレッドシートに継続必要フラグ付きで今回受信したメッセージを保存する。
SN____R

2021/07/09 08:21

なるほど...どういった処理がされているのか完全には理解できていなかったので助かりました!ありがとうございます。 よろしければ新しく質問している内容も回答していただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問