אימון עסקי
NIRMAKO
VALUEBUILDER

גלו את הערך האמיתי של העסק שלכם

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

7.1x
כפול רווח לעסקים מעולים
8
מחוללי ערך קריטיים
40,000+
עסקים במחקר
שלב 12345678910111213141516 מתוך 16
ברוכים הבאים

הערכת שווי עסק מקצועית

ברוכים הבאים לשאלון ValueBuilder המוביל בעולם להערכת שווי חברה. למעשה, השאלון מבוסס על מחקר של למעלה מ-40,000 עסקים ומאפשר לבעלי עסקים ומנכ״לים להבין את הערך האמיתי של החברה ואת הפוטנציאל הגלום בה.

מה תקבלו בסיום השאלון

  • ניתוח מפורט של 8 מחוללי הערך בחברה שלכם
  • זיהוי נקודות חוזק ונקודות לשיפור
  • המלצות מותאמות אישית להגדלת שווי העסק
  • שיחת ייעוץ מקצועית עם ניר מקובסקי ללא עלות
42 שאלותב-5 קטגוריות מקצועיות
10-15 דקותזמן מילוי ממוצע
8 מחוללי ערךהמבוססים על מחקר בינלאומי
פרטיות מלאההמידע מאובטח ולא מועבר לצד שלישי
40,000+ עסקיםבמאגר המחקר הבינלאומי
ללא עלותשאלון וייעוץ ראשוני

8 מחוללי הערך של ValueBuilder

הגורמים המרכזיים שקובעים את שווי העסק שלכם בעיני קונים פוטנציאליים

01

ביצועים כספיים

יציבות ורווחיות לאורך זמן

02

פוטנציאל צמיחה

יכולת הרחבה ופיתוח

03

מבנה שווייצרי

פיזור סיכונים ותלות

04

נדנדת השווי

ניהול תזרים מזומנים

05

הכנסה חוזרת

הכנסות קבועות וצפויות

06

שליטת מונופול

ייחודיות ובידול בשוק

07

שביעות רצון

נאמנות והמלצות לקוחות

08

מרכזיות הבעלים

עצמאות תפעולית

שאלון ValueBuilder מספק מדד שיטתי ומעשי לבניית ערך עסקי בר-קיימא. יתרה מכך, הוא מבוסס על מחקר רחב של עשרות אלפי עסקים. לפיכך, השאלון עוזר להבין לא רק מה מצב העסק היום, אלא גם מה ניתן לשפר כדי להגדיל את שוויו בעתיד. כמו כן, לקריאה נוספת על הערכת שווי ומועצת TAB ראו את עמוד מועצת TAB Boardroom.

שלב 1 מתוך 16 · פרטים אישיים

פרטי המשיב

כדי שנוכל לשלוח לכם את הדוח המותאם אישית ולייצר קשר מקצועי, אנא מלאו את הפרטים הבאים:

שלב 2 מתוך 16 · העסק והלקוחות

תיאור העסק ובלעדיות

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

שאלה 1
1
במשפט אחד, איך הייתם מתארים את העסק שלכם למכר חדש?
שאלה 2
2
האם הייתם אומרים שהתעשייה שלכם:
שאלה 3
3
איזה מהבאים מתאר הכי טוב את הבלעדיות של העסק שלכם ללקוחות:
שלב 3 מתוך 16 · העסק והלקוחות

נתח שוק והתאמה אישית

בהמשך, נבדוק את נתח השוק, הקשר האישי ורמת ההתאמה שאתם מספקים ללקוחות.

שאלה 4
4
לגבי נתח השוק למוצרים/שירותים שאתם מוכרים, האם אתם מוכרים ל:
שאלה 5
5
איזה מהבאים מתאר הכי טוב את הקשר האישי שלכם עם לקוחות החברה:
שאלה 6
6
איזה מהבאים מתאר הכי טוב את רמת ההתאמה האישית שאתם מציעים:
שלב 4 מתוך 16 · שביעות רצון לקוחות

שביעות רצון והמלצות

כמו כן, שביעות רצון והמלצות הן מנועי ערך קריטיים המשפיעים על שווי העסק.

