Разработка калькулятора с сохранением результата в CRM Битрикс24
Представьте: на сайт заходит 50 посетителей в час, каждый запускает расчёт — и 5 заявок бесследно исчезают. Знакомая ситуация? Причина — жёсткие лимиты REST API Битрикс24. Облачный тариф допускает 2 запроса в секунду и 5000 в сутки. При превышении возвращается ошибка QUERY_LIMIT_EXCEEDED. Например, у клиента — сети авторитейлеров — калькулятор стоимости доставки генерировал до 50 обращений в минуту. Прямая отправка приводила к потере 10% заявок. Потеря 5% лидов при средней стоимости привлечения 1500 руб обходится в 75 000 руб ежемесячно. За 10+ лет разработки на Битриксе мы выработали надёжную схему с очередью и автоматическими повторами. Ниже — полный разбор реализации. Свяжитесь с нами для консультации — мы оценим ваш проект.
Передача данных из калькулятора в CRM через REST API
Сайт на 1С-Битрикс и Битрикс24 — два продукта с разными API. Для передачи данных из формы в CRM используется REST API Битрикс24:
-
crm.lead.add— создание лида -
crm.deal.add— создание сделки без лида -
crm.contact.add+crm.deal.add— контакт + сделка
Авторизация: входящий вебхук (простой) или OAuth-приложение (для нескольких порталов). Согласно документации https://dev.1c-bitrix.ru/rest_help/, лимиты составляют 2 запроса в секунду и 5000 в сутки для облачных тарифов. Пример создания лида:
$webhookUrl = 'https://your-portal.bitrix24.ru/rest/1/WEBHOOK_TOKEN/';
$fields = [
'TITLE' => 'Заявка с калькулятора: ' . $calculatorName,
'NAME' => $clientName,
'PHONE' => [['VALUE' => $clientPhone, 'VALUE_TYPE' => 'WORK']],
'EMAIL' => [['VALUE' => $clientEmail, 'VALUE_TYPE' => 'WORK']],
'COMMENTS' => $calcResultText,
'SOURCE_ID' => 'WEB',
'UF_CRM_CALCULATOR_PARAMS' => json_encode($calcParams),
'UF_CRM_TOTAL_PRICE' => $totalPrice,
];
$response = file_get_contents(
$webhookUrl . 'crm.lead.add.json?' . http_build_query(['fields' => $fields])
);
$result = json_decode($response, true);
Создание пользовательских полей для параметров расчёта
Пользовательские поля UF_CRM_* сохраняют все детали расчёта — выбранные опции, итоговую сумму, конфигурацию. Менеджер открывает лид и сразу видит контекст. Поля создаются заранее: CRM → Лиды → Настройка полей → Добавить поле. Тип зависит от данных.
| Тип данных | Пример поля | Назначение |
|---|---|---|
| Строка | UF_CRM_TYPE |
Товар или услуга |
| Число | UF_CRM_QUANTITY |
Количество единиц |
| Список | UF_CRM_COLOR |
Опция выбора |
| Строка (JSON) | UF_CRM_PARAMS_JSON |
Полная конфигурация расчёта |
Как обрабатывать лимиты и ошибки API?
Облачный Битрикс24 ограничивает REST-запросы: 2 запроса в секунду, 5000 в сутки (зависит от тарифа). При превышении — ответ {error: "QUERY_LIMIT_EXCEEDED"}. Типичная реализация без очереди теряет 5–10% заявок при нагрузке 50 запросов/мин.
Правильное решение:
- Сохранение данных калькулятора в таблицу очереди (highload-блок или отдельная таблица)
- Агент Битрикс, каждые 30 секунд отправляющий записи пачками с учётом лимитов
- Повторная отправка при ошибке с экспоненциальным бэкоффом (1с, 2с, 4с, 8с)
- Флаг
is_syncedдля контроля статуса
function sendPendingLeadsToCRM(): string {
$pendingLeads = getUnsentLeads(limit: 10);
foreach ($pendingLeads as $lead) {
$result = sendLeadToB24($lead);
if ($result['result']) {
markLeadAsSent($lead['id'], $result['result']);
} else {
incrementRetryCount($lead['id']);
}
usleep(600000); // 0.6 сек между запросами
}
return __FUNCTION__ . '();';
}
Детали конфигурации агента
Агент регистрируется в `/bitrix/php_interface/init.php`:\CAgent::AddAgent(
'sendPendingLeadsToCRM();',
'', 'N', 30, '', 'Y', '', 100
);
Параметры: период 30 секунд, модуль пустой (глобальный), активен с момента установки.
Почему очередь — лучший вариант?
Прямая отправка в момент расчёта падает при пиковой нагрузке. Очередь гарантирует доставку: 0% потерь при корректной настройке. Сравнение:
| Параметр | Без очереди | С очередью |
|---|---|---|
| Потери лидов при пике 50/мин | 5–10% | 0% |
| Время создания лида в CRM | <1 сек | до 30 сек |
| Нагрузка на API | пиковая | равномерная |
Очередь в 10 раз надёжнее прямой отправки и не требует ручного контроля.
Как не потерять ни одного обращения?
Наш клиент — небанковская финансовая организация — столкнулся с потерей заявок при пиковой нагрузке 50 обращений в минуту. Калькулятор кредита: сумма, срок, тип обеспечения → ставка и платёж. Прямой REST-запрос невозможен из-за лимитов.
Решение: очередь в PostgreSQL (сайт на нестандартном стеке), агент отправки каждые 15 секунд по 5 лидов, логирование всех ответов Битрикс24. Параллельно — немедленное письмо клиенту с результатами. Менеджер видит лид в CRM максимум через 15 секунд после отправки формы. Дополнительно настроен бизнес-процесс «Первичная обработка заявки»: автоматическое назначение ответственного и дедлайн первого контакта — 30 минут. Потери лидов — ноль за весь период эксплуатации.
Что входит в разработку
- Клиентская и серверная части калькулятора
- Создание пользовательских полей лида/сделки
- Обработчик с очередью и повторными попытками
- Настройка входящего вебхука Битрикс24
- Логирование всех запросов и ответов API
- Мониторинг с алертом при накоплении необработанной очереди более N записей
Сроки разработки
| Сложность | Срок | Состав |
|---|---|---|
| Базовая | от 2 до 3 рабочих дней | Простая формула, лид с 5–10 полями, без очереди |
| Средняя | от 4 до 6 рабочих дней | С очередью и повторными попытками |
| Полная | от 5 до 8 рабочих дней | Полный мониторинг и логирование |
Стоимость рассчитывается индивидуально. Получите консультацию — мы оценим ваш проект бесплатно.
Мы более 10 лет разрабатываем на Битрикс, выполнили 50+ интеграций с CRM. Гарантируем надёжность и прозрачное сопровождение. Закажите разработку калькулятора с сохранением результатов в CRM — свяжитесь с нами.







