סקריפט למחיקת הודעה לאחר זמן מסוים
-
שימו לב שזה מוגדר למחיקת הודעות שהושארו לפני שלושה ימים - כי כתבתי את זה בשביל מה ש @י-ש-ל ביקש כאן, אפשר לשנות את מספר הדקות בשורה 10.
/** * ========================================== * הגדרות קבועות * ========================================== */ const YEMOT_TOKEN_FALLBACK = 'טוקן'; // הכנס כאן את הטוקן שלך const YEMOT_PATH = 'ivr2:נתיב'; // הכנס כאן את הנתיב לשלוחה (למשל: ivr2:1 או ivr2:1/2) const MINUTES_TO_KEEP = 4320; // מספר הדקות לשמירה (4320 דקות = 3 ימים) function getYemotToken() { const fromProps = PropertiesService.getScriptProperties().getProperty('YEMOT_TOKEN'); return fromProps || YEMOT_TOKEN_FALLBACK; } /** * ========================================== * הפונקציה הראשית - בודקת את השלוחה ומוחקת קבצים ישנים * ========================================== */ function deleteOldFiles() { const token = getYemotToken(); var urlGet = 'https://www.call2all.co.il/ym/api/GetIVR2Dir?token=' + encodeURIComponent(token) + '&path=' + encodeURIComponent(YEMOT_PATH); var stats = { checked: 0, deleted: 0, skippedSystem: 0, skippedFolder: 0, failed: 0 }; try { var response = UrlFetchApp.fetch(urlGet, { muteHttpExceptions: true }); var data = JSON.parse(response.getContentText()); if (data.responseStatus !== 'OK' || !data.files) { Logger.log('שגיאה בקבלת נתוני השלוחה (בדוק טוקן ונתיב): ' + JSON.stringify(data)); return; } var now = new Date(); // חישוב זמן התפוגה לפי MINUTES_TO_KEEP (המרת דקות למילישניות) var expirationDate = new Date(now.getTime() - (MINUTES_TO_KEEP * 60 * 1000)); for (var i = 0; i < data.files.length; i++) { var file = data.files[i]; var fileName = file.name; var fileType = file.fileType; stats.checked++; // 0. דילוג על תיקיות if (fileType === 'FOLDER' || fileType === 'DIR' || file.isFolder === true) { stats.skippedFolder++; continue; } // 1. דילוג על קבצי INI if (fileType === 'INI' || fileName.toLowerCase().endsWith('.ini')) { stats.skippedSystem++; continue; } // 2. דילוג על הודעות מערכת של המשתמש (כגון M1000.wav) if (/^[Mm]\d{4}\.(wav|mp3|ogg|wma)$/.test(fileName)) { stats.skippedSystem++; continue; } // 3. בדיקת תאריך הקובץ if (file.mtime) { var parts = file.mtime.split(/[- :]/); if (parts.length === 6) { var fileDate = new Date(parts[0], parts[1] - 1, parts[2], parts[3], parts[4], parts[5]); if (isNaN(fileDate.getTime())) { Logger.log('תאריך לא תקין לקובץ ' + fileName + ': "' + file.mtime + '" - מדלג.'); continue; } if (fileDate < expirationDate) { Logger.log('הקובץ ' + fileName + ' הועלה בתאריך ' + file.mtime + ' והתיישן. מתחיל מחיקה...'); var ok = deleteFileFromYemot(token, YEMOT_PATH + '/' + fileName); if (ok) stats.deleted++; else stats.failed++; } } } } Logger.log('סיכום ריצה: נבדקו ' + stats.checked + ', נמחקו ' + stats.deleted + ', דולגו (מערכת) ' + stats.skippedSystem + ', דולגו (תיקיות) ' + stats.skippedFolder + ', כשלונות מחיקה ' + stats.failed); } catch (e) { Logger.log('שגיאה כללית בתהליך: ' + e.toString()); } } /** * ========================================== * פונקציית עזר למחיקת הקובץ בפועל * ========================================== */ function deleteFileFromYemot(token, filePath) { var urlDelete = 'https://www.call2all.co.il/ym/api/FileAction'; var payload = { 'token': token, 'action': 'delete', 'what': filePath }; var options = { 'method': 'post', 'payload': payload, 'muteHttpExceptions': true }; try { var response = UrlFetchApp.fetch(urlDelete, options); var text = response.getContentText(); var result; try { result = JSON.parse(text); } catch (parseErr) { Logger.log('תגובה לא תקינה (לא JSON) למחיקת ' + filePath + ' -> ' + text); return false; } if (result.responseStatus === 'OK') { Logger.log('נמחק בהצלחה: ' + filePath); return true; } Logger.log('מחיקה נכשלה עבור ' + filePath + ' -> ' + text); return false; } catch (e) { Logger.log('שגיאה במחיקת ' + filePath + ': ' + e.toString()); return false; } } /** * ========================================== * הגדרת הטריגר (להרצה פעם אחת בלבד מהעורך) * ========================================== */ function setupTrigger() { var triggers = ScriptApp.getProjectTriggers(); for (var i = 0; i < triggers.length; i++) { if (triggers[i].getHandlerFunction() === 'deleteOldFiles') { ScriptApp.deleteTrigger(triggers[i]); } } ScriptApp.newTrigger('deleteOldFiles') .timeBased() .everyMinutes(1) .create(); Logger.log('הטריגר הוגדר בהצלחה! הפונקציה deleteOldFiles תרוץ כעת אוטומטית פעם בדקה.'); }
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות