Telegram Bot Analytics
Глобальне меню → Telegram Bot Analytics
Загальна логіка сторінки
Суть
Telegram Bot Analytics — одна сторінка аналітики Telegram-ботів. Верхній блок задає контекст вибірки, нижче рендериться аналітика конкретного бота, який вибраний у фільтрі Bot.
Фронт уже підготовлений до сценарію з кількома ботами, але зараз реалізований лише один блок — BeSocial HR Bot. Коли з’являться інші боти, на цій самій сторінці для них додаються окремі секції з власною логікою, набором карток і графіків.
Доступи
| Роль | Роут | Поведінка |
|---|---|---|
director | /ceo/telegram_bot_analytics | Повна сторінка аналітики |
hr + user.telegramBot = true | /hr/telegram_bot_analytics | Та сама сторінка аналітики |
hr + user.telegramBot = false | /hr/telegram_bot_analytics | Екран без доступу замість контенту |
Верхній блок сторінки
Bot— вибір бота, для якого будується аналітика.Month— базовий місяць звіту.UTM— multi-select UTM-комбінацій для активного бота; якщо конкретні мітки не вибрані, фронт працює в режиміAll.GNR— явний запуск побудови звіту.
Після GNR фронт фіксує поточний набір Bot, Month і UTM в activeFilters, виконує bot-specific запити та оновлює картки й графіки тільки для вибраного бота. До першого GNR аналітика не будується.
Загальна поведінка сторінки
- У виборі мають бути доступні лише ті боти, до яких користувач має доступ.
- Якщо бот недоступний для акаунта, він не повинен бути доступним для вибору і не повинен відображати свій блок аналітики.
- Якщо звіт ще не згенерований, сторінка показує стартову підказку обрати фільтри й натиснути
GNR. - Якщо даних немає лише для окремого віджета, порожній стан показується локально всередині конкретної картки або графіка.
BeSocial HR Bot
Доступність бота
BeSocial HR Bot — єдиний бот, який зараз підключений на фронті.
- Для
directorцей бот доступний без додаткових обмежень. - Для
hrдоступ залежить відuser.telegramBot. - Якщо в HR немає цього доступу, бот не повинен бути доступним для вибору і його аналітика не повинна відображатися.
- У поточній реалізації, поки бот один, для HR без
user.telegramBotце означає екран без доступу для всієї сторінки.
Логіка завантаження блоку
Після кліку на GNR для BeSocial HR Bot фронт відправляє запити за вибраними фільтрами й будує картки та графіки в межах цього блоку.
Початковий цикл запитів:
POST /hiring-analytics/getMonthSummaryPOST /hiring-analytics/getTrafficLeadsCRPOST /hiring-analytics/getCplCpaPOST /hiring-analytics/getFunnelPOST /hiring-analytics/getFunnelStepsPOST /hiring-analytics/getStepMedianResponseTimePOST /hiring-analytics/getPlatformSegmentationPOST /hiring-analytics/getTechnicalErrors
Окремо для списку UTM фронт ліниво викликає:
POST /hiring-analytics/getUtmFilters
Важлива поведінка:
- стартове завантаження зібране через
Promise.allSettled, тому падіння одного запиту не обнуляє весь екран; - для
Traffic, Leads & Conversion Rate (CR%) Dynamicsі6-Month Total Cost Dynamics (CPL & CPA)дефолтний запит післяGNRіде зgroupBy: WEEK; - верхні два time-series графіки можуть перезапитуватись окремо при зміні
Day / Week / Month; - помилки прилітають через global notification;
- під час запитів використовується global loader.
Фільтри цього бота
Додаткові фільтри відсутні.
При зміні Month фронт:
- очищає вибрані UTM;
- скидає кеш UTM-опцій;
- закриває UTM dropdown;
- чекає нового явного
GNRдля побудови звіту з новим місяцем.
Що відображається після запиту
Після успішного запуску звіту для BeSocial HR Bot сторінка показує:
- 4 підсумкові картки за місяць:
Total Traffic,Generated Leads,Conversion Rate,Total Spend; Traffic, Leads & Conversion Rate (CR%) Dynamics;6-Month Total Cost Dynamics (CPL & CPA);Funnel Volumes vs Acquisition Costs by UTM;Conversion Funnel & Step Drop-offs;Time-to-Complete: Median Response Time (Seconds);Audience Platform Segmentation;Technical Errors & Bot Failures.
Логіка побудови графіків
Загальні правила
- Усі графіки рендеряться тільки після першого
GNR. - Кожен графік живе у власній картці та має власний порожній стан.
- Ширина графіків адаптивна: фронт відстежує розмір контейнера через
ResizeObserver. - Tooltip рендериться через portal у
document.body, тому не обрізається межами картки. - Hover підсвічує не лише точку, а й активну колонку або рядок, щоб легше читати значення.
Traffic, Leads & Conversion Rate (CR%) Dynamics
- Графік будується по вікну в
6місяців до вибраногоMonthвключно. - Діапазон фронт рахує від
selectedMonth.dateTo. - Початковий запит іде з
groupBy: WEEK. - Якщо користувач перемикає
Day / Week / Month, фронт не агрегує дані локально, а робить новий API-запит з потрібнимgroupBy. - По X-осі:
DAY→dd MMMWEEK→dd.MM - dd.MMMONTH→MMM yyyy
- На графіку 3 серії:
traffic,leads,cr. - Ліва Y-вісь відповідає за абсолютні значення
trafficіleads. - Права Y-вісь відповідає за
crу відсотках. - Для правої осі фронт тримає верхню межу не нижче
100%, навіть якщо фактичні значення CR менші. - Між лініями
trafficіleadsмалюється напівпрозора area-заливка, яка підкреслює розрив між заходами в бот і лідами. - Tooltip показує
Period,Traffic,Leads,CR.
6-Month Total Cost Dynamics (CPL & CPA)
- Діапазон тут такий самий: 6 місяців до вибраного
Month. - Початковий запит теж іде з
groupBy: WEEK. - Перемикач
Day / Week / Monthзапускає окремий повторний запит саме для цього графіка. - На графіку 2 серії:
cplіcpa. - Для обох серій використовується одна Y-вісь у валюті.
- Значення осі й tooltip форматуються як currency.
- Для дрібних значень фронт лишає десяткову частину, для більших — округляє сильніше.
- Tooltip показує
Period,CPL,CPA.
Funnel Volumes vs Acquisition Costs by UTM
- Графік будується тільки в межах одного вибраного місяця.
- Кожна точка X-осі — окрема UTM-комбінація.
- Назва UTM збирається на фронті з полів у такому порядку:
utm_sourceutm_mediumutm_campaignutm_contentutm_managerutm_account
- Якщо кілька UTM дають однаковий нормалізований payload, фронт дедуплікує їх ще до відображення в selector.
- Якщо в selector уже вибрано
10міток, інші UTM-пункти рендеряться як disabled і не додаються до вибірки. - Графік комбінований:
- bars для
trafficіleads - lines для
cplіcpa
- bars для
- Ліва Y-вісь використовується для обсягів.
- Права Y-вісь використовується для вартості.
- Довгі UTM-підписи на X-осі обрізаються адаптивно, але повне значення лишається в tooltip.
- Tooltip показує
UTM,Leads (Bot Starts),Applications (Submits),Spend,CPL,CPA.
Conversion Funnel & Step Drop-offs
- Це горизонтальний bar chart по
step_id. - Довжина bar-а залежить від
users. - Текст праворуч від bar-а фронт рахує окремо.
- Для першого кроку підпис має формат
X users (100% of traffic). - Для всіх наступних кроків підпис має формат
X | Step CR: Y | Total CR: Z. - Щоб цей текст поміщався, X-вісь малюється із запасом приблизно
1.55від найбільшогоusers. - Tooltip показує
Step,Users,Step CR,Total CR,Drop-off.
Time-to-Complete: Median Response Time (Seconds)
- Кожен
step_idрендериться окремим вертикальним bar-ом. - Значення барів беруться з
median_seconds. - Колір bar-а залежить від
is_slow. - Якщо
is_slow = true, крок підсвічується warning-кольором як повільний. - Поверх барів фронт додатково малює dashed average line.
- Це середнє значення рахується на фронті як арифметичне середнє всіх
median_seconds. - Якщо значення велике, фронт форматує його не лише в секундах, а як
Xm Ys. - Tooltip показує
Step,Median,Overall Average,Status.
Audience Platform Segmentation
- Donut будується по
users. percentageне формує сегмент, а використовується як display-значення в legend і tooltip.- Колір сегмента жорстко прив’язаний до типу платформи.
- Підтримані платформи:
androidiosdesktop
- Невідомі значення не відкидаються: для них використовується fallback
unknown.
Technical Errors & Bot Failures
- Перед рендером фронт нормалізує відповідь до фіксованого порядку категорій:
timeoutinput_errorapi_failcrm_error
- Якщо якоїсь категорії немає у відповіді API, фронт однаково додає її в графік із
count = 0. - Це зроблено, щоб структура графіка не змінювалась від запуску до запуску.
- Для Y-осі використовуються тільки integer ticks.
- Людські підписи категорій задаються на фронті:
Timeout (Dropped)Input Error (Text not Button)API Fail (TG issues)CRM Error (Sync fail)
- Tooltip показує назву категорії, загальний
Countі всі питання, для яких виникала ця помилка, разом із кількістю помилок для кожного питання. - Якщо питань багато, список у tooltip має обмежену висоту та прокручується окремо від сторінки.
- Для категорій без деталізації tooltip показує порожній стан
No question details..
Нюанси цього бота
- UTM-фільтр впливає не на всі графіки однаково.
- У поточному фронті UTM передається лише в
getMonthSummary,getTrafficLeadsCR,getCplCpaіgetFunnel. - Графіки
getFunnelSteps,getStepMedianResponseTime,getPlatformSegmentation,getTechnicalErrorsбудуються тільки відMonthі ігнорують UTM.
Зв’язки
- swagger → Hiring Analytics Swagger
- Фронт викликає такі stack-маршрути:
POST /hiring-analytics/getUtmFiltersPOST /hiring-analytics/getMonthSummaryPOST /hiring-analytics/getTrafficLeadsCRPOST /hiring-analytics/getCplCpaPOST /hiring-analytics/getFunnelPOST /hiring-analytics/getFunnelStepsPOST /hiring-analytics/getStepMedianResponseTimePOST /hiring-analytics/getPlatformSegmentationPOST /hiring-analytics/getTechnicalErrors