Розробка калькулятора з відправкою результату на email 1С-Бітрікс
Калькулятор з відправкою результату — це форма, яка обчислює вартість послуги або підбирає конфігурацію, а потім надсилає підсумок користувачу на пошту та менеджеру для обробки. Ключовий момент: відправка «користувачу на email» технічно тривіальна, але на практиці там приховані проблеми — листи потрапляють до спаму, шаблон листа виглядає як plain text із 90-х, і немає механізму повторного відправлення при недоставці.
Архітектура калькулятора
Калькулятор на Бітрікс складається з трьох частин:
Клієнтська логіка (JavaScript). Реактивний перерахунок значень при зміні параметрів користувачем. Жодної залежності від сервера для самого розрахунку — все працює у браузері. Це критично для UX: користувач не повинен чекати мережевого запиту при перетягуванні слайдера.
Серверний обробник (PHP/Бітрікс). Приймає параметри розрахунку, валідує їх, за потреби підтягує актуальні дані з каталогу (ціни, наявність) і формує підсумкові дані для листа. Саме на цьому рівні фіксуються реальні ціни — те, що прийшло з клієнта, можна підробити.
Система відправки email. У Бітрікс для цього використовується модуль main з класом CEvent та шаблонами поштових подій.
Поштові події у Бітрікс
Правильний спосіб відправки email у Бітрікс — через механізм поштових подій, а не через mail() або CEmail::Send() напряму. Це надає можливість редагувати шаблони через адміністративний інтерфейс, вести лог відправок та використовувати чергу.
Створення події та шаблону:
// Реєстрація типу події (один раз при встановленні)
CEventType::Add([
'LID' => 'ru',
'EVENT_NAME' => 'CALCULATOR_RESULT',
'NAME' => 'Результат калькулятора',
'DESCRIPTION' => '#RESULT_HTML# #CLIENT_EMAIL# #MANAGER_EMAIL#',
]);
// Створення шаблону листа в Бітрікс:
// Налаштування → Пошта → Поштові шаблони → Додати
// Відправка події
CEvent::Send('CALCULATOR_RESULT', 's1', [
'CLIENT_EMAIL' => $clientEmail,
'MANAGER_EMAIL' => '[email protected]',
'RESULT_HTML' => $resultHtml,
'CALC_PARAMS' => $paramsText,
'TOTAL_PRICE' => number_format($totalPrice, 0, '.', ' ') . ' ₽',
]);
HTML-шаблон листа
Лист з результатом калькулятора має бути зручним для читання і на телефоні, і у веб-клієнті. Для цього:
- Верстка лише на
<table>— єдиний надійний спосіб для email-клієнтів - Всі стилі інлайн (Gmail ігнорує
<style>у<head>) - Таблиця результату — список параметрів розрахунку з виділеною підсумковою сумою
- Кнопка «Оформити замовлення» або «Зв'язатися з нами» з посиланням
Для генерації HTML-листа з даних розрахунку використовується шаблон у Бітрікс (редагується через Налаштування → Пошта → Поштові шаблони) зі змінними #RESULT_HTML#, які заповнюються перед викликом CEvent::Send.
Проблеми доставки та їх вирішення
Листи у спамі. Причини: відправка з домену без SPF/DKIM записів, використання mail() замість SMTP, вміст листа з тригерними словами. Рішення: налаштування SMTP через модуль main (Налаштування → Електронна пошта → SMTP) з використанням корпоративного поштового сервера або транзакційного сервісу (SendGrid, Mailgun, Unisender).
Дублювання відправки. При натисканні кнопки «Отримати результат» кілька разів або при повільному з'єднанні — форма відправляється кілька разів. Рішення: disabled на кнопці після першого кліку + дедуплікація на сервері за хешем параметрів розрахунку + окремий запис у b_event з перевіркою.
Немає історії відправок. Стандартний CEvent::Send логує в b_event_log. Для перегляду лога: Налаштування → Діагностика → Черга поштових повідомлень. Але через N днів лог очищується агентом. Для довгострокового зберігання — зберігаємо параметри розрахунку та email в окрему highload-таблицю або в b_hl_* таблицю користувацького HL-блока.
Кейс: калькулятор вартості ремонту квартири
Клієнт — будівельна компанія. Калькулятор: тип ремонту (косметичний/капітальний/дизайнерський), площа, кількість кімнат, додаткові роботи. Результат — діапазон вартості та термін.
Завдання: клієнт отримує PDF з деталізацією кошторису на email, менеджер — сповіщення у Telegram і запис у CRM.
Реалізація: сервер генерує PDF через бібліотеку mPDF з логотипом компанії та деталізацією за статтями робіт. PDF додається до листа через CEventMessage з вкладенням. Паралельно — POST-запит до Telegram Bot API і створення ліда в Бітрікс24 через crm.lead.add. Все це — в одному обробнику форми, з логуванням у HL-блок calculator_leads.
Терміни розробки
- Базовий калькулятор + відправка email (клієнт + менеджер) — 3–5 днів
-
- Генерація PDF — +1–2 дні
-
- Інтеграція з CRM Бітрікс24 — +1 день
-
- Telegram-сповіщення — +0,5 дня
-
- Історія розрахунків в особистому кабінеті — +2–3 дні







