初心者です。
先日、沢山の方に手助けしていただいて、Line上で動作する通知を送信するメモ帳botを作成しました。
作成日には問題なく動作をしていたのですが、何らかの理由で
登録していたトリガーがエラーは発生していないのに通知を送信されない
独自でコードを変えようとすると、デプロイした後に通知の内容が記載されているのにも関わらず、予定がありませんと表示される
という問題点が見つかりました。
Javascript
1var ACCESS_TOKEN = "XXXXXXXXXX="; 2var PUSH = "https://api.line.me/v2/bot/message/push"; 3var REPLY = "https://api.line.me/v2/bot/message/reply"; 4 5function getSchedTime(date, time) { 6 return new Date( 7 Utilities.formatDate(new Date(date), "JST", "yyyy-MM-dd") + 8 " " + Utilities.formatDate(new Date(time), "JST", "HH:mm") + "+09:00" 9 ); 10} 11 12function doPost(e) { 13 var events = JSON.parse(e.postData.contents).events; 14 events.forEach(function(event) { 15 if(event.type == "message") { 16 reply(event); 17 } else if(event.type == "follow") { 18 follow(event); 19 } else if(event.type == "unfollow") { 20 unFollow(event); 21 } 22 }); 23} 24 25function push() { 26 var spreadsheet = SpreadsheetApp.openById("XXXXXXXXXX"); 27 var sheet = spreadsheet.getActiveSheet(); 28 29 var start = 2; 30 var end = sheet.getLastRow(); 31 32 var today = new Date(); 33 var formattedDate = Utilities.formatDate(today, "JST", "yyyy/MM/dd"); 34 35 var spsh = SpreadsheetApp.openById("XXXXXXXXXX"); 36 var sht = spsh.getActiveSheet(); 37 var data = sht.getDataRange().getValues(); 38 var userlist = []; 39 for(var n = 0; n < data.length; n++){ 40 userlist.push(data[n][0]); 41 } 42 43 // ユーザーリストから取得したユーザーID毎にループする。 44 for (var u = 0; u < userlist.length; u++) { 45 var value = []; 46 for (var i = start; i <= end; i++) { 47 // i行目のユーザーIDの取得 48 var sell_D = "D" + i; 49 var user = sheet.getRange(sell_D).getValue(); 50 // ユーザーIDがユーザーリストのu番目のユーザーと一致する場合 51 if (user == userlist[u]) { 52 var sell_C = "C" + i; 53 var day_C = sheet.getRange(sell_C).getValue(); 54 // 日付列が空欄だとエラーになるのでcontinueする。 55 if (day_C == '') continue; 56 day_C = Utilities.formatDate(day_C, "JST", "yyyy/MM/dd"); 57 if (formattedDate !== day_C) continue; 58 var sell_G = "G" + i; 59 time_G = Utilities.formatDate(new Date(sheet.getRange(sell_G).getValue()), "JST", "HH:mm"); 60 var sell_B = "B" + i; 61 value.push("・" + sheet.getRange(sell_B).getValue() + "(" + time_G + ")" + "\n\n"); 62 } 63 } 64 if (value.length > 0) { 65 var postData = { 66 // 個別のユーザーIDを指定 67 to: userlist[u], 68 messages: [ 69 { 70 type: "text", 71 text: 72 "【本日の予定】\n\n" + value.join("") + "今日も一日がんばってね!", 73 }, 74 ], 75 }; 76 77 var headers = { 78 "Content-Type": "application/json; charset=UTF-8", 79 Authorization: "Bearer " + ACCESS_TOKEN, 80 }; 81 82 var options = { 83 method: "POST", 84 headers: headers, 85 payload: JSON.stringify(postData), 86 }; 87 UrlFetchApp.fetch(PUSH, options); 88 } 89 } 90} 91 92function reply(data) { 93 var postMsg = data.message.text; 94 var replyToken = data.replyToken; 95 var replyText = ""; 96 var userId = data.source.userId; 97 98 if (postMsg == "登録") { 99 // entry.zzzzzzはユーザーIDのフォームフィールドの番号。 100 replyText = 101 "予定の登録はこちら!\n" + 102 "https://docs.google.com/forms/d/e/XXXXXXXXXX=" +userId; 103 } else if (postMsg == "今後の予定") { 104 var spreadsheet = SpreadsheetApp.openById("XXXXXXXXXX"); 105 var sheet = spreadsheet.getActiveSheet(); 106 107 var today =new Date(Utilities.formatDate(new Date(), "JST", "yyyy-MM-dd 00:00:00+09:00")) 108 // スプレッドシートのデータを一括取得 (時刻データがある7列目まで取得するように修正) 109 var allRecords = sheet.getRange(2, 1, sheet.getLastRow()-1, 7).getValues(); 110 // ユーザID が一致しかつ当日以降のものだけ抽出し、日付順に並び替え。 111 var records = allRecords 112 .filter(e => e[3] == userId && e[2] >= today) 113 .sort((a, b) => getSchedTime(a[2], a[6]) - getSchedTime(b[2], b[6])); 114 115 // 日付をフォーマットし、予定と一緒に配列化。 116 var value = records.map(e => { 117 var date = Utilities.formatDate(new Date(e[2]), "JST", "yyyy/MM/dd"); 118 var time = Utilities.formatDate(new Date(e[6]), "JST", "HH:mm"); 119 return `・${e[1]} (${date} ${time})\n\n` 120 }); 121 if (value.length > 0) replyText = value.join("") + "忘れないようにしましょう!"; 122 else replyText = "予定がありません。"; 123 } 124 125 if(replyText == ""){ 126 return; 127 } else { 128 var postData = { 129 "replyToken" : replyToken, 130 "messages" : [ 131 { 132 "type" : "text", 133 "text" : replyText 134 } 135 ] 136 }; 137 138 var headers = { 139 "Content-Type" : "application/json; charset=UTF-8", 140 "Authorization" : "Bearer " + ACCESS_TOKEN 141 }; 142 143 var options = { 144 "method" : "POST", 145 "headers" : headers, 146 "payload" : JSON.stringify(postData) 147 }; 148 149 return UrlFetchApp.fetch(REPLY, options); 150 } 151} 152 153function follow(e) { 154 var spsh = SpreadsheetApp.openById("XXXXXXXXXX"); 155 var sht = spsh.getActiveSheet(); 156 sht.appendRow([e.source.userId]); 157} 158 159function unFollow(e){ 160 var spsh = SpreadsheetApp.openById("XXXXXXXXXX"); 161 var sht = spsh.getActiveSheet(); 162 var result = findRow(sht, e.source.userId, 1); 163 if(result > 0){ 164 sht.deleteRows(result); 165 } 166} 167 168function findRow(sht,val,col){ 169 var data = sht.getDataRange().getValues(); 170 for(var i = 0; i < data.length; i++){ 171 if(data[i][col-1] === val){ 172 return i+1; 173 } 174 } 175 return 0; 176}
ご指導のほどよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー