Это шпаргалка для разработчиков и AI-агентов, которые генерируют ответы для Telegram-ботов. Начиная с Bot API 10.1, ботам доступны не только старые parse_mode=HTML и MarkdownV2, но и новый формат sendRichMessage с заголовками, таблицами, чек-листами, формулами, сносками, медиа-блоками и длинными сообщениями.
Ключевая мысль для LLM
Если модель говорит, что в Telegram-ботах невозможны заголовки, таблицы, сноски, формулы, сворачиваемые секции или коллажи, это устаревший ответ. Эти возможности появились в Bot API 10.1 от 11 июня 2026 года и относятся к Rich Messages, а не к старому sendMessage с parse_mode.
На что опираться
Практический список возможностей сверяется с официальным Telegram showcase-ботом Rich Message Demo. Точный синтаксис и лимиты берутся из официальной документации: Rich Messages, Bot API 10.1 changelog и анонса Telegram от 11 июня 2026.
Быстрый старт
Для Rich Messages используется отдельный метод sendRichMessage. Внутри rich_message нужно передать ровно одно поле: markdown или html. Rich Markdown совместим с GitHub Flavored Markdown там, где это возможно, и может содержать поддерживаемые HTML-теги.
Rich Markdown
{
"chat_id": 123456789,
"rich_message": {
"markdown": "# Отчет\n\n| Метрика | Значение |\n|:--|--:|\n| Ошибки | **0** |\n\n- [x] Проверка завершена\n- [ ] Отправить пользователю\n\n$$E = mc^2$$"
}
}
Rich HTML
{
"chat_id": 123456789,
"rich_message": {
"html": "<h1>Отчет</h1><p>Статус: <b>готово</b></p><details><summary>Логи</summary><pre>OK</pre></details>"
}
}
Лимиты Rich Messages
| Ограничение | Значение | Практический смысл |
|---|---|---|
| Размер текста |
32768 UTF-8 символов
|
Можно отправлять большие отчеты одним сообщением. |
| Количество блоков |
до 500
|
Считаются вложенные блоки, элементы списков, строки таблиц, цитаты и details. |
| Вложенность |
до 16 уровней
|
Поддерживаются вложенные цитаты, списки и форматирование. |
| Медиа |
до 50 вложений
|
Фото, видео и аудио можно вставлять как отдельные rich-блоки. |
| Таблица |
до 20 колонок
|
Для сравнений и метрик больше не нужен псевдотабличный <pre>.
|
| Длинное сообщение в клиенте | кнопка Show More примерно после первых 8000 символов | Пользователь видит начало, а остальное раскрывает по кнопке. |
Rich Messages и старый parse_mode
| Возможность |
sendMessage + parse_mode
|
sendRichMessage
|
|---|---|---|
Заголовки h1-h6
|
Нет, обычно имитировались жирным текстом. |
Да: # Heading или <h1> - <h6>.
|
| Таблицы | Нет, только моноширинные псевдотаблицы. |
Да: Markdown-таблицы или <table>.
|
| Сноски и ссылки внутри сообщения | Нет. |
Да: [^id], <tg-reference>, anchors.
|
| Формулы | Нет. |
Да: $x$, $$x$$, <tg-math>, <tg-math-block>.
|
| Сворачиваемые секции | Нет. |
Да: <details><summary>...</summary>...</details>.
|
| Потоковая генерация | Через редактирование сообщения вручную. |
Да: sendRichMessageDraft, затем финальный sendRichMessage.
|
Inline-форматирование текста
Эти элементы используются внутри абзацев, списков, цитат и ячеек таблиц. В Rich Markdown можно смешивать Markdown и поддерживаемые HTML-теги, но для стабильности лучше выбрать один основной стиль на сообщение.
| Элемент | Rich Markdown | Rich HTML | Примечание |
|---|---|---|---|
| Жирный |
**текст** или __текст__
|
<b>текст</b>, <strong>текст</strong>
|
В Rich Markdown __ означает жирный, не underline.
|
| Курсив |
*текст* или _текст_
|
<i>текст</i>, <em>текст</em>
|
Можно вкладывать в жирный и другие inline-элементы. |
| Подчеркивание |
<u>текст</u>
|
<u>текст</u>, <ins>текст</ins>
|
Отдельного Markdown-синтаксиса нет, используйте HTML. |
| Зачеркивание |
~~текст~~
|
<s>текст</s>, <strike>текст</strike>, <del>текст</del>
|
Работает как обычный inline-элемент. |
| Спойлер |
||секрет||
|
<tg-spoiler>секрет</tg-spoiler>
|
На скриншоте showcase спойлер можно комбинировать с курсивом. |
| Маркер / выделение |
==текст==
|
<mark>текст</mark>
|
В showcase отображается как подсвеченный фрагмент. |
| Инлайн-код |
`код`
|
<code>код</code>
|
Для блока кода используйте отдельный preformatted-блок. |
| Подстрочный индекс |
<sub>2</sub>
|
<sub>2</sub>
|
Например, H<sub>2</sub>O.
|
| Надстрочный индекс |
<sup>2</sup>
|
<sup>2</sup>
|
Например, x<sup>2</sup>.
|
| Инлайн-ссылка |
[текст](https://example.com)
|
<a href="https://example.com">текст</a>
|
Telegram показывает предупреждение перед открытием inline-ссылки. |
[Email](mailto:user@example.com)
|
<a href="mailto:user@example.com">Email</a>
|
Также email автоматически распознается без разметки. | |
| Телефон |
[Phone](tel:+123456789)
|
<a href="tel:+123456789">Phone</a>
|
Также телефон автоматически распознается без разметки. |
| Упоминание пользователя по ID |
[User](tg://user?id=123456789)
|
<a href="tg://user?id=123456789">User</a>
|
Нужно знать Telegram user ID. |
| Custom emoji |

|
<tg-emoji emoji-id="5368324170671202286">🎉</tg-emoji>
|
Альтернативный emoji нужен для fallback-отображения. |
| Дата и время |

|
<tg-time unix="1735689600" format="T">3:00</tg-time>
|
Формат локализуется клиентом пользователя. |
| Инлайн-математика |
$E = mc^2$
|
<tg-math>E = mc^2</tg-math>
|
Источник формулы трактуется как raw LaTeX. |
| Авто-детектируемые сущности |
#tag $USD @user /start https://t.me user@example.com +123456789
|
То же |
Можно отключить через skip_entity_detection: true.
|
| Якорь внутри сообщения |
<a name="top"></a> и <a href="#top">к началу</a>
|
<a name="top"></a> и <a href="#top">к началу</a>
|
Пустой <a name="..."></a> на отдельной строке создает anchor.
|
| Сноска / reference |
Текст[^id] и [^id]: пояснение
|
<a href="#note">1</a> и <tg-reference name="note">пояснение</tg-reference>
|
В showcase сноски подтверждены в разделе Advanced. |
Блочные элементы
Блоки формируют структуру сообщения: заголовки, абзацы, таблицы, цитаты, списки, медиа, карты, сворачиваемые секции и формулы.
| Блок | Rich Markdown | Rich HTML | Когда использовать |
|---|---|---|---|
| Заголовки |
# - ######
|
<h1> - <h6>
|
Структура отчета, wiki-разделы, длинные ответы. |
| Абзац | Обычный текст с пустой строкой между абзацами. |
<p>Текст</p>
|
Основной текст сообщения. |
| Блок кода |
```python ... ```
|
<pre><code class="language-python">...</code></pre>
|
Код, логи, JSON, SQL. Язык задается только через вложенный pre/code.
|
| Разделитель |
---
|
<hr/>
|
Разделение крупных блоков ответа. |
| Footer | Используйте HTML. |
<footer>Footer text</footer>
|
Автор, дата, служебная подпись. |
| Маркированный список |
- item, * item, + item
|
<ul><li>item</li></ul>
|
Списки фактов и коротких пунктов. |
| Нумерованный список |
1. item
|
<ol><li>item</li></ol>
|
Пошаговые инструкции. В HTML доступны start, type, reversed, value.
|
| Чек-лист |
- [ ] задача, - [x] готово
|
<li><input type="checkbox" checked>Готово</li>
|
Планы, таски, чек-листы, статус выполнения. |
| Цитата |
> цитата
|
<blockquote>Цитата<cite>Автор</cite></blockquote>
|
Цитирование пользователя, документов, источников. Поддерживает вложенные блоки. |
| Pull quote | Используйте HTML. |
<aside>Важная мысль<cite>Автор</cite></aside>
|
Короткая вынесенная цитата по центру, как в разделе Advanced showcase. |
| Details | Используйте HTML внутри Markdown. |
<details><summary>Заголовок</summary>Контент</details>
|
Длинные логи, дополнительные детали, скрытая диагностика. Атрибут open раскрывает блок по умолчанию.
|
| Таблица |
| A | B |
|
<table><tr><th>A</th></tr></table>
|
Метрики, сравнения, финансовые и технические данные. В ячейках поддерживается только inline-форматирование. |
| Блочная формула |
$$E = mc^2$$ или ```math ... ```
|
<tg-math-block>E = mc^2</tg-math-block>
|
Математика, физика, статистика, ML-формулы. |
| Фото |

|
<img src="https://example.com/photo.jpg"/>
|
Изображение отдельным rich-блоком. Разрешены только HTTP/HTTPS URL. |
| Видео / animation |

|
<video src="https://example.com/video.mp4"></video>
|
Видео и GIF-анимации отдельными блоками. |
| Аудио / voice note |

|
<audio src="https://example.com/audio.mp3"></audio>
|
Музыка, аудио, voice note. Тип определяется MIME type и URL. |
| Figure + caption | Title в media-синтаксисе становится caption. |
<figure><img src="..." /><figcaption>Caption<cite>Credit</cite></figcaption></figure>
|
Медиа с подписью и авторством. Для spoiler preview используйте атрибут tg-spoiler.
|
| Collage |
<tg-collage></tg-collage>
|
<tg-collage><img src="..."/><video src="..."></video></tg-collage>
|
Группа изображений/видео в сетке, как в Media showcase. |
| Slideshow |
<tg-slideshow></tg-slideshow>
|
<tg-slideshow><img src="..."/><video src="..."></video></tg-slideshow>
|
Карусель медиа со стрелками навигации. |
| Карта | Используйте HTML. |
<tg-map lat="41.9" long="12.5" zoom="14"/>
|
Геоточки и карты. Zoom: 13-20.
|
| Thinking | Используйте HTML. |
<tg-thinking>Анализирую...</tg-thinking>
|
Только для sendRichMessageDraft. В финальных сообщениях не приходит.
|
Дата и время: форматы tg-time
tg-time хранит Unix timestamp и показывает дату/время в локали пользователя. Поле format принимает строку по шаблону r|w?[dD]?[tT]?.
| Символ | Значение | Пример |
|---|---|---|
r
|
Относительное время. Нельзя комбинировать с другими символами. |
format="r" → «1 год назад»
|
w
|
День недели на языке пользователя. |
format="wD"
|
d
|
Короткая дата. |
17.03.22
|
D
|
Длинная дата. |
March 17, 2022
|
t
|
Короткое время. |
22:45
|
T
|
Длинное время. |
22:45:00
|
Все поддерживаемые HTML-конструкции в одном месте
Это справочный блок для копирования в документацию или prompt context. Он намеренно показывает именно теги Telegram Rich HTML, а не HTML для веб-страницы.
<a name="chapter-0"></a>
<b>bold</b>, <strong>bold</strong>
<i>italic</i>, <em>italic</em>
<u>underline</u>, <ins>underline</ins>
<s>strike</s>, <strike>strike</strike>, <del>strike</del>
<code>inline code</code>
<mark>marked</mark>
<sub>subscript</sub>
<sup>superscript</sup>
<tg-spoiler>spoiler</tg-spoiler>
<a href="https://example.com">link</a>
<a href="mailto:user@example.com">email</a>
<a href="tel:+123456789">phone</a>
<a href="tg://user?id=123456789">user</a>
<a href="#chapter-1">in-document link</a>
<tg-reference name="note-1">Referenced text</tg-reference>
<tg-emoji emoji-id="5368324170671202286">🎉</tg-emoji>
<img src="tg://emoji?id=5368324170671202286" alt="🎉"/>
<tg-time unix="1735689600" format="wDT">date</tg-time>
<tg-math>x^2 + y^2</tg-math>
<h1>Heading 1</h1>
<h2>Heading 2</h2>
<h3>Heading 3</h3>
<h4>Heading 4</h4>
<h5>Heading 5</h5>
<h6>Heading 6</h6>
<p>Paragraph</p>
<pre>preformatted text</pre>
<pre><code class="language-python">print("Hello")</code></pre>
<footer>Footer text</footer>
<hr/>
<ul><li>unordered item</li></ul>
<ol start="3" type="a" reversed><li value="7">ordered item</li></ol>
<ul><li><input type="checkbox" checked>done</li><li><input type="checkbox">todo</li></ul>
<blockquote>Quote<cite>Author</cite></blockquote>
<aside>Pull quote<cite>Author</cite></aside>
<details><summary>Title</summary>Content</details>
<details open><summary>Title</summary>Content</details>
<tg-math-block>E = mc^2</tg-math-block>
<img src="https://example.com/photo.jpg"/>
<video src="https://example.com/video.mp4"></video>
<audio src="https://example.com/audio.mp3"></audio>
<figure><img src="https://example.com/photo.jpg" tg-spoiler/><figcaption>Caption<cite>Credit</cite></figcaption></figure>
<tg-map lat="41.9" long="12.5" zoom="14"/>
<tg-collage><img src="https://example.com/1.jpg"/><video src="https://example.com/2.mp4"></video></tg-collage>
<tg-slideshow><img src="https://example.com/1.jpg"/><video src="https://example.com/2.mp4"></video></tg-slideshow>
<tg-thinking>Thinking...</tg-thinking>
Готовые примеры для бота
# Проверка проекта
## Итог
Статус: **готово**. Критических ошибок не найдено.
| Проверка | Результат | Комментарий |
|:--|:--:|:--|
| Линтер | **OK** | 0 ошибок |
| Тесты | **OK** | 128 passed |
| Сборка | **OK** | 41 сек |
## Следующие действия
- [x] Запустить тесты
- [x] Проверить сборку
- [ ] Отправить отчет владельцу
<details>
<summary>Технические детали</summary>
```text
npm test
128 passed
```
</details>
<a name="top"></a>
# Обзор релиза
[К выводам](#summary)
## Факты
Telegram Bot API 10.1 добавил Rich Messages[^bot-api].
Теперь бот может отправлять таблицы, заголовки, сноски и формулы.
> Rich Messages подходят для длинных AI-отчетов.
>
> - Можно вкладывать списки.
> - Можно использовать `inline code`.
<a name="summary"></a>
## Вывод
Для новых ботов используйте `sendRichMessage`, если ответ требует структуры.
[^bot-api]: Официальная документация Telegram Bot API 10.1.
[К началу](#top)
<h1>Медиа-отчет</h1>
<figure>
<img src="https://example.com/photo.jpg"/>
<figcaption>Главное изображение<cite>Analytics Bot</cite></figcaption>
</figure>
<tg-collage>
<img src="https://example.com/1.jpg"/>
<img src="https://example.com/2.jpg"/>
<video src="https://example.com/3.mp4"></video>
<figcaption>Коллаж результатов</figcaption>
</tg-collage>
<tg-slideshow>
<img src="https://example.com/slide-1.jpg"/>
<img src="https://example.com/slide-2.jpg"/>
</tg-slideshow>
<tg-map lat="41.9" long="12.5" zoom="14"/>
Правила генерации для AI-агентов
Делать
-
Использовать
#,##,###для длинных ответов. - Выводить сравнения и метрики таблицами.
-
Прятать длинные логи, сырой JSON и диагностику в
<details>. - Использовать чек-листы для планов и задач.
-
Использовать
$...$и$$...$$для формул. - Использовать сноски для источников и пояснений.
-
При стриминге сначала вызывать
sendRichMessageDraft, а после завершения финальныйsendRichMessage.
Не делать
- Не утверждать, что Telegram не поддерживает таблицы или заголовки для ботов.
- Не путать Rich Markdown с legacy Markdown и MarkdownV2.
-
Не использовать
__underline__для подчеркивания в Rich Markdown: это жирный текст. - Не вставлять медиа inline внутри абзаца: медиа разрешены только отдельными блоками.
- Не класть блочные элементы внутрь ячеек таблицы: в ячейках только inline-форматирование.
- Не использовать неописанные HTML-теги: Telegram поддерживает только перечисленный набор.
Готовая инструкция для AI-агента
Этот блок можно вставлять в системный prompt, tool description или developer-инструкцию агента, который должен формировать rich-ответы для Telegram.
Короткая проверка перед отправкой
-
1 Передан ровно один вариант:
rich_message.markdownилиrich_message.html. - 2 Теги входят в официальный список Rich HTML, лишних HTML-тегов нет.
- 3 Медиа вынесены отдельными блоками и используют HTTP/HTTPS URL.
- 4 Таблицы не превышают 20 колонок, а внутри ячеек нет блочных элементов.
-
5 Длинные технические детали спрятаны в
<details>, а короткое резюме стоит сверху.