Как стать автором
Обновить
76.57
Тензор
Разработчик системы СБИС

Ограничения в телеграм-бот (Bot API), о которых никто не расскажет

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров29K

Лимиты запросов в телеграм-ботах или почему бот может падать на четырех пользователях

Привет-привет! Меня зовут Оля, и я программист учебного центра компании «Тензор».

В декабре 23-го мне поступила творческая задача разработать телеграм-бот для проведения новогоднего марафона-тренинга по личностному росту.

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

Задачи бота 

  1. Собирать данные о состоянии участника марафона по четырем характеристикам и сохранять их в БД ежедневно в 6.00.

  2. Высылать задание в 08.00. 

  3. Присылать «сказку на ночь» — видео- или аудиосообщение с тематическим напутствием в 21.00. 

  4. Все задания должны приходить согласно часовому поясу пользователя. 

Не буду рассказывать о процессе регистрации в BotFather, получении токена и написании скрипта с логикой. Об этом уже написано множество статей в интернете. Вместо этого я поделюсь проблемой, с которой столкнулась.

Отъезжаем под нагрузкой в четыре пользователя

Проверив работу основных действий (бот высылает сообщения по расписанию дня, реагирует на действия пользователя, сохраняет нужные данные), на радостях отдала бота на тестирование коллегам. У нас ожидалось около 1 000 пользователей, поэтому следовало проверить поведение бота под нагрузкой. Через 5 минут тестирования всего четырьмя пользователями бот выдал ошибку 429 (Too Many Requests).

Удивлению моему не было предела. Я знала, что на отправку сообщений Bot API есть лимиты.

Нельзя отправлять конкретному пользователю сообщения чаще чем раз в секунду и не более 30 сообщений в секунду при массовой рассылке разным пользователям.

Поскольку в моей тестовой группе не было Флэша, четыре человека физически не могли получить такую ошибку. Однако получили. 

Попыталась устранить ошибку так:

  • настроила очередь отправки сообщений, чтобы точно соответствовать лимитам;

  • уменьшила размер анимаций;

  • высылала отдельно гиф и текст.

Итог: не помогло.

Пошла гуглить дальше. Нашла, что лимиты на конкретные вызовы API могут быть разные. Собственно, у меня уже были подозрения насчет этого, потому что отправка простых сообщений без вложений проходила без ошибок.

В интернетах по этому вопросу ничего не обнаружила и стала выяснить всё самостоятельно.

Готовьтесь, сейчас, наконец-то, будет мясо моей статьи. 

Опытным путем были найдены ограничения по основным вызовам

Метод

кол-во вызовов

период без ошибок

send_message

60

15 сек

send_animation

10

5 мин

send_photo

60

15 сек

send_video

35

60 сек

send_audio

40

60 сек

edit_message_text no btn

140

40 сек

edit_message_text with btn

100

30 сек

edit_message_reply_markup

100

30 сек

Оказалось, что все проблемы были из-за отправки анимации (в нашем случае любого размера от 10 до 1500 кб). Без ошибок бот может выполнить только 10 вызовов send_animation за 5 минут. На 11-й вызов бот выдает ошибку. Именно на это действие такое жесткое ограничение. Сначала я подумала, что отправляю слишком тяжелые файлы, но и анимация на 10 кб приводила к ошибке. 

Для решения проблемы пришлось поменять «send_animation» на «send_video», и — о, чудо! — всё заработало.

Дорогие писатели документации Bot API, если вы читаете это, добавьте информацию про лимиты, а пока они не добавили, ребята, вот вам мои ограничения.

Спасибо за прочтение, успеха вашим ботам.

Теги:
Хабы:
Всего голосов 78: ↑77 и ↓1+85
Комментарии37

Публикации

Информация

Сайт
sbis.ru
Дата регистрации
Дата основания
Численность
1 001–5 000 человек
Местоположение
Россия