• שדרוג אתר הניהול - חוו"ד המשתמשים

    נעוץ נעול
    1
    36 הצבעות
    1 פוסטים
    1k צפיות
    אין תגובות
  • תקנון קטגוריית עזרה הדדית

    נעוץ נעול הועבר
    1
    16 הצבעות
    1 פוסטים
    1k צפיות
    אין תגובות
  • שינו את האתר נכון ?

    4
    0 הצבעות
    4 פוסטים
    37 צפיות
    פ
    @haiims לא יודע מה אתכם אני מקווה שזה רק טעות כל הפרום הזה.....
  • קבצים ותוכנות לשימוש במערכות ימות המשיח

    22
    11 הצבעות
    22 פוסטים
    419 צפיות
    א
    יצירת שלוחות והעלאת קבצים המסודרים בתקיות במחשב הקוד מצורף <!DOCTYPE html> <html lang="he" dir="rtl"> <head> <meta charset="UTF-8"> <title>מעלה תיקיות ומבנה שלוחות - ימות המשיח</title> <style> :root { --primary: #3498db; --success: #2ecc71; --danger: #e74c3c; --bg: #f4f7f6; --dark: #2c3e50; } body { font-family: 'Segoe UI', Arial, sans-serif; margin: 0; background-color: var(--bg); color: var(--dark); text-align: right; } .wrapper { max-width: 900px; margin: 40px auto; padding: 0 20px; position: relative; } .reset-btn { position: absolute; top: -10px; left: 20px; background: var(--danger); color: white; border: none; padding: 8px 15px; border-radius: 5px; cursor: pointer; font-size: 14px; font-weight: bold; transition: all 0.3s; box-shadow: 0 2px 5px rgba(0,0,0,0.1); } .reset-btn:hover { opacity: 0.8; transform: translateY(-1px); } .card { background: white; padding: 30px; border-radius: 15px; box-shadow: 0 10px 25px rgba(0,0,0,0.05); margin-bottom: 25px; border: 1px solid #eee; } h2 { margin-top: 0; color: var(--dark); border-bottom: 3px solid var(--primary); display: inline-block; padding-bottom: 10px; } .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-top: 20px; } .input-group { display: flex; flex-direction: column; gap: 8px; } label { font-weight: bold; font-size: 14px; } input { padding: 12px; border: 2px solid #eee; border-radius: 8px; font-size: 16px; transition: border 0.3s; } input:focus { border-color: var(--primary); outline: none; } .full-width { grid-column: 1 / -1; } .btn-main { background: var(--primary); color: white; border: none; padding: 15px; border-radius: 8px; cursor: pointer; font-size: 18px; font-weight: bold; margin-top: 10px; width: 100%; transition: all 0.3s; box-shadow: 0 4px 6px rgba(52, 152, 219, 0.2); } .btn-main:hover { background: #2980b9; transform: translateY(-1px); } .btn-main:disabled { background: #bdc3c7; cursor: not-allowed; transform: none; } /* אזור התקדמות משודרג */ .progress-wrapper { margin-top: 25px; display: none; padding: 15px; background: #fafafa; border-radius: 10px; border: 1px solid #eee; } .progress-container { width: 100%; background: #e0e0e0; height: 35px; border-radius: 20px; overflow: hidden; position: relative; box-shadow: inset 0 2px 5px rgba(0,0,0,0.1); border: 1px solid #ccc; } .progress-bar { height: 100%; width: 0%; background: linear-gradient(45deg, #2ecc71 25%, #27ae60 25%, #27ae60 50%, #2ecc71 50%, #2ecc71 75%, #27ae60 75%, #27ae60); background-size: 40px 40px; animation: move-stripes 2s linear infinite; transition: width 0.4s cubic-bezier(0.17, 0.67, 0.83, 0.67); box-shadow: 0 2px 4px rgba(0,0,0,0.1); } @keyframes move-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } } .progress-text { position: absolute; width: 100%; text-align: center; top: 0; line-height: 35px; color: #fff; font-weight: 900; text-shadow: 1px 1px 2px rgba(0,0,0,0.5); font-size: 16px; } .log-header { font-weight: bold; margin-bottom: 12px; display: flex; align-items: center; gap: 10px; color: var(--dark); } .log-box { background: #1e1e1e; color: #d4d4d4; padding: 20px; border-radius: 10px; font-family: 'Consolas', monospace; height: 300px; overflow-y: auto; font-size: 13px; line-height: 1.6; border: 4px solid #333; box-shadow: inset 0 5px 15px rgba(0,0,0,0.5); } .log-info { color: #5dade2; } .log-success { color: #58d68d; font-weight: bold; } .log-error { color: #ec7063; } .log-warn { color: #f4d03f; } .log-tts { color: #bb8fce; } </style> </head> <body> <div class="wrapper"> <button class="reset-btn" onclick="resetAll()">✕ איפוס תהליך</button> <div class="card"> <h2>העלאת מבנה תיקיות לימות המשיח</h2> <div class="grid"> <div class="input-group"> <label>טוקן מערכת:</label> <input type="text" id="token" placeholder="הכנס טוקן כאן..."> </div> <div class="input-group"> <label>שלוחת יעד ראשית:</label> <input type="text" id="targetPath" placeholder="לדוגמה: 1"> </div> <div class="input-group full-width"> <label>בחר תיקייה מהמחשב:</label> <input type="file" id="folderInput" webkitdirectory> </div> <div class="full-width"> <button id="startBtn" class="btn-main" onclick="processUpload()">התחל העלאה למערכת</button> </div> </div> <div class="progress-wrapper" id="progBox"> <div class="log-header">🔄 סטטוס התקדמות:</div> <div class="progress-container"> <div class="progress-bar" id="progBar"></div> <div class="progress-text" id="progText">0%</div> </div> </div> </div> <div class="card"> <div class="log-header">📜 תיעוד פעולות (Log):</div> <div class="log-box" id="logBox">ממתין לתחילת עבודה...</div> </div> </div> <script> const sleep = ms => new Promise(res => setTimeout(res, ms)); function addLog(msg, type = "info") { const logBox = document.getElementById('logBox'); let className = "log-info"; if (type === "success") className = "log-success"; if (type === "error") className = "log-error"; if (type === "warn") className = "log-warn"; if (type === "tts") className = "log-tts"; logBox.innerHTML += `<div class="${className}">> ${msg}</div>`; logBox.scrollTop = logBox.scrollHeight; } function resetAll() { if(!confirm("האם אתה בטוח שברצונך לאפס את כל הנתונים?")) return; document.getElementById('token').value = ""; document.getElementById('targetPath').value = ""; document.getElementById('folderInput').value = ""; document.getElementById('logBox').innerHTML = "המערכת אופסה. ממתין לפעולה..."; document.getElementById('progBox').style.display = "none"; document.getElementById('progBar').style.width = "0%"; document.getElementById('progText').innerText = "0%"; document.getElementById('startBtn').disabled = false; addLog("בוצע איפוס נתונים."); } async function processUpload() { const token = document.getElementById('token').value; const targetPath = document.getElementById('targetPath').value; const fileList = document.getElementById('folderInput').files; if (!token || !fileList.length) { alert("חובה למלא טוקן ולבחור תיקייה"); return; } document.getElementById('startBtn').disabled = true; document.getElementById('progBox').style.display = 'block'; const progBar = document.getElementById('progBar'); const progText = document.getElementById('progText'); document.getElementById('logBox').innerHTML = ""; addLog("מתחיל בניית מבנה נתונים...", "info"); const folderStructure = {}; for (let file of fileList) { const parts = file.webkitRelativePath.split('/'); parts.shift(); const fileName = parts.pop(); const folderPath = parts.join('/'); if (!folderStructure[folderPath]) folderStructure[folderPath] = []; folderStructure[folderPath].push({ name: fileName, file: file }); } const sortedPaths = Object.keys(folderStructure).sort((a, b) => { const depthA = a === "" ? 0 : a.split('/').length; const depthB = b === "" ? 0 : b.split('/').length; return depthA - depthB; }); for (let i = 0; i < sortedPaths.length; i++) { const folderPath = sortedPaths[i]; const currentIvrPath = folderPath ? `${targetPath}/${folderPath}` : targetPath; const folderFiles = folderStructure[folderPath]; const isRoot = (folderPath === ""); addLog(`מעבד שלוחה: ${currentIvrPath}`, "warn"); const extFileObj = folderFiles.find(f => f.name.toLowerCase().split('.')[0] === 'ext'); let extContent = ""; if (extFileObj) { extContent = await extFileObj.file.text(); } else { extContent = isRoot ? "type=menu" : "type=playfile"; } const extBlob = new Blob([extContent], { type: 'text/plain' }); await uploadFile(token, `${currentIvrPath}/ext.ini`, extBlob); await sleep(400); for (let fObj of folderFiles) { const fileNameLower = fObj.name.toLowerCase(); if (fileNameLower.split('.')[0] === 'ext') continue; const isAudio = /\.(wav|mp3|ogg|wma)$/i.test(fileNameLower); let destName = ""; let blobToSend; if (isAudio) { destName = fObj.name.replace(/\.[^/.]+$/, ".wav"); blobToSend = fObj.file; addLog(`מעלה שמע: ${destName}`, "info"); } else if (fileNameLower.includes('.tts')) { let cleanName = fObj.name.replace(/\.tts/gi, ""); cleanName = cleanName.replace(/\.[^/.]+$/, ""); destName = cleanName + ".tts"; const text = await fObj.file.text(); blobToSend = new Blob([text], { type: 'text/plain' }); addLog(`מעלה קובץ TTS: ${destName}`, "tts"); } else { destName = fObj.name.replace(/\.[^/.]+$/, "") + ".ini"; const text = await fObj.file.text(); blobToSend = new Blob([text], { type: 'text/plain' }); addLog(`מעלה הגדרות: ${destName}`, "info"); } await uploadFile(token, `${currentIvrPath}/${destName}`, blobToSend); } const pct = Math.round(((i + 1) / sortedPaths.length) * 100); progBar.style.width = pct + '%'; progText.innerText = pct + '%'; } addLog("סיום מוצלח! כל הקבצים הועלו.", "success"); document.getElementById('startBtn').disabled = false; } async function uploadFile(token, fullPath, blob) { const fd = new FormData(); fd.append('token', token); fd.append('path', `ivr2:${fullPath}`); fd.append('qqfile', blob, fullPath.split('/').pop()); try { const res = await fetch(`https://www.call2all.co.il/ym/api/UploadFile`, { method: 'POST', body: fd }); const data = await res.json(); if(data.responseStatus !== "OK") addLog(`שגיאה ב-${fullPath}: ${data.message}`, "error"); return data; } catch (e) { addLog(`כישלון תקשורת ב-${fullPath}`, "error"); } } </script> </body> </html> קרדיט: @אA
  • העברת קבצים ממערכת למערכת

    14
    0 הצבעות
    14 פוסטים
    160 צפיות
    א
    @מה בדקתי והקוד הזה עובד. בהצלחה! אם תרצה תוספות תעדכן. Spoiler <!DOCTYPE html> <html lang="he" dir="rtl"> <head> <meta charset="UTF-8"> <title>מעביר קבצים - ימות המשיח</title> <style> body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; margin: 20px; background-color: #f4f7f6; color: #333; text-align: right; } .container { max-width: 900px; margin: auto; background: white; padding: 20px; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); } .section { border: 1px solid #e0e0e0; padding: 15px; margin-bottom: 15px; border-radius: 8px; background: #fafafa; } h2 { color: #2c3e50; border-bottom: 2px solid #3498db; padding-bottom: 10px; margin-top: 0; } .input-group { margin-bottom: 10px; display: flex; gap: 10px; align-items: center; flex-wrap: wrap; } input[type="text"] { padding: 8px; border: 1px solid #ddd; border-radius: 4px; flex: 1; min-width: 200px; } button { padding: 10px 20px; background-color: #3498db; color: white; border: none; border-radius: 4px; cursor: pointer; font-weight: bold; } button:hover { background-color: #2980b9; } button:disabled { background-color: #bdc3c7; cursor: not-allowed; } table { width: 100%; border-collapse: collapse; margin-top: 15px; } th, td { border: 1px solid #ddd; padding: 10px; text-align: center; } th { background-color: #ecf0f1; } .progress-container { width: 100%; background-color: #eee; border-radius: 13px; margin: 15px 0; display: none; overflow: hidden; height: 25px; } .progress-bar { width: 0%; height: 100%; background-color: #2ecc71; text-align: center; line-height: 25px; color: white; transition: width 0.3s; } .status-text { font-weight: bold; color: #e67e22; text-align: center; margin-top: 5px; } .file-list-section { margin-top: 20px; border-top: 2px solid #eee; padding-top: 20px; } </style> </head> <body> <div class="container"> <h2>מערכת העברת קבצים אוטומטית</h2> <div class="section"> <strong>מערכת מקור</strong> <div class="input-group"> <input type="text" id="srcToken" placeholder="טוקן מקור"> <input type="text" id="srcPath" placeholder="שלוחה מקור (למשל 1)"> <button id="loadBtn" onclick="loadFiles()">טען קבצים</button> </div> </div> <div class="section"> <strong>מערכת יעד</strong> <div class="input-group"> <input type="text" id="destToken" placeholder="טוקן יעד"> <input type="text" id="destPath" placeholder="שלוחת יעד (למשל 2)"> <button id="transferBtn" onclick="startTransfer()" disabled>התחל העברה</button> </div> <div class="progress-container" id="progCont"> <div class="progress-bar" id="progBar">0%</div> </div> <div id="transferStatus" class="status-text"></div> </div> <div id="fileArea" class="file-list-section" style="display:none;"> <h3>קבצים בשלוחת המקור</h3> <table> <thead> <tr> <th><input type="checkbox" id="selectAll" onclick="toggleSelectAll(this)"></th> <th>שם הקובץ</th> <th>גודל</th> </tr> </thead> <tbody id="fileTableBody"></tbody> </table> </div> </div> <script> function toggleSelectAll(source) { const checkboxes = document.querySelectorAll('.file-check'); checkboxes.forEach(cb => cb.checked = source.checked); } async function loadFiles() { const token = document.getElementById('srcToken').value; const path = document.getElementById('srcPath').value; const loadBtn = document.getElementById('loadBtn'); const tbody = document.getElementById('fileTableBody'); if(!token || !path) return alert("נא למלא טוקן ונתיב מקור"); loadBtn.innerText = "טוען..."; loadBtn.disabled = true; try { const response = await fetch(`https://www.call2all.co.il/ym/api/GetIVR2Dir?token=${token}&path=${path}`); const data = await response.json(); if (data.responseStatus !== "OK") throw new Error(data.message); tbody.innerHTML = ''; if (data.files && data.files.length > 0) { data.files.forEach(file => { tbody.innerHTML += `<tr> <td><input type="checkbox" class="file-check" data-name="${file.name}"></td> <td>${file.name}</td> <td>${(file.size / 1024).toFixed(1)} KB</td> </tr>`; }); document.getElementById('fileArea').style.display = 'block'; document.getElementById('transferBtn').disabled = false; } else { alert("לא נמצאו קבצים בשלוחה זו."); } } catch (e) { alert("שגיאה: " + e.message); } finally { loadBtn.innerText = "טען קבצים"; loadBtn.disabled = false; } } async function startTransfer() { const srcToken = document.getElementById('srcToken').value; const srcPath = document.getElementById('srcPath').value; const destToken = document.getElementById('destToken').value; const destPath = document.getElementById('destPath').value; const selected = Array.from(document.querySelectorAll('.file-check:checked')); if (selected.length === 0) return alert('נא לבחור קבצים להעברה'); const status = document.getElementById('transferStatus'); const progBar = document.getElementById('progBar'); document.getElementById('progCont').style.display = 'block'; document.getElementById('transferBtn').disabled = true; for (let i = 0; i < selected.length; i++) { const fileName = selected[i].getAttribute('data-name'); status.innerText = `מעביר: ${fileName} (${i + 1}/${selected.length})`; try { // הורדה const downloadUrl = `https://www.call2all.co.il/ym/api/DownloadFile?token=${srcToken}&path=ivr2:${srcPath}/${fileName}`; const downloadRes = await fetch(downloadUrl); if (!downloadRes.ok) throw new Error('הורדה נכשלה'); const fileBlob = await downloadRes.blob(); // העלאה const formData = new FormData(); formData.append('token', destToken); formData.append('path', `ivr2:${destPath}/${fileName}`); formData.append('qqfile', fileBlob, fileName); const uploadRes = await fetch(`https://www.call2all.co.il/ym/api/UploadFile`, { method: 'POST', body: formData }); await uploadRes.json(); } catch (err) { console.error("תקלה:", err); status.innerText = `שגיאה בקובץ ${fileName}, ממשיך...`; } const percent = Math.round(((i + 1) / selected.length) * 100); progBar.style.width = percent + '%'; progBar.innerText = percent + '%'; } status.innerText = 'ההעברה הושלמה בהצלחה!'; document.getElementById('transferBtn').disabled = false; } </script> </body> </html>
  • 0 הצבעות
    3 פוסטים
    24 צפיות
    ש
    @צבי-ד-צ מצטט מכאן שינוי נתונים קיימים אם רוצים לשנות את ה value =הנתון שקיים לאחר ה = לדוגמא: אם קיים נתון 0501234567=ערך ישן ורוצים שהנתון ישתנה ל0501234567=ערך חדש יש להוסיף את ההגדרה הבאה: add_id_to_list_value_change=yes ואז המערכת תבדוק אם קיים הערך תשנה את מה שמופיע לו לאחר ה = למה שהגדרתם ב add_id_to_list_value
  • שאלה

    לא נפתר
    2
    0 הצבעות
    2 פוסטים
    31 צפיות
    נ
    ?????????????????
  • בקשת עזרה: לינק קשיח ומספור מחדש השלוחה המקבלת

    2
    0 הצבעות
    2 פוסטים
    39 צפיות
    א
    @אאא-יוני יש לי שירות תזמון משימה לסנכרון קבצים משלוחה אחת לשניה, ויש שם אפשרות למספור אוטומטי לקבצי שמע, רק שזה בקצת יותר מתשלום סמלי, זה עולה 12 ש"ח לחודש
  • בינה מלכותית בקו

    2
    0 הצבעות
    2 פוסטים
    42 צפיות
    H
    @קו-המוסיקה בשיתוף לקו אחר יש?
  • הודעה מאת שלוחת השמעת קבצים מודל הקלטות

    19
    0 הצבעות
    19 פוסטים
    1k צפיות
    נ
    @ד-סופר-0 אפשר קובץ שמע
  • זיהוי EnterID בחיוג למספר משנה של המערכת

    3
    0 הצבעות
    3 פוסטים
    22 צפיות
    א
    @צבי-ד-צ לא, בתת שלוחה, ושם זה לא עובד.
  • פתיח לשידור חי

    3
    0 הצבעות
    3 פוסטים
    39 צפיות
    ק
    @שלומל-ה לא אני צריך בשידור חי
  • איך מוסיפים נתונים לקובץ ini דרך ה-API?

    11
    0 הצבעות
    11 פוסטים
    106 צפיות
    W
    למה אין אפשרות להוסיף או להחליף שורה אחת? @אלחנן1
  • משום מה לפעמים לא מגיע SMS בוירטול פלוס

    21
    0 הצבעות
    21 פוסטים
    237 צפיות
    ש
    @דוד_מלך_ישראל כתב במשום מה לפעמים לא מגיע SMS בוירטול פלוס: @שלומל-ה אני נתקל בזה, אבל רק בגוגל. לי דווקא לא מגיע מחברת כאל, אבל מאנשים פרטיים כן, מתי נראה שיסודר??
  • יש אפשרות שיגיע צינתוק מהמערכת עם זיהוי המתקשר

    4
    0 הצבעות
    4 פוסטים
    47 צפיות
    ח
    @אבא-של-מאיר הזיהוי של הצינתוק הינו מספר המערכת הראשי, אם רוצים להגדיר מספר משני, או מספר שאושר בשירות הלקוחות כמספר משנה, ניתן להגדיר tzintuk_your_id=0773137770
  • הפרסומות עלולות להפריע לקומבינות....

    צבי דורש ציון
    10
    2 הצבעות
    10 פוסטים
    152 צפיות
    י
    לי זה קרה יש לי מערכת של קבלת פקסים למייל והפקס פשוט לא הגיע, כרגע אמרתי לו לשלוח כמה פעמים עד שהפרסומת ירד (אין פרסומות כל פעם) ואכן בפעם השלישית הצליח לו לשלוח.
  • שימוש במקש כוכבית בהקשות במודול API

    לא נפתר
    1
    0 הצבעות
    1 פוסטים
    21 צפיות
    אין תגובות
  • דרוש (מאות) מספרים נייחים או ניידים כשרים

    לא נפתר
    6
    0 הצבעות
    6 פוסטים
    125 צפיות
    א
    @isi כתב בדרוש (מאות) מספרים נייחים או ניידים כשרים: @אבו @נועם-אלימלך אני צריך מספר נייד רגיל עבור מערכת של ימות. איך אני יכול לקבל/לרכוש כזה מספר? איני רוצה לנייד. מה הכוונה רגיל? לא כשר דבר איתי במייל הנ"ל
  • העברת מספר נוסף.

    9
    0 הצבעות
    9 פוסטים
    74 צפיות
    H
    @פיתה חחחח צודק. נצחת
  • כניסה לקו לפי מספר מערכת.

    12
    0 הצבעות
    12 פוסטים
    104 צפיות
    H
    @פלמנמוני אמת . 30 ש"ח