במודל הקלטות - שם קובץ מוגדר מראש וכן תפריט לפני ההקלטה עצמה.
-
יש לי רשימת הקלטות שונות (כותרות, שמות, תאריכים וכדומה) שמישהו אחר צריך להקליט.
המקליט נכנס לשלוחה, שומע מה להקליט (החלפתי את קובץ M0102 במילה שצריך להקליט),
מקליט ועובר להקלטה הבאה (record_end_goto). יצרתי שלוחות רבות, כל אחת עם הודעה מותאמת והגדרת מעבר להקלטה הבאה אחרי ההקלטה.אני צריך שני דברים נוספים:
- הגדרת שם הקובץ לכל הקלטה: למשל, שהקובץ של "בוקר טוב" ייקרא "בוקר_טוב.wav".
הגדרת set_record_name=yes לא מתאימה כי השם צריך להיות המילה המוקלטת. - אפשרות לדלג על הקלטה מסוימת: תפריט אחרי שמיעת המילה להקלטה שיאפשר לבחור אם להקליט או לדלג להקלטה הבאה.
כיום (עד כמה שידוע לי) אין אפשרות כזו במודל ההקלטות.
אני בונה קו משפחתי ומעוניין להחליף את כל הודעות המערכת בקול של אחי הקטן...
בניתי קוד שמוריד קבצים מסויימים לפי הצורך, מחבר אותם לקובץ יחיד ומעלה אותו למערכת,
לכן אני צריך ששמות קבצים כמו המילים המוקלטות ושאפשר יהיה לדלג על הקלטות שכבר הוקלטו.
אפשר לעשות זאת באמצעות API שאחרי כל הקלטה ישנה את שם הקובץ ויגדיר שבפעם הבאה ידלג על השלוחה של ההקלטה הזו,
אבל זה קצת מסובך..
וגם שנתקלתי בצורך לקבוע את שם הקובץ מראש כבר כמה פעמים.
ואני מאמין שזה יועיל לעוד אנשים.הצעתי להוסיף הגדרה לשם קובץ מוגדר מראש:
set_record_name=שם הקובץ הרצוי
וכן הגדרה לאחר הכניסה לשלוחת הקלטות - בחירה האם להליט או להמשיך להיכן שמוגדר ב-record_end_goto (כמו שיש בהקלטת כותרת)
record=tfr
תודה מראש!!!
- הגדרת שם הקובץ לכל הקלטה: למשל, שהקובץ של "בוקר טוב" ייקרא "בוקר_טוב.wav".
-
@הלוי-הלוי אתה מעוניין שיהי' שמות לקבצים? כי אם כן זה גם בעיה בהשמעת קבצים שלא יוכל להשמיע את הקובץ (כי הוא לא ממוספר)
-
@צבי-ד-צ כתב בבמודל הקלטות - שם קובץ מוגדר מראש וכן תפריט לפני ההקלטה עצמה.:
@הלוי-הלוי אתה מעוניין שיהי' שמות לקבצים? כי אם כן זה גם בעיה בהשמעת קבצים שלא יוכל להשמיע את הקובץ (כי הוא לא ממוספר)
לא, כמו שכתבתי, הקבצים לא מיועדים להשמעה במודל השמעת קבצים אלא שיהיו באיזושהי תיקייה במערכת, אח"כ אשתמש בהם לבניית משפטים,
נניח שכל הקבצים נמצאים בתיקייה בשם "קבצים", וארצה לבנות בשלוחה הראשית קובץ 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}; } }
כעת יותר מובן או יותר מסובך??....
-
@הלוי-הלוי כדי לקבוע מראש את שם הקובץ, אתה יכול להשתמש בשלוחת הקלטת הודעות מערכת (עובד על ספרות, לא בדקתי על אותיות).
-
@דוד_מלך_ישראל
וואו!
זה פשוט עובד!!!
כתבתי כך:type=record_system_messages record_system_folder=/1/2 record_system_messages=שלום
נוצר בשלוחה 1/2 קובץ בשם "שלום.wav" עם ההקלטה המבוקשת!
זה בדיוק מה שחיפשתי!
תודה!!!נ.ב. לטובת המשתמשים שמגיעים לכאן... קישור להגדרות המודל
-
@דוד_מלך_ישראל באמת רעיון, כי רק לאחרונה גיליתי שזה לא שלוחה של הודעות מערכת אמיתית, כי אי אפשר למחוק ולהחליף הודעות ולקבוע זמן לM0001,, ועכשיו אני מבין שזה בסה"כ קורא שם לקובץ, נפלא ביותר!