Интеграция веб-форм 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' => 'RUB',
'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 ч |







