Интеграция онлайн-консультанта с 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 недели.







