• דף הבית
    • אינדקס קישורים
    • פוסטים אחרונים
    • משתמשים
    • חיפוש בהגדרות המתקדמות
    • חיפוש גוגל בפורום
    • ניהול המערכת
    • ניהול המערכת - שרת private
    • הרשמה
    • התחברות
    1. דף הבית
    2. עידו
    3. פוסטים
    ע
    מנותק
    • פרופיל
    • עוקב אחרי 0
    • עוקבים 5
    • נושאים 84
    • פוסטים 1,877
    • קבוצות 0

    פוסטים

    פוסטים אחרונים הגבוה ביותר שנוי במחלוקת
    • RE: סליקה דרך נדרים פלוס

      @עופר כתב בסליקה דרך נדרים פלוס:

      הקוד הארוך שמופיע

      פורסם בשאלות ועזרה הדדית
      ע
      עידו
    • RE: סליקה דרך נדרים פלוס

      @עופר מה ניסית?
      תראה כאן https://f2.freeivr.co.il/post/61102

      פורסם בשאלות ועזרה הדדית
      ע
      עידו
    • תקלה בהשמעת מספרים בהקראת טקסט

      יש את הפונקציה הנ"ל שיוצרת תפריט בצורה דינאמי

          let keysMenu = "";
          let keysMenuDigitsAllowed = [];
          for (let index = 0; index < listToChoosen.length; index++) {
              keysMenu += `ל ${listToChoosen[index]} הקש ${index + 1}`;
              keysMenuDigitsAllowed.push((index + 1).toString());
          }
      

      משום מה לא שומעים את המספרים שומעים "לX הקש לY הקש"

      דרך הספריה של @צדיק-תמים

      value = await call.read([{ type: 'text', data: keysMenu }], 'tap', {
                  typing_playback_mode: "No", ...filters, digits_allowed: keysMenuDigitsAllowed
              });
      
      פורסם בפורום מפתחים API
      ע
      עידו
    • RE: קוי תוכן גדולים לפרסום

      @מיכאל-בי אם הפרסום דרכם, אז תפנה ישר אליהם, אין טעם לעבור דרך בעלי הקווים.

      אבל כמו שאמרתי, לא ענייני, רק הארתי עיניך, שלא יהיו אח"כ הפתעות...

      פורסם בשאלות ועזרה הדדית
      ע
      עידו
    • RE: קוי תוכן גדולים לפרסום

      @מיכאל-בי שימו לב שזה קצת נוגד את התנאים של ימות המשיח ועל פי החוזה הם יכולים לגבות ממכם את כל הרווח של הפרסומות.
      לי אישית לא אכפת מ ה אתם עושים... רק רציתי שתדעו.

      פורסם בשאלות ועזרה הדדית
      ע
      עידו
    • RE: יש עוזר AI להגדרות של ימות המשיח?

      @anti-malware יש את זה https://notebooklm.google.com/notebook/9da51b96-005e-43c3-89db-bb3f1c9335ac של @cubase אני חושב.

      פורסם בעזרה הדדית למשתמשים מתקדמים
      ע
      עידו
    • RE: תשלום נדרים פלוס דרך שלוחת API

      @amp-Software-0 כן, זה אני מכיר השאלה אם זה תופש גם בשלוחת API?

      פורסם בפורום מפתחים API
      ע
      עידו
    • RE: תשלום נדרים פלוס דרך שלוחת API

      @amp-Software-0 מממ, לא מוצא מקום להכניס את זה... בתיעוד יש כמה פרמטרים כמדומני 13 מופרדים בפסיקים, שם הכל נכנס, לא?

      פורסם בפורום מפתחים API
      ע
      עידו
    • RE: מערכת תוכן חינמית שלא נפתחת

      @שריתי מאיפה ההגדרות האלו? AI?
      לא מכיר כאלו הגדרות.
      מה אתם מנסים לעשות?

      פורסם בעל הפורום
      ע
      עידו
    • RE: מערכת תוכן חינמית שלא נפתחת

      @שריתי יש כאן מידע אישי כדאי למחוק את התמונה

      פורסם בעל הפורום
      ע
      עידו
    • RE: תשלום נדרים פלוס דרך שלוחת API

      אף אחד לא יודע?

      פורסם בפורום מפתחים API
      ע
      עידו
    • RE: תשלום נדרים פלוס דרך שלוחת API

      @יב

      בערך העשירי של סליקת אשראי~~, משום מה הקישור לא מגיע למקום המדויק~~

      לפתוח בכרטיסיה חדשה

      תודה ל @cubase

      פורסם בפורום מפתחים API
      ע
      עידו
    • תשלום נדרים פלוס דרך שלוחת API

      מה הערכים שחוזרים בCreditCard_CODE?

      איפה כותבים את הקטגוריה?

      תודה

      פורסם בפורום מפתחים API
      ע
      עידו
    • RE: צורת זרימת קוד לIVR

      @y6714453 אבל זה חתיכת בלאגן לעשות פונקציה לכל הקשה, במיוחד אם יש כמה הסתעפויות אחד בתוך השני, כמו if מקוננים.

      פורסם בפורום מפתחים API
      ע
      עידו
    • צורת זרימת קוד לIVR

      איך אתם כותבים את הקוד?
      הרי יש הרבה הסתעפויות, לדוגמא:
      לX הקש 1 לY הקש 2.
      1 -> לX הקש 1 לY הקש 2.
      וכו'

      בין אם ההסתעפות מתבצעת בIF ובין אם בסוויטצ', כך או כך נהיה בלאגן...

      ולממש פונקציה לכל אופציה גם כן לא נוח ולא קריא בעליל.

      איך אתם עושים את זה?

      פורסם בפורום מפתחים API
      ע
      עידו
    • RE: קומבינה לשיחה יוצאת עם זיהוי מערכת על בסיס שלוחת API ושלוחת תור החדשה

      @אA על מה מדובר?

      פורסם בעזרה הדדית למשתמשים מתקדמים
      ע
      עידו
    • RE: קומבינה לשיחה יוצאת עם זיהוי מערכת על בסיס שלוחת API ושלוחת תור החדשה

      @בעז @אa @cubase מי שמשתמש בקובץ שהעלתי לא צריך להעלות כלום, הקובץ של @cubase כבר יתווסף לשם לבד במקומות הנכונים עם השמות הנכונים.

      פורסם בעזרה הדדית למשתמשים מתקדמים
      ע
      עידו
    • RE: קומבינה לשיחה יוצאת עם זיהוי מערכת על בסיס שלוחת API ושלוחת תור החדשה

      @אA כתב בקומבינה לשיחה יוצאת עם זיהוי מערכת על בסיס שלוחת API ושלוחת תור החדשה:

      @עידו כתב בקומבינה לשיחה יוצאת עם זיהוי מערכת על בסיס שלוחת API ושלוחת תור החדשה:

      ולשמור כPDF

      ?

      😨
      תיקנתי

      פורסם בעזרה הדדית למשתמשים מתקדמים
      ע
      עידו
    • RE: קומבינה לשיחה יוצאת עם זיהוי מערכת על בסיס שלוחת API ושלוחת תור החדשה

      עודכן בהודעה הראשונה קובץ שמכין את כל ה"מערכת" הזאת קומפלט עם כל הקבצים השקטים - לא לשים / אני לא יודע מה הוא יעשה עם זה!.
      call2all_setup.zip

      או

      <!DOCTYPE html>
      <html lang="he" dir="rtl">
      <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Call2All – יצירת שלוחה</title>
      <style>
        @import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;600&family=Heebo:wght@300;400;600;700&display=swap');
        :root {
          --bg:#0b0e13;--surface:#131720;--surface2:#1a1f2e;--border:#252c3f;
          --accent:#3b82f6;--accent-glow:rgba(59,130,246,0.18);
          --green:#22c55e;--red:#ef4444;--yellow:#f59e0b;
          --text:#dde3f0;--muted:#4a5478;--label:#8892b0;
        }
        *{box-sizing:border-box;margin:0;padding:0;}
        body{background:var(--bg);color:var(--text);font-family:'Heebo',sans-serif;min-height:100vh;display:flex;flex-direction:column;align-items:center;padding:2.5rem 1rem 4rem;background-image:radial-gradient(ellipse at 60% 0%,rgba(59,130,246,0.07) 0%,transparent 60%);}
        header{text-align:center;margin-bottom:2.5rem;}
        header h1{font-size:1.5rem;font-weight:700;color:#fff;}
        header p{font-size:0.82rem;color:var(--muted);margin-top:0.4rem;font-family:'IBM Plex Mono',monospace;}
        .card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:1.75rem;width:100%;max-width:580px;margin-bottom:1rem;}
        .card-title{font-size:0.7rem;font-family:'IBM Plex Mono',monospace;letter-spacing:0.12em;text-transform:uppercase;color:var(--muted);margin-bottom:1.25rem;display:flex;align-items:center;gap:0.5rem;}
        .card-title::before{content:'';display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--accent);box-shadow:0 0 6px var(--accent);}
        .field-group{margin-bottom:1.1rem;}
        label{display:block;font-size:0.78rem;color:var(--label);margin-bottom:0.35rem;}
        input[type="text"],input[type="password"]{width:100%;background:var(--bg);border:1px solid var(--border);color:var(--text);font-family:'IBM Plex Mono',monospace;font-size:0.88rem;padding:0.6rem 0.85rem;border-radius:7px;outline:none;transition:border-color 0.2s,box-shadow 0.2s;direction:ltr;}
        input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow);}
        .hint{font-size:0.72rem;color:var(--muted);margin-top:0.3rem;font-family:'IBM Plex Mono',monospace;}
        .run-btn{width:100%;padding:0.8rem;background:var(--accent);color:#fff;border:none;border-radius:8px;font-family:'Heebo',sans-serif;font-size:0.95rem;font-weight:600;cursor:pointer;transition:all 0.2s;margin-top:0.5rem;}
        .run-btn:hover{filter:brightness(1.12);transform:translateY(-1px);}
        .run-btn:disabled{opacity:0.4;cursor:default;transform:none;}
        .steps{width:100%;max-width:580px;display:flex;flex-direction:column;gap:0.5rem;}
        .step{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:0.85rem 1rem;display:flex;align-items:center;gap:0.75rem;font-size:0.82rem;transition:border-color 0.3s;}
        .step.running{border-color:var(--accent);}
        .step.done{border-color:rgba(34,197,94,0.4);}
        .step.error{border-color:rgba(239,68,68,0.4);}
        .step-icon{width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:0.75rem;font-family:'IBM Plex Mono',monospace;flex-shrink:0;background:var(--surface2);border:1px solid var(--border);color:var(--muted);transition:all 0.3s;}
        .step.running .step-icon{border-color:var(--accent);color:var(--accent);animation:spin 1s linear infinite;}
        .step.done .step-icon{background:rgba(34,197,94,0.1);border-color:var(--green);color:var(--green);}
        .step.error .step-icon{background:rgba(239,68,68,0.1);border-color:var(--red);color:var(--red);}
        .step-label{flex:1;color:var(--label);}
        .step.running .step-label,.step.done .step-label{color:var(--text);}
        .step.error .step-label{color:var(--red);}
        .step-status{font-family:'IBM Plex Mono',monospace;font-size:0.7rem;color:var(--muted);}
        .log-wrap{width:100%;max-width:580px;margin-top:0.5rem;}
        #log{background:#070a0f;border:1px solid var(--border);border-radius:8px;padding:0.9rem 1rem;height:220px;overflow-y:auto;font-family:'IBM Plex Mono',monospace;font-size:0.75rem;line-height:1.8;direction:ltr;}
        #log::-webkit-scrollbar{width:3px;}
        #log::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px;}
        .log-line{display:flex;gap:0.5rem;}
        .log-ts{color:var(--muted);flex-shrink:0;}
        .log-ok{color:var(--green);}
        .log-err{color:var(--red);}
        .log-info{color:var(--accent);}
        .log-warn{color:var(--yellow);}
        @keyframes spin{to{transform:rotate(360deg);}}
      </style>
      </head>
      <body>
      <header>
        <h1>⚙ Call2All — יצירת שלוחה</h1>
        <p>// automated extension setup</p>
      </header>
      
      <div class="card">
        <div class="card-title">פרטי חיבור</div>
        <div class="field-group">
          <label>מספר שלוחה </label>
          <input type="text" id="ext" />
        </div>
        <div class="field-group">
          <label>טוקן</label>
          <input type="password" id="token" placeholder="הכנס טוקן..." />
        </div>
        <button class="run-btn" id="runBtn" onclick="startAll()">▶ הפעל תהליך</button>
      </div>
      
      <div class="steps" id="stepsWrap" style="display:none"></div>
      
      <div class="log-wrap" id="logWrap" style="display:none">
        <div id="log"></div>
      </div>
      
      <script>
      const WAV_B64="UklGRtQBAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YbABAAAAAAAAAAAAAAEA/v8CAP7/AQAAAAEA/f8DAP7/AQAAAP//AQAAAAAAAAAAAP//AgD+/wMA/f8CAP7/AgD+/wIA/////wMA/P8DAP//AAAAAAEA/v8CAP7/AgD//wAAAAD//wIA/v8CAP7/AQABAP7/AgD+/wIA/v8DAPz/BAD9/wEAAQD+/wIA//8AAAAAAQD+/wMA/f8CAP//AQD//wAAAQD//wEA//8AAAEA//8BAP//AQD+/wIAAAD+/wMA/P8EAP3/AgD//wAAAQD+/wMA/f8CAP//AQD//wAAAQD//wEA//8AAAEA//8BAP//AQD//wEA/v8DAP3/AgAAAP7/AwD9/wMA/f8DAP3/AgAAAP//AAAAAAEA//8BAP7/AQABAAAA//8BAP3/BQD8/wMA/v8AAAEAAAD//wEAAAD//wIA/f8DAP7/AgD+/wEAAAAAAAAAAAAAAP//AgD+/wIA///+/wQA+/8GAPr/BQD9/wEAAQD9/wMA/////wIA/v8AAAIA/f8EAPz/AwD+/wEAAQD9/wQA/P8EAPz/AwD9/wQA/P8EAPz/AwD9/wQA/P8=";
      
      function ts(){return new Date().toLocaleTimeString('he-IL',{hour12:false});}
      
      let logEl;
      function log(msg,cls='log-info'){
        const line=document.createElement('div');
        line.className='log-line';
        line.innerHTML=`<span class="log-ts">[${ts()}]</span><span class="${cls}">${msg}</span>`;
        logEl.appendChild(line);
        logEl.scrollTop=logEl.scrollHeight;
      }
      
      function b64toBlob(b64,mime){
        const bin=atob(b64),buf=new Uint8Array(bin.length);
        for(let i=0;i<bin.length;i++)buf[i]=bin.charCodeAt(i);
        return new Blob([buf],{type:mime});
      }
      
      const STEP_DEFS=[
        {id:'ext1', label:'יצירת שלוחה – שלב 1 (הקשת מספר)'},
        {id:'ext2', label:'יצירת שלוחה – שלב 2 (API link)'},
        {id:'ext3', label:'יצירת שלוחה – שלב 3 (routing queue)'},
        {id:'wav_root', label:'העלאת קובץ שמע → M3411.wav'},
        {id:'wav_sub',  label:'העלאת קובץ שמע → 1/M1607.wav'},
      ];
      
      const stepEls={};
      function buildSteps(exts){
        const wrap=document.getElementById('stepsWrap');
        wrap.innerHTML='';
        exts.forEach(ext=>{
          STEP_DEFS.forEach(def=>{
            const id=`${ext}_${def.id}`;
            const div=document.createElement('div');
            div.className='step';div.id=id;
            div.innerHTML=`<div class="step-icon">○</div><div class="step-label">[${ext}] ${def.label}</div><div class="step-status"></div>`;
            wrap.appendChild(div);stepEls[id]=div;
          });
        });
      }
      
      function setStep(id,state,statusText=''){
        const el=stepEls[id];if(!el)return;
        el.className=`step ${state}`;
        el.querySelector('.step-icon').textContent=state==='running'?'↻':state==='done'?'✓':'✗';
        el.querySelector('.step-status').textContent=statusText;
      }
      
      const BASE='https://www.call2all.co.il/ym/api/';
      
      async function callUpdate(token,params){
        const url=BASE+'UpdateExtension?'+new URLSearchParams({token,...params});
        log(`→ UpdateExtension path=${params.path}`);
        const res=await fetch(url);
        const json=await res.json().catch(()=>({responseStatus:'ERROR',message:'parse error'}));
        if(json.responseStatus==='OK'){log('← OK','log-ok');}
        else{log(`← ERROR: ${json.message||JSON.stringify(json)}`,'log-err');throw new Error(json.message||'API error');}
      }
      
      async function uploadWav(token,path){
        log(`→ UploadFile path=${path}`);
        const blob=b64toBlob(WAV_B64,'audio/wav');
        const fd=new FormData();
        fd.append('token',token);fd.append('path',path);
        fd.append('file',blob,path.split('/').pop());
        const res=await fetch(BASE+'UploadFile',{method:'POST',body:fd});
        const json=await res.json().catch(()=>({responseStatus:'ERROR',message:'parse error'}));
        if(json.responseStatus==='OK'){log(`← OK (${json.size} bytes)`,'log-ok');}
        else{log(`← ERROR: ${json.message||JSON.stringify(json)}`,'log-err');throw new Error(json.message||'Upload error');}
      }
      
      async function processExt(ext,token){
        const e=ext.trim();
      
        setStep(`${e}_ext1`,'running');
        try{
          await callUpdate(token,{path:`ivr2:${e}`,type:'add_id_to_list',title:'הקשת מספר לחיוג',
            add_id_to_list_location_list:`/${e}/1/ext`,add_id_to_list_key:'api_add_2',
            add_id_to_list_value_first:'contents=announce-position=no%0Aannounce-frequency=0%0Aperiodic-announce-frequency=0%0Aringuse=yes%0Amusicclass=ztomao%0A',
            add_id_to_list_value_type:'digits',add_id_to_list_value_change:'yes',add_id_to_list_end_goto:'1'});
          setStep(`${e}_ext1`,'done','200 OK');
        }catch(err){setStep(`${e}_ext1`,'error',err.message);throw err;}
      
        setStep(`${e}_ext2`,'running');
        try{
          await callUpdate(token,{path:`ivr2:${e}/1`,type:'api',title:'שינוי המספר לחיוג בפועל',
            api_link:'https://www.call2all.co.il/ym/api/UploadTextFile',
            api_add_0:`token=${token}`,api_add_1:`what=ivr2:/${e}/2/queue.ini`,
            api_hangup_send:'no',api_end_goto:'../2'});
          setStep(`${e}_ext2`,'done','200 OK');
        }catch(err){setStep(`${e}_ext2`,'error',err.message);throw err;}
      
        setStep(`${e}_ext3`,'running');
        try{
          await callUpdate(token,{path:`ivr2:${e}/2`,type:'routing_queue',title:'שיחות יוצאות',
            queue_caller_id:'customer_did',queue_end_continue_goto:'hangup'});
          setStep(`${e}_ext3`,'done','200 OK');
        }catch(err){setStep(`${e}_ext3`,'error',err.message);throw err;}
      
        setStep(`${e}_wav_root`,'running');
        try{await uploadWav(token,`ivr2:${e}/M3411.wav`);setStep(`${e}_wav_root`,'done','uploaded');}
        catch(err){setStep(`${e}_wav_root`,'error',err.message);throw err;}
      
        setStep(`${e}_wav_sub`,'running');
        try{await uploadWav(token,`ivr2:${e}/1/M1607.wav`);setStep(`${e}_wav_sub`,'done','uploaded');}
        catch(err){setStep(`${e}_wav_sub`,'error',err.message);throw err;}
      }
      
      async function startAll(){
        const extVal=document.getElementById('ext').value.trim();
        const tokenVal=document.getElementById('token').value.trim();
        if(!extVal||!tokenVal){alert('נא למלא מספר שלוחה וטוקן');return;}
        if(!/^[\d/]+$/.test(extVal)){alert('מספר שלוחה יכול להכיל רק ספרות ו-/');return;}
      
        const exts=extVal.split('/').map(s=>s.trim()).filter(Boolean);
        document.getElementById('stepsWrap').style.display='flex';
        document.getElementById('logWrap').style.display='block';
        logEl=document.getElementById('log');logEl.innerHTML='';
        buildSteps(exts);
      
        const btn=document.getElementById('runBtn');btn.disabled=true;
        log(`מתחיל עבור ${exts.length} שלוח${exts.length>1?'ות':'ה'}: ${exts.join(', ')}`,'log-info');
      
        let ok=true;
        for(const ext of exts){
          log(`── שלוחה ${ext} ──`,'log-warn');
          try{await processExt(ext,tokenVal);log(`✓ שלוחה ${ext} הושלמה`,'log-ok');}
          catch(e){log(`✗ שלוחה ${ext} נכשלה: ${e.message}`,'log-err');ok=false;}
        }
        log(ok?'✓ הכל הושלם בהצלחה!':'⚠ חלק מהשלוחות נכשלו — בדוק את הלוג',ok?'log-ok':'log-err');
        btn.disabled=false;
      }
      </script>
      </body>
      </html>
      
      

      ולשמור כHTML

      פורסם בעזרה הדדית למשתמשים מתקדמים
      ע
      עידו
    • RE: קומבינה לשיחה יוצאת עם זיהוי מערכת על בסיס שלוחת API ושלוחת תור החדשה

      @1668 מבנה השלוחות אצלך הוא ככה:

      1
      1/1
      1/2
      ?

      אם לא אז יש אצלך בעיה...

      בכל מבנה אחר צריך לשנות את הערכים בקוד.
      צריך כמובן להעלות קבצים לפי מה שכתוב שם.

      פורסם בעזרה הדדית למשתמשים מתקדמים
      ע
      עידו