העלאת תקיות שלימות בצורה מסודרת להפליא בלי להתאמץ😏🎖🎮🕹
-
יש לי רעיון אדיר! (לדעתי לפחות)
אבל זה ל "יודעים" בלבד כי לי אין שמץ מושג כיצד מפתחים כנראה צריך לזה ידע בAPI , פייטון וכו'
והרעיון כדלהלן:
כאשר יש לי במחשב תקיה מסודרת עם דברים לצורך הדוגמא
יש לי כך זה לפי שם
נגיד תקיית
שירים תקית
סיפורים תקית
שיעורים
ואפקטים לפי הסדר הנ"ל
וכעת בתוך כל תקיה כזו יש מלא תקיות
וגם בתקיות יש תקיות ואין לי כח לפתוח בקו שלי שלוחות בתוך שלוחות
וכל פעם להעלות קבצים אז הצעתי היא שיהא בוט, שרת, תוכנה, או איך שלא קוראים לזה
שיעלה אותם לפי הסדר באופן שאיך שזה מסודר במחשב כך הוא פותח שלוחה
במרה דלעיל אוטומטית הוא יפתח שלוחות כך- שירים

- סיפורים

- שיעורים

- אפקטים

וכן בתוך השלוחות יפתח לפי מה שיש בתקיה
וכן שיקריא בקובץ tts את התוכן של כל תפריט
נ. ב. צריך לזכור שכשיש מעל עשרה שלוחות הוא יעשה תפריט של שתי ספרות ויעשה שלוחות של 01,02,03...
ושאלתי יש מי שיודע לפתח כזה דבר ואם כן כמה זה יעלה או האם מישהו יכול לעשות חינם לזיכוי הרבים
א-ש-ר-י-כ-ם!!! - שירים
-
@lavitoren-הטי-ל יש כמעט את הכל כאן למנויים,
מלבד סידור התפריטים, שזה מעלה לפי שם התיקיה במחשב, ולא לפי האינדקס שלה -
@אביי-ורבא כשמעלים קבצים זה אומר שגיאה ולא מעלה
-
@אברהם-ה יכול להיות שהכנסת סיסמה במקום מפתח API?
החל מהשבוע שעבר חייבים להשתמש במפתח API במקום סיסמה, עדיין לא הספקתי לעדכן את זה בכל התצוגות, ועדיין כתוב סיסמה, אבל צריך מפתח API,
-
פוסט זה נמחק! -
סליחה התכוונתי לזה שיעשו ממשק קל ונח כאן כמו בתמונה וכמו שיש העלאת קבצים
-
הנה מה שביקשת!!
אשמח לשמוע הערות כאן
https://f2.freeivr.co.il/topic/19465/תגובה-לקבצי-html-לשימוש-במערכות-ימות-המשיח?_=1766065203789הוראות שימוש:
- יש לפתוח תקייה חדשה שהיא תהיה השלוחה הראשית, בתוכה יש לפתוח תקיות שכל תקיה היא שלוחה ותוכן ניתן לפתוח עוד תקיות.
בתקייה הראשית ברירת מחדל נוצרת שלוחת תפריט אלא אם כן הוגדר אחרת, כמו כן כל תקייה ריקה ברירת מחדל היא תקיית השמעת קבצים. - כדי להגדיר שלוחה, יש להכניס קובץ טקסט בשם ext (אין צורך בסיומת), ובתוכו להכניס את ההגדרות הרצויות.
קבצי שמע עולים כמו שהם כולל השם לשלוחות. - קבצי טקסט, יש להכניס קובץ טקסט לתקייה ושהסיומת תהיה tts, הקובץ יעלה לשלוחה ללא הסיומת הזו (דוגמא קובץ 000.tts, יעלה בתור 000).
הקוד מצורף
<!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 סליחה שאני מגיב רק כעת (אני רק אחת לשבוע קופץ לכאן לכמה שעות ממש מחילה ענקית) אבל זה נראה ע-נ-ק!!
(וזה מילה קטנה על יד מה שזה באמת זה פשוט מטורף לגמרי, גם רואים פה השקעה אדירה
||ולצערי חוץ מלייק אין כיצד להודות לך על העזרה האדירה בכללי ובמיוחד כאן שישבת וכתבת שעות - כנראה🧐|| )
טוב בינתיים אני מנסה את זה
רגע רק איפה אני שם את הקוד על איזה שלוחה? ראשי? תקייה ראשית? -
@אA טוב נעזרתי בבינה ואכן ראיתי את הממשק שבנית והוא מ-ד-ה-י-ם לתועלת הרבים אני מעלה את השיח עם הבינה
בצע את הפעולות הפשוטות הבאות:
העתק את הקוד שמופיע בתיבה למטה (לחץ על כפתור "Copy" או "העתק" בפינה של תיבת הקוד).
פתח את תוכנת "פנקס רשימות" (Notepad) במחשב.
הדבק את הקוד בפנים.
לחץ על קובץ > שמירה בשם (File > Save As).
בשם הקובץ כתוב: yemot_upload.html (חשוב מאוד שהסיומת תהיה .html).
ב"שמור כסוג" (Save as type) בחר ב-All Files (כל הקבצים).
שמור את הקובץ על שולחן העבודה ולחץ עליו פעמיים.
(אני רגע קוטע את הבינה שימו לב זה יוצר דבר כזה
ואני העתקתי את כ-ל מה שכתוב כאן ללא יוצא מן הכלל לפנקס רשימות שמירה בשם כנ"ל שמירה כ All Files וזהוהנה הקוד המלא מהפורום:
code
Html
<!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 מחילה על הקידוחים במח אבל אני משולהב
טוקן זה אומר מספר מערכת נקודותיים וסיסמא
וזה עובד מטורף ל-ג-מ-ר-י!!!!!!!!!!!!!!!

🤪
תודה תודה תודה תודה תודה תודה תודה תודה תודה תודה תודה תודה תודה תודה תודה תודה תודה תודה
ועוד אלף פעמים

אתה לא מתאר לעצמך כמה טונות עבודה אתה חוסך לי יישר כח עצום תזכה למצוות ולא פחותאבל בכל זאת יש עוד כמה דברים שאני לא מבין או שהם חסרים
א. זה לא מכניס לתפריט קובץ TTS אם תוכן השלוחה דהיינו אם העליתי תקיה מהמחשב שנקראת שלוחה ראשית
ובתוכה ארבע תקיות שבכל אחד מהם קבצי שמע
לדוגמא
1 שירים
2 סיפורים
3 שיעורים
4 אפקטיםוכעת בקו כשאני נכנס לשלוחה בא נגיד 1 ששם הגדרתי את זה אשמע
לשירים הקש אחד לסיפורים שתים לשיעורים שלש לאפקטים ארבע (קיצער אמעיישה שכשזה תקיות בתוך תקיה שיגיד את שם התיקיות והמספור)
אז אם קיים כזו אפשרות אשמח וסליחה על הטירחה
ב. שזה באג או שיפור רציני שכדאי לטפל שהוא לא ממספר את קובצי השמע ל - 001,002,003..... וממילא הוא לא משמיע למאזינים כלל ועיקר
ג. כנ"ל בעניין התקיות דהיינו שלוחות שיעשה שלוחה 1 על מספר שלוחה 1 ולא "החדש" כי שוב זה לא יהיה קיים מבחינת המערכת רק שלוחה בשם מוזר

או שלא הגדרתי טוב (שזה יותר מסתבר) ואם כן מה חסר לדעתך "גאון הדור" בעייני בניית מודולים מטורפים (ועוד ב-ח-י-נ-ם!!)כמובן כתבתי את זה כיוון שביקשת הערות
אשמח לשמוע הערות כאן
https://f2.freeivr.co.il/topic/19465/תגובה-לקבצי-html-לשימוש-במערכות-ימות-המשיח?_=1766065203789 -
@אA באג נוסף שזה כבר באג
קבצים מעל שעה הוא לא מצליח להעלות כלומר שעה ושתי דקות הוא הצליח אבל שעה ושתים עשרה דקות כבר לא וגם נתתי לו שעתיים ויותר ו...לא הצליח
