Настройка передачи данных из онлайн-чата в CRM Битрикс24
Данные из чата попадают в CRM тремя путями: через нативный коннектор (если у чата есть готовая интеграция), через Webhook чата на REST API Битрикс24, или через почтовый канал CRM. Выбор зависит от платформы чата и требований к полноте данных.
Способ 1: Webhook чата → crm.lead.add
Большинство чат-платформ (JivoSite, Chatra, Talk-Me, LiveTex) поддерживают Webhook при завершении диалога. Обработчик на стороне сайта получает данные и создаёт лид:
// /local/api/chat-to-crm.php
require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';
$payload = json_decode(file_get_contents('php://input'), true);
if (!$payload) { http_response_code(400); exit; }
$name = trim($payload['visitor']['name'] ?? $payload['name'] ?? '');
$email = trim($payload['visitor']['email'] ?? $payload['email'] ?? '');
$phone = trim($payload['visitor']['phone'] ?? $payload['phone'] ?? '');
$text = buildTranscript($payload); // собираем историю переписки
// Базовая валидация: хотя бы email или телефон
if (!$email && !$phone) {
http_response_code(200);
echo json_encode(['status' => 'skipped', 'reason' => 'no_contact_data']);
exit;
}
$leadId = createBitrix24Lead($name, $email, $phone, $text);
http_response_code(200);
echo json_encode(['status' => 'ok', 'lead_id' => $leadId]);
function createBitrix24Lead(string $name, string $email, string $phone, string $comments): int
{
$b24Url = rtrim(getenv('B24_WEBHOOK_URL'), '/') . '/';
$fields = [
'TITLE' => 'Чат: ' . ($name ?: $email ?: $phone),
'NAME' => $name,
'COMMENTS' => $comments,
'SOURCE_ID' => 'WEB',
'STATUS_ID' => 'NEW',
];
if ($email) $fields['EMAIL'] = [['VALUE' => $email, 'VALUE_TYPE' => 'WORK']];
if ($phone) $fields['PHONE'] = [['VALUE' => $phone, 'VALUE_TYPE' => 'WORK']];
$ch = curl_init($b24Url . 'crm.lead.add.json');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query(['fields' => $fields]),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
return (int)($response['result'] ?? 0);
}
Способ 2: Нативный коннектор Битрикс24
JivoSite, LiveChat и ряд других платформ имеют готовый коннектор в маркетплейсе Битрикс24. Установка: Битрикс24 → Маркетплейс → найти нужный чат → Установить. Авторизуете коннектор в аккаунте чата, настраиваете, в какую Открытую линию поступают обращения.
Ограничение нативных коннекторов: данные передаются в том виде, в каком их отдаёт платформа. Кастомные поля (например, данные корзины Битрикс) через нативный коннектор передать нельзя — только через Webhook с собственным обработчиком.
Способ 3: Почтовый канал CRM
Самый простой вариант для чатов без Webhook: настройте отправку транскрипта на email, который Битрикс24 мониторит как почтовый канал CRM. Битрикс24 распознаёт контакт по email из письма и создаёт лид автоматически.
Настройка: Битрикс24 → CRM → Настройки → Почтовые каналы → Добавить канал. Укажите ящик, с которого приходят письма от чата.
Передача дополнительных данных через UTM
Для атрибуции лида к источнику трафика передавайте UTM-метки в Webhook:
// На стороне сайта: читаем UTM из URL и сохраняем в sessionStorage
const params = new URLSearchParams(window.location.search);
['utm_source', 'utm_medium', 'utm_campaign'].forEach(k => {
if (params.get(k)) sessionStorage.setItem(k, params.get(k));
});
// В Webhook-обработчике: достаём UTM из данных чата
// (большинство чат-платформ передают referrer и custom_data)
$utmSource = $payload['visitor']['utm_source'] ?? '';
$utmMedium = $payload['visitor']['utm_medium'] ?? '';
$utmCampaign = $payload['visitor']['utm_campaign'] ?? '';
$fields['UTM_SOURCE'] = $utmSource;
$fields['UTM_MEDIUM'] = $utmMedium;
$fields['UTM_CAMPAIGN'] = $utmCampaign;
Проверка дублей перед созданием
function leadExists(string $email, string $phone): bool
{
$b24Url = rtrim(getenv('B24_WEBHOOK_URL'), '/') . '/';
foreach (array_filter([$email, $phone]) as $value) {
$field = $email === $value ? 'EMAIL' : 'PHONE';
$response = callB24($b24Url . 'crm.lead.list.json', ['filter' => [$field => $value], 'select' => ['ID']]);
if (!empty($response['result'])) return true;
}
return false;
}
Сроки выполнения
| Способ | Срок |
|---|---|
| Нативный коннектор из маркетплейса | 2–4 часа |
| Webhook → crm.lead.add | 1–2 дня |
| Webhook с дедупликацией и UTM | 2–3 дня |







