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

    במודל הקלטות - שם קובץ מוגדר מראש וכן תפריט לפני ההקלטה עצמה.

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

      יש לי רשימת הקלטות שונות (כותרות, שמות, תאריכים וכדומה) שמישהו אחר צריך להקליט.
      המקליט נכנס לשלוחה, שומע מה להקליט (החלפתי את קובץ M0102 במילה שצריך להקליט),
      מקליט ועובר להקלטה הבאה (record_end_goto). יצרתי שלוחות רבות, כל אחת עם הודעה מותאמת והגדרת מעבר להקלטה הבאה אחרי ההקלטה.

      אני צריך שני דברים נוספים:

      1. הגדרת שם הקובץ לכל הקלטה: למשל, שהקובץ של "בוקר טוב" ייקרא "בוקר_טוב.wav".
        הגדרת set_record_name=yes לא מתאימה כי השם צריך להיות המילה המוקלטת.
      2. אפשרות לדלג על הקלטה מסוימת: תפריט אחרי שמיעת המילה להקלטה שיאפשר לבחור אם להקליט או לדלג להקלטה הבאה.
        כיום (עד כמה שידוע לי) אין אפשרות כזו במודל ההקלטות.

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

      הצעתי להוסיף הגדרה לשם קובץ מוגדר מראש:

      set_record_name=שם הקובץ הרצוי
      

      וכן הגדרה לאחר הכניסה לשלוחת הקלטות - בחירה האם להליט או להמשיך להיכן שמוגדר ב-record_end_goto (כמו שיש בהקלטת כותרת)

          record=tfr
      

      תודה מראש!!!

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

        @הלוי-הלוי אתה מעוניין שיהי' שמות לקבצים? כי אם כן זה גם בעיה בהשמעת קבצים שלא יוכל להשמיע את הקובץ (כי הוא לא ממוספר)

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

          @צבי-ד-צ כתב בבמודל הקלטות - שם קובץ מוגדר מראש וכן תפריט לפני ההקלטה עצמה.:

          @הלוי-הלוי אתה מעוניין שיהי' שמות לקבצים? כי אם כן זה גם בעיה בהשמעת קבצים שלא יוכל להשמיע את הקובץ (כי הוא לא ממוספר)

          לא, כמו שכתבתי, הקבצים לא מיועדים להשמעה במודל השמעת קבצים אלא שיהיו באיזושהי תיקייה במערכת, אח"כ אשתמש בהם לבניית משפטים,
          נניח שכל הקבצים נמצאים בתיקייה בשם "קבצים", וארצה לבנות בשלוחה הראשית קובץ M1000 לתפריט "להקלטות הקישו 1 לשמיעת הודעות 2"
          אשתמש בקוד כזה:

          /**
           * פונקציה ראשית שמורידה קבצים, מחברת אותם לקובץ אחד ואז מעלה אותו.
           */
          function main() {
            const downloadPath = "ivr2:קבצים/";
            const files = ["ל.wav", "הקלטות.wav", "הקישו.wav", "1.wav", "ל.wav", "שמיעת הודעות.wav", "2.wav"];
            const uploadPath = "ivr2:M1000.wav";
          
            // הורדת הקבצים
            const fileBlob = downloadFile(downloadPath, files);
            
            // העלאת הקובץ המחובר
            uploadFile(uploadPath, fileBlob);
          }
          
          /**
           * מוריד קובץ מה-URL שצוין ומחזיר אותו כ-blob.
           *
           * @param {string} path - הנתיב של הקובץ להורדה.
           * @param {string[]} files - רשימת הקבצים להורדה.
           * @return {Blob} הקובץ שהורד כ-blob.
           */
          function downloadFile(path, files) {
            
            var blobs = files.map(function(file) {
              return UrlFetchApp.fetch(`${url}DownloadFile?token=${token}&path=${path}${file}`).getBlob();
            });
          
            var headerSize = 44; // גודל הכותרת של קובץ WAV בבתים
          
            // קרא את הנתונים של הקבצים
            var combinedBytes = [], bytes;
            blobs.forEach(function(blob) {
              bytes = blob.getBytes();
                // שמור את הנתונים ללא הכותרת
                combinedBytes = combinedBytes.concat(Array.from(bytes.slice(headerSize)));
            });
          
            var dataSize = combinedBytes.length, dataSize36 = dataSize + 36;
            var wavTitle = [
              82, 73, 70, 70,  // 'RIFF' ב-ASCII
              dataSize36 & 0xFF, (dataSize36 >> 8) & 0xFF, (dataSize36 >> 16) & 0xFF, (dataSize36 >> 24) & 0xFF,  // גודל הקובץ - 8 בתים
              87, 65, 86, 69,  // 'WAVE' ב-ASCII
              102, 109, 116, 32,  // נתח 'fmt'
              16, 0, 0, 0,  // תת נתח 1 גודל (16 עבור PCM)
              1, 0,  // פורמט שמע (1 עבור PCM)
              1, 0,  // מספר ערוצים (1 עבור מונו, 2 עבור סטריאו)
              64, 31, 0, 0,  // קצב דגימה (8000 הרץ בפורמט ליטל-אנדיאן)
              128, 62, 0, 0,  // קצב בתים (קצב דגימה * מספר ערוצים * סיביות לדגימה / 8)
              2, 0,  // יישור בלוק (מספר ערוצים * ביטים לדגימה / 8)
              16, 0,  // סיביות לדגימה (16 סיביות)
              100, 97, 116, 97,  // נתח 'data'
              dataSize & 0xFF, (dataSize >> 8) & 0xFF, (dataSize >> 16) & 0xFF, (dataSize >> 24) & 0xFF  // גודל נתונים
            ];
            var wav = wavTitle.concat(combinedBytes);
            var combinedBlob = Utilities.newBlob(wav, 'audio/wav', 'combined.wav');
            
            return combinedBlob;
          }
          
          /**
           * מעלה קובץ לכתובת ה-URL שצוינה באמצעות בקשת HTTP POST עם נתונים מרובי חלקים/טופס.
           *
           * @param {string} path - הנתיב שבו יש להעלות את הקובץ.
           * @param {Blob} fileBlob - blob הקובץ שיש להעלות.
           */
          function uploadFile(path, fileBlob) {
          
            var yemotUrl = url + 'UploadFile';
          
            var formData = {
              'upload': fileBlob,
              'token': token,
              'path': path
            };
            
            var options = {
              'method': 'post',
              'payload': formData,
              'muteHttpExceptions': true
            };
            
            var response = UrlFetchApp.fetch(yemotUrl, options);
            var responseCode = response.getResponseCode();
            Logger.log(response.getContentText());
            if (responseCode === 200) {
              return JSON.parse(response.getContentText());
            } else {
              return {'שגיאה': 'הבקשה נכשלה עם קוד תגובה ' + responseCode};
            }
          }
          

          כעת יותר מובן או יותר מסובך??....

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

            @הלוי-הלוי כדי לקבוע מראש את שם הקובץ, אתה יכול להשתמש בשלוחת הקלטת הודעות מערכת (עובד על ספרות, לא בדקתי על אותיות).

            ה צ 2 תגובות תגובה אחרונה תגובה ציטוט 2
            • ה
              הלוי הלוי @דוד_מלך_ישראל נערך לאחרונה על ידי הלוי הלוי

              @דוד_מלך_ישראל
              וואו!
              זה פשוט עובד!!!
              כתבתי כך:

              type=record_system_messages
              record_system_folder=/1/2
              record_system_messages=שלום
              

              נוצר בשלוחה 1/2 קובץ בשם "שלום.wav" עם ההקלטה המבוקשת!
              זה בדיוק מה שחיפשתי!
              תודה!!!

              נ.ב. לטובת המשתמשים שמגיעים לכאן... קישור להגדרות המודל

              תגובה 1 תגובה אחרונה תגובה ציטוט 1
              • צ
                צבי ד"צ מומחה @דוד_מלך_ישראל נערך לאחרונה על ידי

                @דוד_מלך_ישראל באמת רעיון, כי רק לאחרונה גיליתי שזה לא שלוחה של הודעות מערכת אמיתית, כי אי אפשר למחוק ולהחליף הודעות ולקבוע זמן לM0001,, ועכשיו אני מבין שזה בסה"כ קורא שם לקובץ, נפלא ביותר!

                תגובה 1 תגובה אחרונה תגובה ציטוט 2
                • פוסט ראשון
                  פוסט אחרון