Розробка кастомних звітів CRM Бітрікс24
Вбудований конструктор звітів Бітрікс24 не вміє: об'єднувати дані з CRM з даними із 1С-Бітрікс, будувати когортний аналіз клієнтів, рахувати LTV або RFM-сегменти. Для цього потрібна розробка — через BI-конектор, REST API або власні таблиці в PostgreSQL.
Підходи до розробки кастомних звітів
BI-конектор Бітрікс24 — офіційний спосіб підключити зовнішній BI-інструмент (Power BI, Tableau, Google Looker Studio) до даних Бітрікс24. Дані видаються через REST у вигляді плоских таблиць. Схема фіксована, розширити не можна.
REST API + власна БД — через методи crm.deal.list, crm.contact.list, crm.lead.list дані вивантажуються у зовнішню базу даних (PostgreSQL, ClickHouse). Там будуються довільні звіти. Повний контроль над структурою та оновленням даних.
Кастомний компонент всередині Бітрікс24 — для коробкових версій: PHP-компонент у /local/components/ рендерить звіт прямо в інтерфейсі Бітрікс24. Дані беруться безпосередньо з таблиць БД.
BI-конектор: можливості та обмеження
Підключення: Бітрікс24 → BI Аналітика → Підключити BI-інструмент. Генерується URL з токеном для підключення з Power BI або Looker Studio.
Доступні набори даних:
- Угоди з полями (включаючи UF_CRM_*)
- Ліди
- Контакти та компанії
- Активності (дзвінки, листи, зустрічі)
- Користувачі
Обмеження: дані оновлюються із затримкою (не realtime), немає зв'язку із зовнішніми системами, не можна додати обчислювані поля на стороні Бітрікс24.
Розробка через REST API + зовнішня БД
Це найпотужніший підхід. Схема синхронізації:
Cron (кожні 15 хв) → REST API Бітрікс24 → Парсинг → PostgreSQL
↓
BI-інструмент або веб-застосунок
Приклад вивантаження угод з пагінацією:
$start = 0;
do {
$result = $client->call('crm.deal.list', [
'order' => ['DATE_MODIFY' => 'DESC'],
'filter' => ['>=DATE_MODIFY' => $lastSyncDate],
'select' => ['ID', 'TITLE', 'STAGE_ID', 'OPPORTUNITY', 'ASSIGNED_BY_ID',
'SOURCE_ID', 'DATE_CREATE', 'CLOSEDATE',
'UF_CRM_CUSTOM_FIELD1', 'UTM_SOURCE', 'UTM_CAMPAIGN'],
'start' => $start,
]);
foreach ($result['result'] as $deal) {
upsert_deal($pdo, $deal); // INSERT ON CONFLICT UPDATE
}
$start = $result['next'] ?? null;
} while ($start !== null);
Ліміт REST API: 2 запити/сек на хмарних порталах. При великому обсязі даних використовують batch-метод: до 50 запитів в одному HTTP-виклику.
Когортний аналіз клієнтів
Завдання: розбити клієнтів на когорти (місяць першої покупки) і відстежити їхні повторні покупки. У Бітрікс24 «з коробки» це неможливо.
Рішення через зовнішню БД:
-- Когортний аналіз повторних покупок
WITH first_deal AS (
SELECT
contact_id,
DATE_TRUNC('month', MIN(closedate)) AS cohort_month
FROM deals
WHERE stage_id = 'WON'
GROUP BY contact_id
),
deals_with_cohort AS (
SELECT
d.contact_id,
f.cohort_month,
DATE_TRUNC('month', d.closedate) AS deal_month,
d.opportunity
FROM deals d
JOIN first_deal f ON d.contact_id = f.contact_id
WHERE d.stage_id = 'WON'
)
SELECT
cohort_month,
deal_month,
COUNT(DISTINCT contact_id) AS customers,
SUM(opportunity) AS revenue
FROM deals_with_cohort
GROUP BY cohort_month, deal_month
ORDER BY cohort_month, deal_month;
Результат підключається до Looker Studio або візуалізується у власному веб-застосунку.
Реальний кейс: аналітика B2B-продажів
Завдання: дистриб'ютор, 500+ активних клієнтів. Потрібен звіт: топ-клієнти за виручкою за квартал з динамікою до попереднього кварталу, сегментація за ABC-аналізом, прогноз pipeline на наступний квартал на основі поточних відкритих угод.
Проблема: дані про виручку частково в Бітрікс24 (угоди), частково в 1С-Бітрікс (оплати). Невідповідність: в угоді сума КП, в 1С — фактично відвантажена сума.
Рішення:
- Синхронізація угод з Бітрікс24 в PostgreSQL через REST API (кожні 30 хв)
- Синхронізація реалізацій з 1С-Бітрікс через COM-об'єкт (раз на годину)
- Зв'язка по полю
UF_CRM_1C_CONTRACT_ID— кастомне поле в угоді з посиланням на договір 1С-Бітрікс - Матеріалізовані представлення PostgreSQL для попередньої агрегації по періодах
- Looker Studio підключений до PostgreSQL через конектор
Результат: звіти оновлюються кожні 30 хвилин, керівництво бачить актуальну картину без ручного вивантаження з двох систем.
Технічне зауваження: поля UF_CRM_* не повертаються в crm.deal.list автоматично — їх потрібно явно вказувати в select. Список усіх UF-полів отримують через crm.deal.fields.
Терміни розробки
| Завдання | Час |
|---|---|
| Налаштування BI-конектора + дашборди в Looker Studio | 3–5 днів |
| REST API синхронізація + зовнішня БД | 5–7 днів |
| Розробка SQL-аналітики (когорти, LTV, ABC) | 3–5 днів |
| Кастомний PHP-компонент всередині Бітрікс24 | 5–10 днів |
Повний проект кастомної аналітики — 1–2 тижні залежно від джерел даних та складності метрик.







