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

    אני רוצה לשלוח אימעיל שיכנס ישר לשלוחה

    מתוזמן נעוץ נעול הועבר שאלות ועזרה הדדית
    12 פוסטים 7 כותבים 167 צפיות 2 עוקבים
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • תגובה כנושא
    התחברו כדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • א מנותק
      אA @9121800
      נערך לאחרונה על ידי

      @9121800
      אתה יכול לפתח לבד.
      זה סקריפט קטן ופשוט.

      9 תגובה 1 תגובה אחרונה תגובה ציטוט 0
      • 9 מנותק
        9121800 @אA
        נערך לאחרונה על ידי

        סקריפט קטן ופשוט.

        מישהו מתנדב?

        ה תגובה 1 תגובה אחרונה תגובה ציטוט 0
        • ה מנותק
          הדיבל המעופף @9121800
          נערך לאחרונה על ידי

          @9121800
          תבקש מAI

          תגובה 1 תגובה אחרונה תגובה ציטוט 0
          • י מנותק
            יעקב יצחק @9121800
            נערך לאחרונה על ידי

            @9121800 כתב:

            נראה לי שעשו פעם משהו אבל היה מסובך

            אתה מתכוון לזה? זה לא כזה מסובך.

            תגובה 1 תגובה אחרונה תגובה ציטוט 0
            • ו מנותק
              וזכיני לגדל
              נערך לאחרונה על ידי

              אם יש משהו מוכן - גם אני אשמח.

              I תגובה 1 תגובה אחרונה תגובה ציטוט 1
              • I מחובר
                IS @וזכיני לגדל
                נערך לאחרונה על ידי

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

                ה תגובה 1 תגובה אחרונה תגובה ציטוט 0
                • ה מנותק
                  הדיבל המעופף @IS
                  נערך לאחרונה על ידי

                  @IS
                  אבל צריך בשביל זה מייל מיוחד לזה.

                  I תגובה 1 תגובה אחרונה תגובה ציטוט 0
                  • I מחובר
                    IS @הדיבל המעופף
                    נערך לאחרונה על ידי

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

                    ה תגובה 1 תגובה אחרונה תגובה ציטוט 0
                    • ה מנותק
                      הדיבל המעופף @IS
                      נערך לאחרונה על ידי

                      @IS
                      אבל זה לא לוקח את כל המיילים המתקבלים?

                      I תגובה 1 תגובה אחרונה תגובה ציטוט 0
                      • I מחובר
                        IS @הדיבל המעופף
                        נערך לאחרונה על ידי

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

                        תגובה 1 תגובה אחרונה תגובה ציטוט 0

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

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

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

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