Как стать автором
Обновить

Комментарии 37

А вы делали рассылку каждый раз отправляя файл или file_id уже загруженной гифки?

это в самой доке не рекомендуется. Попробуйте загружать файл заранее и сохранять его file_id в БД и потом отправлять этот file_id. Возможно и ограничения уйдут, отправка будет гораздо быстрее, т.к. вам не придется по 1000 раз (судя по требованиям, описанным в посте) загружать файл на сервера телеги, файл всегда будет физически один.

Из документации bot api к методу sendAnimation:

Pass a file_id as String to send an animation that exists on the Telegram servers (recommended)

Аналогично для всех методов, где отправляется какой-либо файл. Если этот файл уже загружен, нет смысла отправлять его заново, особенно 1000 раз.

Интересно, изменятся ли лимиты на отправку в таком случае?

Да, станут равны лимитам на сообщения. По крайней мере так было пол года назад.

Отразятся. Телеграм в применении лимитов учитывает в том числе объем загруженных данных.

Ещё бот, добавленный в группу-форум, не может получить список топиков и их состояния (открытый, закрытый). Как быть?

Мне это прям очень-очень нужно для реализации бота, который управляет топиками и превращает группу-форум на подобие сервера Discord - есть темы, в которые могут писать только админы, есть модераторы, есть ограничения по контенту, есть пересылка сообщений, отправленных в неправильный топик.

Ответ: использовать учётку (и api) пользователя. Когда функционала bot api не хватает, приходится прибегать к этому способу. Пользователю через api доступно всё то, что доступно ему через приложение-клиент телеги. Таким образом, через api пользователя (оно называется просто telegram api) можно собрать необходимые данные (всякие состояния, список участников, количество просмотров, реакции), а бот будет уже просто выполнять свою работу, основываясь на этих данных. Имейте в виду, что работа с пользовательским апи сложнее, а библиотек для него написано гораздо меньше.

работа с пользовательским апи сложнее

Скажем прямо, она не сложнее - она буквально кошмар. Даже хуже, чем Swagger у Тинькофф

Есть ещё промежуточный вариант: использовать MTProto (через который ходят пользователи) с токеном бота. Там доступны некоторые вещи, которые не проброшены в HTTP API

Не столько сложнее, сколько чревато баном аккаунта на который API ключи были выданы

Регистрировать топики когда бот получает из них сообщения. Либо пересоздать пока бот находится в чате.

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

А лимиты того же, но в рамках одного и того же получателя у вас есть? По факту можно гораздо больше сообщений в секунду отправлять, скажем 20. Но такие «ускорения» должны быстро заканчиваться. Хотелось бы конкретики.

Результаты приведены для одного получателя.

У апи бота есть ограничение на рассылку. С вебхука можно тысячами отвечать, а потоком упретесь в лимиты.

Так что возможно имеет смысл добавить кнопку "далее" и отрабатывать по ней

Однако если бот большой, то можно написать в ТП телеграм и вашему боту сделают больше лимиты. И тогда в лимиты нельзя будет упереться

Впервые про такое слышу.

Есть настройки, есть хаки с локальным сервером для повышения лимитов.

Но "написать и увеличат" - реально впервые слышу про такое

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

https://www.google.com/amp/s/habr.com/ru/amp/publications/543676/

Сам лично не проверял, но ссылаюсь на статью выше

Обшался с ребятами которые занимаются реально большими ботами (как раз по вопросу обработки лямов клинтов для своего бота) и никто ничего про такое не знал (хотя они ботов создают с момента как в телеге такая возможность появилась)

Лимиты к слову как раз самые что ни на есть строгие. Есть запас в 20% на пики.

Возможно через поддержку он менял количество парплельных запросов и тд (управление этими опциями в botfather нет до сих пор (нужно использовать апи)

Такая тема действительно существует, но получить расширение крайне и крайне сложно. Это должен быть какой-то ультраважный для всех сервис. Даже некоторые известные боты не смогли получить расширение. Так что совет можно отнести к разряду фантастики, к сожалению.

Пыталась увеличить лимиты через ТП телеги, но у меня не вышло. Было отказано.

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

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

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

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

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

А как это должно было помочь?)) особенно последнее

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

Для обхода этого ограничения, настроила очередь отправки сообщений, чтобы одному пользователю отправлялось не более одного смс в секунду. Однако это не помогло, при отправке сообщений с медиа.

Второй и третий пункт проверила для верности)

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

Опа, а что считается массовой рассылкой?

а если у меня викторина многомиллионная прямо сейчас идёт, и юзеров намного больше 30, то я проиграл и вынужден "троттлить"? и 30 в секунду - это ~260 тысяч в день. Цифра выглядит довольно маленькой для крупного бизнеса.

