Бизнес хочет, чтобы бот присылал клиентам каталог или презентацию. Бот отказывается. В чате тот же файл пересылается без проблем — и заказчик уверен, что подрядчик что-то недоделал.
Это ограничение платформы, а не ошибка в коде. Разберу цифры и четыре способа обойти — все в рамках правил.
| Операция | Лимит |
|---|---|
| Бот отправляет документ | 50 МБ |
| Бот скачивает файл от пользователя | 20 МБ |
| Бот отправляет фото как изображение | 10 МБ |
Обратите внимание на асимметрию: принять бот может меньше, чем отдать. Это регулярно всплывает в задачах вроде «пусть клиент загрузит скан договора» — документ на 30 МБ бот получить не сможет.
Почему в переписке файл проходит, а через бота нет. Человек в клиенте Telegram работает с другим API — там лимиты в разы выше. Бот использует Bot API, и у него свои ограничения. Поэтому «я же сам его переслал» — не аргумент, механизмы разные.
Основной и самый предсказуемый вариант. Файл лежит на вашем сервере, а бот отдаёт прямую ссылку на скачивание.
Плюсы, помимо снятого ограничения:
Минус один: ссылка выглядит менее «нативно», чем вложение. Решается формулировкой — люди привыкли скачивать по ссылке.
Если файл не должен быть публичным, ссылку делают одноразовой: генерируем токен со сроком жизни и проверяем его на сервере.
Приём, о котором знают не все. Когда файл уже загружен на серверы Telegram, у него есть идентификатор file_id. Отправляя документ по этому идентификатору, бот ничего не загружает заново — а значит, лимит на отправку не действует.
Как это делается на практике:
file_id.call("sendDocument", chat_id=user_id, document=SAVED_FILE_ID)
Отправка становится мгновенной — файл уже на серверах Telegram. Отлично подходит для неизменных материалов: прайс, презентация, инструкция.
Важная деталь. file_id уникален для конкретного бота: идентификатор, полученный одним ботом, не сработает у другого. И если файл нужно обновить, идентификатор придётся получать заново — старый будет отдавать прежнюю версию.
Годится, когда содержимое естественно делится: каталог по разделам, отчёт по месяцам, курс по урокам. Клиент получает не один файл на 200 МБ, а пять по сорок — и обычно ему это даже удобнее, потому что нужен один раздел, а не всё сразу.
Плохо работает для видео и архивов: склеивать части руками мало кто захочет.
Telegram позволяет поднять собственный экземпляр Bot API. Тогда лимит на отправку поднимается до 2 ГБ, а на получение — до 2 ГБ вместо двадцати мегабайт.
Цена вопроса: отдельный сервер, место под файлы, обновления и присмотр. Для задачи «отправлять клиентам прайс» это стрельба из пушки по воробьям. Оправдано там, где обмен тяжёлыми файлами — суть продукта: обработка видео, приём сканов, работа с архивами.
| Ситуация | Решение |
|---|---|
| Файл меняется часто | ссылка на сервер |
| Файл постоянный, шлём часто | file_id |
| Содержимое делится по смыслу | разбить на части |
| Тяжёлые файлы — суть сервиса | свой Bot API |
Это тот случай, когда честный разговор до начала работ экономит нервы обеим сторонам. Если в задаче есть слова «бот присылает презентацию» или «клиент загружает документы», лимиты нужно назвать сразу — вместе с тем, как вы их обойдёте.
Иначе на сдаче возникает разговор в духе «мы же договаривались, что бот шлёт каталог», а каталог весит 80 МБ. Технически подрядчик прав, по ощущениям заказчика — нет. Проще потратить две минуты на предупреждение.
Ещё одно ограничение платформы, которое всплывает в тех же проектах: бот не может написать первым тому, кто сам не нажал «Старт». Поэтому «загрузим базу телефонов и разошлём» не работает — рассылка идёт только по подписчикам бота.
50 МБ при отправке через Bot API. Получать от пользователя бот может файлы ещё меньше — до 20 МБ. При этом сам человек в переписке способен переслать файл в разы больше, и это регулярно сбивает с толку: в чате файл проходит, а через бота нет.
Четыре рабочих способа. Первый и основной: файл лежит на вашем сервере, а бот присылает прямую ссылку на скачивание. Второй: загрузить файл в канал или чат вручную один раз и переиспользовать его идентификатор file_id. Третий: разбить документ на части. Четвёртый, для больших проектов: поднять собственный сервер Bot API, где лимит на отправку поднимается до 2 ГБ.
Идентификатор файла, который Telegram присваивает загруженному документу. Если файл уже есть на серверах Telegram, бот может отправлять его по этому идентификатору сколько угодно раз — мгновенно и без повторной загрузки. Ограничение в 50 МБ при этом не действует, потому что бот ничего не загружает заново.
У фотографий лимит жёстче: 10 МБ при отправке как изображение. Кроме того, Telegram сжимает такие изображения. Если важно сохранить исходное качество, отправляйте картинку документом — тогда действует общий лимит и сжатия не происходит.
Нужен бот, который отдаёт клиентам материалы? Скажу, какой способ подойдёт под ваши файлы, и назову цену со сроком до начала работ.
Telegram-бот от 2 500 ₽