Настройка омниканальной аналитики клиентов 1С-Битрикс
Клиент пришёл из Instagram, положил товар в корзину с телефона, оплатил с ноутбука, а потом позвонил в поддержку. Это четыре точки контакта в трёх каналах — и в стандартном отчёте Битрикс они будут разорваны. Омниканальная аналитика сшивает эти касания в единую историю клиента. Задача технически нетривиальная: нужно связать несколько идентификаторов пользователя из разных подсистем.
Идентификаторы клиента в Битрикс
Каждая подсистема использует свой ключ:
| Подсистема | Идентификатор | Таблица |
|---|---|---|
| Сайт (авторизованный) | USER_ID |
b_user |
| Сайт (анонимный) | FUSER_ID |
b_sale_fuser |
| CRM | CONTACT_ID / LEAD_ID |
b_crm_contact |
| Телефония | PHONE |
b_crm_contact_detail |
EMAIL |
b_user / b_crm_contact_detail |
Связь между FUSER_ID и USER_ID устанавливается при авторизации: в b_sale_fuser появляется USER_ID. CRM-контакт привязывается к пользователю сайта через поле UF_SITE_MEMBER_ID (если связь настроена) или по совпадению email.
Построение единого профиля клиента
Единый профиль — это сводная запись, агрегирующая все точки контакта. Один из подходов — создать пользовательскую таблицу bl_customer_profile с полями:
customer_uuid — сгенерированный UUID клиента
user_id — ID из b_user (NULL для чистых анонимов)
fuser_ids — jsonb массив всех FUSER_ID
crm_contact_id — ID контакта CRM
email — нормализованный email
phone — нормализованный телефон
first_seen — дата первого контакта
last_seen — дата последнего контакта
channels — jsonb набор каналов с датами
Объединение происходит по правилу: если email или телефон совпадает — это один клиент. Склейка запускается агентом или триггером при каждом новом контакте.
Сбор данных по каналам
Веб-сессии — событие OnBeforeUserLogin и OnAfterUserAuthorize фиксируют UTM-метки из $_GET и сохраняют источник в пользовательские поля b_uts_user или в bl_customer_profile.
CRM-активности — модуль crm пишет активности в b_crm_activity. При входящем звонке, письме или чате создаётся запись с OWNER_ID (контакт или лид) и TYPE_ID. Связать активность с профилем клиента можно через OWNER_ID → b_crm_contact → email/телефон.
Email-рассылки — если используется модуль subscribe, открытия и клики фиксируются в b_subscribe_log. Для внешних ESP (SendPulse, UniSender) нужен вебхук, который пишет события в кастомную таблицу bl_email_events.
Аналитические запросы
После сшивки данных можно строить отчёты по клиентскому пути. Пример — количество заказов по первому источнику привлечения:
SELECT cp.first_channel, COUNT(DISTINCT o.ID) AS orders
FROM bl_customer_profile cp
JOIN b_sale_order o ON o.USER_ID = cp.user_id
WHERE o.CANCELED = 'N'
GROUP BY cp.first_channel
ORDER BY orders DESC;
Для оперативной аналитики результаты агрегируются раз в час агентом в таблицу bl_omni_stats.
Что настраиваем
- Таблицу
bl_customer_profileс механизмом склейки дублей по email/телефону - Обработчики событий авторизации для захвата UTM-меток и канала
- Агент синхронизации CRM-контактов с профилями сайта через API
\Bitrix\Crm\ContactTable - Дашборд в административном разделе с отчётом по каналам и конверсии по источникам







