• דף הבית
    • אינדקס קישורים
    • פוסטים אחרונים
    • משתמשים
    • חיפוש בהגדרות המתקדמות
    • חיפוש גוגל בפורום
    • ניהול המערכת
    • ניהול המערכת - שרת private
    • הרשמה
    • התחברות

    סקריפט למחיקת הודעה לאחר זמן מסוים

    מתוזמן נעוץ נעול הועבר טיפים עצות והדגמות מהמשתמשים
    1 פוסטים 1 כותבים 15 צפיות 1 עוקבים
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • תגובה כנושא
    התחברו כדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • י מנותק
      יעקב יצחק
      נערך לאחרונה על ידי

      שימו לב שזה מוגדר למחיקת הודעות שהושארו לפני שלושה ימים - כי כתבתי את זה בשביל מה ש @י-ש-ל ביקש כאן, אפשר לשנות את מספר הדקות בשורה 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 תרוץ כעת אוטומטית פעם בדקה.');
      }
      
      תגובה 1 תגובה אחרונה תגובה ציטוט 0

      שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.

      נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.

      בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗

      הרשמה התחברות
      • פוסט ראשון
        פוסט אחרון