שאלה 7
7
אנא העריכו את אחוז הלקוחות שלכם שהם מאוד מרוצים:
שאלה 8
8
כמה פעמים לקוחות קיימים ממליצים על החברה שלכם:
שאלה 9
9
ב-12 החודשים האחרונים, איזה חלק מהלקוחות שלכם התלונן בכתב:
שלב 5 מתוך 16 · מודל עסקי

מודל רווח ותשלומים

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

שאלה 10
10
איזה מהבאים מתאר הכי טוב את המודל העסקי שלכם?
שאלה 11
11
איך אתם בדרך כלל מקבלים תשלום מהלקוחות?
שאלה 12
12
איזה אחוז מהמחזור הכולל ייצג הלקוח הגדול ביותר שלכם בשנה שעברה?
שלב 6 מתוך 16 · סיכון ותלות

סיכונים ותלות

בנוסף, רמת התלות בלקוחות גדולים ובבעלים משפיעה משמעותית על שווי החברה.

שאלה 13
13
איזה מהבאים מתאר הכי טוב את ההשפעה הפוטנציאלית של איבוד הלקוח הגדול ביותר:
שאלה 14
14
איזה אחוז מהמכירות/הכנסות שלכם הוא חוזר (מנויים, חוזי תחזוקה)?
שאלה 15
15
איזה אחוז מהכנסות החברה מתבצע אישית על ידכם או שותפים?
שלב 7 מתוך 16 · ניהול כישרונות

החלפת ספקים ועובדים

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

שאלה 16
16
כמה קל או קשה יהיה להחליף את הספק החשוב ביותר שלכם?
שאלה 17
17
כמה קל או קשה יהיה להחליף את האנשים שעוסקים במכירות ושיווק?
שאלה 18
18
כמה קל או קשה יהיה להחליף את האנשים שעוסקים בעיצוב ואספקת המוצר/שירות?
שלב 8 מתוך 16 · חזון וצמיחה

תחזית צמיחה וסקילביליות

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

שאלה 19
19
ב-12 החודשים הבאים, האם אתם מצפים שההכנסות שלכם יהיו:
שאלה 20
20
איזה מהבאים מתאר הכי טוב את האפשרות למכור יותר ללקוחות הקיימים:
שאלה 21
21
אספקת פי חמישה מהכמות הנוכחית שאתם מוכרים תהיה:
שלב 9 מתוך 16 · חזון וצמיחה

הרחבה ומטרות

ראשית, הרחבה גיאוגרפית ומטרות אסטרטגיות הן אינדיקטורים חשובים לפוטנציאל.

שאלה 22
22
האם שכפול העסק שלכם לשרת אזור גיאוגרפי חדש יהיה:
שאלה 23
23
איך העסק שלכם יתפקד אם הייתם מחוץ לפעילות למשך 3 חודשים:
שאלה 24
24
אם הייתם יכולים להשיג רק אחד מהיעדים הבאים ב-12 החודשים הבאים:
שלב 10 מתוך 16 · יעוץ וערכים

ייעוץ ועושר

בנוסף, נבין את התפיסה שלכם בנושא ייעוץ, עושר וחששות ממכירה.

שאלה 25
25
למי הייתם פונים בסבירות הגבוהה ביותר לייעוץ בנושא בניית ערך החברה:
שאלה 26
26
איזה מהבאים מתאר הכי טוב את ההגדרה שלכם למישהו שהוא עשיר?
שאלה 27
27
איזה מהבאים מתאר את החשש הגדול ביותר שלכם כשמדובר במכירת העסק:
שלב 11 מתוך 16 · יעוץ וערכים

מטרות ארוכות טווח

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

שאלה 28
28
איזה מהבאים מתאר הכי טוב את המטרה ארוכת הטווח שלכם לעסק:
שאלה 29
29
איזה מהבאים מתאר הכי טוב את מה שאתם מחפשים ביועץ?
שאלה 30
30
איזה מהבאים מתאר הכי טוב את צוות ההנהלה שלכם?
שלב 12 מתוך 16 · נתונים כספיים

