GASを使用したLinebotを作成しているのですが、if文にて特定の文字列に返信するといったプログラムを記述していたのですが、特定の文字列をクイックリプライにて簡単に送信できるようにしたいと考えました。
流れとしましては
・その他 という文字列をリッチメニューにて送信
↓
・10~12個の文字列一覧をクイックリプライにて表示
といったことが出来る様にしたいです。ご教授のほどよろしくお願いいたします。
追記:自分なりにクイックリプライ機能を搭載しようと思い、その他という文字が入力されたらクイックリプライを返す。という記述をしたのですが、その他と入力しても何も返ってきませんでした。
こちらを参考にさせていただきましたが、やはりできませんでした。
https://gist.github.com/arukayies/d2773ac02d363226e301503853166936
Javascript
1var ACCESS_TOKEN = "XXXXXX="; 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/'; 6var URL = 'https://api.line.me/v2/bot/message/reply'; // 応答メッセージ用のAPI URL 7var SS_ID = "XXXXXXXXXX"; //スプレッドシートのID 8 9var HistorySheet = SpreadsheetApp.openById(SS_ID).getSheets()[0]; 10 11function doPost(e) { 12 var contents = e.postData.contents; 13 var obj = JSON.parse(contents); 14 var events = obj["events"]; 15 for (var i = 0; i < events.length; i++) { 16 if (events[i].type == "message" && events[i].message.type == "text") { 17 reply_message(events[i]); 18 } 19 } 20} 21 22function reply_message(e) { 23 var input_text = e.message.text; 24 var reply_text = ""; 25 const userId = e.source.userId; 26 const history = getLastUserHistory(userId); 27 28 if (history && history.continuous) { 29 if (history.text == "70%*2") { 30 reply_text = input_text + " の 軽減率70%×70%での実質HPは\n約 " + Math.floor(input_text / 0.09) + "です"; 31 setLastUserHistory(userId, input_text, false); 32 } 33 else { 34 if (input_text == "70%*2") { 35 reply_text = "軽減率70%×70%で計算します。\n計算したいパーティーの最大HPを、半角英数字でカンマ区切りをせずに入力してください。"; 36 }else if (input_text == "その他") { 37 UrlFetchApp.fetch('https://api.line.me/v2/bot/message/push', { 38 'headers': { 39 'Content-Type': 'application/json', 40 'Authorization': 'Bearer ' + prop.TOKEN, // スクリプトプロパティにトークンは事前に追加しておく 41 }, 42 'method': 'POST', 43 'payload': JSON.stringify({ 44 "to": prop.DEBUGID, // スクリプトプロパティに送信先IDは事前に追加しておく 45 "messages": [ 46 { 47 "type": "text", 48 "text": "選択してください!", 49 "quickReply": { 50 "items": [ 51 { 52 "type": "action", 53 "imageUrl": "https://example.com/sushi.png", 54 "action": { 55 "type": "message", 56 "label": "A", 57 "text": "70%*2" 58 } 59 }, 60 { 61 "type": "action", 62 "imageUrl": "https://example.com/sushi.png", 63 "action": { 64 "type": "message", 65 "label": "B", 66 "text": "50%*2" 67 } 68 } 69 ] 70 } 71 } 72 ], 73 "notificationDisabled": false // trueだとユーザーに通知されない 74 }), 75 }); 76 }if (reply_text) { 77 setLastUserHistory(userId, input_text, true); 78 } else { 79 setLastUserHistory(userId, input_text, false); 80 } 81 } 82 83 var postData = { 84 "replyToken": e.replyToken, 85 "messages": [{ 86 "type": "text", 87 "text": reply_text 88 }] 89 }; 90 91 var options = { 92 "method": "post", 93 "headers": { 94 "Content-Type": "application/json", 95 "Authorization": "Bearer " + ACCESS_TOKEN 96 }, 97 "payload": JSON.stringify(postData) 98 }; 99 const response = UrlFetchApp.fetch(URL, options); 100 if (response.getResponseCode() !== 200) { 101 throw new Error(response.getContentText()); 102 } 103} 104function getLastUserHistory(userId) { 105 const userHistory = HistorySheet.getDataRange().getValues(); 106 for (let i = userHistory.length - 1; 0 < i; i--) { 107 if (userHistory[i][1] === userId) { 108 return { 109 date: userHistory[i][0], 110 userId: userHistory[i][1], 111 text: userHistory[i][2], 112 continuous: userHistory[i][3] 113 }; 114 } 115 } 116 return undefined; 117} 118 119function setLastUserHistory(userId, text, continuous) { 120 const values = [new Date(), userId, text, continuous]; 121 HistorySheet.appendRow(values); 122}
追記:再度修正しましたが、やはり別のところでエラーが出てしまいます。
エラー内容:SyntaxError: Unexpected end of input(行 156、ファイル「コード.gs」)
Javascript
1function reply_message(e) { 2 var input_text = e.message.text; 3 var reply_text = ""; 4 const userId = e.source.userId; 5 const history = getLastUserHistory(userId); 6 7 if (history && history.continuous) { 8 if (history.text == "70%*2") { 9 reply_text = input_text + " の 軽減率70%×70%での実質HPは\n約 " + Math.floor(input_text / 0.09) + "です"; 10 } else if (history.text == "50%*2") { 11 reply_text = input_text + " の 軽減率50%×50%での実質HPは\n約 " + Math.floor(input_text / 0.25) + "です"; 12 } else if (history.text == "70%*50%") { 13 reply_text = input_text + " の 軽減率70%×50%での実質HPは\n約 " + Math.floor(input_text / 0.15) + "です"; 14 } else if (history.text == "25%*2") { 15 reply_text = input_text + " の 軽減率25%×25%での実質HPは\n約 " + Math.floor(input_text / 0.5625) + "です"; 16 } else if (history.text == "75%*2") { 17 reply_text = input_text + " の 軽減率75%×75%での実質HPは\n約 " + Math.floor(input_text / 0.0625) + "です"; 18 } else if (history.text == "50%*2+30%*2") { 19 reply_text = input_text + " の 軽減率50%×50%×30%×30%での実質HPは\n約 " + Math.floor(input_text / 0.1225) + "です"; 20 } else if (history.text == "50%*2+25%") { 21 reply_text = input_text + " の 軽減率50%×50%×25%での実質HPは\n約 " + Math.floor(input_text / 0.1875) + "です"; 22 } else if (history.text == "25%+50%*2") { 23 reply_text = input_text + " の 軽減率25%×50%×50%での実質HPは\n約 " + Math.floor(input_text / 0.1875) + "です"; 24 } else if (history.text == "35%*2") { 25 reply_text = input_text + " の 軽減率35%×35%の実質HPは\n約 " + Math.floor(input_text / 0.4225) + "です"; 26 } else if (history.text == "35%*25%") { 27 reply_text = input_text + " の 軽減率35%×25%の実質HPは\n約 " + Math.floor(input_text / 0.4875) + "です"; 28 } else if (history.text == "25%*35%") { 29 reply_text = input_text + " の 軽減率25%×35%の実質HPは\n約 " + Math.floor(input_text / 0.4875) + "です"; 30 } 31 setLastUserHistory(userId, input_text, false); 32 } 33 else { 34 if (input_text == "70%*2") { 35 reply_text = "軽減率70%×70%で計算します。\n計算したいパーティーの最大HPを、半角英数字でカンマ区切りをせずに入力してください。"; 36 } else if (input_text == "50%*2") { 37 reply_text = "軽減率50%×50%で計算します。\n計算したいパーティーの最大HPを、半角英数字でカンマ区切りをせずに入力してください。"; 38 } else if (input_text == "70%*50%") { 39 reply_text = "軽減率70%×50%で計算します。\n計算したいパーティーの最大HPを、半角英数字でカンマ区切りをせずに入力してください。"; 40 } else if (input_text == "25%*2") { 41 reply_text = "軽減率25%×25%で計算します。\n計算したいパーティーの最大HPを、半角英数字でカンマ区切りをせずに入力してください。"; 42 }else if (input_text == "75%*2") { 43 reply_text = "軽減率75%×75%で計算します。\n計算したいパーティーの最大HPを、半角英数字でカンマ区切りをせずに入力してください。"; 44 }else if (input_text == "50%*2+30%*2") { 45 reply_text = "軽減率50%×50%×30%×30%で計算します。\n計算したいパーティーの最大HPを、半角英数字でカンマ区切りをせずに入力してください。"; 46 } else if (input_text == "35%*2") { 47 reply_text = "軽減率35%×35%で計算します。\n計算したいパーティーの最大HPを、半角英数字でカンマ区切りをせずに入力してください。"; 48 }else if (input_text == "50%*2+25%") { 49 reply_text = "軽減率50%×50%×25%で計算します。\n計算したいパーティーの最大HPを、半角英数字でカンマ区切りをせずに入力してください。"; 50 }else if (input_text == "その他") { 51 message = { 52 "type": "text", 53 "text": "その他の軽減率を設定してください", 54 "quickReply": { 55 "items": [ 56 { 57 "type": "action", 58 "action": { 59 "type": "message", 60 "label": "A", 61 "text": "A" 62 } 63 }, 64 { 65 "type": "action", 66 "action": { 67 "type": "message", 68 "label": "B", 69 "text": "B" 70 } 71 }, 72 { 73 "type": "action", 74 "action": { 75 "type": "message", 76 "label": "C", 77 "text": "C" 78 } 79 } 80 ] 81 } 82 } 83 }if (reply_text) { 84 setLastUserHistory(userId, input_text, true); 85 } else { 86 setLastUserHistory(userId, input_text, false); 87 } 88 } 89
回答1件
あなたの回答
tips
プレビュー