Разработка калькулятора с отправкой результата на 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 дня







