前提・実現したいこと
LINE botでgoogleカレンダーの一週間のスケジュールを返すbotを作成しようとしています。
発生している問題・エラーメッセージ
Exception: https://api.line.me のリクエストに失敗しました(エラー: 400)。サーバー応答の一部: {"message":"The property, 'messages', in the request body is invalid (line: 1, column: 13)"}(応答の全文を見るには muteHttpExceptions オプションを使用してください)(行 82、ファイル「コード」)
プログラムを実行したところ、上記のエラーメッセージが出てきてしまいます。
具体的にmessagesをどのように変更すればよいでしょうか。
該当のソースコード
使用環境:google apps script
9行目の"messages"でエラーが原因で、UrlFetchApp.fetch("https://api.line.me/v2/bot/message/broadcast", options);が機能していないようです。
GAS
1function sendToLINE(message){ 2 var token = '############' 3; //LINE Message APIのトークンID 4 var options = 5 { 6 "method": "post", 7 "contentType": 'application/json', 8 "headers": { "Authorization": "Bearer " + token }, 9 "payload": JSON.stringify({ "messages": message }), 10 }; 11 12 UrlFetchApp.fetch("https://api.line.me/v2/bot/message/broadcast", options); 13 14}
###ソースコード全文
GAS
1function myFunction(){ 2 3 var startDate = new Date(); 4 var period = 7; // 予定を表示したい日数 5 6 startDate.setDate(startDate.getDate() + 1); 7 var schedule = getSchedule(startDate, period); 8 var message = scheduleToMessage(schedule, startDate, period); 9 10 sendToLINE(message); 11} 12 13// Googleカレンダーから予定取得 14function getSchedule(startDate, period){ 15 var calendarIDs = ['############']; //カレンダーIDの配列。カレンダーを共有している場合、複数指定可。 16 17 var schedule = new Array(calendarIDs.length); 18 for(var i=0; i<schedule.length; i++){schedule[i] = new Array(period);} 19 20 for(var iCalendar=0; iCalendar < calendarIDs.length; iCalendar++){ 21 var calendar = CalendarApp.getCalendarById(calendarIDs[iCalendar]); 22 23 var date = new Date(startDate); 24 for(var iDate=0; iDate < period; iDate++){ 25 schedule[iCalendar][iDate] = getDayEvents(calendar, date); 26 date.setDate(date.getDate() + 1); 27 } 28 } 29 30 return schedule; 31} 32 33function getDayEvents(calendar, date){ 34 var dayEvents = ""; 35 var events = calendar.getEventsForDay(date); 36 37 for(var iEvent = 0; iEvent < events.length; iEvent++){ 38 var event = events[iEvent]; 39 var title = event.getTitle(); 40 var startTime = _HHmm(event.getStartTime()); 41 var endTime = _HHmm(event.getEndTime()); 42 43 dayEvents = dayEvents + '・' + startTime + '-' + endTime + ' ' + title + '\n'; 44 } 45 46 return dayEvents; 47} 48 49function scheduleToMessage(schedule, startDate, period){ 50 var now = new Date(); 51 var body = '\n1週間の予定\n' 52 + '(' +_Md(now) + ' ' +_HHmm(now) + '時点)\n' 53 + '--------------------\n'; 54 55 var date = new Date(startDate); 56 for(var iDay=0; iDay < period; iDay++){ 57 body = body + _Md(date) + '(' + _JPdayOfWeek(date) + ')\n'; 58 59 for(var iCalendar=0; iCalendar < schedule.length; iCalendar++){ 60 body = body + schedule[iCalendar][iDay]; 61 } 62 63 date.setDate(date.getDate() + 1); 64 body = body + '\n'; 65 } 66 67 return body; 68} 69 70// LINE通知 71function sendToLINE(message){ 72 var token = '############' 73; //LINE Message APIのトークンID 74 var options = 75 { 76 "method": "post", 77 "contentType": 'application/json', 78 "headers": { "Authorization": "Bearer " + token }, 79 "payload": JSON.stringify({ "messages": message }), 80 }; 81 82 UrlFetchApp.fetch("https://api.line.me/v2/bot/message/broadcast", options); 83 84} 85 86// 日付指定の関数 87function _HHmm(date){ 88 return Utilities.formatDate(date, 'JST', 'HH:mm'); 89} 90 91function _Md(date){ 92 return Utilities.formatDate(date, 'JST', 'M/d'); 93} 94 95function _JPdayOfWeek(date){ 96 // date = new Date() 97 var dayStr = ['日', '月', '火', '水', '木', '金', '土']; 98 var dayOfWeek = date.getDay(); 99 100 return dayStr[dayOfWeek]; 101}
なお、############にはそれぞれカレンダーIDとLINEトークンIDを入力しています。
試したこと
gasを初めて使うので、調べながら79行目の"payload": JSON.stringify({ "messages": message }),をいじっておりましたが上手く行かずに困っております。
お手数おかけしますが、どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/17 05:43