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

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

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

      @CUBASE זה אומר לי אין מענה בשרת api
      (שמתי מפתח של המערכת אולי צריך לזה מפתח ג'ימיני הוא כתב ליצור מפתח איזה??)

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

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

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

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

          1
          1/1
          1/2
          ?

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

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

          1 תגובה 1 תגובה אחרונה תגובה ציטוט 0
          • 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
                        • פוסט ראשון
                          פוסט אחרון