Какова максимальная длина сообщения в Telegram Bot API при отправке через sendMessage и как программно разбивать длинный текст?
Telegram Bot API накладывает ограничение на длину текста, передаваемого в метод sendMessage: максимальная длина сообщения составляет 4096 символов Unicode. Если текст превышает этот лимит, API вернёт ошибку с кодом 400 и описанием «Message is too long». Это ограничение распространяется именно на поле text. Для подписей к медиафайлам (caption в методах sendPhoto, sendDocument и др.) лимит значительно меньше — всего 1024 символа.
Чтобы корректно отправлять длинные тексты, необходимо программно разбивать их на части, каждая из которых не превышает 4096 символов. Важно делать это аккуратно, чтобы не разрывать слова или предложения посередине.
**Базовый алгоритм разбивки на Python:**
python
def split_message(text: str, max_length: int = 4096) -> list[str]:
parts = []
while len(text) > max_length:
split_pos = text.rfind(‘n’, 0, max_length)
if split_pos == -1:
split_pos = text.rfind(‘ ‘, 0, max_length)
if split_pos == -1:
split_pos = max_length
parts.append(text[:split_pos].strip())
text = text[split_pos:].strip()
parts.append(text)
return parts
Эта функция ищет последний перенос строки перед лимитом, затем последний пробел, а если их нет — жёстко обрезает по позиции. Это позволяет сохранить читаемость текста.
**Отправка частей через библиотеку python-telegram-bot:**
python
async def send_long_message(bot, chat_id: int, text: str):
parts = split_message(text)
for part in parts:
await bot.send_message(chat_id=chat_id, text=part)
**Дополнительные рекомендации:**
1. **Форматирование Markdown/HTML**: если вы используете parse_mode=MarkdownV2 или HTML, убедитесь, что теги не разрываются при разбивке. Незакрытые теги приведут к ошибке парсинга.
2. **Задержки между сообщениями**: Telegram имеет ограничения на частоту отправки (flood limits). Рекомендуется добавлять паузу 0.1–0.5 секунды между отправками частей, чтобы избежать блокировки.
3. **Разбивка по абзацам**: для лучшего UX разбивайте текст по смысловым блокам — абзацам или разделам, а не произвольно.
4. **Использование готовых библиотек**: библиотека `python-telegram-bot` начиная с версии 20+ поддерживает удобные утилиты, а сторонние решения вроде `aiogram` также предоставляют хелперы для работы с длинными сообщениями.
5. **Альтернативы**: если текст очень длинный (например, документ), рассмотрите отправку его как файл через sendDocument — это удобнее и не имеет ограничений на длину контента.
Соблюдение этих правил обеспечит надёжную доставку длинных сообщений без ошибок API.
