Інтеграція веб-форм 1С-Бітрікс з CRM Бітрікс24
Модуль веб-форм 1С-Бітрікс (bitrix:main.feedback, bitrix:form.result.new) зберігає результати в таблиці b_form_result і надсилає сповіщення на пошту. Без інтеграції з CRM дані залишаються в базі сайту — менеджери не бачать їх у Бітрікс24, історія комунікацій не будується.
Два підходи до інтеграції
Підхід 1. Модуль CRM-форм Бітрікс24 — хмарний інструмент, розміщує форму на піддомені Бітрікс24. Дані одразу потрапляють до CRM. Мінус: форма на сторонньому домені, SEO не допомагає, стилі не збігаються з сайтом.
Підхід 2. Нативні веб-форми + обробник — форма на сайті, при відправці результат записується до b_form_result і одночасно йде до Бітрікс24 через REST API. Це правильний підхід для production.
Обробник результату веб-форми
Бітрікс надає подію OnAfterResultAdd модуля form. Підписуємося в init.php:
AddEventHandler('form', 'OnAfterResultAdd', function($formId, $resultId, $fields) {
// Лише для потрібних форм
$targetForms = [3, 7, 12]; // ID форм: заявка, консультація, партнерство
if (!in_array($formId, $targetForms)) return;
$answers = CFormResult::GetDataByID($resultId, [], $arrResult);
$mapped = mapFormAnswers($formId, $answers);
$b24 = new B24Sender(getenv('B24_WEBHOOK_URL'));
$b24->sendLead($mapped);
});
Мепінг полів форми в поля ліда
Поля веб-форми зберігаються в b_form_field, відповіді — в b_form_result_answer. Зв'язок через FIELD_ID. Мепінг налаштовується в конфігу:
$formMapping = [
3 => [ // форма «Заявка на дзвінок»
'q_name' => 'NAME',
'q_phone' => 'PHONE',
'q_comment' => 'COMMENTS',
'utm_source'=> 'UTM_SOURCE',
],
7 => [ // форма «Партнерство»
'q_company' => 'COMPANY_TITLE',
'q_contact' => 'NAME',
'q_email' => 'EMAIL',
'q_direction' => 'COMMENTS',
],
];
Кейс: багатокрокова форма заявки
Ситуація. Сайт IT-інтегратора, форма заявки на проєкт — 4 кроки: тип проєкту, бюджет, терміни, контакти. Стандартний модуль веб-форм зберігає всі відповіді в b_form_result_answer. Завдання: створити кваліфікований лід у Бітрікс24 із заповненими полями та правильною воронкою.
Рішення. Кроки 1–3 зберігаються в сесію, на кроці 4 надсилається повна форма. В обробнику OnAfterResultAdd збираємо всі поля, створюємо лід з нестандартними полями CRM:
$leadFields = [
'TITLE' => 'Проєкт: ' . $answers['project_type'],
'OPPORTUNITY' => $answers['budget_from'], // бюджет — у суму ліда
'CURRENCY_ID' => 'UAH',
'UF_CRM_PROJECT_TYPE' => $answers['project_type'],
'UF_CRM_DEADLINE_WEEKS' => $answers['deadline'],
// UF_CRM_* — користувацькі поля ліда в Б24
];
Користувацькі поля (UF_CRM_*) попередньо створюємо в Бітрікс24 через crm.userfield.add. Після створення ліда — автоматично запускаємо бізнес-процес у Б24 через bizproc.workflow.start.
Файлові поля форми
Якщо форма містить поле завантаження файлу (технічне завдання, бриф), файл потрібно передати до Бітрікс24. REST API crm.lead.add не підтримує бінарне завантаження напряму — використовуємо disk.folder.uploadfile для завантаження на «Диск» Бітрікс24, потім прикріплюємо до ліда через crm.activity.add з типом DOCUMENT.
Дедублікація лідів
Одна й та сама компанія нерідко заповнює форму кілька разів. Перевіряємо за email і телефоном перед створенням:
$existing = $b24->call('crm.duplicate.findByComm', [
'type' => 'EMAIL',
'values' => [$email],
'entity_type' => 'LEAD',
]);
if (!empty($existing['result']['LEAD'])) {
// Додаємо активність до наявного ліда, не створюємо новий
$b24->call('crm.activity.add', [...]);
}
| Завдання | Трудовитрати |
|---|---|
| Налаштування обробника для 1 форми | 3–5 год |
| Мепінг полів + користувацькі поля Б24 | 2–4 год |
| Дедублікація та логіка повторних звернень | 4–6 год |
| Передача файлів із форм | 4–6 год |
| Запуск бізнес-процесів по ліду | 3–5 год |







