• דף הבית
    • אינדקס קישורים
    • פוסטים אחרונים
    • משתמשים
    • חיפוש בהגדרות המתקדמות
    • חיפוש גוגל בפורום
    • ניהול המערכת
    • ניהול המערכת - שרת private
    • הרשמה
    • התחברות
    1. דף הבית
    2. IS
    3. פוסטים
    I מנותק
    • פרופיל
    • עוקב אחרי 0
    • עוקבים 1
    • נושאים 2
    • פוסטים 11
    • קבוצות 0

    פוסטים

    פוסטים אחרונים הגבוה ביותר שנוי במחלוקת
    • RE: אני רוצה לשלוח אימעיל שיכנס ישר לשלוחה

      @הדיבל-המעופף
      לא.
      רק המיילים שבתווית שבה הסקריפט מטפל.
      צריך ליצור תווית במייל נניח קראת לה מיילים למערכת, אתה כותב בגיליון1 בתא C2 מיילים למערכת
      עכשיו כל המיילים שיהיו בתווית הזו יעלו לשלוחה שכתבת בתא E2
      אחרי שהמייל טופל הוא מועבר מהתוית הזו לתוית אחרת שאתה צריך ליצור ולכתוב את השם שלה בתא D2 (נניח מיילים למערכת טופל, אז צריך לכתוב בתא D2 מיילים למערכת טופל
      כל המיילים שטופלו יועברו לשם.
      עכשיו אתה רוצה להעלות קובץ מסויים, אתה שולח אותו במייל לעצמך או למישהו אחר, או לוקח מייל שמישהו שלח לך, מסמן אותו בתוית הראשונה, וזהו.
      תוך דקה (אם הגדרת טריגר כל דקה) הקובץ בשלוחה

      פורסם בשאלות ועזרה הדדית
      I
      IS
    • RE: אני רוצה לשלוח אימעיל שיכנס ישר לשלוחה

      @הדיבל-המעופף
      לא הבנתי
      זה יכול להיות במייל האישי שלך

      פורסם בשאלות ועזרה הדדית
      I
      IS
    • RE: אני רוצה לשלוח אימעיל שיכנס ישר לשלוחה

      @וזכיני-לגדל
      צריך ליצור גיליון חדש בגוגל שיטס, תוספים, apps script ולהדביק את הקוד הזה

      function runSimpleTranscriptionResponder() {
        
        // פונקציית עזר: קריאה ל-API של ימות המשיח
      function fetch(command, parameters) {
        var url = "https://www.call2all.co.il/ym/api/" + command;
        var options = {
          "method": "post",
          "contentType": "application/json",
          "payload": JSON.stringify(parameters),
          "muteHttpExceptions": true
        };
        try {
          var response = UrlFetchApp.fetch(url, options);
          var responseCode = response.getResponseCode();
          if (responseCode !== 200) {
            Logger.log("שגיאת HTTP ב-" + command + ": קוד " + responseCode);
            return { responseStatus: "ERROR", message: "HTTP Error " + responseCode };
          }
          return JSON.parse(response.getContentText());
        } catch (e) {
          Logger.log("שגיאה ב-" + command + ": " + e.toString());
          return { responseStatus: "ERROR", message: e.toString() };
        }
      }
      
      // פונקציית עזר: בדיקה האם קובץ הוא קובץ שמע
        function isAudioFile(mimeType, fileName) {
          var audioExtensions = /\.(mp3|wav|ogg|m4a|wma|aac|flac|opus)$/i;
          return mimeType.indexOf('audio/') === 0 || audioExtensions.test(fileName);
        }
        
        // פונקציית עזר: העלאה לימות המשיח
        function uploadToYemot(attachment, token, path) {
          var url = "https://www.call2all.co.il/ym/api/UploadFile";
          var boundary = "----FormBoundary" + Utilities.getUuid();
          var bodyParts = [];
          bodyParts.push("--" + boundary);
          bodyParts.push("Content-Disposition: form-data; name=\"token\"");
          bodyParts.push("");
          bodyParts.push(token);
          bodyParts.push("--" + boundary);
          bodyParts.push("Content-Disposition: form-data; name=\"path\"");
          bodyParts.push("");
          bodyParts.push(path);
          bodyParts.push("--" + boundary);
          bodyParts.push("Content-Disposition: form-data; name=\"convertAudio\"");
          bodyParts.push("");
          bodyParts.push("1");
          bodyParts.push("--" + boundary);
          bodyParts.push("Content-Disposition: form-data; name=\"file\"; filename=\"" + attachment.getName() + "\"");
          bodyParts.push("Content-Type: " + attachment.getContentType());
          bodyParts.push("");
          var textPart = bodyParts.join("\r\n") + "\r\n";
          var textBytes = Utilities.newBlob(textPart).getBytes();
          var fileBytes = attachment.getBytes();
          var endBoundary = Utilities.newBlob("\r\n--" + boundary + "--\r\n").getBytes();
          var payload = [];
          for (var i = 0; i < textBytes.length; i++) { payload.push(textBytes[i]); }
          for (var i = 0; i < fileBytes.length; i++) { payload.push(fileBytes[i]); }
          for (var i = 0; i < endBoundary.length; i++) { payload.push(endBoundary[i]); }
          var options = { "method": "post", "contentType": "multipart/form-data; boundary=" + boundary, "payload": payload, "muteHttpExceptions": true };
          try {
            var response = UrlFetchApp.fetch(url, options);
            var responseCode = response.getResponseCode();
            if (responseCode !== 200) {
              Logger.log("שגיאת HTTP: קוד " + responseCode);
              Logger.log("תגובת שרת: " + response.getContentText());
              return false;
            }
            var jsonResponse = JSON.parse(response.getContentText());
            if (jsonResponse.responseStatus === "OK") {
              Logger.log("הקובץ הועלה בהצלחה!");
              Logger.log("  נתיב: " + jsonResponse.path);
              Logger.log("  גודל מקורי: " + (jsonResponse.size / 1024).toFixed(2) + " KB");
              if (jsonResponse.convertedSize) {
                Logger.log("  גודל לאחר המרה: " + (jsonResponse.convertedSize / 1024).toFixed(2) + " KB");
                Logger.log("  משך השמע: " + jsonResponse.duration.toFixed(2) + " שניות");
              }
              return true;
            } else {
              Logger.log("שגיאת API: " + jsonResponse.responseStatus);
              if (jsonResponse.message) { Logger.log("הודעת שגיאה: " + jsonResponse.message); }
              if (jsonResponse.messageCode) { Logger.log("קוד שגיאה: " + jsonResponse.messageCode); }
              return false;
            }
          } catch (e) {
            Logger.log("שגיאת תקשורת: " + e.toString());
            return false;
          }
        }
        
        // הקוד הראשי
        var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("גיליון1");
        if (!sheet) {
          Logger.log("שגיאה: לא נמצא גיליון בשם 'גיליון1'");
          return;
        }
        var systemNumber = sheet.getRange("A2").getValue().toString().trim();
        var password = sheet.getRange("B2").getValue().toString().trim();
        var sourceLabelName = sheet.getRange("C2").getValue().toString().trim();
        var targetLabelName = sheet.getRange("D2").getValue().toString().trim();
        var yemotFolder = sheet.getRange("E2").getValue().toString().trim();
        var permanentToken = sheet.getRange("F2").getValue().toString().trim();
        
        if (!sourceLabelName || !targetLabelName || !yemotFolder) {
          Logger.log("שגיאה: חסרים נתונים בגיליון. אנא ודא שתאים C2, D2, E2 מלאים.");
          return;
        }
        
        var yemotToken;
        if (permanentToken) {
          Logger.log("משתמש בטוקן קבוע מתא F2");
          yemotToken = permanentToken;
        } else if (password) {
          if (!systemNumber) {
            Logger.log("שגיאה: חסר מספר מערכת בתא A2");
            return;
          }
          Logger.log("משתמש בפורמט username:password");
          yemotToken = systemNumber + ":" + password;
        } else {
          Logger.log("שגיאה: חסר טוקן או פרטי התחברות. מלא תא F2 (טוקן קבוע) או תאים A2+B2 (מערכת+סיסמה)");
          return;
        }
        
        if (!yemotFolder.includes(':')) {
          if (!yemotFolder.startsWith('/')) { yemotFolder = '/' + yemotFolder; }
          if (yemotFolder.endsWith('/')) { yemotFolder = yemotFolder.slice(0, -1); }
        } else {
          Logger.log("זוהה נתיב מיוחד: " + yemotFolder);
        }
        
        var sourceLabel = GmailApp.getUserLabelByName(sourceLabelName);
        if (!sourceLabel) {
          Logger.log("שגיאה: תווית המקור '" + sourceLabelName + "' לא נמצאה בג'ימייל שלך.");
          return;
        }
        var targetLabel = GmailApp.getUserLabelByName(targetLabelName);
        if (!targetLabel) { targetLabel = GmailApp.createLabel(targetLabelName); }
        var threads = sourceLabel.getThreads();
        if (threads.length === 0) {
          Logger.log("לא נמצאו הודעות בתווית: " + sourceLabelName);
          return;
        }
        
        var audioFilesCount = 0;
        var uploadedCount = 0;
        
        if (threads.length > 0) {
          var thread = threads[0];
          var messages = thread.getMessages();
          var hasAudio = false;
          for (var j = 0; j < messages.length; j++) {
            var attachments = messages[j].getAttachments();
            for (var k = 0; k < attachments.length; k++) {
              var attachment = attachments[k];
              var mimeType = attachment.getContentType();
              var fileName = attachment.getName();
              if (isAudioFile(mimeType, fileName)) {
                hasAudio = true;
                audioFilesCount++;
                var fileSize = attachment.getSize();
                Logger.log("נמצא קובץ שמע: " + fileName + " (גודל: " + (fileSize / 1024).toFixed(2) + " KB)");
                if (fileSize > 50 * 1024 * 1024) {
                  Logger.log("שגיאה: הקובץ גדול מדי (מעל 50MB). לא ניתן להעלות.");
                  continue;
                }
                
                // קבלת המספר הבא ברצף באמצעות GetIVR2DirStats
                var maxFileNameResponse = fetch('GetIVR2DirStats', { token: yemotToken, path: yemotFolder });
                Logger.log("תגובת GetIVR2DirStats: " + JSON.stringify(maxFileNameResponse));
                
                var newFileNumber = 0;
                if (maxFileNameResponse.responseStatus === 'OK' && maxFileNameResponse.maxFile) {
                  var lastFileName = maxFileNameResponse.maxFile.name.split('.')[0];
                  newFileNumber = (lastFileName !== undefined) ? Number(lastFileName) + 1 : 0;
                  Logger.log("הקובץ האחרון: " + lastFileName + ", המספר הבא: " + newFileNumber);
                } else {
                  Logger.log("התיקייה ריקה או שגיאה בקבלת נתונים. מתחיל מ-0");
                }
                
                var numberedFileName = newFileNumber.toString().padStart(3, '0') + ".wav";
                var fullPath = yemotFolder + '/' + numberedFileName;
                Logger.log("מתחיל העלאה לימות המשיח...");
                Logger.log("נתיב יעד: " + fullPath);
                Logger.log("הקובץ החדש יהיה: " + numberedFileName);
                var uploadSuccess = uploadToYemot(attachment, yemotToken, fullPath);
                if (uploadSuccess) {
                  uploadedCount++;
                  Logger.log("הקובץ " + fileName + " הועלה בהצלחה.");
                } else {
                  Logger.log("שגיאה בהעלאת הקובץ " + fileName);
                }
              }
            }
          }
          thread.addLabel(targetLabel);
          thread.removeLabel(sourceLabel);
          if (hasAudio) {
            Logger.log("סיכום: עובד מייל אחד, נמצאו " + audioFilesCount + " קבצי שמע, הועלו בהצלחה " + uploadedCount + " קבצים.");
          } else {
            Logger.log("המייל לא הכיל קבצי שמע. הועבר לתווית 'טופל'.");
          }
        }
      }
      
      

      לשמור את הקוד, לכתוב בגיליון1 בתא C2 את תוית המקור בגימייל ובתא D2 את התוית שהמייל יעבור לאחר השמירה.
      בתא E2 צריך לשים את הנתיב שרוצים שהקובץ יעלה (לדוגמא ivr2:/11/9/3)
      בתא F2 צריך לשים מפתח api של המערכת בימות.
      ליצור טריגר שירוץ כל דקה, וכל מייל שיכנס לתוית הראשונה עם קובץ שמע יעלה לנתיב המוגדר והמייל יעבור לתוית של אחרי הטיפול.
      בהצלחה

      פורסם בשאלות ועזרה הדדית
      I
      IS
    • קבלת קובץ למייל בהקשה במהלך האזנה

      חיפשתי בפורום ולא מצאתי חוץ מזה אז יצרתי באמצעות apps sscript
      יש ליצור עותק לקובץ הזה
      https://docs.google.com/spreadsheets/d/1gnOPg7rZuMt2hTPVlMNJMGjFQck7GzBPk_Tenhx5xjU/copy
      בכרטיסיית תוספים-apps sscript צריך ליצור פריסה חדשה כאפליקציית אינטרנט (אני עם הרשאה לכולם) כמובן לאשר את ההרשאות מתקדם המשך אל
      ולהעתיק את הURL שנראה בערך כך: https://script.google.com/macros/s/AKfycbz.../exec
      בקובץ ext.ini צריך להוסיף את השורות הבאות:```

      control_play7=send_api
      api_link=<כאן להדביק את הURL מהסקריפט>
      api_add_0=secret=1111
      

      השורה האחרונה זה קוד שמגביל את השימוש בURL רק למי שיביא את הסיסמא במקביל, וצריך למלא אותו גן בקובץ ini וגם בתא B3 בגיליון הגדרות.
      בדוגמא הזו הקובץ יישלח בהקשה על הסיפרה 7.
      אפשר גם בהקשה על * וצריך לשנות את השורה הראשונה

      control_play_moreA5=send_api
      

      כאן הקובץ יישלח בהקשה על *5.
      כמובן צריך לשים מפתח API של המערכת בתא B1
      ואת הנתיב המלא של השלוחה (אפשר יותר מנתיב אחד ולהפריד עם פסיק) בתא B2
      תא B33 זה הקוד שצריך להיות גם בקובץ ini (לא חובה למלא, אבל פחות מאובטח)
      תא B4 למלא את השם שרוצים שיופיע כשם שולח המייל (הכתובת היא הכתובת שעליה יושב הסקריפט, ואפשר לא למלא את התא ואז יישלח רק עם כתובת המייל ללא שם השולח)
      כמובן צריך למלא בגיליון מנהלים את מספרי הטלפון וכתובות המייל של המנהלים.

      מקווה שהייתי ברור ושיביא תועלת בס"ד

      פורסם בעזרה הדדית למשתמשים מתקדמים
      I
      IS
    • RE: תוכנה מעניינת לניהול מערכות

      @795702821
      תודה.
      יש לך עוד הצעות יעול?

      פורסם בעזרה הדדית למשתמשים מתקדמים
      I
      IS
    • RE: תוכנה מעניינת לניהול מערכות

      @אריה-AI
      מה אתה מתכוון?
      דיברתי על התוכנה שהעליתי בפוסט הראשון

      פורסם בעזרה הדדית למשתמשים מתקדמים
      I
      IS
    • RE: תוכנה מעניינת לניהול מערכות

      @פיתה כתב:

      אבל אין שם שום חידוש.

      לא מדויק, כן יש חידושים, יש דברים רבים שאי אפשר באתר ואפשר בתוכנה.
      באמת כל מה שיש בתוכנה אפשרי בAPI, אני לא יכול להמציא דברים שימות המשיח לא חשבו עליהם.

      פורסם בעזרה הדדית למשתמשים מתקדמים
      I
      IS
    • RE: תוכנה מעניינת לניהול מערכות

      @אריה-AI כתב:

      מטורף!!!
      ממש יפה!!!!
      עם איזה AI בנית את זה? עם claude???
      בכל אופן מטורף!!!

      אכן כמו שכתבו, עם קלוד.
      העיצוב שלו כי לא היה לי סבלנות לעצב, אולי כשאסיים את הפיתוח אשנה לעיצוב נורמלי ובלי אימוג'ים.

      תודה רבה על הפידבק

      פורסם בעזרה הדדית למשתמשים מתקדמים
      I
      IS
    • תוכנה מעניינת לניהול מערכות

      יצרתי תוכנה (בAI) לניהול מערכות, אשמח להערות.
      ידוע לי שישנם כעת כמה באגים שאני באמצע תיקון.
      אשמח לרעיונות נוספים
      התוכנה

      פורסם בעזרה הדדית למשתמשים מתקדמים
      I
      IS
    • RE: למי שלא הספיק לפתוח את המייל...

      ובאימות ד"ש בהודעה למייל?

      פורסם בעזרה הדדית למשתמשים מתקדמים
      I
      IS
    • RE: חדש! תמלול וסיכומי הקלטות מהמערכת הטלפונית שלכם באמצעות מנוע AI – ישירות במייל 📧

      @מ.-מ.-פליישער
      עם איזה מפתח זה משתמש?
      דרך aistudio או console cloud?

      פורסם בטיפים עצות והדגמות מהמשתמשים
      I
      IS