Telegram
June 20, 2025

Лимиты метода getChatMemberCount в Telegram Bot API

Когда я взялся за проект мониторинга подписчиков Telegram-каналов, метод getChatMemberCount показался мне идеальным инструментом. Он простой, быстрый и делает ровно то, что нужно — возвращает количество участников чата. Но вскоре я столкнулся с загадкой: мой скрипт начал получать ошибки с огромными тайм-аутами, а официальная документация молчала о точных лимитах. В этой статье я расскажу, как я шаг за шагом докопался до суточных ограничений этого метода.

С чего все началось

Я написал скрипт на Python, который каждые 3 часа проверял по 50 каналов. Задержка между запросами — 15 секунд, чтобы не перегружать API. Получалось 400 запросов в сутки: 50 каналов умножить на 8 запусков. Скрипт запускался через crontab, а специальный файл блокировки не давал ему стартовать повторно, пока предыдущий процесс не завершится.

Все шло гладко, пока в логах не появилась строка:

Rate limit exceeded. Waiting for 49622 seconds.

Почти 14 часов ожидания! Я понял, что наткнулся на какой-то серьезный лимит, и решил разобраться.

Первые догадки

В документации Telegram Bot API я нашел только общий лимит — 30 запросов в секунду. Мои 0,07 запроса в секунду явно не дотягивали до этой планки. Тогда я начал строить предположения:

  • Может, я превысил суточный лимит?
  • Или есть ограничение на запросы к одному каналу?
  • А вдруг с моего сервера идет другая нагрузка?
  • Или задержки в скрипте работают неправильно?

Надо было проверить каждую гипотезу.

Что я исключил

Сначала я убедился, что каналы в базе уникальны — дубликатов быть не могло благодаря индексу. Логи не показали тайм-аутов, значит, повторные попытки из-за сбоев сети не увеличивали нагрузку. Я проверил сервер командой netstat — других ботов или активности на порту 443 не было. Моя задержка в 15 секунд тоже работала как часы, ведь я использовал asyncio с семафором, чтобы запросы шли строго по очереди.

Оставалось одно: суточный лимит.

Эксперименты

Я решил протестировать разные объемы запросов, оставив задержку 15 секунд и 8 запусков в сутки:

  • 50 каналов (400 запросов): Ошибка с тайм-аутом в 13,8 часов. Явно слишком много.
  • 25 каналов (200 запросов): Никаких проблем, все стабильно.
  • 30 каналов (240 запросов): Ошибка с задержкой в 2 часа.

Картина начала проясняться: где-то между 200 и 240 запросами пролегала граница.

Разговор с поддержкой

Чтобы подтвердить свои выводы, я написал в @BotSupport.

Описал ситуацию: 400 запросов, 15-секундная задержка, ошибка с retry_after в 49622 секунды. Ответ пришел короткий, но полезный:

Rate limits are bot-specific. getChatMemberCount has relatively strict limits (unspecified) so getting such a long retry after timeout is not unusual.

Они подтвердили, что лимиты относятся к боту, а getChatMemberCount — метод с жесткими рамками. Точных цифр не дали, но мои тесты уже говорили сами за себя.

Что я узнал

Итак, вот что я выяснил:

  • Лимит одного бота для getChatMemberCount — около 200 запросов в сутки.
  • Если запросов 200 — все работает.
  • 240 — и Telegram "штрафует" меня на 2 часа.
  • 400 — и я получаю почти 14-часовую паузу.

Интересно, что время блокировки растет с превышением: небольшое нарушение — короткий тайм-аут, большое — долгий. Скорость запросов тут ни при чем, дело в общем объеме за день, хотя это не точно! Я проверял вариант с опросом 200 каналов в рамках одной "сессии" работы скрипта.

Как преодолеть лимит (размышления)

Сейчас мой скрипт стабильно работает и опрашивает 25 каналов за один запуск скрипта — это 200 запросов в сутки, и ошибок нет. В данный момент эти показатели меня вполне устраивают. Но что делать, если нужно больше? Один из вариантов — использовать несколько ботов. Разделив нагрузку, например, по 200 запросов в сутки на каждого, можно легко выйти за пределы 200 запросов и получать данные о количестве подписчиков в нужном объеме. Поддержка подтвердила, что лимиты метода getChatMemberCount бота специфичны, так что это вполне рабочая идея.

Итог

Я потратил не мало времени на тесты, но в итоге понял, что getChatMemberCount ограничен примерно 200 запросами в сутки на бота. Превышение вызывает ошибку 429 с нарастающим retry_after. Если вам нужно опросить больше каналов или групп, подумайте о втором боте — это может стать вашим спасением. Надеюсь, мой опыт сэкономит вам пару дней или недель, если вы тоже столкнетесь с тайнами Telegram Bot API!