前提・実現したいこと
LINE Botにて以下の流れを実装したい。
- ユーザーが『内容をクリア』と入力
- 『本当にクリアしますか?はい、またはいいえで答えてください』と返信
- ユーザーが『はい』と答えた場合、削除する
- ユーザーが『いいえ』と答えた場合、何もしない
発生している問題・エラーメッセージ
お世話になります。
勉強がてらGAS(スプレッドシート)とLINE Messaging APIを触り始めた初学者です。
現在、LINE上で『内容をクリア』と送ると、スプレッドシート上の指定範囲の内容がクリアされるようにしています。
ただ、これでは誤ってクリアしてしまう可能性があるため、『内容をクリア』の後に『本当にクリアしますか?はいまたはいいえで答えてください』という確認を挟みたいと考えています。
そこで以下のように書いてみたのですが、『本当にクリアしますか?』というメッセージすら届かなくなってしまいました。
Gas
1 2// メッセージに対する応答メソッド 3function doPost(e) { 4 var json = JSON.parse(e.postData.contents); 5 6 var reply_token= json.events[0].replyToken; 7 if (typeof reply_token === 'undefined') { 8 return; 9 } 10 11 var user_id = json.events[0].source.userId; 12 var user_message = json.events[0].message.text; 13 var user_message2 = json.events[1].message.text; 14 15 var reply_messages; 16 var spreadSheet; 17 18 if ('ヘルプ' == user_message) { 19 reply_messages = ["ヘルプ"]; 20 } 21 // 内容一部省略 22 else if ('内容をクリア' == user_message) { 23 reply_messages = ["本当に削除してよろしいですか?\n\nよろしければ『はい』、キャンセルする場合は『いいえ』と入力してください。"]; 24 if ('はい' == user_message2){ 25 doReset(user_id) 26 reply_messages = ["削除しました"] 27 }else { 28 reply_messages = ["キャンセルしました"] 29 } 30 31 // 内容一部省略 32 33 var messages = reply_messages.map(function (v) { 34 return {'type': 'text', 'text': v}; 35 }); 36 UrlFetchApp.fetch(line_endpoint, { 37 'headers': { 38 'Content-Type': 'application/json; charset=UTF-8', 39 'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN, 40 }, 41 'method': 'post', 42 'payload': JSON.stringify({ 43 'replyToken': reply_token, 44 'messages': messages, 45 }), 46 }); 47 return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON); 48}
gas
1// スプレッドシートの内容をクリアするメソッド 2 3function doReset(user_id) { 4 var spreadSheet = getSpreadSheet(user_id); 5 var sheet = spreadSheet.getSheets()[0]; 6 sheet.getRange('A2:A4').clear(); 7}
『はい』『いいえ』と分岐させない場合は想定通り動きました。
試したこと
doResetメソッド内で『はい』『いいえ』で条件分岐すればよいのではと考え、以下のように書きましたが、うまくいきませんでした。
gas
1 function doReset(user_id) { 2 var spreadSheet = getSpreadSheet(user_id); 3 var sheet = spreadSheet.getSheets()[0]; 4 var json = JSON.parse(e.postData.contents); 5 6 var reply_token= json.events[0].replyToken; 7 if (typeof reply_token === 'undefined') { 8 return; 9 } 10 11 var user_id = json.events[0].source.userId; 12 var user_message = json.events[0].message.text; 13 14 var reply_messages; 15 16 if('はい' == user_message){ 17 sheet.getRange('A2:A4').clear(); 18 reply_messages = ["削除しました"] 19} else{ 20 reply_messages = ["キャンセルしました"] 21} 22
初学者ゆえ質問内容に不明瞭な点が多々あるかと思います。ご指摘いただけますと幸いです。
どうか皆様のお知恵をお貸しいただければと思います。
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。