← Все статьи

Как подключить 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. Добавьте бота в кабинете

  1. Зарегистрируйтесь на app.maxbotstat.ru.
  2. Нажмите «Добавить бота», выберите платформу Telegram.
  3. Вставьте токен от @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. Проверьте

Перезапустите бота и напишите ему что-нибудь. В кабинете в течение пары секунд появится новый контакт и ваше сообщение. Если не появилось — почти всегда дело в том, что адрес заменили не везде (например, забыли про вебхук — об этом ниже).

Что появится в кабинете

Аватарки не ломают вёрстку. Картинки контактов отдаются через бэкенд-прокси MaxBotStat, поэтому в кабинете нет mixed-content и токен бота не светится в URL.

А если у меня вебхук?

Если бот работает на long polling — через прокси идёт getUpdates, и видно обе стороны диалога автоматически. Если на вебхуке — входящие апдейты Telegram шлёт напрямую вам, мимо прокси; исходящие вызовы всё равно учитываются. Подробно про оба режима — в статье «Webhook или long polling» и в документации по подключению.

Поменяйте один адрес — и данные начнут собираться сами. Бесплатный тариф, без привязки карты.

Открыть кабинет →