Клавиатура Telegram MarkdownV2 онлайн: разметка с экранированием

Оформить текст легко, а сообщения ботов ломает экранирование.

Предпросмотр

Предпросмотр примерный: он показывает смысл разметки, а не то, как её нарисует конкретное приложение. Шрифты, цвета и отступы везде свои, а часть возможностей зависит от версии.

0 симв.
Что пишет каждая кнопка
Действие Синтаксис Примечание
B *bold* Жирный - одна звёздочка в MarkdownV2
I _italic_ Курсив
U __underline__ Подчёркнутый
S ~strikethrough~ Зачёркнутый
Spoiler ||spoiler|| Скрыто до нажатия
Code `code` Код в строке
Quote >quoted Цитата
Code block ```python code ``` Блок pre, язык по желанию
Link [text](https://example.com) Ссылка
Mention [name](tg://user?id=123) Упомянуть пользователя по id
Escape *not italic* Ставит обратную косую черту перед _ * [ ] и другими символами, чтобы они оставались видны как есть, а не превращались в разметку. Выделите текст или просто поставьте курсор на строку

Одна точка может сорвать отправку

В MarkdownV2 зарезервированы восемнадцать символов, среди них точка, дефис и восклицательный знак, которыми полон обычный текст. Если хоть один не экранирован, Telegram отклоняет всё сообщение с ошибкой разбора, а бот, который не проверяет ответ, просто молчит. Выделите обычный текст и нажмите кнопку экранирования.

Почему этот диалект строже других

MarkdownV2 пришёл на смену старому режиму Markdown, который мог прочитать один и тот же текст по-разному. Новые правила строгие: любой символ, который может что-то значить, нужно экранировать там, где он ничего не значит.

Сам синтаксис короткий: жирный одной звёздочкой, курсив одним подчёркиванием, подчёркивание двумя, зачёркивание тильдой, спойлер двумя вертикальными чертами, код обратными кавычками. Зарезервировано 18 символов: _ * [ ] ( ) ~ ` > # + - = | { } . !

Как пользоваться

  1. Напишите текст и оформите его. Выделите фрагмент и нажмите кнопку жирного, курсива, спойлера или кода.
  2. Выделите обычный текст и нажмите кнопку экранирования. Экранируйте сам текст, а не только что добавленные маркеры.
  3. Отправляйте с parse_mode = MarkdownV2. Без этого параметра сообщение придёт со всеми обратными слешами.

Вопросы и ответы

Бот ничего не отправляет и не пишет ошибку. Почему?

Скорее всего, Telegram вернул ошибку разбора, а код её не проверяет. Обычно виноваты неэкранированные точка или дефис, и запись ответа API в лог сразу это покажет.

Нужно ли экранировать внутри блоков кода?

Там правила мягче: экранируются только обратная кавычка и обратный слеш. Поэтому кнопку экранирования применяйте к тексту, а не ко всему сообщению с кодом.

А если я пишу сообщение в самом Telegram?

Тогда экранирование не нужно: у приложения своё меню форматирования. MarkdownV2 нужен для сообщений, которые отправляются через Bot API.