前提・実現したいこと
GASで
datetimepicker 日付のみ選択したい。
のですが
どうしても日付選択はできるようにはなるのですが
選択後動作しなくなる
発生している問題・エラーメッセージ
どうしても日付選択はできるようにはなるのですが 選択後、動作しなくなる
該当のソースコード
JavaScript
1 2function doPost(e) { 3 var event = JSON.parse(e.postData.contents).events[0] 4 var replyToken = event.replyToken; 5 var eventtype = event.type; 6 if (typeof replyToken === 'undefined') { 7 return; 8 } 9 var messageText = ""; 10 if (eventtype == "postback") { 11 messageText = event.postback.params.datetime; 12 } else { 13 messageText = event.message.text; 14 } 15 var cache = CacheService.getScriptCache(); 16 var type = cache.get("type"); 17 18 if (type === null) { 19 //予定の追加 20 if (messageText === "予定の追加") { 21 cache.put("type", 1); 22 //開始日時の質問 23 pushDatePicker(" 開始日を入力してください", replyToken); 24 //今日、7日間の予定の取得 25 } else if (messageText.match("今日の予定")) { 26 reply(replyToken, getEvents()); 27 } else if (messageText.match("今週の予定")) { 28 reply(replyToken, notifyWeekly()); 29 } else { 30 //処理方法 の返答 31 replyPlans(replyToken, "「予定の追加」で予定追加します。", "「今日の予定」で今日の予定をお知らせします。", "「今週の予定」で7日間の予定をお知らせします。"); 32 } 33 } else { 34 //キャンセル処理 35 if (messageText === "キャンセル") { 36 cache.remove("type"); 37 reply(replyToken, "予定追加のキャンセルをしました"); 38 return; 39 } 40 41 switch (type) { 42 case "1": 43 //開始日時の追加 44 if (messageText.match(dateExp2)) { 45 var [matched, start_month, start_day] = messageText.match(dateExp2); 46 cache.put("type", 2); 47 cache.put("start_month", start_month); 48 cache.put("start_day", start_day); 49 50 //終了日時の質問 51 var year = new Date().getFullYear(); 52 var startDate = new Date(year, cache.get("start_month") - 1, cache.get("start_day")); 53 //pushDatePicker("開始日は\n"+ EventFormat(startDate) + "\nですね。\n\n次に予定の終了日時をお知らせください。", userId); 54 pushDatePicker(" 次に終了日を入力してください。", replyToken); 55 56 break; 57 } else { 58 reply(replyToken, "予定追加処理中です。\n「キャンセル」\nで追加作業をキャンセルします。"); 59 break; 60 } 61 case "2": 62 // 終了日時の追加 63 if (messageText.match(dateExp2)) { 64 var [matched, end_month, end_day] = messageText.match(dateExp2); 65 cache.put("type", 3); 66 cache.put("end_month", end_month); 67 cache.put("end_day", end_day); 68 //予定名の質問 69 var year = new Date().getFullYear(); 70 var endDate = new Date(year,cache.get("end_month")-1, cache.get("end_day")); 71 72 reply(replyToken, "終了日時は\n"+EventFormat(endDate)+"\n ですね。\n\n最後に予定名を教えてください。"); 73 break; 74 }else{ 75 reply(replyToken,"予定追加処理中です。\n「キャンセル」\nで追加作業をキャンセルします。"); 76 break; 77 } 78 case "3": 79 //最終確認 80 cache.put("type", 4); 81 cache.put("title", messageText); 82 var [title, startDate, endDate] = createData(cache); 83 //予定追加の確認 84 replyPlans(replyToken, "【予定名】:"+title,"開始予定日:\n"+EventFormat(startDate)+"\n終了予定日:\n"+ 85 EventFormat(new Date(endDate.setDate(endDate.getDate() - 1))), 86 "予定を追加しますか?\n「はい」か「いいえ」でお知らせください。"); 87 break; 88 case "4": 89 if (messageText === "はい") { 90 cache.remove("type"); 91 var [title, startDate, endDate]=createData(cache); 92 CalendarApp.getDefaultCalendar().createAllDayEvent(title, startDate, endDate); 93 reply(replyToken,"お疲れ様です☺️\nGoogleカレンダーに予定を追加しました!????"); 94 } else if (messageText === "いいえ") { 95 cache.remove("type"); 96 reply(replyToken, "予定の追加をキャンセルしました。"); 97 } else { 98 reply(replyToken, "「はい」か「いいえ」でお答えください。"); 99 break; 100 } 101 break; 102 } 103 } 104} 105 106 107function pushDatePicker(message, replyToken) { 108 var url = "https://api.line.me/v2/bot/message/reply"; 109 UrlFetchApp.fetch(url, { 110 "headers": { 111 "Content-Type": "application/json; charset=UTF-8", 112 "Authorization": "Bearer "+ CHANNEL_ACCESS_TOKEN, 113 }, 114 "method": "post", 115 "payload": JSON.stringify({ 116 "replyToken": replyToken, 117 "messages": [ 118 { 119 "type": "template", 120 "altText": "datetime_picker", 121 "template": { 122 "type": "buttons", 123 "thumbnailImageUrl": "https://placehold.jp/80/78cffa/0a0a0a/640x480.png?text=%E4%BA%88%E5%AE%9A%E6%97%A5%E3%81%AE%E8%BF%BD%E5%8A%A0&css=%7B%22border-radius%22%3A%2215px%22%2C%22font-family%22%3A%22%20'arial%20black'background%3A%20-webkit-gradient(linear%2C%20left%20top%2C%20left%20bottom%2C%20from(%23666666)%2C%20to(%23fffff))%22%7D", // 画像のURL 124 "imageAspectRatio": "rectangle", // 画像のアスペクト比、「rectangle: 1.51:1」・「square: 1:1」、デフォルト値はrectangle 125 "imageSize": "cover", // 画像の表示形式 126 "imageBackgroundColor": "#FFFFFF", // 画像の背景色 127 "title": "【予定日の追加】", 128 "text": message, 129 "defaultAction": { 130 "type": "uri", 131 "label": "View detail", 132 "uri": "https://www." 133 }, 134 "actions": [ 135 { 136 "type": "datetimepicker", 137 "label": "ここをタップ!", 138 "data": "action=settime", 139 "mode": "date", 140 "initial": Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy-MM-dd"), 141 // "max": "2018-01-24t23:59", 142 // "min": "2017-12-25t00:00" 143 } 144 ] 145 } 146 } 147 ], 148 "notificationDisabled": false // trueだとユーザーに通知されない 149 }), 150 }); 151 152 return// ContentService.createTextOutput(JSON.stringify({ "content": "postok"})).setMimeType(ContentService.MimeType.JSON); 153 154} 155 156// createData(cache)他 157// --->略 (現状から変えなくてよいはず) 158 159function createData(cache) { 160 var year = new Date().getFullYear(); 161 //var year = 2020; 162 var title = cache.get("title"); 163 var startDate = new Date(year, cache.get("start_month") - 1, cache.get("start_day")); 164 var endDate = new Date(year, cache.get("end_month") - 1, cache.get("end_day")); 165 endDate = new Date(endDate.setDate(endDate.getDate() + 1)); 166 return [title, startDate, endDate]; 167} 168 169function EventFormat(Date) { 170 var y = Date.getFullYear(); 171 var m = Date.getMonth() + 1; 172 var d = Date.getDate(); 173 var w = Date.getDay(); 174 var weekname = ['日', '月', '火', '水', '木', '金', '土']; 175 m = ('0' + m).slice(-2); 176 d = ('0' + d).slice(-2); 177 return y + '年' + m + '月' + d + '日 (' + weekname[w] + ')\n'; 178} 179 180function replyPlans(replyToken, message, message2, message3) { 181 var url = "https://api.line.me/v2/bot/message/reply"; 182 UrlFetchApp.fetch(url, { 183 "headers": { 184 "Content-Type": "application/json; charset=UTF-8", 185 "Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN, 186 }, 187 "method": "post", 188 "payload": JSON.stringify({ 189 "replyToken": replyToken, 190 "messages": [{ 191 "type": "text", 192 "text": message, 193 },{ 194 "type": "text", 195 "text": message2, 196 },{ 197 "type": "text", 198 "text": message3, 199 }], 200 }), 201 }); 202 return ContentService.createTextOutput(JSON.stringify({"content": "post ok"})).setMimeType(ContentService.MimeType.JSON); 203} 204 205function reply(replyToken, message) { 206 var url = "https://api.line.me/v2/bot/message/reply"; 207 UrlFetchApp.fetch(url, { 208 "headers": { 209 "Content-Type": "application/json; charset=UTF-8", 210 "Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN, 211 }, 212 "method": "post", 213 "payload": JSON.stringify({ 214 "replyToken": replyToken, 215 "messages": [{ 216 "type": "text", 217 "text": message, 218 }], 219 }), 220 }); 221 return ContentService.createTextOutput(JSON.stringify({"content": "post ok"})).setMimeType(ContentService.MimeType.JSON); 222} 223 224//今日の予定 225function getEvents() { 226 var events = CalendarApp.getDefaultCalendar().getEventsForDay(new Date()); 227 var body = "今日の予定は\n"; 228 229 if (events.length === 0) { 230 body += "ありません。"; 231 return body; 232 } 233 234 body += "\n"; 235 events.forEach(function(event) { 236 var title = event.getTitle(); 237 body += "????" + title + "\n"; 238 }); 239 body += "\nです!"; 240 return body; 241} 242 243//7日間の予定 244function notifyWeekly() { 245 var body = "1週間の予定は\n\n"; 246 var weekday = ["日", "月", "火", "水", "木", "金", "土"]; 247for ( var i = 0; i < 7; i++ ) { 248 249 var dt = new Date(); 250 dt.setDate(dt.getDate()+i); 251 var events = CalendarApp.getDefaultCalendar().getEventsForDay(dt); 252 body += Utilities.formatDate(dt, "JST", '???? MM/dd(' + weekday[dt.getDay()] + ')') + "\n"; 253 if (events.length === 0) { 254 body += "ありません。\n"; 255 } 256 257 events.forEach(function(event) { 258 var title = event.getTitle(); 259 body += title + "\n"; 260 }); 261} 262 return body; 263} 264 265function HmFormat(date){ 266 return Utilities.formatDate(date, "JST", "HH:mm"); 267} 268 269 270
試したこと
JavaScript
1 "actions": [ 2 { 3 "type": "datetimepicker", 4 "label": "ここをタップ", 5 "data": "action=settime", 6 "mode": "datetime", 7 "initial": Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy-MM-dd'T'HH:mm"), 8 // "max": "2018-01-24t23:59", 9 // "min": "2017-12-25t00:00"
を
JavaScript
1 "actions": [ 2 { 3 "type": "datetimepicker", 4 "label": "ここをタップ!", 5 "data": "action=settime", 6 "mode": "date", 7 "initial": Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy-MM-dd"), 8 // "max": "2018-01-24t23:59", 9 // "min": "2017-12-25t00:00"
に書き換えたが、
日付のみにはなったが
その後BOTからの返信がなくなる
補足情報(引用記事になります!)
引用記事になります
https://developers.line.biz/ja/reference/messaging-api/#datetime-picker-action
回答1件
あなたの回答
tips
プレビュー