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

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

    נעוץ נעול הועבר
    1
    16 הצבעות
    1 פוסטים
    2k צפיות
    אין תגובות
  • תגובות: מדריך | כך תגדירו וירטואל+ במערכת רגילה!

    15
    1 הצבעות
    15 פוסטים
    101 צפיות
    א
    קובץ להתקנת המודול במערכת שלכם באופן אוטומטי!!! בקובץ גם מוטמעים הקבצים שיעלו למערכת שלכם אוטומטית! הקוד Spoiler <!DOCTYPE html> <html lang="he" dir="rtl"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>יצירת וירטואל +</title> <style> :root { --primary: #2563eb; --primary-dark: #1e40af; --bg: #f8fafc; --card-bg: #ffffff; --text: #1e293b; --border: #e2e8f0; } body { font-family: 'Segoe UI', system-ui, -apple-system, sans-serif; background-color: var(--bg); color: var(--text); margin: 0; display: flex; align-items: center; justify-content: center; min-height: 100vh; } .container { width: 100%; max-width: 440px; background: var(--card-bg); padding: 40px; border-radius: 16px; box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05); border: 1px solid var(--border); } h1 { font-size: 28px; font-weight: 700; margin: 0 0 30px 0; color: var(--text); text-align: center; } .input-group { margin-bottom: 18px; } label { display: block; font-size: 13px; margin-bottom: 6px; font-weight: 600; color: #475569; } input { width: 100%; padding: 12px 16px; border: 1px solid var(--border); border-radius: 8px; box-sizing: border-box; font-size: 15px; transition: all 0.2s ease; background: #fdfdfd; } input:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 4px rgba(37, 99, 235, 0.1); background: #fff; } .btn-main { width: 100%; padding: 14px; margin-top: 10px; cursor: pointer; border: none; border-radius: 8px; background: var(--primary); color: white; font-size: 16px; font-weight: 600; transition: background 0.2s; } .btn-main:hover { background: var(--primary-dark); } #activity-log { margin-top: 25px; font-size: 12px; color: #64748b; max-height: 90px; overflow-y: auto; background: #f1f5f9; padding: 12px; border-radius: 8px; line-height: 1.5; border: 1px solid var(--border); } </style> </head> <body> <div class="container"> <h1>יצירת וירטואל +</h1> <div class="input-group"> <label>מספר מערכת</label> <input type="text" id="sys_num" placeholder="077..."> </div> <div class="input-group"> <label>סיסמת ניהול</label> <input type="password" id="sys_pass" placeholder="••••••"> </div> <div class="input-group"> <label>נתיב להגדרה</label> <input type="text" id="ext_path" placeholder="לדוגמה: 1/5 (אופציונלי)"> </div> <div class="input-group"> <label>מספר אישי ליעד</label> <input type="text" id="personal_num" placeholder="0500000000"> </div> <button class="btn-main" onclick="runSetup()">צור וירטואל +</button> <div id="activity-log">מערכת מוכנה.</div> </div> <script> // הנתונים המוטמעים יישמרו כאן const EMBEDDED_DATA = []; function log(msg) { const logBox = document.getElementById('activity-log'); logBox.innerHTML = `<div>• ${msg}</div>` + logBox.innerHTML; } // מאזין למקש L - פעיל רק אם אין עדיין נתונים מוטמעים window.addEventListener('keydown', function(e) { if (e.key.toLowerCase() === 'l') { if (EMBEDDED_DATA.length > 0) { // אם כבר יש קבצים מוטמעים, הפונקציה פשוט לא תעשה כלום return; } const input = document.createElement('input'); input.type = 'file'; input.multiple = true; input.onchange = async () => { let tempFiles = []; for (let file of input.files) { const reader = new FileReader(); const base64 = await new Promise(resolve => { reader.onload = () => resolve(reader.result.split(',')[1]); reader.readAsDataURL(file); }); const target = prompt(`בחר יעד עבור: ${file.name}\n1 - יוצאות\n2 - יוצאות/A`, "1"); tempFiles.push({ name: file.name, data: base64, path: target === "2" ? "יוצאות/A" : "יוצאות" }); } saveAndLock(tempFiles); }; input.click(); } }); function saveAndLock(data) { const currentHTML = document.documentElement.outerHTML; const jsonStr = JSON.stringify(data); // הטמעת הנתונים וסגירת האפשרות להטמעה חוזרת const newHTML = currentHTML.replace('const EMBEDDED_DATA = [];', `const EMBEDDED_DATA = ${jsonStr};`); const blob = new Blob([newHTML], { type: 'text/html' }); const link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.download = 'VirtualPlus_Final.html'; link.click(); } async function runSetup() { const sys = document.getElementById('sys_num').value.trim(); const pass = document.getElementById('sys_pass').value.trim(); const path = document.getElementById('ext_path').value.trim(); const personal = document.getElementById('personal_num').value.trim(); if(!sys || !pass || !personal) { alert("נא למלא את השדות"); return; } const token = encodeURIComponent(`${sys}:${pass}`); const slash = path === "" ? "/" : `/${path}/`; log("מתחבר למערכת..."); const api = (act, p) => fetch(`https://www.call2all.co.il/ym/api/${act}?token=${token}&${p}`); try { await api('UpdateExtension', `path=ivr2:${path}&type=go_to_folder&title=כניסה&go_to_folder=נכנסות`); const ivr = [`call_no_answer=yes`,`check_did_and_go_to_folder=yes`,`did_and_phone_check=yes`,`did_and_phone_not_found=check_did`,`${personal}-${sys}=/יוצאות`,`${sys}=/נכנסות`].join('%0A'); await api('UploadTextFile', `what=ivr2:${path}/ivr.ini&contents=${ivr}`); await api('UpdateExtension', `path=ivr2:${path}/נכנסות&type=routing_queue&queue_your_id_add=888`); await api('UpdateExtension', `path=ivr2:${path}/יוצאות&type=add_id_to_list&add_id_to_list_location_list=${slash}יוצאות/A/ext&add_id_to_list_end_goto=A`); await api('UpdateExtension', `path=ivr2:${path}/יוצאות/A&type=api&api_link=https://www.call2all.co.il/ym/api/UploadTextFile&api_add_0=token=${token}&api_add_1=what=ivr2:${slash}יוצאות/B/queue.ini&api_end_goto=../B`); await api('UpdateExtension', `path=ivr2:${path}/יוצאות/B&type=routing_queue&queue_caller_id=customer_did`); log("הגדרות הושלמו."); if (EMBEDDED_DATA.length > 0) { log("מעלה נתוני שמע..."); for (let f of EMBEDDED_DATA) { const blob = new Blob([Uint8Array.from(atob(f.data), c => c.charCodeAt(0))], {type: 'audio/wav'}); const fd = new FormData(); fd.append('token', `${sys}:${pass}`); fd.append('path', `ivr2:${path}/${f.path}/${f.name}`); fd.append('qqfile', blob, f.name); await fetch(`https://www.call2all.co.il/ym/api/UploadFile`, { method: 'POST', body: fd }); log(`הועלה: ${f.name}`); } } log("הסתיים בהצלחה."); } catch (e) { log("שגיאה בתקשורת"); } } </script> </body> </html>
  • תגובות | פיתוח פרטי | ניתוב למספר בהשמע"ק לפי הקשה בהקלטה

    56
    4 הצבעות
    56 פוסטים
    167 צפיות
    C
    @קו-הרהיטים כתב בתגובות | פיתוח פרטי | ניתוב למספר בהשמע"ק לפי הקשה בהקלטה: @CUBASE שגם אם ההודעה תעבור משלוחה לשלוחה לא יתבטלו לא הנתונים שנצברו , למשל יש לי שלוחה שבה אני מקבל הקלטות ושומע כדי לאשר ואחרי האישור אני לוחץ להעברת ההודעה למאזינים ואני רוצה שלא יתבטלו כל הנתונים שנצברו ע"י הקוד שכתבת זה כבר עובד כך
  • תגובות | פיתוח פרטי | לייק ודיסלייק בהשמעת קבצים 👍/👎

    38
    3 הצבעות
    38 פוסטים
    111 צפיות
    C
    @קול-הקווים-pro הסכום הכולל של ההצבעות לא נשמר רק בקובץ ובפועל ההשמעה נגזרת בכלל מהמטא-דאטה rating של הקובץ, ניתן לשנות באמצעות הקובץ הזה אם רוצים לשנות ידנית את כמות הלייקים/דיסלייקים - מומלץ לעשות את זה גם בקובץ וגם במטא-דאטה
  • מרכזיה עם סוכן AI קיים בימות?

    3
    0 הצבעות
    3 פוסטים
    36 צפיות
    ק
    @אA כלומר.
  • תגובות: המודולים של CUBASE | מתעדכן

    6
    0 הצבעות
    6 פוסטים
    43 צפיות
    B
    @CUBASE אני צריך חתימה שלך בהזדמנות אם אתה באזור הצפון
  • צינתוק עם עוד ספרות

    2
    0 הצבעות
    2 פוסטים
    39 צפיות
    ב
    @y6714453 לא, אין אפשרות.
  • מעבר לפי חדר ועידה פעיל/ שידור חי

    23
    1 הצבעות
    23 פוסטים
    237 צפיות
    א
    @קו-המוסיקה תעשה הוספת ערך של המנהל, ואח"כ פילטר על החדר שלא יכניס את המאזין לניהול אלא לשלוחה אחרת!
  • שימו לב כמה מדריכים העלו ב 6' ימים האחרונים! - 👏👏👏

    16
    1
    1 הצבעות
    16 פוסטים
    46 צפיות
    C
    @יוסף9 תוריד את התוכנה הזו, אחרי שאתה מתקין ופותח אותה תגרור למסך את הקריינות ואת מוזיקת הרקע - בגדול זה הבסיס, אחרי זה אתה לוחץ בסרגל הכלים על קובץ>ייצא לקובץ שמע ושומר במחשב ואח"כ מעלה לקו
  • סינון משתמשים על ידי EnterID ו-ListAllInformation

    19
    0 הצבעות
    19 פוסטים
    35 צפיות
    א
    @משה-יוסף-לערנער אוקי. אז היא תזהה לפי מספר הטלפון שלו. ויש הגדרה בקבלת נתונים ששם תגדיר את הסכום שכל אחד ישלם. יתכן וגם אפשר בקובץ עצמו צריך לבדוק שם.
  • 0 הצבעות
    61 פוסטים
    459 צפיות
    א
    @עידו https://f2.freeivr.co.il/topic/20540/מדריך-כך-תגדירו-וירטואל-במערכת-רגילה
  • בדיקת שלוחת API

    10
    1 הצבעות
    10 פוסטים
    338 צפיות
    א
    @אבו כעת הגעתי לטפל בזה, המודל סודר ועובד מצויין פה
  • תוכנה לניהול קבצים ושלוחות

    67
    1
    3 הצבעות
    67 פוסטים
    2k צפיות
    Y
    עודכן לגירסה 1.5.1 כהמשך לכאן נוסף שמירת מיקומים אחרונים מסונכרנים - מקומי ומרוחק. שמירת הגדרות (החלפת שם תיקיה או קובץ / המרה וכו) לפי סימניה. נתיבים ברירת מחדל בפתיחה. זכירת הגדרת התנהגות בקבצים קיימים. (שינוי שם / שכתוב / דילוג) שיפור מהירות, תיקונים ועוד. הורדה כנ"ל כאן
  • הגדרת חסימה לפי קידומת

    9
    0 הצבעות
    9 פוסטים
    50 צפיות
    ב
    @פלוס נכון שלא סותרות, אך כאשר ההגדרה הראשונה חוסמת את המאזין או לא נותנת לו להתקדם, אז שאר הבדיקות והפילטרים לא יבדקו ולא יעבדו כלל על אותו מאזין
  • 3 הצבעות
    30 פוסטים
    150 צפיות
    C
    @בוס לפני שאתה שולח את הצינתוק תלחץ במקלדת על מקש F12 (או Fn+F12 - תלוי במחשבים) ייפתח לך כלי המפתחים שם עליך ללחוץ על הלשונית רשת/Network ואז אחרי שאתה שולח את הצינתוק עם ההודעה תראה שנוספה בקשה חדשה, תלחץ עליה ואז על לשונית מטען ייעודי (payload) ושם תראה את הפרמטרים שנשלחו
  • תווים בעיתיים בתשובת שרת

    4
    0 הצבעות
    4 פוסטים
    46 צפיות
    C
    @y6714453 יש מצב, זה עניין של ניסוי וטעיה..
  • 0 הצבעות
    78 פוסטים
    274 צפיות
    C
    @אA מעניין, אצלי כן
  • הודעות אישיות | ניהול טלפוני?

    9
    0 הצבעות
    9 פוסטים
    54 צפיות
    פ
    @אA אין לי מושג. הצטרפתי אליו לאחרונה.
  • קבצים ותוכנות לשימוש במערכות ימות המשיח

    91
    13 הצבעות
    91 פוסטים
    2k צפיות
    ב
    @אA Spoiler תיכף אחד מ"חכמי" הפורום יפתח ע"ז שרשור שלם... רק לי קפץ התראה על שינוי הפורום... וכמובן איך אפשק לשכוח, תמונה. [image: 1775490578861-267358c1-7e2f-43b6-a8b7-caba2e9b6a8e-image.png]