Разработка бота для обработки заявок с сайта 1С-Битрикс
Заявка отправлена с сайта — и дальше тишина. Менеджер может заметить её через час, через день, или не заметить вовсе. Бот-обработчик закрывает этот разрыв: мгновенно фиксирует заявку в Битрикс24, уведомляет нужного менеджера, отправляет автоответ клиенту, при необходимости начинает диалог в мессенджере.
Точка входа: события форм 1С-Битрикс
Все формы на сайте Битрикс — CWebForm, веб-формы модуля form, обратные звонки из sale.order.ajax, кастомные AJAX-формы — генерируют события при отправке. Перехватываем нужные:
Веб-формы модуля form:
// local/php_interface/init.php
AddEventHandler('form', 'OnAfterResultAdd', 'handleFormSubmit');
function handleFormSubmit(int $webFormId, int $resultId, array $arResult): void {
if (!in_array($webFormId, [1, 3, 7])) { // ID нужных форм
return;
}
// Отправляем в очередь или обрабатываем синхронно
BotQueue::push('process_form', [
'form_id' => $webFormId,
'result_id' => $resultId,
'fields' => $arResult,
]);
}
Компонент bitrix:main.feedback:
AddEventHandler('main', 'OnAfterUserAdd', ...); // нет, неверно
// Правильно — хук через обработчик компонента или шаблон
Для обратного звонка (sale.order.callback) — свой обработчик через событие OnSaleOrderCallbackCreate.
Создание лида/сделки в Битрикс24
После получения данных формы создаём сущность в CRM. Логика выбора: если заявка квалифицирована (есть телефон, интерес понятен) — сразу сделка; если это первое обращение — лид.
// Создание лида
$leadId = $b24Rest->callMethod('crm.lead.add', [
'fields' => [
'TITLE' => "Заявка с сайта: {$formName}",
'NAME' => $arResult['NAME'] ?? '',
'LAST_NAME' => $arResult['LAST_NAME'] ?? '',
'PHONE' => [['VALUE' => $arResult['PHONE'], 'VALUE_TYPE' => 'WORK']],
'EMAIL' => [['VALUE' => $arResult['EMAIL'], 'VALUE_TYPE' => 'WORK']],
'SOURCE_ID' => 'WEB',
'SOURCE_DESCRIPTION' => $formName,
'COMMENTS' => $arResult['COMMENT'] ?? '',
'ASSIGNED_BY_ID' => getResponsibleManager($webFormId),
'UTM_SOURCE' => $_COOKIE['utm_source'] ?? '',
'UTM_MEDIUM' => $_COOKIE['utm_medium'] ?? '',
'UTM_CAMPAIGN' => $_COOKIE['utm_campaign'] ?? '',
],
])['result'];
UTM-метки подтягиваются из cookie — это важно для аналитики источников заявок.
Уведомление менеджера через бота
После создания лида бот пишет ответственному в Битрикс24:
$b24Rest->callMethod('imbot.message.add', [
'BOT_ID' => $botId,
'DIALOG_ID' => 'u' . $managerId,
'MESSAGE' => "[b]Новая заявка с сайта[/b]",
'ATTACH' => [[
'TITLE' => $formName,
'DESCRIPTION' => "Клиент: {$name}\nТелефон: {$phone}\nКомментарий: {$comment}",
'COLOR' => '#2fc6f6',
'LINK' => "https://b24.company.ru/crm/lead/show/{$leadId}/",
]],
'KEYBOARD' => ['BUTTONS' => [[
['TEXT' => 'Открыть лид', 'LINK' => "https://b24.company.ru/crm/lead/show/{$leadId}/"],
['TEXT' => 'Взять в работу', 'COMMAND' => 'assign_lead', 'COMMAND_PARAMS' => $leadId],
]]],
]);
Автоответ клиенту
Клиент получает подтверждение по email и/или SMS:
// Email через Битрикс
\Bitrix\Main\Mail\Event::sendImmediate([
'EVENT_NAME' => 'FORM_SUBMIT_CONFIRM',
'LID' => SITE_ID,
'C_FIELDS' => [
'CLIENT_NAME' => $name,
'CLIENT_EMAIL' => $email,
'FORM_NAME' => $formName,
'LEAD_URL' => '', // не показываем клиенту
],
'TO_EMAIL' => $email,
]);
Если у клиента есть Telegram (определяем по номеру через Б24 telephony.externalcall.searchcrm) — бот может написать и туда, если настроена интеграция с Telegram-каналом открытых линий.
Маршрутизация заявок по типу
Разные формы → разные ответственные:
function getResponsibleManager(int $formId): int {
$routing = [
1 => 15, // Форма "Консультация" → Иванов
3 => 22, // Форма "Партнёрство" → Петров
7 => 8, // Форма "Техподдержка" → Сидоров
];
return $routing[$formId] ?? 1; // дефолтный менеджер
}
Для сложной маршрутизации (по времени суток, нагрузке на менеджеров, региону клиента) — логика усложняется, но принцип тот же.
Обработка повторных заявок
Перед созданием нового лида проверяем, нет ли уже открытого лида с таким телефоном:
$existing = $b24Rest->callMethod('crm.lead.list', [
'filter' => [
'PHONE' => $phone,
'!STATUS_ID' => ['CONVERTED', 'LOSE'],
],
'select' => ['ID', 'TITLE', 'ASSIGNED_BY_ID'],
])['result'];
if ($existing) {
// Добавляем активность к существующему лиду вместо создания нового
addActivityToLead($existing[0]['ID'], $comment);
notifyManager($existing[0]['ASSIGNED_BY_ID'], "Повторная заявка по лиду #{$existing[0]['ID']}");
return;
}
Очередь для надёжности
При высоком трафике обработчик формы не должен тормозить ответ сервера. Архитектура с очередью:
-
OnAfterResultAddкладёт задачу в Redis-очередь (< 1 мс). - Worker (PHP daemon или cron каждую минуту) забирает задачи и обрабатывает.
- При недоступности Б24 REST API — задача остаётся в очереди, обрабатывается при следующей итерации.
Сроки
| Этап | Срок |
|---|---|
| Перехват событий форм Битрикс | 1–2 дня |
| Создание лидов в Б24, маршрутизация | 2–3 дня |
| Уведомления через бота, кнопки действий | 2–3 дня |
| Автоответ клиенту (email/SMS) | 1–2 дня |
| Обработка дублей, повторных заявок | 1–2 дня |
| Очередь + тестирование | 1–2 дня |
Итого: 1.5–2 недели для стандартного набора форм сайта.