רווחיות והכנסות

כעת, נעבור לנתונים כספיים — שולי רווח, היקף הכנסות וקצב הצמיחה.

שאלה 31
31
מה היו שולי הרווח שלכם (לפני מס) בשנה הכספית המושלמת האחרונה?
שאלה 32
32
מה היו ההכנסות השנתיות של החברה בשקלים חדשים בשנה שעברה?
שאלה 33
33
כשמשווים את השנה הכספית האחרונה עם השנה הקודמת, האם ההכנסות שלכם:
שלב 13 מתוך 16 · נתונים כספיים

רישום כספי ותזרים

כמו כן, רמת הרישום הכספי וניהול תזרים המזומנים משפיעים על השקיפות והערך.

שאלה 34
34
איזה מהבאים מתאר הכי טוב את הגישה שלכם לרישום כספי?
שאלה 35
35
מה שולי הרווח הגולמי הטיפוסיים שלכם?
שאלה 36
36
איזה מהמשפטים הבאים מתאר הכי טוב את צרכי המזומנים שלכם:
שלב 14 מתוך 16 · השפעה והצעות

השפעה ורווחי עבר

יתרה מכך, נסכם את ההשפעה ברשתות, את הרווחים ההיסטוריים והצעות קנייה.

שאלה 37
37
אנא העריכו את ההשפעה שלכם (עוקבים ברשתות חברתיות ומנויים):
שאלה 38
38
אנא העריכו את הרווח לפני מס (או הפסד) לשלוש השנים האחרונות:
שאלה 39
39
האם קיבלתם הצעה בכתב לקנות את העסק שלכם בשנה האחרונה?
שלב 15 מתוך 16 · סיכום

כפול הצעה, תעשייה וגיל

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

שאלה 40
40
איזה כפול של הרווחים ייצגה ההצעה? (אם ענית כן)
שאלה 41
41
איזה מהבאים מתאר הכי טוב את התעשייה שלכם:
שאלה 42
42
באיזו שנה התחלתם את העסק שלכם?
בחר שנה 20262025202420232022202120202019201820172016201520142013201220112010200920082007200620052004200320022001200019991998199719961995199419931992199119901989198819871986198519841983198219811980197919781977197619751974197319721971197019691968196719661965196419631962196119601959195819571956195519541953195219511950
שלב אחרון

שליחת השאלון

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

מה קורה לאחר השליחה?
  • התוצאות נשלחות אוטומטית לצוות NIRMAKO לניתוח מקצועי
  • ניר מקובסקי יצור עמכם קשר בתוך 48 שעות
  • תקבלו דוח מפורט עם 8 מחוללי הערך של ValueBuilder
  • שיחת ייעוץ ראשונית ללא עלות וללא התחייבות
  • המידע שלכם מאובטח ולא מועבר לצד שלישי

אימון וייעוץ עסקי | ליווי מנכ״לים ובעלי עסקים

[email protected] · 052-254-9504 · www.nirmako.com

הסיבים 49, פתח תקוה

© NIRMAKO · ValueBuilder Questionnaire · כל הזכויות שמורות

