Как подключить Telegram-бота к аналитике, не переписывая код
Стандартный Bot API не отдаёт ни списка пользователей, ни истории диалога — только апдейты здесь и сейчас. Поэтому «сколько у меня всего пользователей» обычно считают костылями в базе. Покажу способ проще: поменять один URL и получить аналитику, не трогая остальную логику бота.
Почему у Telegram-бота нет встроенной статистики
Bot API устроен событийно: бот получает апдейты — и всё. Нет метода «дай список всех, кто когда-либо писал», нет истории диалога на стороне Telegram. Если пользователь написал, а вы апдейт не сохранили — он потерян. Поэтому любую статистику бот обычно ведёт сам: пишет каждое сообщение в свою базу, считает, агрегирует. На маленьком боте это терпимо, на живом проекте превращается в отдельную подсистему, которую надо поддерживать.
Есть способ не писать всё это руками — и при этом не переделывать бота.
Идея в одну строку
Bot API — это HTTP-запросы к api.telegram.org. Если направить их через прокси, прокси увидит каждый вызов: и входящие апдейты при long polling, и исходящие sendMessage. Значит, его можно попутно учесть. Всё, что для этого нужно — заменить базовый адрес:
# было
https://api.telegram.org
# стало
https://api-tg.maxbotstat.ru
Путь и токен остаются как есть: /bot<token>/METHOD. Мы прозрачно проксируем запрос в Telegram и возвращаем ответ без изменений. Бот не замечает подмены.
Шаг 1. Добавьте бота в кабинете
- Зарегистрируйтесь на app.maxbotstat.ru.
- Нажмите «Добавить бота», выберите платформу Telegram.
- Вставьте токен от @BotFather (вида
123456:ABC-DEF…).
MaxBotStat проверит токен через getMe, подтянет имя и аватар бота и заведёт его в кабинете.
Шаг 2. Поменяйте базовый адрес
Чистый fetch / cURL — просто другой хост:
curl "https://api-tg.maxbotstat.ru/bot$BOT_TOKEN/getMe"
Популярные библиотеки умеют переопределять адрес параметром:
# aiogram (Python)
from aiogram.client.telegram import TelegramAPIServer
session = AiohttpSession(
api=TelegramAPIServer.from_base("https://api-tg.maxbotstat.ru")
)
# python-telegram-bot
ApplicationBuilder().base_url("https://api-tg.maxbotstat.ru/bot")
# grammY (Node.js)
new Bot(token, { client: { apiRoot: "https://api-tg.maxbotstat.ru" } })
Одна строка конфигурации — остальной код бота не трогаем.
Шаг 3. Проверьте
Перезапустите бота и напишите ему что-нибудь. В кабинете в течение пары секунд появится новый контакт и ваше сообщение. Если не появилось — почти всегда дело в том, что адрес заменили не везде (например, забыли про вебхук — об этом ниже).
Что появится в кабинете
- Контакты — все, кто писал боту: имя, username, аватар, признак Premium, время последнего визита;
- Диалоги — переписка с каждым, входящие и исходящие;
- Источники — UTM-метки из
/start, если используете deep-ссылки; - Воронки и намерения — автоматическая категоризация сообщений и этапы пути.
Аватарки не ломают вёрстку. Картинки контактов отдаются через бэкенд-прокси MaxBotStat, поэтому в кабинете нет mixed-content и токен бота не светится в URL.
А если у меня вебхук?
Если бот работает на long polling — через прокси идёт getUpdates, и видно обе стороны диалога автоматически. Если на вебхуке — входящие апдейты Telegram шлёт напрямую вам, мимо прокси; исходящие вызовы всё равно учитываются. Подробно про оба режима — в статье «Webhook или long polling» и в документации по подключению.
Поменяйте один адрес — и данные начнут собираться сами. Бесплатный тариф, без привязки карты.
Открыть кабинет →