Запись на встречу — покажем бота в деле '+
'20–30 минут онлайн. Покажем, как бот звонит, квалифицирует и переводит на менеджера; разберём вашу задачу и посчитаем экономику.
'+
''+
'
1 Живой звонок бота — услышите, как он ведёт диалог
'+
'
2 Разберём вашу задачу и нишу
'+
'
3 Посчитаем экономику под ваши объёмы
'+
'
'+
'Ссылку на встречу пришлём после подтверждения менеджером.
'+
'Записаться → ';
},
date: function(){
var days = workDays(7);
var tiles = days.map(function(d){
var sel = S.date===d.label ? ' sel':'';
return ''+
''+d.label+' '+d.dow+' ';
}).join('');
return 'Выберите дату '+
'Ближайшие рабочие дни. Встречи — по будням.
'+
''+tiles+'
'+
navRow(false);
},
time: function(){
var slots = timeSlots();
var tiles = slots.map(function(t){
var sel = S.time===t ? ' sel':'';
return ''+t+' ';
}).join('');
return 'Выберите время '+
''+ (S.date? esc(S.date)+' ('+esc(S.dow)+') · ':'') +'выберите удобное окно.
'+
' Встречу проведёт '+esc(MANAGER_NAME)+'
'+
''+tiles+'
'+
navRow(false);
},
audience: function(){
return 'Для кого вы решаете задачу? '+
'От этого зависят следующие вопросы.
'+
''+
'🏢 Для своего бизнесаВнедряю у себя '+
'🤝 Для клиентаЯ партнёр / агентство '+
'
'+
navRow(false);
},
task: function(){
return 'Какую задачу хотите решить? '+
'Опишите своими словами — так встреча будет предметнее.
'+
''+
'
'+
'
Пожалуйста, опишите задачу.
'+
'
'+
navRow(true);
},
sphere: function(){
return 'Чем занимается компания? '+
'В какой сфере бизнес?
'+
''+
'
'+
'
Укажите сферу бизнеса.
'+
'
'+
navRow(true);
},
sales: function(){
var opts=['Нет отдела продаж','1 человек','2 человека','Больше двух'];
var tiles=opts.map(function(o){return ''+o+' ';}).join('');
return 'Сколько человек в отделе продаж? '+
''+tiles+'
'+ navRow(false);
},
revenue: function(){
var tiles=['Меньше 25 млн ₽/год','Больше 25 млн ₽/год'].map(function(o){
return ''+o+' ';}).join('');
return 'Какая выручка компании? '+
'Голосовой ИИ максимально полезен при выручке от 25 млн ₽/год.
'+
''+tiles+'
'+ navRow(false);
},
clientneed: function(){
var tiles=[['Да, есть','yes'],['Пока нет','no']].map(function(o){
return ''+o[0]+' ';}).join('');
return 'Есть ли у вас клиент, которому нужен голосовой или текстовый ИИ-бот? '+
''+tiles+'
'+ navRow(false);
},
contacts: function(){
var partner = S.audience==='partner';
var html='Контактные данные '+
'Менеджер свяжется, подтвердит детали и пришлёт ссылку на встречу.
';
if(partner){
html+='Данные партнёра
'+
field('partner-name','Ваше имя','in-pname',S.partnerName,'Как к вам обращаться','Укажите ваше имя')+
field('partner-phone','Ваш телефон','in-pphone',S.partnerPhone,'+7 (___) ___-__-__','Введите корректный телефон');
html+='Данные клиента
';
}
html+= field('client-name','Имя клиента','in-cname',S.clientName,'Имя контактного лица','Укажите имя')+
field('client-phone','Телефон клиента','in-cphone',S.clientPhone,'+7 (___) ___-__-__','Введите корректный телефон');
html+='Куда прислать уведомление о встрече? '+
'
'+
'✈️ Telegram '+
'✉️ SMS '+
'
Выберите канал.
';
// honeypot
html+='Не заполняйте это поле
';
html+= '← Назад '+
'Отправить заявку
';
return html;
},
done: function(){
var recap = ''+
'
'+esc(S.date||'')+' '+esc(S.dow?'('+S.dow+')':'')+' в '+esc(S.time||'')+'
'+
'
Уведомление: '+esc(S.channel==='telegram'?'Telegram':(S.channel==='sms'?'SMS':'—'))+'
'+
'
';
return ''+
'
✅
'+
'
Заявка принята! '+
recap+
'
Встреча состоится после звонка менеджера — он свяжется с вами, подтвердит детали и пришлёт ссылку.
'+
'
Держите телефон под рукой.
'+
'
Ошиблись в номере? Изменить и отправить заново '+
'
';
}
};
function field(fid,label,inputId,val,ph,errmsg){
return ''+label+' '+
'
'+
'
'+errmsg+'
';
}
function navRow(withNext){
var back = '← Назад ';
if(withNext) return ''+back+'Далее →
';
return ''+back+'
';
}
/* ================= phone mask ================= */
function maskPhone(v){
var d = v.replace(/\D/g,'');
if(d.length && d[0]==='8') d='7'+d.slice(1);
if(d.length && d[0]!=='7') d='7'+d;
d = d.slice(0,11);
var r='+7';
if(d.length>1) r+=' ('+d.slice(1,4);
if(d.length>=4) r+=')';
if(d.length>=5) r+=' '+d.slice(4,7);
if(d.length>=8) r+='-'+d.slice(7,9);
if(d.length>=10) r+='-'+d.slice(9,11);
return r;
}
function phoneValid(v){ return v.replace(/\D/g,'').length===11; }
/* ================= bind ================= */
function bind(key){
card.querySelectorAll('[data-next]').forEach(function(b){b.onclick=onNext;});
card.querySelectorAll('[data-back]').forEach(function(b){b.onclick=goBack;});
if(key==='date'){
card.querySelectorAll('[data-date]').forEach(function(b){
b.onclick=function(){ S.date=b.getAttribute('data-date'); S.dateFull=b.getAttribute('data-iso'); S.dow=b.getAttribute('data-dow'); goNext(); };
});
}
if(key==='time'){
card.querySelectorAll('[data-time]').forEach(function(b){
b.onclick=function(){ S.time=b.getAttribute('data-time'); goNext(); };
});
}
if(key==='audience'){
card.querySelectorAll('[data-aud]').forEach(function(b){
b.onclick=function(){ S.audience=b.getAttribute('data-aud'); goNext(); };
});
}
if(key==='sales'){
card.querySelectorAll('[data-sales]').forEach(function(b){
b.onclick=function(){ S.salesTeam=b.getAttribute('data-sales'); goNext(); };
});
}
if(key==='revenue'){
card.querySelectorAll('[data-rev]').forEach(function(b){
b.onclick=function(){ S.revenue=b.getAttribute('data-rev'); goNext(); };
});
}
if(key==='clientneed'){
card.querySelectorAll('[data-cneed]').forEach(function(b){
b.onclick=function(){ S.clientNeed=b.getAttribute('data-cneed'); goNext(); };
});
}
if(key==='contacts'){
// phone masks
['in-cphone','in-pphone'].forEach(function(id){
var el=document.getElementById(id);
if(el) el.addEventListener('input',function(){ el.value=maskPhone(el.value); });
});
card.querySelectorAll('[data-chan]').forEach(function(b){
b.onclick=function(){
S.channel=b.getAttribute('data-chan');
card.querySelectorAll('[data-chan]').forEach(function(x){x.classList.remove('sel');});
b.classList.add('sel');
document.getElementById('f-channel').classList.remove('err');
};
});
var sb=document.getElementById('submitBtn');
if(sb) sb.onclick=onSubmit;
}
if(key==='done'){
var eb=card.querySelector('[data-edit]');
if(eb) eb.onclick=function(){ jumpTo('contacts'); };
}
}
/* ================= next-button validation ================= */
function onNext(){
var key = flow()[pos];
if(key==='task'){
var v=document.getElementById('in-task').value.trim();
S.task=v;
if(!v){ document.getElementById('f-task').classList.add('err'); return; }
}
if(key==='sphere'){
var v2=document.getElementById('in-sphere').value.trim();
S.sphere=v2;
if(!v2){ document.getElementById('f-sphere').classList.add('err'); return; }
}
goNext();
}
/* ================= submit ================= */
function onSubmit(){
var partner = S.audience==='partner';
var ok=true;
// read fields
S.clientName=(document.getElementById('in-cname')||{}).value ? document.getElementById('in-cname').value.trim() : '';
S.clientPhone=(document.getElementById('in-cphone')||{}).value ? document.getElementById('in-cphone').value.trim() : '';
if(partner){
S.partnerName=(document.getElementById('in-pname')||{}).value ? document.getElementById('in-pname').value.trim() : '';
S.partnerPhone=(document.getElementById('in-pphone')||{}).value ? document.getElementById('in-pphone').value.trim() : '';
}
function mark(fid, bad){ var el=document.getElementById(fid); if(el){ el.classList[bad?'add':'remove']('err'); } if(bad) ok=false; }
mark('f-client-name', !S.clientName);
mark('f-client-phone', !phoneValid(S.clientPhone));
if(partner){
mark('f-partner-name', !S.partnerName);
mark('f-partner-phone', !phoneValid(S.partnerPhone));
}
if(!S.channel){ document.getElementById('f-channel').classList.add('err'); document.querySelector('#f-channel .errmsg').style.display='block'; ok=false; }
if(!ok) return;
// honeypot — silent ignore
var hp=(document.getElementById('in-hp')||{}).value || '';
if(hp.trim()!==''){ return; }
var elapsed = Date.now()-FORM_OPENED_AT;
var payload = {
type: partner ? 'partner' : 'direct',
date: S.date, date_full: S.dateFull, dow: S.dow, time: S.time,
manager: MANAGER_NAME,
task: S.task, sphere: S.sphere,
sales_team: S.salesTeam, revenue: S.revenue,
client_with_task: partner ? S.clientNeed : null,
client_name: S.clientName, client_phone: S.clientPhone,
partner_name: partner ? S.partnerName : null,
partner_phone: partner ? S.partnerPhone : null,
channel: S.channel,
hp: hp,
elapsed_ms: elapsed,
maybe_spam: elapsed < SPAM_MS
};
var btn=document.getElementById('submitBtn');
if(btn){ btn.disabled=true; btn.textContent='Отправляем…'; }
fetch('/quiz/api/zapis-submit', {
method:'POST',
headers:{'Content-Type':'application/json'},
body:JSON.stringify(payload)
}).then(function(r){
// route may not exist yet (v1) — show success either way (mock-friendly)
jumpTo('done');
}).catch(function(){
// network / route missing — still show acceptance screen in v1
jumpTo('done');
});
}
/* init */
render();