Vitals — ключевые метрики
Страница Vitals собирает ключевые метрики роста и удержания одного бота: активных пользователей, новых пользователей, удержание и отток.
На дашборде временной диапазон выбираете вы. Vitals работает иначе: все метрики активности считаются за полные календарные периоды. Благодаря этому числа сопоставимы с отчётностью и не меняются в течение дня.
Кто считается активным пользователем
Активный пользователь — это человек, который сам что-то сделал: написал сообщение, нажал кнопку, проголосовал в опросе, поставил реакцию.
Что в счёт не входит:
- Сообщения, отправленные самим ботом. Рассылка не делает получателя активным — иначе достаточно было бы разослать сообщение всей базе, чтобы «активных» стало столько же, сколько подписчиков. По той же причине рассылка не создаёт и новых пользователей.
- Сам бот и технические записи без определимого автора.
- Чат вместо человека. В группе считается каждый писавший участник, а не группа целиком.
Метрика Events считает события, а исходящее сообщение бота — это тоже событие. Поэтому число событий может расти от рассылки, а число активных пользователей — нет. Если нужен охват рассылки, постройте виджет с фильтром по $tg.direction = outbound.
Полные календарные периоды
DAU, WAU и MAU считаются за последний завершённый календарный период, а не за последние 24 часа, 7 или 30 дней.
| Метрика | Период | Пример на 28 июля 2026 |
|---|---|---|
| DAU | последние полные сутки | 27 июля 2026 г. |
| WAU | последняя полная неделя (пн – вс) | 20–26 июля 2026 г. |
| MAU | последний полный календарный месяц | июнь 2026 г. |
Текущий, ещё не закрытый период в расчёт не входит.
Почему не «последние 30 дней»
Скользящее окно, которое заканчивается «сейчас», склеивает два неполных дня: хвост вчерашнего и начало сегодняшнего. Число настоящее, но это не число ни одного периода, который можно назвать, — его нельзя сверить ни с отчётом, ни со счётом, ни с чужой таблицей. Вдобавок оно меняется при каждом обновлении страницы.
У завершённого периода поведение другое: как только период закрылся, значение зафиксировано навсегда. Именно так считают MAU для тарификации (Auth0, Firebase, Segment) и так же публикуют MAU в финансовой отчётности.
Подпись под каждым числом прямо называет период — например, июнь 2026 г. (UTC) · к предыдущему месяцу. Метрика, у которой период не назван, непроверяема.
Часовой пояс и начало недели
- Границы всех периодов считаются в UTC.
- Неделя начинается в понедельник (ISO 8601).
Это не произвольный выбор. Когорты виджета Retention группируются на сервере по UTC и по неделям с понедельника. Если бы Vitals считал периоды в местном часовом поясе, MAU и когорты удержания на одной странице расходились бы по построению.
Если вы в UTC+3, «сутки» в DAU — это интервал с 03:00 до 03:00 по вашему времени, а не с 00:00 до 00:00. Настройка часового пояса проекта — планируемая возможность; пока единый UTC гарантирует, что метрики согласованы между собой.
Сравнение с предыдущим периодом
Бейджи на карточке показывают изменение к предыдущему такому же календарному периоду.
| Метрика | Сравнивается с |
|---|---|
| DAU | сутками накануне |
| WAU | предыдущей неделей |
| MAU | предыдущим календарным месяцем |
Периоды идут подряд — без разрывов и без наложений, поэтому ни один пользователь не попадает в оба сразу.
Февраль (28 дней) сравнивается с январём (31 день) — это сравнение календаря с календарём, а не сдвиг на фиксированные 30 дней. Часть изменения MAU между такими месяцами объясняется просто их длиной. Нормализации нет намеренно: «MAU за 30,4 дня» не сверить ни с чем.
Задержка данных
У завершённого периода есть неизбежная цена — задержка:
- DAU отстаёт не более чем на сутки.
- WAU — до 7 дней: в воскресенье вы ещё видите позапрошлую неделю.
- MAU — до 31 дня: 31 июля MAU по-прежнему показывает июнь.
Это свойство метрики, а не ошибка. Если нужна активность за текущий, ещё не закрытый период, соберите на дашборде KPI-виджет с метрикой Users и нужным диапазоном — см. Метрики.
Новые пользователи
Карточки Новые пользователи · день / неделя / месяц считают уникальных пользователей, у которых первое в истории действие попало в соответствующий завершённый период.
Раньше здесь было написано «отправивших /start» — это описывало более раннюю реализацию и было неточно: пользователь считался новым заново при каждом повторном /start, а тот, кто никогда его не отправлял, не попадал в счёт вовсе. Сейчас метрика смотрит на первое действие любого вида.
Периоды намеренно совпадают с DAU, WAU и MAU: две карточки рядом с одинаковой подписью периода должны означать одно и то же.
Retention и Churn
Retention 7D — доля пользователей, вернувшихся хотя бы раз в течение 7 дней после появления. Не «ровно на 7-й день»: пользователь, вернувшийся на 3-й день и больше не заходивший, в эту долю попадает. Так же считаются 1D и 30D.
Churn 30D = 1 − Retention 30D: оценочная доля тех, кто не вернулся ни разу в течение 30 дней.
Обе метрики усредняются по когортам за скользящее окно 90 дней, взвешенно по размеру когорты. Это окно наблюдения за когортами, а не отчётный период, поэтому оно не привязано к календарю.
Когорта, появившаяся вчера, не может иметь 30-дневного показателя — 30 дней ещё не прошло. Такие когорты в среднее не входят: их ноль означает «измерение не закончено», а не «никто не вернулся». Если ни одна когорта ещё не набрала нужный срок, карточка показывает n/a, а не заниженное число.
В виджете Retention каждый столбец — один период: Day 7 значит «вернулся на 7-й день». На Vitals показатели накопительные — «вернулся в течение N дней». Поэтому Retention 7D на Vitals всегда не меньше, чем ячейка Day 7 в таблице, и это не расхождение данных.
Что дальше?
- Метрики — как устроены Users, Events и Events per User
- Типы виджетов — Retention, Cohort и остальные виджеты
- Дашборд — временной диапазон, гранулярность и фильтры