現在、lineで使える予定表botを作成しているのですが、決まった時間に通知を送信するためのトリガーが起動しません。
Javascript
1var ACCESS_TOKEN = "XXXXXXXXXX="; 2var PUSH = "https://api.line.me/v2/bot/message/multicast"; 3var REPLY = "https://api.line.me/v2/bot/message/reply"; 4 5function doPost(e) { 6 var events = JSON.parse(e.postData.contents).events; 7 events.forEach(function(event) { 8 if(event.type == "message") { 9 reply(event); 10 } else if(event.type == "follow") { 11 follow(event); 12 } else if(event.type == "unfollow") { 13 unFollow(event); 14 } 15 }); 16} 17 18function push() { 19 var spreadsheet = SpreadsheetApp.openById("XXXXXX"); 20 var sheet = spreadsheet.getActiveSheet(); 21 22 var start = 2; 23 var end = sheet.getLastRow(); 24 25 var today = new Date(); 26 var formattedDate = Utilities.formatDate(today, "JST", "yyyy/MM/dd"); 27 28 var spsh = SpreadsheetApp.openById("XXXXXX"); 29 var sht = spsh.getActiveSheet(); 30 var data = sht.getDataRange().getValues(); 31 var userlist = []; 32 for(var n = 0; n < data.length; n++){ 33 userlist.push(data[n][0]); 34 } 35 36 var value =[]; 37 for(var i = start; i <= end; i++) { 38 var sell_C = "C" + i; 39 var day_C = sheet.getRange(sell_C).getValue(); 40 var day_C = Utilities.formatDate(day_C, "JST", "yyyy/MM/dd"); 41 if(formattedDate != day_C){ 42 continue; 43 } 44 var sell_B = "B" + i; 45 value.push("・" + sheet.getRange(sell_B).getValue() + "\n\n"); 46 } 47 if(value.length == 0){ 48 return; 49 } 50 51 var postData = { 52 "to" : userlist, 53 "messages" : [ 54 { 55 "type" : "text", 56 "text" : "【本日の予定】\n\n" + value.join("") + "今日も一日がんばってね!" 57 } 58 ] 59 }; 60 61 var headers = { 62 "Content-Type" : "application/json; charset=UTF-8", 63 "Authorization" : "Bearer " + ACCESS_TOKEN 64 }; 65 66 var options = { 67 "method" : "POST", 68 "headers" : headers, 69 "payload" : JSON.stringify(postData) 70 }; 71 return UrlFetchApp.fetch(PUSH, options); 72} 73 74function reply(data) { 75 var postMsg = data.message.text; 76 var replyToken = data.replyToken; 77 var replyText = ""; 78 var userId = data.source.userId; 79 80 if (postMsg == "登録") { 81 // entry.zzzzzzはユーザーIDのフォームフィールドの番号。 82 replyText = 83 "予定の登録はこちら!\n" + 84 "XXXXXXXXXXXX=" +userId; 85 } else if (postMsg == "今後の予定") { 86 var spreadsheet = SpreadsheetApp.openById("XXXXXXXXXXXXX"); 87 var sheet = spreadsheet.getActiveSheet(); 88 89 var today =new Date(Utilities.formatDate(new Date(), "JST", "yyyy-MM-dd 00:00:00+09:00")) 90 // スプレッドシートのデータを一括取得 91 var allRecords = sheet.getRange(2, 1, sheet.getLastRow()-1, 4).getValues(); 92 // ユーザID が一致しかつ当日以降(当日含む)の項目だけ抽出し、日付順に並び替え。 93 var records = allRecords 94 .filter(e => e[3] == userId && e[2] >= today) 95 .sort((a,b) => a[2] - b[2]) 96 97 98 // 日付をフォーマットし、予定と一緒に配列化。 99 var value = records.map(e => 100 `・${e[1]}(${Utilities.formatDate(e[2], "JST", "yyyy/MM/dd hh:mm")})\n\n`); 101 102 replyText = value.join("") + "忘れないようにしましょう!"; 103 } 104 105 if(replyText == ""){ 106 return; 107 } else { 108 var postData = { 109 "replyToken" : replyToken, 110 "messages" : [ 111 { 112 "type" : "text", 113 "text" : replyText 114 } 115 ] 116 }; 117 118 var headers = { 119 "Content-Type" : "application/json; charset=UTF-8", 120 "Authorization" : "Bearer " + ACCESS_TOKEN 121 }; 122 123 var options = { 124 "method" : "POST", 125 "headers" : headers, 126 "payload" : JSON.stringify(postData) 127 }; 128 129 return UrlFetchApp.fetch(REPLY, options); 130 } 131} 132 133function follow(e) { 134 var spsh = SpreadsheetApp.openById("XXXXXX"); 135 var sht = spsh.getActiveSheet(); 136 sht.appendRow([e.source.userId]); 137} 138 139function unFollow(e){ 140 var spsh = SpreadsheetApp.openById("XXXXXX"); 141 var sht = spsh.getActiveSheet(); 142 var result = findRow(sht, e.source.userId, 1); 143 if(result > 0){ 144 sht.deleteRows(result); 145 } 146} 147 148function findRow(sht,val,col){ 149 var data = sht.getDataRange().getValues(); 150 for(var i = 0; i < data.length; i++){ 151 if(data[i][col-1] === val){ 152 return i+1; 153 } 154 } 155 return 0; 156}
↑コード全文です
「トリガーを追加」より、
・「実行する関数を選択」→ push
・「実行するデプロイを選択」→ Head
・「イベントのソースを選択」→ 時間主導型
・「時間ベースのトリガーのタイプを選択」→ 日付ベースのタイマー
・「時刻を選択」→ 午前7時〜8時
・「エラー通知設定」→ 毎日通知を受け取る
でトリガーを作成したのですが、
エラー Exception: パラメータ(String,String,String)が Utilities.formatDate のメソッドのシグネチャと一致しません。
at push(コード:40:29)
と表示されてしまい、実行されません。
ご指導のほどよろしくお願いします。
回答2件
あなたの回答
tips
プレビュー