Безкоштовний інструмент

Форматування тексту Telegram: жирний, спойлер, MarkdownV2

Пишіть із жирним, курсивом, підкресленням, закресленням, спойлерами, кодом, посиланнями й цитатами, стежте за прев'ю та копіюйте текст у тому вигляді, якого чекає Telegram: MarkdownV2 з усіма екранованими символами, HTML або масив entities з офсетами в UTF-16.

Розмітка: **жирний**, __курсив__, ++підкреслений++, ~~закреслений~~, ||спойлер||, `код`, огорожа ``` на окремому рядку для блоку коду, [текст](url), рядок із > на початку для цитати та >> для розгорнутої. Зворотна скісна риска лишає символ як є. Ctrl або Cmd із B, I та U теж працюють.

178 із 4 096 символів · 178 одиниць UTF-16, у них рахуються офсети сутностей

Прев'ю

День запуску. Нова колекція вже у продажу: 49 29 USD, перші 50 замовлень із безкоштовною доставкою. Деталі: у крамниці
Відправляємо по всьому світу з понеділка.
Кладе текст у буфер обміну як HTML і як звичайний текст. Чи збережеться форматування після вставлення, залежить від застосунку Telegram; якщо прийшло без нього, візьміть MarkdownV2 або HTML нижче.

Для ботів і Bot API

MarkdownV2
*День запуску\.* Нова _колекція_ вже у продажу: ~49~ 29 USD, перші 50 замовлень із безкоштовною доставкою\.
||Промокод: FIRST50||
Деталі: [у крамниці](https://example.com/shop)
>Відправляємо по всьому світу з понеділка\.

Надсилайте з parse_mode=MarkdownV2. Усі спецсимволи вже екрановано.

HTML
<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. Символи <, > та & у вашому тексті вже замінено.

Entities
[
  {
    "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. Уваги потребують лише три символи тексту: <, > та &, які замінюються на &lt;, &gt; та &amp;. Усе інше, зокрема крапки й дефіси, через які крихкий 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.