Форматування тексту Telegram: жирний, спойлер, MarkdownV2
Пишіть із жирним, курсивом, підкресленням, закресленням, спойлерами, кодом, посиланнями й цитатами, стежте за прев'ю та копіюйте текст у тому вигляді, якого чекає Telegram: MarkdownV2 з усіма екранованими символами, HTML або масив entities з офсетами в UTF-16.
Розмітка: **жирний**, __курсив__, ++підкреслений++, ~~закреслений~~, ||спойлер||, `код`, огорожа ``` на окремому рядку для блоку коду, [текст](url), рядок із > на початку для цитати та >> для розгорнутої. Зворотна скісна риска лишає символ як є. Ctrl або Cmd із B, I та U теж працюють.
Прев'ю
Відправляємо по всьому світу з понеділка.
Для ботів і Bot API
*День запуску\.* Нова _колекція_ вже у продажу: ~49~ 29 USD, перші 50 замовлень із безкоштовною доставкою\. ||Промокод: FIRST50|| Деталі: [у крамниці](https://example.com/shop) >Відправляємо по всьому світу з понеділка\.
Надсилайте з parse_mode=MarkdownV2. Усі спецсимволи вже екрановано.
<b>День запуску.</b> Нова <i>колекція</i> вже у продажу: <s>49</s> 29 USD, перші 50 замовлень із безкоштовною доставкою. <tg-spoiler>Промокод: FIRST50</tg-spoiler> Деталі: <a href="https://example.com/shop">у крамниці</a> <blockquote>Відправляємо по всьому світу з понеділка.</blockquote>
Надсилайте з parse_mode=HTML. Символи <, > та & у вашому тексті вже замінено.
[
{
"type": "bold",
"offset": 0,
"length": 13
},
{
"type": "italic",
"offset": 19,
"length": 8
},
{
"type": "strikethrough",
"offset": 43,
"length": 2
},
{
"type": "spoiler",
"offset": 100,
"length": 17
},
{
"type": "text_link",
"offset": 126,
"length": 10,
"url": "https://example.com/shop"
},
{
"type": "blockquote",
"offset": 137,
"length": 41
}
]Надсилайте чистий текст у text і цей масив в entities, без parse_mode. Офсети й довжини в одиницях UTF-16.
Ліміти рахуються за текстом без розмітки: 4 096 символів на повідомлення, 1 024 на підпис. Як улаштовано підрахунок
Форматування в Telegram не типографіка, а дані. Жирне слово це сутність: тип, офсет і довжина, прикріплені до звичайного тексту. Застосунки його малюють, боти надсилають, і все, що ламається у відформатованому повідомленні, ламається в тій точці, де текст перетворюється на сутності.
Десять стилів, одна розмітка
Поле вище приймає невелику розмітку й перетворює її на сутності під час набору: **жирний**, __курсив__, ++підкреслений++, ~~закреслений~~, ||спойлер||, пара зворотних лапок для коду в рядку, огорожа ``` на окремому рядку для блоку коду (мову вказують після відкривальної огорожі), [текст](url) для посилання, рядок із > на початку для цитати та з >> для розгорнутої. Зворотна скісна риска перед будь-яким із цих символів лишає його текстом. Стилі вкладаються один в одного, тож посилання може стояти всередині жирного, а жирний усередині цитати; код не містить нічого, а цитата не містить ані іншої цитати, ані блоку коду. Це правила вкладеності самого Telegram, а не обмеження сторінки.
Прев’ю показує, що означають сутності, а не те, як їх піксель у піксель малює конкретний застосунок. Спойлери лишаються прихованими, доки на них не натиснути. Лічильник під полем вимірює текст без розмітки, бо саме цей текст вимірює Telegram.
MarkdownV2: екранування, на якому ламаються боти
parse_mode=MarkdownV2 показують у більшості посібників, і він же стоїть за більшістю помилок «can’t parse entities». Правило коротке й безжальне: поза кодом перед кожним із символів _ * [ ] ( ) ~ ` > # + - = | { } . ! має стояти зворотна скісна риска, і перед самою рискою теж. Однієї неекранованої крапки наприкінці речення досить, щоб API відкинув усе повідомлення. Усередині code і pre екрануються лише зворотна лапка та скісна риска; всередині адресної частини посилання лише закривальна дужка та скісна риска.
Є ще одна пастка. Два підкреслення завжди читаються як підкреслений текст, жадібно, зліва направо, тому курсив, який закінчується рівно там, де й підкреслення, не можна записати навпростець. Задокументоване рішення: закрити курсив, вставити порожню жирну сутність ** як роздільник і лише потім закрити підкреслення. Вихід MarkdownV2 вище робить усе це сам, разом із роздільником, тому його варто копіювати, а не перенабирати.
HTML: три символи на екранування
parse_mode=HTML спокійніший. Telegram підтримує фіксований перелік тегів: b, i, u, s, tg-spoiler, a, code, pre (із вкладеним code class="language-…" для назви мови) та blockquote, звичайний або expandable. Уваги потребують лише три символи тексту: <, > та &, які замінюються на <, > та &. Усе інше, зокрема крапки й дефіси, через які крихкий MarkdownV2, іде як є. Саме цей формат AdminHub використовує, коли публікує дописи, і саме його варто обрати для будь-якого бота, написаного з нуля.
Entities, якщо екранувати не хочеться взагалі
Третій вихід це масив entities. Надішліть його разом із чистим текстом і без parse_mode, і екранувати буде нічого, бо нічого не розбирається. Знати треба одне: офсети й довжини рахуються в одиницях UTF-16, тому емодзі чи будь-який символ поза базовою багатомовною площиною займає дві. Саме тому лічильник показує це число окремо.
Якої довжини може бути повідомлення
У повідомлення вміщується 4 096 символів, у підпис до медіа 1 024, і обидва ліміти рахуються «після розбору сутностей»: розмітка, теги та екрануючі скісні риски не враховуються, лише видимий читачеві текст. Ліміти задано в символах, які клієнтська конфігурація Telegram рахує кодовими точками, тому жирне емодзі це один символ проти ліміту, хоча його сутність завдовжки дві одиниці. Лічильник вище дотримується цього правила й перемикається між двома лімітами; генератор шрифтів пояснює ту саму різницю для стилізованих літер Юнікоду.
Чого цей інструмент не робить
Користувацькі емодзі та сутності дати tg-time потребують бота з особливими правами й лишені поза межами. Застарілий режим Markdown не включено навмисно: він не вміє вкладати стилі, не виражає підкреслення, закреслення, спойлери й цитати, і документація Telegram сама відсилає до MarkdownV2. Заголовки, таблиці та списки теж не належать до звичайного форматування повідомлень: Telegram запровадив їх у липні 2026 року як окремий текстовий редактор для користувачів Premium, а для ботів це rich-повідомлення Bot API 10.1, які й створює редактор дописів AdminHub. Стилі з цієї сторінки кожен клієнт Telegram показує однаково.
Джерела, перевірено у вересні 2026: Bot API, Formatting options для правил екранування MarkdownV2, переліку тегів HTML, правил вкладеності та лімітів «після розбору сутностей»; Bot API, MessageEntity для офсетів і довжин в одиницях UTF-16; Styled text with message entities про те, як клієнти рахують довжини сутностей; блог Telegram, 14 липня 2026 про текстовий редактор і його доступність лише для Premium.
Що зазвичай запитують
- Як зробити жирний текст у Telegram?
- Напишіть його тут між подвійними зірочками або виділіть і натисніть «Жирний», а потім скопіюйте результат у потрібному вигляді. Для бота надішліть текст як <b>жирний</b> із parse_mode=HTML або як *жирний* із parse_mode=MarkdownV2, де решту спецсимволів треба екранувати. Ця сторінка описує те, що документує Bot API, а не кнопки кожного застосунку.
- Чому бот отримує помилку can't parse entities?
- Бо повідомлення надіслано з parse_mode=MarkdownV2 і містить неекранований спецсимвол, найчастіше крапку, дефіс, знак оклику чи дужку, або стиль відкрито й не закрито. В HTML та сама помилка приходить через незакритий чи непідтримуваний тег або голі < та & у тексті. Вставте текст сюди й скопіюйте вихід MarkdownV2 або HTML: екранування та закриття вже зроблено.
- HTML чи MarkdownV2: що обрати для бота?
- HTML, якщо немає причин вчинити інакше. У ньому екрануються три символи замість вісімнадцяти, немає плутанини між підкресленням і курсивом, і саме його AdminHub надсилає в Telegram для кожного допису з форматуванням. MarkdownV2 доречний, коли його збирає ваша бібліотека або коли ви копіюєте його з такого інструмента, як цей.
- Як сховати текст під спойлер?
- Загорніть його в подвійні вертикальні риски, ||ось так||, або виділіть і натисніть «Спойлер». У MarkdownV2 спойлер пишеться так само, в HTML це тег tg-spoiler, а тип сутності spoiler. Читач бачить розмитий блок, доки не натисне на нього.
- Чи можна використовувати заголовки, таблиці або списки в повідомленні Telegram?
- У звичайному форматуванні повідомлень ні, і цей інструмент їх не створює. Telegram додав заголовки, таблиці та списки в липні 2026 року як окремий текстовий редактор для користувачів Premium; для ботів це rich-повідомлення Bot API 10.1, саме так їх надсилає редактор дописів AdminHub. Усі стилі з цієї сторінки працюють у будь-якому чаті.
- Якої довжини може бути відформатоване повідомлення?
- 4 096 символів для повідомлення та 1 024 для підпису до медіа, рахуючи за текстом після вилучення розмітки: теги, зірочки та екрануючі скісні риски не враховуються. Лічильник під полем застосовує те саме правило й перемикається між двома лімітами.
- Чому довжина сутності не збігається з кількістю символів?
- Офсети й довжини сутностей рахуються в одиницях UTF-16, тому емодзі чи будь-який символ поза базовою площиною займає дві, а ліміт повідомлення рахується в символах. Лічильник показує обидва числа: перше вирішує, чи вміститься повідомлення, друге потрапляє в масив entities.