<!-- ===================================================================== ValueBuilder Questionnaire — Consolidated v1.5 ✅ Bot Protection (5 layers): honeypot, min-time, junk data, min-answers, dedup ✅ Route B preserved: receives session from JAWS chat handoff ✅ Route A preserved: standalone fill from page ✅ Chat return preserved: opens widget after submit with vbqInitToken ✅ Email preserved: Web3Forms to [email protected] + [email protected] ✅ Idempotency: sessionStorage hash blocks duplicate submits within 60s ------------------------------------------------------------------------- Drop this script INSTEAD of the existing ... block. HTML body above remains identical. ===================================================================== --> (function(){ 'use strict'; const VBQ = { jawsBase: 'https://lingering-bird-4409.10011334.workers.dev', publicKey: 'CtNJGD2BrA84gJcHQBFC9nDWDyRSqLkk', chatOpenDelayMs: 2500, totalSteps: 16 }; // 🛡️ PROTECTION CONSTANTS const VBQ_PAGE_LOADED_AT = Date.now(); const VBQ_MIN_TIME_SEC = 30; // Humans can't fill 42 questions in < 30s const VBQ_MIN_ANSWERS = 30; // Real users answer ≥ 30/42 questions const VBQ_DEDUP_KEY = 'vbq_last_submit'; const VBQ_DEDUP_TTL_MS = 60000; // Block identical resubmit for 60 seconds let vbqSessionId = null; let currentStep = 0; // 🛡️ HELPERS — content hash + dedup function vbqHash(str){ let h = 0; for(let i = 0; i < str.length; i++){ h = ((h < VBQ_DEDUP_TTL_MS) return false; return true; } catch(e){ return false; } } function vbqMarkSubmitted(lead, count){ try { sessionStorage.setItem(VBQ_DEDUP_KEY, JSON.stringify({ hash: vbqHash(lead.email + '|' + lead.company + '|' + count), ts: Date.now() })); } catch(e){} } function vbqDetectBot(form){ // Layer 1: Honeypot const honeypot = form.querySelector('input[name="botcheck"]'); if(honeypot && honeypot.checked){ console.warn('[VBQ] 🛡️ Honeypot triggered — silent block'); return 'honeypot'; } // Layer 2: Time-on-page const elapsed = Math.floor((Date.now() - VBQ_PAGE_LOADED_AT) / 1000); if(elapsed < VBQ_MIN_TIME_SEC){ console.warn('[VBQ] 🛡️ Too fast: ' + elapsed + 's — silent block'); return 'too_fast'; } return null; } function setup(){ const root = document.getElementById('vbq-root'); if(!root){ console.warn('[VBQ] #vbq-root not found, aborting setup'); return; } function goToStep(n){ n = parseInt(n, 10); if(isNaN(n) || n VBQ.totalSteps) return; currentStep = n; const screens = root.querySelectorAll('.vbq-screen'); for(let i=0; i<screens.length; i++){ screens[i].style.setProperty('display', 'none', 'important'); } const target = root.querySelector('.vbq-screen[data-step="' + n + '"]'); if(target){ target.style.setProperty('display', 'block', 'important'); target.style.animation = 'vbqSlide .4s ease-out'; } const radio = document.getElementById('vbq-s' + n); if(radio){ try { radio.checked = true; } catch(e){} } const wrap = root.querySelector('.vbq-progress-wrap'); if(wrap) wrap.style.setProperty('display', n === 0 ? 'none' : 'block', 'important'); const fill = root.querySelector('.vbq-progress-fill'); if(fill) fill.style.width = (n === 0 ? 0 : Math.round((n/VBQ.totalSteps)*100)) + '%'; const nums = root.querySelectorAll('.vbq-stepnum'); for(let j=0; j<nums.length; j++){ nums[j].style.display = 'none'; } const activeNum = root.querySelector('.vbq-stepnum-' + n); if(activeNum) activeNum.style.display = 'inline'; try { const c = root.querySelector('.vbq-container'); if(c) c.scrollIntoView({behavior:'smooth', block:'start'}); } catch(e){} } root.addEventListener('click', function(e){ let el = e.target; while(el && el !== root){ if(el.tagName === 'LABEL' && el.hasAttribute('for')){ const m = el.getAttribute('for').match(/^vbq-s(\d+)$/); if(m){ e.preventDefault(); e.stopPropagation(); goToStep(parseInt(m[1], 10)); return; } } el = el.parentNode; } }); // ✅ ROUTE B preserved — load session handoff from JAWS chat (function loadSessionFromUrl(){ const params = new URLSearchParams(window.location.search); const sid = params.get('vbq_session'); if(!sid || !/^[0-9a-f-]{36}$/i.test(sid)) return; vbqSessionId = sid; console.log('[VBQ] Route B detected, session:', sid); fetch(VBQ.jawsBase + '/blueprint/session/' + encodeURIComponent(sid)) .then(function(r){ return r.json(); }) .then(function(data){ if(data.error){ console.warn('[VBQ] Session load failed:', data.error); vbqSessionId = null; return; } if(data.lead){ const setVal = function(id, v){ const el = document.getElementById(id); if(el && v) el.value = v; }; setVal('vbq-name', data.lead.name); setVal('vbq-phone', data.lead.phone); setVal('vbq-email', data.lead.email); setVal('vbq-company', data.lead.company); } if(data.source === 'jaws_handoff'){ const banner = document.createElement('div'); banner.style.cssText = 'background:#0f2744;color:#c9a227;padding:14px 24px;text-align:center;font-weight:600;font-size:.95rem;border-bottom:3px solid #c9a227;font-family:Heebo,sans-serif;direction:rtl'; const n = data.lead && data.lead.name; banner.textContent = n ? 'שלום ' + n + ', ממשיכים מהצ\'אט שלך עם JAWS — הפרטים שלך כבר מולאו' : 'ממשיכים מהצ\'אט שלך עם JAWS — הפרטים שלך כבר מולאו'; const c = document.querySelector('.vbq-container'); if(c) c.insertBefore(banner, c.firstChild); } }) .catch(function(err){ console.warn('[VBQ] Session load error:', err); vbqSessionId = null; }); })(); root.addEventListener('change', function(e){ if(e.target && e.target.type === 'radio' && e.target.name && /^q\d+_/.test(e.target.name)){ const grp = root.querySelectorAll('input[name="' + e.target.name + '"]'); for(let i=0; i<grp.length; i++){ const o = grp[i].closest('.vbq-option'); if(o) o.classList.remove('vbq-selected'); } const s = e.target.closest('.vbq-option'); if(s) s.classList.add('vbq-selected'); } }); function collectAnswers(){ const answers = {}; const qTextMap = {}; const allBoxes = root.querySelectorAll('.vbq-qbox'); for(let b=0; b<allBoxes.length; b++){ const numEl = allBoxes[b].querySelector('.vbq-qnum'); const txtEl = allBoxes[b].querySelector('.vbq-qtext'); if(numEl && txtEl){ const qn = numEl.textContent.trim(); if(/^\d+$/.test(qn)){ qTextMap['q' + qn] = txtEl.textContent.trim(); } } } const radios = root.querySelectorAll('input[type="radio"][name^="q"]:checked'); for(let i=0; i<radios.length; i++){ const m = radios[i].name.match(/^q(\d+)_/); if(m){ const qid = 'q' + m[1]; answers[qid] = { text: qTextMap[qid] || '', value: radios[i].value }; } } const inputs = root.querySelectorAll('input[type="text"][name^="q"], input[type="number"][name^="q"], input[type="tel"][name^="q"], select[name^="q"]'); const q38Parts = {}; for(let j=0; j 0){ const p1 = q38Parts['q38_profit_1'] || '[לא מולא]'; const p2 = q38Parts['q38_profit_2'] || '[לא מולא]'; const p3 = q38Parts['q38_profit_3'] || '[לא מולא]'; answers['q38'] = { text: qTextMap['q38'] || '', value: 'שנה אחרונה: ' + p1 + ' ₪ | לפני שנתיים: ' + p2 + ' ₪ | לפני 3 שנים: ' + p3 + ' ₪' }; } return answers; } function escapeHtml(s){ return String(s||'').replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"').replace(/'/g,'''); } function renderResultsCard(result){ const drivers = result.drivers || {}; const weakest = (result.weakest_drivers || []).slice(0, 3); const weakRows = weakest.map(function(code){ const d = drivers[code]; if(!d) return ''; const pct = Math.max(0, Math.min(100, d.score || 0)); const color = pct >= 70 ? '#1d9e75' : (pct >= 50 ? '#c9a227' : '#c0392b'); return '
' + escapeHtml(d.name_he || code) + '
' + pct + '
'; }).join(''); return '
השאלון הושלם
הציון הכולל שלך
' + (result.total_score || 0) + '/100
3 הדרייברים החלשים ביותר — מה שצריך לשפר קודם
' + weakRows + '
הניתוח המלא ממתין לך
JAWS כבר ניתח כל אחד מ-8 הדרייברים ובנה לך המלצות אישיות. ניר ייצור איתך קשר ישירות תוך 48 שעות עם הדוח המלא.
'; } // ✅ CHAT RETURN preserved — opens JAWS widget after submit function openJawsChatWidget(initToken){ try { if(window.JawsChat && typeof window.JawsChat.open === 'function'){ window.JawsChat.open(initToken ? { vbqInitToken: initToken } : {}); return true; } } catch(e){} try { if(window.openJawsChat && typeof window.openJawsChat === 'function'){ window.openJawsChat(initToken); return true; } } catch(e){} try { if(window.Jaws && typeof window.Jaws.openChat === 'function'){ window.Jaws.openChat(initToken ? { vbqInitToken: initToken } : {}); return true; } } catch(e){} try { const candidates = document.querySelectorAll('[id*="jaws" i] button, [class*="jaws" i] button, [id*="chat" i] button:not(#vbq-open-chat-btn), .chat-bubble, .chat-fab, [data-chat-trigger]'); for(let i=0; i 0 && r.height > 0){ c.click(); return true; } } } catch(e){} return false; } function triggerChatHandoff(chatInitToken){ setTimeout(function(){ const opened = openJawsChatWidget(chatInitToken); if(opened){ console.log('[VBQ] ✅ Chat opened automatically'); } else { console.log('[VBQ] Chat widget not detected — user can click manual button. Token:', chatInitToken); } }, VBQ.chatOpenDelayMs); } root.addEventListener('click', function(e){ if(e.target && (e.target.id === 'vbq-open-chat-btn' || (e.target.closest && e.target.closest('#vbq-open-chat-btn')))){ e.preventDefault(); const opened = openJawsChatWidget(null); if(!opened){ const btn = document.getElementById('vbq-open-chat-btn'); if(btn){ btn.outerHTML = '
הצ\'אט אינו זמין כרגע
צרו קשר ישירות עם ניר:
052-254-9504 · [email protected]
'; } } } }); // ✅ EMAIL preserved — Web3Forms to [email protected] + [email protected] function buildWeb3FormsPayload(lead, answers, industry, startYear, blueprintResult){ const w3f = { access_key: 'e17851c4-12fa-4f7a-8c86-f25d3bb70526', subject: 'ValueBuilder ✦ ' + lead.company + ' ✦ ' + lead.name + (blueprintResult ? ' ✦ ציון ' + (blueprintResult.total_score || '?') + '/100' : ''), from_name: 'NIRMAKO ValueBuilder' }; w3f['01_שם_מלא'] = lead.name; w3f['02_טלפון'] = lead.phone; w3f['03_מייל'] = lead.email; w3f['04_חברה'] = lead.company; w3f['05_מסלול'] = vbqSessionId ? 'Route B — handoff מ-JAWS chat (session: ' + vbqSessionId + ')' : 'Route A — מילוי אורגני'; w3f['06_תעשייה'] = industry || '—'; w3f['07_שנת_הקמה'] = startYear || '—'; w3f['08_מספר_תשובות'] = Object.keys(answers).length + ' / 42'; if(blueprintResult){ w3f['09_ציון_כולל'] = (blueprintResult.total_score || 0) + ' / 100'; if(blueprintResult.weakest_drivers && blueprintResult.drivers){ const weakest = blueprintResult.weakest_drivers.slice(0, 3).map(function(code){ const d = blueprintResult.drivers[code]; return d ? (d.name_he || code) + ' (' + (d.score || 0) + ')' : code; }).join(' | '); w3f['10_דרייברים_חלשים'] = weakest; } if(blueprintResult.drivers){ const all = Object.keys(blueprintResult.drivers).map(function(code){ const d = blueprintResult.drivers[code]; return (d.name_he || code) + ': ' + (d.score || 0); }).join(' | '); w3f['11_כל_הדרייברים'] = all; } } const qids = Object.keys(answers).sort(function(a,b){ return parseInt(a.replace('q',''),10) - parseInt(b.replace('q',''),10); }); for(let i=0; i<qids.length; i++){ const qid = qids[i]; const num = qid.replace('q','').padStart(2,'0'); const txt = (answers[qid].text || '').substring(0, 60); w3f[num + '_' + qid + '_' + txt] = answers[qid].value; } return w3f; } function sendWeb3Forms(lead, answers, industry, startYear, blueprintResult){ const payload = buildWeb3FormsPayload(lead, answers, industry, startYear, blueprintResult); console.log('[VBQ] Sending Web3Forms email', {company: lead.company, hasScore: !!blueprintResult}); return fetch('https://api.web3forms.com/submit', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify(payload) }) .then(function(r){ return r.json(); }) .then(function(data){ if(data.success){ console.log('[VBQ] ✅ Web3Forms email sent successfully'); } else { console.warn('[VBQ] ⚠️ Web3Forms responded but not success:', data); } return data; }) .catch(function(err){ console.error('[VBQ] ❌ Web3Forms email failed:', err); throw err; }); } /* ============== SUBMIT HANDLER (with 5-layer protection) ============== */ const form = document.getElementById('vbq-form'); if(form){ form.addEventListener('submit', function(e){ e.preventDefault(); const btn = document.getElementById('vbq-btnSubmit'); const status = document.getElementById('vbq-emailStatus'); // 🛡️ LAYERS 1+2: Honeypot + Time-on-page (silent block — bot learns nothing) const botReason = vbqDetectBot(form); if(botReason){ // Show fake "processing" then clear — bot has nothing to retry against if(status) status.innerHTML = '
מעבד...
'; if(btn){ btn.disabled = true; btn.textContent = 'מעבד...'; } setTimeout(function(){ if(btn){ btn.disabled = false; btn.textContent = 'שלח שאלון ←'; } if(status) status.innerHTML = ''; }, 4000); return; } const lead = { name: ((document.getElementById('vbq-name') ||{}).value || '').trim(), phone: ((document.getElementById('vbq-phone') ||{}).value || '').trim(), email: ((document.getElementById('vbq-email') ||{}).value || '').trim(), company: ((document.getElementById('vbq-company')||{}).value || '').trim() }; if(!lead.name || !lead.phone || !lead.email || !lead.company){ if(status) status.innerHTML = '
חסרים פרטים אישיים. חזרו לשלב 1 ומלאו שם, טלפון, מייל ושם חברה.
'; goToStep(1); return; } if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(lead.email)){ if(status) status.innerHTML = '
כתובת המייל לא תקינה. אנא חזרו לשלב 1 לתיקון.
'; return; } // 🛡️ LAYER 3: Junk data if(lead.name.length < 2 || lead.company.length < 2){ if(status) status.innerHTML = '
שם וחברה חייבים להיות לפחות 2 תווים
'; goToStep(1); return; } if(/^\d+$/.test(lead.company)){ if(status) status.innerHTML = '
שם החברה חייב להיות טקסט, לא רק מספרים
'; goToStep(1); return; } if(lead.phone.replace(/\D/g, '').length < 9){ if(status) status.innerHTML = '
מספר טלפון לא תקין (לפחות 9 ספרות)
'; goToStep(1); return; } const answers = collectAnswers(); const answeredCount = Object.keys(answers).length; const industry = answers.q41 ? answers.q41.value : null; const startYear = answers.q42 ? parseInt(answers.q42.value, 10) || null : null; // 🛡️ LAYER 4: Min answers if(answeredCount < VBQ_MIN_ANSWERS){ if(status) status.innerHTML = '
השאלון לא הושלם — אנא ענו על לפחות ' + VBQ_MIN_ANSWERS + ' שאלות מתוך 42 (כרגע: ' + answeredCount + ')
'; return; } // 🛡️ LAYER 5: Deduplication if(vbqIsDuplicate(lead, answeredCount)){ console.warn('[VBQ] 🛡️ Duplicate submission within 60s — blocked'); if(status) status.innerHTML = '
השאלון כבר נשלח.
ניר ייצור איתך קשר בקרוב.
'; if(btn){ btn.style.display = 'none'; } return; } vbqMarkSubmitted(lead, answeredCount); if(btn){ btn.disabled = true; btn.textContent = 'מנתח את התשובות שלך...'; } if(status){ status.innerHTML = '
📊 מחשב ציון ומפעיל ניתוח AI
כל אחד מ-8 הדרייברים מנותח במקביל. זה לוקח כ-5-10 שניות.
'; } const payload = { public_key: VBQ.publicKey, session_id: vbqSessionId, session_uuid: vbqSessionId || (window.crypto && crypto.randomUUID ? crypto.randomUUID() : ('vbq-' + Date.now() + '-' + Math.random().toString(36).slice(2))), lead: lead, answers: answers, industry: industry, business_start_year: startYear }; console.log('[VBQ] Submitting to JAWS BLUEPRINT', { route: vbqSessionId ? 'B (handoff)' : 'A (organic / standalone)', session_id: vbqSessionId, answered: answeredCount + '/42', company: lead.company }); fetch(VBQ.jawsBase + '/blueprint/submit', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify(payload) }) .then(function(r){ return r.json().then(function(data){ return { ok: r.ok, status: r.status, data: data }; }); }) .then(function(res){ console.log('[VBQ] JAWS responded', {ok: res.ok, status: res.status, hasScore: !!(res.data && res.data.total_score)}); if(!res.ok || res.data.error){ throw new Error(res.data.detail || res.data.error || 'HTTP ' + res.status); } // Atomic render — wrap to never break on email/chat failure try { if(status){ status.innerHTML = renderResultsCard(res.data); } if(btn){ btn.style.display = 'none'; btn.disabled = false; } const prevBtns = document.querySelectorAll('.vbq-screen[data-step="16"] .vbq-btn-prev'); for(let p=0; p<prevBtns.length; p++){ prevBtns[p].style.display = 'none'; } console.log('[VBQ] ✅ Result card rendered, score:', res.data.total_score); } catch(renderErr){ console.error('[VBQ] renderResultsCard threw:', renderErr); if(status){ status.innerHTML = '
✅ הניתוח הושלם בהצלחה!
ניר ייצור איתך קשר תוך 48 שעות עם הדוח המלא.
'; } if(btn){ btn.style.display = 'none'; } } // ✅ CHAT RETURN — fires for both Route A (standalone) and Route B (handoff) try { if(res.data.chat_init_token){ triggerChatHandoff(res.data.chat_init_token); } } catch(chatErr){ console.warn('[VBQ] Chat handoff error:', chatErr); } try { window.scrollTo({top: 0, behavior:'smooth'}); }catch(e){} // ✅ EMAIL — sent last, in own try-catch, cannot affect render try { sendWeb3Forms(lead, answers, industry, startYear, res.data).catch(function(err){ console.warn('[VBQ] Web3Forms email failed (non-blocking):', err); }); } catch(w3fSyncErr){ console.error('[VBQ] Web3Forms threw synchronously (non-blocking):', w3fSyncErr); } }) .catch(function(err){ console.error('[VBQ] JAWS submit failed:', err); // Even on JAWS fail, still try email (don't lose the lead) try { sendWeb3Forms(lead, answers, industry, startYear, null).catch(function(err2){ console.warn('[VBQ] Fallback Web3Forms failed:', err2); }); } catch(w3fSyncErr){ console.error('[VBQ] Fallback Web3Forms threw:', w3fSyncErr); } if(status){ status.innerHTML = '
⚠️ נתקלנו בתקלה זמנית בניתוח
פרטי התקלה: ' + escapeHtml(err.message) + '
הפרטים שלך נשמרו ונשלחו ל-NIRMAKO — ניר ייצור איתך קשר בתוך 48 שעות. במידת הצורך:
[email protected] · 052-254-9504
'; } if(btn){ btn.disabled = false; btn.textContent = 'נסה שוב'; } }); }); } goToStep(0); console.log('[VBQ] v1.5 (5-layer bot protection + dedup) loaded, page loaded at:', new Date(VBQ_PAGE_LOADED_AT).toISOString()); } if(document.readyState === 'loading'){ document.addEventListener('DOMContentLoaded', setup); } else { setup(); } })();