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

    קובץ HTML להגדרת שלוחת קבלת נתונים

    מתוזמן נעוץ נעול הועבר טיפים עצות והדגמות מהמשתמשים
    7 פוסטים 2 כותבים 22 צפיות 2 עוקבים
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • תגובה כנושא
    התחברו כדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • א מנותק
      איל משולש
      נערך לאחרונה על ידי איל משולש

      לא בדקתי את זה, אבל נראה לי בסדר (חסר קצת דברים), אם משהו מוצא טעות שיעדכן אותי
      ivr-config-builder.html

      מכיון שזה מחזיר שגיאה, להעלות קובץ אז צירפתי את הקוד
      יש לכתוב בפנקס רשימות ולשמור עם סיומת HTML

      <!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>
      * { box-sizing: border-box; margin: 0; padding: 0; }
      body { font-family: 'Segoe UI', Arial, sans-serif; background: #f0f4f8; color: #222; direction: rtl; }
      .container { max-width: 820px; margin: 30px auto; padding: 0 16px 60px; }
      h1 { text-align: center; color: #1a3a5c; margin-bottom: 8px; font-size: 1.5rem; }
      .subtitle { text-align: center; color: #555; margin-bottom: 28px; font-size: 0.95rem; }
      .step { background: #fff; border-radius: 10px; padding: 22px 26px; margin-bottom: 18px; box-shadow: 0 2px 8px rgba(0,0,0,0.08); display: none; }
      .step.active { display: block; }
      .step h2 { font-size: 1.1rem; color: #1a3a5c; margin-bottom: 14px; }
      .step p.desc { font-size: 0.88rem; color: #666; margin-bottom: 14px; line-height: 1.6; }
      .options { display: flex; flex-wrap: wrap; gap: 10px; }
      .opt-btn { padding: 10px 18px; border: 2px solid #c5d8f0; border-radius: 8px; background: #f7fbff; cursor: pointer; font-size: 0.92rem; color: #1a3a5c; transition: all 0.15s; font-family: inherit; }
      .opt-btn:hover { background: #ddeeff; border-color: #4a90d9; }
      .opt-btn.selected { background: #1a3a5c; color: #fff; border-color: #1a3a5c; }
      .checkbox-group { display: flex; flex-direction: column; gap: 10px; }
      .checkbox-group label { display: flex; align-items: center; gap: 10px; cursor: pointer; font-size: 0.93rem; }
      .checkbox-group input[type=checkbox] { width: 18px; height: 18px; cursor: pointer; }
      .text-input { padding: 9px 12px; border: 2px solid #c5d8f0; border-radius: 7px; font-size: 0.95rem; font-family: inherit; direction: ltr; }
      .text-input:focus { outline: none; border-color: #4a90d9; }
      .nav-btns { display: flex; gap: 10px; margin-top: 18px; flex-wrap: wrap; align-items: center; }
      .btn-next { background: #1a3a5c; color: #fff; border: none; padding: 10px 26px; border-radius: 7px; cursor: pointer; font-size: 0.95rem; font-family: inherit; }
      .btn-next:hover { background: #2a5a8c; }
      .btn-back { background: #e8eef5; color: #1a3a5c; border: none; padding: 10px 20px; border-radius: 7px; cursor: pointer; font-size: 0.95rem; font-family: inherit; }
      .btn-back:hover { background: #d0dcea; }
      .btn-skip { background: none; border: none; color: #888; font-size: 0.85rem; cursor: pointer; font-family: inherit; padding: 10px 8px; text-decoration: underline; margin-right: auto; }
      .btn-skip:hover { color: #1a3a5c; }
      .progress-bar { background: #dde8f5; border-radius: 20px; height: 8px; margin-bottom: 24px; }
      .progress-fill { background: #1a3a5c; height: 8px; border-radius: 20px; transition: width 0.3s; }
      #result-section { display: none; background: #fff; border-radius: 10px; padding: 26px; box-shadow: 0 2px 8px rgba(0,0,0,0.08); }
      #result-section h2 { color: #1a3a5c; margin-bottom: 16px; }
      #config-output { background: #1e2a3a; color: #a8d8a8; font-family: 'Courier New', monospace; padding: 20px; border-radius: 8px; font-size: 0.9rem; line-height: 1.8; white-space: pre-wrap; direction: ltr; text-align: left; }
      .copy-btn { background: #27ae60; color: #fff; border: none; padding: 10px 22px; border-radius: 7px; cursor: pointer; font-size: 0.93rem; font-family: inherit; }
      .copy-btn:hover { background: #219a52; }
      .reset-btn { background: #e8eef5; color: #1a3a5c; border: none; padding: 10px 22px; border-radius: 7px; cursor: pointer; font-size: 0.93rem; font-family: inherit; }
      .reset-btn:hover { background: #d0dcea; }
      .btn-back-edit { background: #f0f4f8; color: #1a3a5c; border: 2px solid #c5d8f0; padding: 10px 22px; border-radius: 7px; cursor: pointer; font-size: 0.93rem; font-family: inherit; }
      .btn-back-edit:hover { background: #ddeeff; border-color: #4a90d9; }
      .step-counter { font-size: 0.82rem; color: #888; margin-bottom: 6px; }
      .note { background: #fff8e1; border-right: 4px solid #f0c040; padding: 10px 14px; border-radius: 5px; font-size: 0.85rem; color: #555; margin-top: 16px; line-height: 1.6; }
      .sub-section { margin-top: 16px; padding-top: 14px; border-top: 1px solid #eee; }
      .sub-section > p { font-size: 0.9rem; color: #444; margin-bottom: 10px; font-weight: 600; }
      .rec-card, .q-card { background:#f7fbff; border:1px solid #c5d8f0; border-radius:8px; padding:16px; margin-bottom:14px; }
      .card-header { display:flex; justify-content:space-between; align-items:center; margin-bottom:12px; }
      .card-header strong { color:#1a3a5c; }
      .btn-del { background:none; border:none; color:#c00; cursor:pointer; font-size:1.1rem; }
      .field-grid-3 { display:grid; grid-template-columns:1fr 1fr 1fr; gap:10px; }
      .field-grid-2 { display:grid; grid-template-columns:1fr 1fr; gap:10px; }
      .field-label { font-size:0.85rem; color:#555; display:block; margin-bottom:4px; }
      .field-hint { color:#aaa; font-size:0.78rem; }
      .field-input { width:100%; padding:7px 10px; border:2px solid #c5d8f0; border-radius:7px; font-size:0.88rem; direction:ltr; font-family:inherit; }
      .field-select { width:100%; padding:7px 10px; border:2px solid #c5d8f0; border-radius:7px; font-size:0.88rem; font-family:inherit; background:#fff; }
      .add-btn { padding:10px 18px; border:2px dashed #c5d8f0; border-radius:8px; background:#f7fbff; cursor:pointer; font-size:0.92rem; color:#1a3a5c; font-family:inherit; margin-top:4px; }
      .add-btn:hover { background:#ddeeff; border-color:#4a90d9; }
      /* כפתור הצג הגדרה */
      .preview-bar { background: linear-gradient(135deg,#1a3a5c,#2a6aac); border-radius: 10px; padding: 20px 26px; margin-bottom: 18px; display: none; text-align: center; box-shadow: 0 4px 14px rgba(26,58,92,0.18); }
      .preview-bar.active { display: block; }
      .btn-preview { background: #fff; color: #1a3a5c; border: none; padding: 13px 36px; border-radius: 9px; cursor: pointer; font-size: 1.05rem; font-family: inherit; font-weight: 700; box-shadow: 0 2px 8px rgba(0,0,0,0.12); transition: all 0.15s; }
      .btn-preview:hover { background: #e8f4ff; transform: translateY(-1px); box-shadow: 0 4px 14px rgba(0,0,0,0.16); }
      .preview-bar p { color: rgba(255,255,255,0.8); font-size: 0.88rem; margin-top: 8px; }
      </style>
      </head>
      <body>
      <div class="container">
        <h1>🔧 בונה הגדרות שלוחת קבלת נתונים</h1>
        <p class="subtitle">ענה על השאלות ותקבל את קוד ההגדרה המוכן להדבקה בשלוחה</p>
        <div class="progress-bar"><div class="progress-fill" id="progress" style="width:0%"></div></div>
      
        <!-- שלב 1 - הגדרות הקלטות -->
        <div class="step active" id="step-1">
          <div class="step-counter">שלב 1 מתוך 10</div>
          <h2>הגדרת הקלטות (קבצי 000-049)</h2>
          <p class="desc">כל הקלטה מוגדרת בקובץ נפרד. הוסף הקלטות לפי הצורך.</p>
          <div id="recordings-list"></div>
          <button class="add-btn" onclick="addRecording()">+ הוסף הקלטה</button>
          <div class="nav-btns">
            <button class="btn-next" onclick="nextStep(1)">הבא ←</button>
            <button class="btn-skip" onclick="generate()">⏭ קפוץ לסיום</button>
          </div>
        </div>
      
        <!-- שלב 2 - הגדרות שאלות -->
        <div class="step" id="step-2">
          <div class="step-counter">שלב 2 מתוך 10</div>
          <h2>הגדרת שאלות (קבצי 050-099)</h2>
          <p class="desc">כל שאלה מוגדרת בקובץ נפרד (050, 051...). הוסף שאלות לפי הצורך.</p>
          <div id="questions-list"></div>
          <button class="add-btn" onclick="addQuestion()">+ הוסף שאלה</button>
          <div class="nav-btns">
            <button class="btn-next" onclick="nextStep(2)">הבא ←</button>
            <button class="btn-back" onclick="prevStep(2)">← חזור</button>
            <button class="btn-skip" onclick="generate()">⏭ קפוץ לסיום</button>
          </div>
        </div>
      
        <!-- כפתור הצג הגדרה (מופיע אחרי שלב 2) -->
        <div class="preview-bar" id="preview-bar">
          <button class="btn-preview" onclick="showPreview()">👁 הצג הגדרה</button>
          <p>ניתן לחזור ולערוך את ההגדרות הכלליות בשלבים הבאים</p>
        </div>
      
        <!-- שלב 3 -->
        <div class="step" id="step-3">
          <div class="step-counter">שלב 3 מתוך 10</div>
          <h2>מה סוג השלוחה?</h2>
          <p class="desc">בחר את הפעולה הראשית שהשלוחה תבצע</p>
          <div class="options">
            <button class="opt-btn selected" data-key="type" data-val="normal" onclick="selectOpt(this)">קבלת הקלטות ונתונים</button>
            <button class="opt-btn" data-key="type" data-val="approvals" onclick="selectOpt(this)">השמעת מספרי אישור (שלוחה נפרדת)</button>
          </div>
          <div class="nav-btns">
            <button class="btn-next" onclick="nextStep(3)">הבא ←</button>
            <button class="btn-back" onclick="prevStep(3)">← חזור</button>
            <button class="btn-skip" onclick="generate()">⏭ קפוץ לסיום</button>
          </div>
        </div>
      
        <!-- שלב 4 -->
        <div class="step" id="step-4">
          <div class="step-counter">שלב 4 מתוך 10</div>
          <h2>מאיזו שלוחה לקחת את קבצי ההקלטות?</h2>
          <p class="desc">ברירת מחדל: השלוחה הנוכחית. אפשר להפנות לשלוחה אחרת.</p>
          <div class="options">
            <button class="opt-btn selected" data-key="folder" data-val="" onclick="selectOpt(this)">השלוחה הנוכחית (ברירת מחדל)</button>
            <button class="opt-btn" data-key="folder" data-val="custom" onclick="selectOpt(this)">שלוחה אחרת</button>
          </div>
          <div id="folder-input-wrap" style="display:none; margin-top:12px;">
            <label style="font-size:0.9rem; color:#555; display:block; margin-bottom:6px;">מספר השלוחה:</label>
            <input type="text" class="text-input" id="folder-num" placeholder="לדוגמא: 8 או /3/4" style="width:200px;">
          </div>
          <div class="nav-btns">
            <button class="btn-next" onclick="nextStep(4)">הבא ←</button>
            <button class="btn-back" onclick="prevStep(4)">← חזור</button>
            <button class="btn-skip" onclick="generate()">⏭ קפוץ לסיום</button>
          </div>
        </div>
      
        <!-- שלב 5 -->
        <div class="step" id="step-5">
          <div class="step-counter">שלב 5 מתוך 10</div>
          <h2>מה יבוא קודם - הקלטות או נתונים?</h2>
          <p class="desc">קבצי הקלטות הם 000-049, קבצי נתונים הם 050 ומעלה.</p>
          <div class="options">
            <button class="opt-btn selected" data-key="start_first" data-val="" onclick="selectOpt(this)">הקלטות קודם (ברירת מחדל)</button>
            <button class="opt-btn" data-key="start_first" data-val="data" onclick="selectOpt(this)">נתונים קודם</button>
          </div>
          <div class="nav-btns">
            <button class="btn-next" onclick="nextStep(5)">הבא ←</button>
            <button class="btn-back" onclick="prevStep(5)">← חזור</button>
            <button class="btn-skip" onclick="generate()">⏭ קפוץ לסיום</button>
          </div>
        </div>
      
        <!-- שלב 6 -->
        <div class="step" id="step-6">
          <div class="step-counter">שלב 6 מתוך 10</div>
          <h2>האם לשמור נתונים לקובץ ListAllInformation?</h2>
          <p class="desc">המערכת תוסיף שורה חדשה עם כל הפרטים שהתקבלו לקובץ.</p>
          <div class="options">
            <button class="opt-btn" data-key="add_to_list" data-val="yes" onclick="selectOpt(this)">כן</button>
            <button class="opt-btn selected" data-key="add_to_list" data-val="no" onclick="selectOpt(this)">לא</button>
          </div>
          <div id="list-options" style="display:none; margin-top:16px;">
            <div class="sub-section">
              <p>מה להוסיף לקובץ?</p>
              <div class="checkbox-group">
                <label><input type="checkbox" id="chk-date"> הוספת תאריך הרישום</label>
                <label><input type="checkbox" id="chk-time"> הוספת שעת הרישום</label>
                <label><input type="checkbox" id="chk-phone"> הוספת מספר טלפון שחייג</label>
                <label><input type="checkbox" id="chk-ext"> הוספת שלוחה ממנה נרשם</label>
                <label><input type="checkbox" id="chk-enterid"> הוספת ID של המשתמש בעמודה ראשונה</label>
                <label><input type="checkbox" id="chk-approval1"> הוספת מספר אישור (1) בעמודה שנייה</label>
              </div>
            </div>
            <div class="sub-section">
              <p>מיקום הקובץ:</p>
              <div class="options">
                <button class="opt-btn selected" data-key="list_folder" data-val="" onclick="selectOpt(this)">תיקיית EnterID ראשית (ברירת מחדל)</button>
                <button class="opt-btn" data-key="list_folder" data-val="this_folder" onclick="selectOpt(this)">השלוחה הנוכחית</button>
                <button class="opt-btn" data-key="list_folder" data-val="custom_folder" onclick="selectOpt(this)">שלוחה אחרת</button>
              </div>
              <div id="list-folder-input" style="display:none; margin-top:10px;">
                <input type="text" class="text-input" id="list-folder-num" placeholder="לדוגמא: 8 או /3/4" style="width:200px;">
              </div>
            </div>
          </div>
          <div class="nav-btns">
            <button class="btn-next" onclick="nextStep(6)">הבא ←</button>
            <button class="btn-back" onclick="prevStep(6)">← חזור</button>
            <button class="btn-skip" onclick="generate()">⏭ קפוץ לסיום</button>
          </div>
        </div>
      
        <!-- שלב 7 -->
        <div class="step" id="step-7">
          <div class="step-counter">שלב 7 מתוך 10</div>
          <h2>הגדרות מספר אישור</h2>
          <p class="desc">מה המערכת תשמיע בסיום הרישום?</p>
          <div class="options">
            <button class="opt-btn selected" data-key="approval" data-val="" onclick="selectOpt(this)">מספר אישור רגיל (ברירת מחדל)</button>
            <button class="opt-btn" data-key="approval" data-val="no_number" onclick="selectOpt(this)">הודעת אישור בלי מספר</button>
            <button class="opt-btn" data-key="approval" data-val="no" onclick="selectOpt(this)">ללא הודעת אישור כלל</button>
            <button class="opt-btn" data-key="approval" data-val="from_file" onclick="selectOpt(this)">מספרי אישור מקובץ מותאם</button>
          </div>
          <div class="nav-btns">
            <button class="btn-next" onclick="nextStep(7)">הבא ←</button>
            <button class="btn-back" onclick="prevStep(7)">← חזור</button>
            <button class="btn-skip" onclick="generate()">⏭ קפוץ לסיום</button>
          </div>
        </div>
      
        <!-- שלב 8 -->
        <div class="step" id="step-8">
          <div class="step-counter">שלב 8 מתוך 10</div>
          <h2>שם השלוחה בדוחות ובמייל</h2>
          <p class="desc">ברירת מחדל: נתיב השלוחה (לדוגמא Folder/3/4). ניתן לשנות לשם מותאם.</p>
          <div class="options">
            <button class="opt-btn selected" data-key="set_var" data-val="" onclick="selectOpt(this)">נתיב ברירת מחדל</button>
            <button class="opt-btn" data-key="set_var" data-val="custom" onclick="selectOpt(this)">שם מותאם אישית</button>
          </div>
          <div id="set-var-input" style="display:none; margin-top:12px;">
            <label style="font-size:0.9rem; color:#555; display:block; margin-bottom:6px;">שם (ללא עברית, רווחים וסימנים מיוחדים):</label>
            <input type="text" class="text-input" id="set-var-val" placeholder="לדוגמא: Branch_TLV" style="width:260px;">
          </div>
          <div class="nav-btns">
            <button class="btn-next" onclick="nextStep(8)">הבא ←</button>
            <button class="btn-back" onclick="prevStep(8)">← חזור</button>
            <button class="btn-skip" onclick="generate()">⏭ קפוץ לסיום</button>
          </div>
        </div>
      
        <!-- שלב 9 -->
        <div class="step" id="step-9">
          <div class="step-counter">שלב 9 מתוך 10</div>
          <h2>האם להעתיק הקלטות לתיקיה נפרדת?</h2>
          <p class="desc">ניתן להגדיר שהמערכת תשמור עותק של ההקלטות בתיקיה נוספת.</p>
          <div class="options">
            <button class="opt-btn selected" data-key="copy_folder" data-val="" onclick="selectOpt(this)">לא</button>
            <button class="opt-btn" data-key="copy_folder" data-val="approval_number" onclick="selectOpt(this)">כן - שם הקובץ = מספר אישור</button>
          </div>
          <div class="nav-btns">
            <button class="btn-next" onclick="nextStep(9)">הבא ←</button>
            <button class="btn-back" onclick="prevStep(9)">← חזור</button>
            <button class="btn-skip" onclick="generate()">⏭ קפוץ לסיום</button>
          </div>
        </div>
      
        <!-- שלב 10 -->
        <div class="step" id="step-10">
          <div class="step-counter">שלב 10 מתוך 10</div>
          <h2>מעבר לשלוחה אחרת בסיום?</h2>
          <p class="desc">האם בסיום הרישום המערכת תעביר את המשתמש לשלוחה אחרת?</p>
          <div class="options">
            <button class="opt-btn selected" data-key="goto" data-val="" onclick="selectOpt(this)">לא</button>
            <button class="opt-btn" data-key="goto" data-val="yes" onclick="selectOpt(this)">כן</button>
          </div>
          <div id="goto-input" style="display:none; margin-top:12px;">
            <label style="font-size:0.9rem; color:#555; display:block; margin-bottom:6px;">מספר שלוחה יעד:</label>
            <input type="text" class="text-input" id="goto-num" placeholder="לדוגמא: 5 או /3/5" style="width:200px;">
          </div>
          <div class="nav-btns">
            <button class="btn-next" onclick="generate()">� צור הגדרה</button>
            <button class="btn-back" onclick="prevStep(10)">← חזור</button>
            <button class="btn-skip" onclick="generate()">⏭ קפוץ לסיום</button>
          </div>
        </div>
      
        <!-- תוצאה -->
        <div id="result-section">
          <h2>✅ ההגדרה שלך מוכנה</h2>
          <p style="font-size:0.88rem; color:#666; margin-bottom:14px;">העתק את הקוד הבא והדבק אותו בקובץ ext של השלוחה:</p>
          <pre id="config-output"></pre>
          <div style="margin-top:14px; display:flex; flex-wrap:wrap; gap:10px;">
            <button class="copy-btn" id="copy-btn" onclick="copyConfig()">📋 העתק קוד</button>
            <button class="btn-back-edit" id="back-edit-btn" onclick="backToEdit()">✏️ חזור לעריכה</button>
            <button class="reset-btn" onclick="resetAll()">🔄 התחל מחדש</button>
          </div>
          <div class="note">
            💡 <strong>שים לב:</strong> יש להדביק את ההגדרות בקובץ ext של השלוחה במערכת ימות המשיח.<br>
            הגדרות נוספות כמו הגדרות זיהוי, הרשאות כניסה ודוחות ניתן להוסיף בנפרד.
          </div>
        </div>
      
      </div>
      
      <script>
      const state = { type:'normal', folder:'', start_first:'', add_to_list:'no', list_folder:'', approval:'', set_var:'', copy_folder:'', goto:'' };
      const TOTAL = 10;
      var recordings = [], questions = [], rIndex = 0, qIndex = 0;
      var lastStepBeforePreview = 2;
      
      function selectOpt(btn) {
        var key = btn.dataset.key, val = btn.dataset.val;
        document.querySelectorAll('.opt-btn[data-key="'+key+'"]').forEach(function(b){ b.classList.remove('selected'); });
        btn.classList.add('selected');
        state[key] = val;
        if (key==='folder')      document.getElementById('folder-input-wrap').style.display  = val==='custom'        ? 'block':'none';
        if (key==='add_to_list') document.getElementById('list-options').style.display       = val==='yes'           ? 'block':'none';
        if (key==='list_folder') document.getElementById('list-folder-input').style.display  = val==='custom_folder' ? 'block':'none';
        if (key==='set_var')     document.getElementById('set-var-input').style.display      = val==='custom'        ? 'block':'none';
        if (key==='goto')        document.getElementById('goto-input').style.display         = val==='yes'           ? 'block':'none';
      }
      
      function showStep(n) {
        document.querySelectorAll('.step').forEach(function(s){ s.classList.remove('active'); });
        var el = document.getElementById('step-'+n);
        if (el) el.classList.add('active');
        document.getElementById('result-section').style.display = 'none';
        // הצג את כפתור "הצג הגדרה" רק אחרי שלב 2
        document.getElementById('preview-bar').className = (n > 2) ? 'preview-bar active' : 'preview-bar';
        document.getElementById('progress').style.width = Math.round(((n-1)/TOTAL)*100)+'%';
        window.scrollTo({top:0, behavior:'smooth'});
      }
      
      function nextStep(current) {
        if (current===3 && state.type==='approvals') { generate(); return; }
        showStep(current+1);
      }
      function prevStep(current) { showStep(current-1); }
      
      function showPreview() {
        lastStepBeforePreview = getCurrentStep();
        generate();
      }
      
      function getCurrentStep() {
        for (var i=1; i<=TOTAL; i++) {
          var el = document.getElementById('step-'+i);
          if (el && el.classList.contains('active')) return i;
        }
        return 2;
      }
      
      function backToEdit() {
        document.getElementById('result-section').style.display = 'none';
        showStep(lastStepBeforePreview);
      }
      
      /* ===== הקלטות ===== */
      function addRecording() {
        var idx = rIndex++;
        var fileNum = recordings.length;
        recordings.push({idx:idx});
        var fn = String(fileNum); while(fn.length<3) fn='0'+fn;
        var div = document.createElement('div');
        div.id = 'r-'+idx;
        div.className = 'rec-card';
        div.innerHTML =
          '<div class="card-header">' +
          '<strong>הקלטה - קובץ <input type="text" id="r-file-'+idx+'" value="'+fn+'" style="width:55px;padding:3px 6px;border:1px solid #c5d8f0;border-radius:4px;font-size:0.9rem;direction:ltr;"></strong>' +
          '<button class="btn-del" onclick="removeRecording('+idx+')" title="מחק">✕</button>' +
          '</div>' +
          '<div class="field-grid-3">' +
          rField('שקט מקסימלי לסיום (שניות)','r-silence-'+idx,'לדוגמא: 6','ערך 1') +
          rField('אורך הקלטה מקסימלי (שניות)','r-maxlen-'+idx,'לדוגמא: 40','ערך 2') +
          rField('זמן מקסימום לתפריט דילוג','r-skiptime-'+idx,'לדוגמא: 8','ערך 7') +
          '</div>' +
          '<div class="field-grid-2" style="margin-top:10px;">' +
          '<div><label class="field-label">המרה לטקסט STT <span class="field-hint">(ערך 3)</span></label>' +
          '<select id="r-stt-'+idx+'" class="field-select" onchange="toggleSTTOptions('+idx+',this.value)">' +
          '<option value="">ללא (ברירת מחדל)</option>' +
          '<option value="STT">STT - המר הקלטה לטקסט</option>' +
          '</select></div>' +
          '<div><label class="field-label">השמעת תוצאת STT <span class="field-hint">(ערך 4)</span></label>' +
          '<select id="r-tts-'+idx+'" class="field-select" disabled>' +
          '<option value="">ללא (ברירת מחדל)</option>' +
          '<option value="TTS">TTS - השמע את הטקסט</option>' +
          '<option value="Number">Number - בצורת מספר</option>' +
          '<option value="Digits">Digits - בצורת ספרות</option>' +
          '<option value="Alpha">Alpha - אותיות אנגלית</option>' +
          '</select></div>' +
          '</div>' +
          '<div class="field-grid-2" style="margin-top:10px;">' +
          '<div><label class="field-label">בקשת אישור <span class="field-hint">(ערך 5)</span></label>' +
          '<select id="r-ask-'+idx+'" class="field-select">' +
          '<option value="">ללא (ברירת מחדל)</option>' +
          '<option value="ask">ask - שאל אישור לאחר STT</option>' +
          '</select></div>' +
          '<div><label class="field-label">אפשרות דילוג <span class="field-hint">(ערך 6)</span></label>' +
          '<select id="r-skip-'+idx+'" class="field-select">' +
          '<option value="">ללא</option>' +
          '<option value="Skip">Skip - אפשר דילוג בסולמית</option>' +
          '</select></div>' +
          '</div>';
        document.getElementById('recordings-list').appendChild(div);
      }
      
      function toggleSTTOptions(idx, val) {
        var tts = document.getElementById('r-tts-'+idx);
        var ask = document.getElementById('r-ask-'+idx);
        tts.disabled = (val !== 'STT');
        ask.disabled = (val !== 'STT');
        if (val !== 'STT') { tts.value=''; ask.value=''; }
      }
      
      function rField(label, id, placeholder, hint) {
        return '<div><label class="field-label">'+label+' <span class="field-hint">('+hint+')</span></label>' +
          '<input type="text" id="'+id+'" placeholder="'+placeholder+'" class="field-input"></div>';
      }
      
      function removeRecording(idx) {
        recordings = recordings.filter(function(r){ return r.idx!==idx; });
        var el = document.getElementById('r-'+idx);
        if (el) el.remove();
      }
      
      /* ===== שאלות ===== */
      function addQuestion() {
        var idx = qIndex++;
        var fileNum = 50 + questions.length;
        questions.push({idx:idx});
        var fn = String(fileNum); while(fn.length<3) fn='0'+fn;
        var div = document.createElement('div');
        div.id = 'q-'+idx;
        div.className = 'q-card';
        div.innerHTML =
          '<div class="card-header">' +
          '<strong>שאלה - קובץ <input type="text" id="q-file-'+idx+'" value="'+fn+'" style="width:55px;padding:3px 6px;border:1px solid #c5d8f0;border-radius:4px;font-size:0.9rem;direction:ltr;"></strong>' +
          '<button class="btn-del" onclick="removeQuestion('+idx+')" title="מחק">✕</button>' +
          '</div>' +
          '<div class="field-grid-3">' +
          qField('מקסימום ספרות','q-max-'+idx,'לדוגמא: 9','ערך 1') +
          qField('מינימום ספרות','q-min-'+idx,'לדוגמא: 9','ערך 2') +
          qField('זמן המתנה (שניות)','q-wait-'+idx,'ברירת מחדל: 10','ערך 3') +
          '</div>' +
          '<div style="margin-top:10px;"><label class="field-label">צורת השמעה <span class="field-hint">(ערך 4)</span></label>' +
          '<select id="q-type-'+idx+'" class="field-select">' +
          '<option value="">-- לא מוגדר (ברירת מחדל) --</option>' +
          '<option value="Digits">Digits - ספרות (22 = "שתים שתים")</option>' +
          '<option value="Number">Number - מספר (22 = "עשרים ושתים")</option>' +
          '<option value="Price">Price - מחיר (53 = "חמישים ושלוש שקלים")</option>' +
          '<option value="Time">Time - שעה (2359) - 4 ספרות</option>' +
          '<option value="Date">Date - תאריך (10122019) - 8 ספרות</option>' +
          '<option value="DateMY">DateMY - חודש+שנה (052024) - 6 ספרות</option>' +
          '<option value="HebrewDate">HebrewDate - תאריך עברי - 8 ספרות</option>' +
          '<option value="HebrewDateMY">HebrewDateMY - חודש+שנה עברי - 6 ספרות</option>' +
          '<option value="TeudatZehut">TeudatZehut - תעודת זהות תקינה (8-9 ספרות)</option>' +
          '<option value="Phone">Phone - טלפון ישראלי תקין (9-10 ספרות)</option>' +
          '<option value="HebrewKeyboard">HebrewKeyboard - מקלדת עברית</option>' +
          '<option value="EnglishKeyboard">EnglishKeyboard - מקלדת אנגלית</option>' +
          '<option value="EmailKeyboard">EmailKeyboard - מקלדת מייל</option>' +
          '<option value="DigitsKeyboard">DigitsKeyboard - מקלדת ספרות (השמעה מיידית)</option>' +
          '<option value="No">No - לא ישמיע</option>' +
          '</select></div>' +
          '<div class="field-grid-2" style="margin-top:10px;">' +
          '<div><label class="field-label">בקשת אישור <span class="field-hint">(ערך 5)</span></label>' +
          '<select id="q-confirm-'+idx+'" class="field-select">' +
          '<option value="">ללא (ברירת מחדל)</option>' +
          '<option value="Ask">Ask - שאל אישור</option>' +
          '<option value="AskNo">AskNo - שאל אישור, כוכבית לדילוג</option>' +
          '</select></div>' +
          '<div><label class="field-label">מקשים מותרים <span class="field-hint">(ערך 6)</span></label>' +
          '<select id="q-allowed-'+idx+'" class="field-select" onchange="toggleAllowedKeys('+idx+',this.value)">' +
          '<option value="">ללא הגבלה (ברירת מחדל)</option>' +
          '<option value="custom_keys">רשימת ספרות מותרות</option>' +
          '<option value="from_file">from_file - מקובץ</option>' +
          '<option value="from_folder">from_folder - מתיקייה</option>' +
          '</select></div>' +
          '</div>' +
          '<div id="q-allowed-custom-'+idx+'" style="display:none; margin-top:8px;">' +
          '<label class="field-label">ספרות מותרות (לדוגמא: 1-2-3-4)</label>' +
          '<input type="text" id="q-allowed-val-'+idx+'" placeholder="1-2-3-4" class="field-input" style="max-width:200px;">' +
          '</div>' +
          '<div class="field-grid-2" style="margin-top:10px;">' +
          '<div><label class="field-label">CheckGoTo - מעבר לפי נתון <span class="field-hint">(ערך 7)</span></label>' +
          '<input type="text" id="q-checkgoto-'+idx+'" placeholder="לדוגמא: 1-/3/5-2-/3/6" class="field-input"></div>' +
          '<div><label class="field-label">אפשרות יציאה <span class="field-hint">(ערך 8)</span></label>' +
          '<select id="q-exit-'+idx+'" class="field-select">' +
          '<option value="">ללא</option>' +
          '<option value="*">* - כוכבית ליציאה</option>' +
          '<option value="#"># - סולמית ליציאה</option>' +
          '<option value="*#">*# - שניהם</option>' +
          '</select></div>' +
          '</div>' +
          '<div class="field-grid-2" style="margin-top:10px;">' +
          '<div><label class="field-label">מניעת כפילות ב-ListAllInformation <span class="field-hint">(ערך 9)</span></label>' +
          '<select id="q-noduplist-'+idx+'" class="field-select">' +
          '<option value="">ללא</option>' +
          '<option value="CheckNoDoubleFromList">CheckNoDoubleFromList</option>' +
          '</select></div>' +
          '<div><label class="field-label">מניעת כפילות ברישום <span class="field-hint">(ערך 10)</span></label>' +
          '<select id="q-nodup-'+idx+'" class="field-select">' +
          '<option value="">ללא</option>' +
          '<option value="CheckNoDoubleFromEnter">CheckNoDoubleFromEnter - בשיחה</option>' +
          '<option value="CheckNoDoubleFromList">CheckNoDoubleFromList - מ-ListAllInformation</option>' +
          '</select></div>' +
          '</div>' +
          '<div class="field-grid-2" style="margin-top:10px;">' +
          qField('מספר מינימלי להקשה','q-nummin-'+idx,'לדוגמא: 1','ערך 11') +
          qField('מספר מקסימלי להקשה','q-nummax-'+idx,'לדוגמא: 100','ערך 12') +
          '</div>' +
          '<div class="field-grid-2" style="margin-top:10px;">' +
          '<div><label class="field-label">חסימת כוכבית <span class="field-hint">(ערך 13)</span></label>' +
          '<select id="q-blockstar-'+idx+'" class="field-select">' +
          '<option value="">ללא</option>' +
          '<option value="BlockStar">BlockStar - חסום כוכבית</option>' +
          '</select></div>' +
          '<div><label class="field-label">חסימת אפס <span class="field-hint">(ערך 14)</span></label>' +
          '<select id="q-blockzero-'+idx+'" class="field-select">' +
          '<option value="">ללא</option>' +
          '<option value="BlockZero">BlockZero - חסום אפס</option>' +
          '</select></div>' +
          '</div>';
        document.getElementById('questions-list').appendChild(div);
      }
      
      function toggleAllowedKeys(idx, val) {
        document.getElementById('q-allowed-custom-'+idx).style.display = (val==='custom_keys') ? 'block' : 'none';
      }
      
      function qField(label, id, placeholder, hint) {
        return '<div><label class="field-label">'+label+' <span class="field-hint">('+hint+')</span></label>' +
          '<input type="text" id="'+id+'" placeholder="'+placeholder+'" class="field-input"></div>';
      }
      
      function removeQuestion(idx) {
        questions = questions.filter(function(q){ return q.idx!==idx; });
        var el = document.getElementById('q-'+idx);
        if (el) el.remove();
      }
      
      function g(id) { var el=document.getElementById(id); return el ? el.value.trim() : ''; }
      
      function generate() {
        lastStepBeforePreview = getCurrentStep();
        var lines = [];
      
        if (state.type==='approvals') {
          lines.push('type=recording_and_entering_data');
          lines.push('recording_and_entering_data_type=approvals');
        } else {
          lines.push('type=recording_and_entering_data');
        }
      
        if (state.folder==='custom') {
          var num = g('folder-num');
          if (num) lines.push('recording_and_entering_data_folder_to_play='+(num.startsWith('/')?num:'/'+num));
        }
        if (state.start_first==='data') lines.push('start_first=data');
      
        if (state.add_to_list==='yes') {
          lines.push('add_to_list_all_information=yes');
          if (document.getElementById('chk-enterid').checked)   lines.push('add_enter_id_to_list_all_information=yes');
          if (document.getElementById('chk-approval1').checked) lines.push('add_approval_1_to_list_all_information=yes');
          if (document.getElementById('chk-date').checked)      lines.push('add_date_to_list_all_information=yes');
          if (document.getElementById('chk-time').checked)      lines.push('add_time_to_list_all_information=yes');
          if (document.getElementById('chk-phone').checked)     lines.push('add_phone_dial_to_list_all_information=yes');
          if (document.getElementById('chk-ext').checked)       lines.push('add_extension_to_list_all_information=yes');
          if (state.list_folder==='this_folder') lines.push('list_all_information_folder=this_folder');
          else if (state.list_folder==='custom_folder') {
            var lf = g('list-folder-num');
            if (lf) lines.push('list_all_information_folder='+(lf.startsWith('/')?lf:'/'+lf));
          }
        }
      
        if (state.approval==='no_number')  lines.push('say_approval_number=say_approval_no_number');
        else if (state.approval==='no')    lines.push('recording_and_entering_data_say_approval_number=no');
        else if (state.approval==='from_file') lines.push('recording_and_entering_data_approval_number_from_file=yes');
      
        if (state.set_var==='custom') { var sv=g('set-var-val'); if(sv) lines.push('set_var='+sv); }
        if (state.copy_folder==='approval_number') lines.push('recording_and_entering_data_copy_to_folder_type=approval_number');
        if (state.goto==='yes') { var gn=g('goto-num'); if(gn) lines.push('goto_folder_after_registration='+(gn.startsWith('/')?gn:'/'+gn)); }
      
        // הקלטות 000-049
        var recLines = [];
        recordings.forEach(function(r) {
          var fn = g('r-file-'+r.idx); if (!fn) return;
          var silence  = g('r-silence-'+r.idx);
          var maxlen   = g('r-maxlen-'+r.idx);
          var stt      = g('r-stt-'+r.idx);
          var tts      = g('r-tts-'+r.idx);
          var ask      = g('r-ask-'+r.idx);
          var skip     = g('r-skip-'+r.idx);
          var skiptime = g('r-skiptime-'+r.idx);
          var parts = [silence, maxlen, stt, tts, ask, skip, skiptime];
          while (parts.length>0 && parts[parts.length-1]==='') parts.pop();
          if (parts.some(function(p){return p!=='';})) recLines.push(fn+'-option='+parts.join('-'));
        });
        if (recLines.length>0) { lines.push(''); lines.push('; --- הגדרות הקלטות ---'); recLines.forEach(function(l){lines.push(l);}); }
      
        // שאלות 050-099
        var qLines = [];
        questions.forEach(function(q) {
          var fn = g('q-file-'+q.idx); if (!fn) return;
          var max       = g('q-max-'+q.idx);
          var min       = g('q-min-'+q.idx);
          var wait      = g('q-wait-'+q.idx);
          var type      = g('q-type-'+q.idx);
          var conf      = g('q-confirm-'+q.idx);
          // ערך 6: מקשים מותרים
          var allowedSel = g('q-allowed-'+q.idx);
          var allowed = '';
          if (allowedSel==='custom_keys') allowed = g('q-allowed-val-'+q.idx);
          else if (allowedSel==='from_file' || allowedSel==='from_folder') allowed = allowedSel;
          // ערך 7: CheckGoTo
          var checkgoto = g('q-checkgoto-'+q.idx);
          // ערך 8: יציאה
          var exit_key  = g('q-exit-'+q.idx);
          // ערך 9: מניעת כפילות מ-list
          var noduplist = g('q-noduplist-'+q.idx);
          // ערך 10: מניעת כפילות ברישום
          var nodup     = g('q-nodup-'+q.idx);
          // ערכים 11,12: מינימום/מקסימום מספרי
          var nummin    = g('q-nummin-'+q.idx);
          var nummax    = g('q-nummax-'+q.idx);
          // ערכים 13,14: חסימות
          var blockstar = g('q-blockstar-'+q.idx);
          var blockzero = g('q-blockzero-'+q.idx);
      
          var parts = [max, min, wait, type, conf, allowed, checkgoto, exit_key, noduplist, nodup, nummin, nummax, blockstar, blockzero];
          while (parts.length>0 && parts[parts.length-1]==='') parts.pop();
          qLines.push(fn+'-option='+parts.join('-'));
        });
        if (qLines.length>0) { lines.push(''); lines.push('; --- הגדרות שאלות ---'); qLines.forEach(function(l){lines.push(l);}); }
      
        document.querySelectorAll('.step').forEach(function(s){s.classList.remove('active');});
        document.getElementById('preview-bar').className = 'preview-bar';
        document.getElementById('progress').style.width='100%';
        document.getElementById('config-output').textContent = lines.join('\n');
        document.getElementById('result-section').style.display='block';
        window.scrollTo({top:0, behavior:'smooth'});
      }
      
      function copyConfig() {
        navigator.clipboard.writeText(document.getElementById('config-output').textContent).then(function(){
          var btn=document.getElementById('copy-btn');
          btn.textContent='✅ הועתק!';
          setTimeout(function(){btn.textContent='📋 העתק קוד';},2000);
        });
      }
      
      function resetAll() {
        Object.assign(state,{type:'normal',folder:'',start_first:'',add_to_list:'no',list_folder:'',approval:'',set_var:'',copy_folder:'',goto:''});
        recordings=[]; questions=[]; rIndex=0; qIndex=0;
        document.getElementById('recordings-list').innerHTML='';
        document.getElementById('questions-list').innerHTML='';
        document.querySelectorAll('.opt-btn').forEach(function(b){b.classList.remove('selected');});
        document.querySelectorAll('.opt-btn[data-val=""]').forEach(function(b){b.classList.add('selected');});
        document.querySelectorAll('input[type=checkbox]').forEach(function(c){c.checked=false;});
        document.querySelectorAll('.text-input').forEach(function(i){i.value='';});
        ['folder-input-wrap','list-options','list-folder-input','set-var-input','goto-input'].forEach(function(id){
          document.getElementById(id).style.display='none';
        });
        document.getElementById('result-section').style.display='none';
        document.getElementById('preview-bar').className='preview-bar';
        document.querySelector('.opt-btn[data-key="type"][data-val="normal"]').classList.add('selected');
        document.querySelector('.opt-btn[data-key="add_to_list"][data-val="no"]').classList.add('selected');
        showStep(1);
      }
      </script>
      </body>
      </html>
      
      
      א תגובה 1 תגובה אחרונה תגובה ציטוט 1
      • א מנותק
        אA @איל משולש
        נערך לאחרונה על ידי

        @איל-משולש
        ממש יפה

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

          @אA זה מתוכנת KIRO

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

            @איל-משולש
            כלומר?

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

              @אA זה תוכנה שיושבת על המחשב וקוראת את הקבצים שלו ומשנה אותם לפי מה שצריך (פשוט נתתי לו לקרוא את הקבצים של ימות המשיח והוא בנה לבד)
              אם יש לך שרת אז יש לו חיבור לגייטאהב ואז אתה מתכתב איתו וזה משתנה בשרת ישירות!!

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

                @איל-משולש
                אבל מה זה נצרך להתקנה במערכת?

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

                  @אA אם אתה בונה קודים לשרת, ואין לך כח על כל שינוי שעשית לעלות שוב את הקובץ (אבל זה בעיקר לאתרים)

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