FAQ по сообщениям
На этой странице собраны ответы на вопросы о том, что боты могут и не могут делать с сообщениями в Телеграме. Если коротко: могут отправлять, изменять и удалять сообщения, но с ограничениями и пограничными случаями. Например, вы можете столкнуться с ошибкой, если бот попробует отправить голосовое сообщение премиум-пользователю.
1. Про отправку
Какие сообщения может отправлять бот?
Боты могут отправлять и получать сообщения, как и пользователи. Это могут быть обычные текстовые сообщения или сообщения с медиа: картинками, видео, файлами, опросами, голосовыми сообщениями, стикерами и так далее.
В отличие от пользователей, бот также может добавлять к своим сообщениям кнопки.
Как отправить сообщение?
# Send a message
await bot.send_message(chat_id=chat_id, text='Hey there')
# Shortcut: send where the message came from
await message.answer('Hey there')
# Send a file
document = FSInputFile('path.txt')
await bot.send_document(
chat_id=chat_id,
document=document
)См. How to upload file?.
Когда отправить сообщение нельзя?
Бот не может отправить сообщение пользователю, который его заблокировал.
В группах и каналах бот может писать только тогда, когда он там состоит и администраторы не запретили ему отправку сообщений.
Премиум-пользователи могут запретить приём голосовых сообщений, включая кружочки.
try:
await client.send_message(chat_id, 'Hey there')
except TelegramForbiddenError:
print('User blocked the bot, bot banned from chat, etc.')Почему альбомы так странно себя ведут?
Альбом — это несколько сообщений с медиа (например, фотографиями или видео), которые приложения Телеграма показывают как одну группу сообщений.
Если ваш бот получает альбом, он всё равно должен обрабатывать его как несколько входящих сообщений.
Какие ограничения у файлов?
В Телеграме можно делиться файлами до 4 ГБ, но в Bot API ограничения строже. Через Bot API бот может скачивать файлы до 20 МБ и отправлять файлы до 50 МБ. Если вы используете локальный сервер Bot API, лимиты повышаются до 2 ГБ.
Как часто бот может отправлять сообщения?
Спамить Телеграм, конечно, не даст. Вот основные лимиты из официальной документации:
- не больше одного сообщения в секунду в один чат;
- не больше 30 сообщений в секунду во все чаты;
- не больше 20 сообщений в минуту в одну группу.
Готовой возможности отправить сообщение всем пользователям одновременно нет. Если вам нужна рассылка, её придётся реализовывать постепенно.
Учтите, что для более редких действий, вроде изменения или удаления сообщений, лимиты обычно строже. Для популярных ботов Телеграм может повысить лимиты через поддержку.
2. Про изменение
Как изменять сообщения?
from asyncio import sleep
...
my_message = await bot.send_message(chat_id, 'Loading...')
await sleep(10)
await my_message.edit_text('Loaded!')Когда бот редактирует сообщение, в нём не появляется пометка «Изменено», как у сообщений пользователей.
Как изменять медиа?
При редактировании сообщения можно менять не только текст, но и медиа. Картинку, видео или файл можно заменить другой картинкой, видео или файлом. Музыка тоже считается файлом.
К текстовому сообщению, отправленному без медиа, можно добавить медиа-документ (но только один, так что альбом не получится). Удалить медиа из сообщения нельзя.
3. Про пересылку
Как переслать сообщение?
# С подписью 'Переслано'
await message.forward(chat_id)
# Без подписи 'Переслано'
await message.copy_to(chat_id)Что не так с пересылкой музыки?
Если пользователь или бот пересылает музыкальный файл, у него не появляется подпись «Переслано». Странные правила Телеграма ¯_(ツ)_/¯
Почему не получается переслать сообщение?
Нельзя пересылать сообщения из групп и каналов, в которых включён запрет на сохранение контента («protected content»).
4. Про взаимодействие
Могут ли боты голосовать в опросах?
Нет. Но они могут отправлять опросы всех типов.
Могут ли боты ставить реакции?
Да.
