Розробка калькулятора зі збереженням результату в CRM Бітрікс24
Уявіть: на сайт заходить 50 відвідувачів на годину, кожен запускає розрахунок — і 5 заявок безслідно зникають. Знайома ситуація? Причина — жорсткі ліміти REST API Бітрікс24. Хмарний тариф допускає 2 запити в секунду і 5000 на добу. При перевищенні повертається помилка QUERY_LIMIT_EXCEEDED. Наприклад, у клієнта — мережі авторитейлерів — калькулятор вартості доставки генерував до 50 звернень на хвилину. Пряма відправка призводила до втрати 10% заявок. За 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 — зв'яжіться з нами.







