• דף הבית
    • אינדקס קישורים
    • פוסטים אחרונים
    • משתמשים
    • חיפוש בהגדרות המתקדמות
    • חיפוש גוגל בפורום
    • ניהול המערכת
    • ניהול המערכת - שרת private
    • הרשמה
    • התחברות

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

    מתוזמן נעוץ נעול הועבר נפתר עזרה הדדית למשתמשים מתקדמים
    57 פוסטים 14 כותבים 428 צפיות 7 עוקבים
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • תגובה כנושא
    התחברו כדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • 1 מנותק
      1668 @עידו
      נערך לאחרונה על ידי

      @עידו לא!
      אבל בסוף הסתדרתי תודה 👍👍👍

      1 ח 2 תגובות תגובה אחרונה תגובה ציטוט 0
      • 1 מנותק
        1668 @1668
        נערך לאחרונה על ידי 1668

        אני יכול לעשות את ההקשות יותר לאט?? זה מהירות טיל ואני לא מספיק לרשום שום דבר אני אשמח לתשובה! 😃😃👍 תודה

        1 תגובה 1 תגובה אחרונה תגובה ציטוט 0
        • 1 מנותק
          1668 @1668
          נערך לאחרונה על ידי

          וגם שלא יבקש אישור על המספר אני מאוד אשמח לתשובה תודה רבה! 😃😃😉

          תגובה 1 תגובה אחרונה תגובה ציטוט 0
          • ח מחובר
            חזקי ראזנבערג @1668
            נערך לאחרונה על ידי

            @1668 אני עשיתי נראה לי הכל נכון, וזה אומר לי שגיאה, מה יכול להיות ?

            תגובה 1 תגובה אחרונה תגובה ציטוט 0
            • ע מנותק
              עידו
              נערך לאחרונה על ידי עידו

              עודכן בהודעה הראשונה קובץ שמכין את כל ה"מערכת" הזאת קומפלט עם כל הקבצים השקטים - לא לשים / אני לא יודע מה הוא יעשה עם זה!.
              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

              א תגובה 1 תגובה אחרונה תגובה ציטוט 0
              • א מנותק
                אA @עידו
                נערך לאחרונה על ידי

                פוסט זה נמחק!
                ע תגובה 1 תגובה אחרונה תגובה ציטוט 0
                • ע מנותק
                  עידו @אA
                  נערך לאחרונה על ידי עידו

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

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

                  ולשמור כPDF

                  ?

                  😨
                  תיקנתי

                  תגובה 1 תגובה אחרונה תגובה ציטוט 1
                  • ב מנותק
                    בעז
                    נערך לאחרונה על ידי

                    זה אומר לי אין מענה משרת api
                    איפה יש קבצים שקטים להורדה
                    ואיפה לעלות אותם

                    א C 2 תגובות תגובה אחרונה תגובה ציטוט 0
                    • א מנותק
                      אA @בעז
                      נערך לאחרונה על ידי

                      @בעז
                      תכתוב בחיפוש קובץ שקט תוצאה שניה תביא לך קובץ שקט תקין

                      תגובה 1 תגובה אחרונה תגובה ציטוט 0
                      • B BEN ZION התייחס לנושא זה
                      • C מנותק
                        CUBASE @בעז
                        נערך לאחרונה על ידי

                        @בעז

                        הנה קובץ שקט

                        תגובה 1 תגובה אחרונה תגובה ציטוט 1
                        • פוסט ראשון
                          פוסט אחרון