Розробка бота для обробки заявок з сайту 1С-Бітрікс
Заявка надіслана з сайту — і далі тиша. Менеджер може помітити її через годину, через день, або не помітити взагалі. Бот-обробник закриває цей розрив: миттєво фіксує заявку в Bitrix24, сповіщає потрібного менеджера, надсилає автовідповідь клієнту, при необхідності починає діалог у месенджері.
Точка входу: події форм 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,
]);
}
Для зворотного дзвінка (sale.order.callback) — свій обробник через подію OnSaleOrderCallbackCreate.
Створення ліда/угоди в Bitrix24
Після отримання даних форми створюємо сутність у 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 — це важливо для аналітики джерел заявок.
Сповіщення менеджера через бота
Після створення ліда бот пише відповідальному в Bitrix24:
$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 — бот може написати й туди, якщо налаштована інтеграція з 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 тижні для стандартного набору форм сайту.







