• ספר טלפונים קהילתי ענק - צריך עזרה

    שאלות ועזרה הדדית
    3
    1 הצבעות
    3 פוסטים
    35 צפיות
    ל
    @מתמחה-בקווים תודה תודה אבל אני מחכה לביקורת....
  • 1 הצבעות
    9 פוסטים
    68 צפיות
    ש
    שמתי את זה ועובד מצוין type=api api_link=https://shemanet.com/time.php api_add_0=date=2023/06/01 api_add_1=time=19:00:00
  • קבלת התראה על אס אם אס

    עזרה הדדית למשתמשים מתקדמים
    1
    0 הצבעות
    1 פוסטים
    5 צפיות
    אין תגובות
  • פתיחת חשבון סיפ

    טלפונים ומערכות SIP
    6
    0 הצבעות
    6 פוסטים
    42 צפיות
    א
    @0101 כתב: אם אתה רוצה שיתחבר לחשבון SIP של מערכת תכנים, בחלק מהאתרים אפשר לפתוח חשבון בלשוניתת "מרכזיה עסקית" תתחבר עם שם המשתמש והסיסמא בשרת ymta בלבד, בשאר האתרים בתשלום כנ"ל
  • ניתוב למשאיר ההודעה בחינם

    טיפים עצות והדגמות מהמשתמשים
    131
    14 הצבעות
    131 פוסטים
    7k צפיות
    ש
    @שלוחה-404 כתב: @שמול הבעיה בטוקן שלך אפשר לשלוח לך מייל? מה המייל שלך.
  • צינתוק למספר המחייג עם מענה

    שאלות ועזרה הדדית
    1
    0 הצבעות
    1 פוסטים
    10 צפיות
    אין תגובות
  • הטמעת מערכת בתוך שלוחה במערכת אחרת

    טלפונים ומערכות SIP
    7
    0 הצבעות
    7 פוסטים
    116 צפיות
    ה
    @אאאאאאא נסה את זה ובכתובת יעד עשה מספר מערכת שלך ובנוסף תגדיר איזה שלוחה אגב גם אני השתמשתי באותה טכניקה רק שאני קניתי מספרים לשלוחות פנימיים
  • 9 הצבעות
    166 פוסטים
    4k צפיות
    ש
    @פתרון-AI אפשר להגדיר דרך האתר את המודל של ניתוב שיחה בעת שמיעת הודעה..
  • 0 הצבעות
    1 פוסטים
    10 צפיות
    אין תגובות
  • 2 הצבעות
    10 פוסטים
    68 צפיות
    L
    @פלוס כתב: הוא לא קצת קול נשי? לדעתי ממש לא ואני מאוד נהנה ממנו אם כי הניקוד והמנגינה שהוא כאילו באמצע משפט ושם הוא גומר מאוד מפריע
  • 8 הצבעות
    24 פוסטים
    1k צפיות
    L
    @לימוד-בתורת-מרן למעשה בממשק החדש ניתן לראות דרך האתר אבל לא לשמוע בטלפון יהי רצון שיסדרו את זה
  • שליחת נתונים ב json במודול api

    לא נפתר פורום מפתחים API
    3
    0 הצבעות
    3 פוסטים
    18 צפיות
    מ
    @לעזור-לכולם נכון ושם אין התייחסות לגבי פורמט השליחה
  • 2 הצבעות
    10 פוסטים
    344 צפיות
    פ
    כעת יצרנו כלי המחובר לאתר הנותן גישה לכל סוכני הAI הקלאסיים לעבוד ישירות על הקו שלכם ללא צורך שתפעלו אתם בקו הם הידיים שלכם ויש למערכת את כל המידע של הפורום תוך כדי בדיקות בזמן אמת מהפורום הכנסו כאן ותהנו https://f2.freeivr.co.il/topic/21853
  • 0 הצבעות
    9 פוסטים
    137 צפיות
    פ
    כעת יצרנו כלי המחובר לאתר הנותן גישה לכל סוכני הAI הקלאסיים לעבוד ישירות על הקו שלכם ללא צורך שתפעלו אתם בקו הם הידיים שלכם ויש למערכת את כל המידע של הפורום תוך כדי בדיקות בזמן אמת מהפורום הכנסו כאן ותהנו https://f2.freeivr.co.il/topic/21853
  • 0 הצבעות
    1 פוסטים
    19 צפיות
    אין תגובות
  • 0 הצבעות
    6 פוסטים
    88 צפיות
    ש
    @קצת-עזרה @שלוחה-404 @שלוחה-404 כתב: @קצת-עזרה יש דרך מודל ניתוביה אם פרסומות מודל ש @ איל-משולש פרסם זה חינם ויש מובנה של ימות בעלות יחידות איך עושים את הניתוב לא הבנתי את המודל של@איל-משולש ?
  • Time_keeper with out the time

    שאלות ועזרה הדדית
    3
    0 הצבעות
    3 פוסטים
    26 צפיות
    S
    @מסובך-מאוד It doesn't work, the system still says the time I want that when someone reports that he is starting, the system should not say the time he started, and likewise when someone reports that he is finishing, the system should not say the time he ends, how can I do this?
  • 0 הצבעות
    8 פוסטים
    150 צפיות
    I
    @וזכיני-לגדל צריך ליצור גיליון חדש בגוגל שיטס, תוספים, 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 של המערכת בימות. ליצור טריגר שירוץ כל דקה, וכל מייל שיכנס לתוית הראשונה עם קובץ שמע יעלה לנתיב המוגדר והמייל יעבור לתוית של אחרי הטיפול. בהצלחה
  • פילטר לפי רשימת תפוצה

    לא נפתר שאלות ועזרה הדדית
    10
    0 הצבעות
    10 פוסטים
    56 צפיות
    מ
    @יצמח-פורקניה מי שלא נמצא יוכל להיכנס?
  • 4 הצבעות
    77 פוסטים
    2k צפיות
    מ
    עדכון: בס"ד נפתרה בעיית האיטיות במערכת. בהצלחה!