Інтеграція онлайн-консультанта з CRM Бітрікс24
Онлайн-чат без CRM — це просто інструмент спілкування. З CRM — джерело лідів, історія контакту, воронка угод. Розрив між чатом і CRM коштує грошей: менеджер закрив діалог, дані ніде не збереглися, через тиждень клієнт зателефонував знову і почав спочатку. Інтеграція це виключає.
Архітектура інтеграції
Способів зв'язати онлайн-консультант з Бітрікс24 декілька, вибір залежить від платформи чату:
Нативні інтеграції. Деякі чати (JivoSite, LiveChat, Callibri) мають готові конектори до Бітрікс24 — через маркетплейс Бітрікс24 або налаштування самого чату. Це найшвидший шлях, але з обмеженими можливостями кастомізації.
Відкриті лінії Бітрікс24. Механізм, що дозволяє підключити зовнішній чат-канал до CRM Бітрікс24. Повідомлення з чату з'являються в інтерфейсі Відкритих ліній, оператор відповідає з Бітрікс24, відповідь надходить клієнту в чат на сайті. Потребує реалізації Webhook в обидва боки.
REST API Бітрікс24 + Webhook чату. Чат надсилає Webhook після завершення діалогу, обробник створює лід/контакт/угоду через crm.lead.add або crm.contact.add.
Інтеграція через Відкриті лінії
Відкриті лінії — найглибший варіант інтеграції. Потребує розробки конектора.
Крок 1. Реєстрація конектора в Бітрікс24:
// Реєструємо зовнішній канал через REST API
$result = callBitrix24Rest('imopenlines.connector.register', [
'ID' => 'my_chat_connector',
'NAME' => 'Онлайн-чат сайту',
'ICON_FILE' => 'https://yoursite.ru/icon.png',
'ENDPOINT' => 'https://yoursite.ru/local/api/chat-send.php',
'HANDLER' => 'https://yoursite.ru/local/api/chat-handler.php',
]);
Крок 2. Передача повідомлення з чату в Бітрікс24:
// Коли клієнт пише повідомлення в чаті на сайті
function sendMessageToBitrix24(string $userId, string $message, string $userName): void
{
callBitrix24Rest('imopenlines.message.add', [
'CONNECTOR' => 'my_chat_connector',
'LINE' => OPENLINE_ID,
'MESSAGES' => [[
'user' => [
'id' => 'chat-user-' . $userId,
'name' => $userName,
'avatar' => '',
],
'message' => ['text' => $message],
'timestamp' => time(),
]],
]);
}
Крок 3. Отримання відповіді оператора з Бітрікс24:
Бітрікс24 викликає ENDPOINT при відповіді оператора:
// /local/api/chat-send.php
$payload = json_decode(file_get_contents('php://input'), true);
$chatUserId = $payload['data']['USER']['ID']; // 'chat-user-{id}'
$message = $payload['data']['MESSAGES'][0]['text'];
// Передаємо відповідь у чат на сайті через API вашого чат-сервісу
ChatService::sendToUser(extractUserId($chatUserId), $message);
http_response_code(200);
echo json_encode(['RESULT' => 'OK']);
Створення ліда через REST API при завершенні діалогу
Якщо Відкриті лінії надлишкові — достатньо створювати лід при закритті чату:
function createLeadFromChat(array $visitorData, string $transcript): int
{
$response = callBitrix24Rest('crm.lead.add', [
'fields' => [
'TITLE' => 'Чат: ' . ($visitorData['name'] ?: $visitorData['email'] ?: 'Гість'),
'NAME' => $visitorData['name'] ?? '',
'EMAIL' => [['VALUE' => $visitorData['email'] ?? '', 'VALUE_TYPE' => 'WORK']],
'PHONE' => [['VALUE' => $visitorData['phone'] ?? '', 'VALUE_TYPE' => 'WORK']],
'COMMENTS' => htmlspecialchars($transcript),
'SOURCE_ID' => 'WEB',
'STATUS_ID' => 'NEW',
'ASSIGNED_BY_ID' => getResponsibleManagerId(),
],
'params' => ['REGISTER_SONET_EVENT' => 'N'],
]);
return (int)($response['result'] ?? 0);
}
Дедублікація: не створювати дублі контактів
Перед створенням ліда перевіряйте, чи немає вже контакту з таким email або телефоном:
function findExistingContact(string $email, string $phone): ?int
{
// Пошук за email
if ($email) {
$result = callBitrix24Rest('crm.contact.list', [
'filter' => ['EMAIL' => $email],
'select' => ['ID'],
]);
if (!empty($result['result'][0]['ID'])) return (int)$result['result'][0]['ID'];
}
// Пошук за телефоном
if ($phone) {
$result = callBitrix24Rest('crm.contact.list', [
'filter' => ['PHONE' => $phone],
'select' => ['ID'],
]);
if (!empty($result['result'][0]['ID'])) return (int)$result['result'][0]['ID'];
}
return null;
}
// За наявності існуючого контакту — створюємо угоду, а не лід
$contactId = findExistingContact($email, $phone);
if ($contactId) {
callBitrix24Rest('crm.deal.add', [
'fields' => [
'TITLE' => 'Звернення через чат',
'CONTACT_ID' => $contactId,
'COMMENTS' => $transcript,
'SOURCE_ID' => 'WEB',
],
]);
} else {
createLeadFromChat($visitorData, $transcript);
}
Призначення відповідального
Для автоматичного призначення відповідального менеджера на лід/угоду з чату використовуйте логіку за джерелом:
function getResponsibleManagerId(): int
{
// Ротація між менеджерами, призначення за часом доби,
// або фіксований менеджер для чатів
$managers = [15, 23, 41]; // ID користувачів Бітрікс24
return $managers[array_rand($managers)];
}
Сповіщення відповідального
Після створення ліда — сповіщення в Бітрікс24:
callBitrix24Rest('im.notify.system.add', [
'USER_ID' => $responsibleId,
'MESSAGE' => 'Нове звернення через чат. Лід #' . $leadId . ' створено.',
]);
Склад робіт
- Вибір архітектури інтеграції (Відкриті лінії або Webhook → лід)
- Розробка Webhook-обробника на стороні Бітрікс
- Логіка дедублікації контактів
- Призначення відповідального, сповіщення
- Тестування всіх сценаріїв: новий клієнт, повторний, з незаповненими даними
Терміни: інтеграція через Webhook зі створенням ліда — 2–3 дні. Повна інтеграція через Відкриті лінії — 2–3 тижні.