Я явно чего-то не понимаю. Пользуюсь этой статьёй как местом, где прошу разъяснений, как это работает.

Вы на порядок ошиблись. Это 2,6млн в сутки.

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

У Телеграма лимиты маловаты для больших комьюнити, но по сути это их способ борьбы со спамом и способ не потерять контроль.

Возможно задел на будущее (платные бизнес-фичи), но именно в Телеграме, если не считать скамных ботов с варезом и "подпишись на 10 ботов и каналов", почти не стоит проблемы входящего спама в личку, или всё режется настройками и отписками.

Пишите например только тем, кто выиграл. Или публикуйте в канале

If you're sending bulk notifications to multiple users, the API will not allow more than 30 messages per second or so. Consider spreading out notifications over large intervals of 8—12 hours for best results.

Also note that your bot will not be able to send more than 20 messages per minute to the same group.

Вроде не написано про лимит одного сообщения в секунду пользователю, написано про 20 сообщений в секунду в группу, но я отправляю с такой же задержкой пользователям - все нормально, получается сообщение не чаще чем раз в три секунды и ошибки не ловлю. Мой бот отравляет больше 20 тысяч сообщений в сутки без ошибок, но это не предел естественно. Отправляются как просто текст, так и фото, анимации, видео

Вы отправляете одни и те же анимации и видео и указываете один file_id при каждой отправке?

Раньше отправлял через url, сейчас для повторных использую file_id, но это никак не влияло на лимиты, разве что на скорость отправки запросов, так как серверам телеграма не нужно каждый раз загружать ресурсы.

Спасибо за статью! Теперь я понял из-за чего в моем проекте иногда стреляет ошибка 429

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

Озвученные вами лимиты далеки от реальности, а техпод повышает лимиты когда у вас запросов порядка нескольких тысяч рпс, так что то что у вас код упал на 4х юзерах исключительно ваша недоработка (это не ок не кешировать медиа при отправке)

Ко всему прочему, лимиты динамически подстраиваются (это официально со слов разработчика апи)

И в целом можно даже позволить выйти за лимит в 30рпс

Ну и не сочтите за душность, но хорошо погуглив про лимиты можно найти уйму материалов, благо с 2015 года информации прибавилось

а в правилах и лимитах ничего-ничего не менялось с 2015 года? Не верю.

лимиты динамически подстраиваются

в каком случае они становятся более мягкими?

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

В случае 429 телеграм присылает инфу, сколько секунд надо подождать. Ждём и отправляем сообщение вновь. А в это время асинхронно отправляем сообщения другим юзерам.
Для моего проекта такого решения оказалось достаточно.

Тоже столкнулся с этой ошибкой, пока не смог победить, в логах каждый день.
У меня бот - текстовая мморпг игра (написанная новичком самоучкой через telebot). Пока игроков около 500-600, но ошибка возникает даже при нескольких игроках, если отправляется/редактируется много сообщений у одного пользователя подряд.
Например, лог пошагового боя отображался путем редактирования сообщения (добавления информации о следующем ходе) раз в 3 сек. В длинных боях примерно на 25-28 ходу стабильно бой прерывался этой ошибкой. В этом случае я просто увеличил time.sleep между ходами до 5 сек и перестал упираться в лимиты (если игроки не тыкали что-то еще во время боя).
При этом, когда рассылка очередной новости на 500-600 чатов, все сообщения отправляются корректно без задержек и без ошибок.
Но в других ситуациях пока не удается этого избежать. Например, при перераспределении навыков (или манипуляциях с игровым инвентарем). То есть, игрок сбрасывает все очки опыта и, зная что ему нужно, начинает быстро прокликивать 30-50 навыков. Бот на все реагирует новым сообщением что "навык изучен" и редактированием сообщения с кнопкой (информация о навыке предыдущего уровня заменяется на информацию о навыке следующего уровня). Почти каждый раз при таких манипуляциях игрок быстро упирается в лимит бота и в какой-то момент бот выдает ошибку. Запретить игрокам изучать навыки слишком быстро или тыкать по инвентарю вещам и т.д. выглядит сомнительным решением. А как по другому решить проблему не знаю.
Тоже в разных местах видел рекомендации просить поддержку увеличить лимиты, но мне поддержка почему-то не отвечает, да и вообще проект маленький, вряд ли увеличат.
Если кто-то может подсказать, как легко и элегантно решить эту проблему, буду восхищаться вашей мудростью и великодушием до конца жизни (или пока эта ошибка опять не возникнет).

Я сожалею, но в настоящий момент я не располагаю информацией, которая могла бы помочь Вам(((( Если у вас возникнут другие вопросы или потребности, пожалуйста, не стесняйтесь обращаться.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий