Перейти к основному содержанию

Бесплатный инструмент

Форматирование текста в Telegram, экранирование уже сделано

В сообщении есть цена, дефис и точка, а Bot API отвечает "can't parse entities". MarkdownV2 резервирует 18 символов, и в обычной фразе их обычно четыре или пять. Напишите сообщение здесь, выберите жирный, спойлер или блок кода и скопируйте вывод, где каждый такой символ уже экранирован.

Напишите сообщение

Выделите текст и примените стиль или наберите теги сами. Поле работает в HTML-синтаксисе Telegram, так что то, что вы правите, уже годится для одного из двух выводов. Предпросмотр это картинка сообщения, а не кнопка отправки: отсюда ничего не уходит из браузера.

Символов 198 из 4096

Telegram считает видимые символы, так что разметка ничего не стоит. Сущности и теги форматирования в лимит не входят.

Предпросмотр
Release 2.4 is out.
Fixed: the CSV import dropped rows ending in a comma.
Reported by three of you on the same day.
Run npm i -g entergram@2.4 to upgrade.
The migration note is boring but mandatory.
Нажмите на спойлер, чтобы раскрыть его, как это сделает читатель.

MarkdownV2

*Release 2\.4 is out\.*
Fixed: the CSV import dropped rows ending in a comma\.
>Reported by three of you on the same day\.
Run `npm i -g entergram@2.4` to upgrade\.
The migration note is ||boring but mandatory||\.

Отправляйте с parse_mode=MarkdownV2. В обычном тексте экранирован каждый зарезервированный символ; внутри кода только обратная косая черта и обратный апостроф.

HTML

<b>Release 2.4 is out.</b>
Fixed: the CSV import dropped rows ending in a comma.
<blockquote>Reported by three of you on the same day.</blockquote>
Run <code>npm i -g entergram@2.4</code> to upgrade.
The migration note is <tg-spoiler>boring but mandatory</tg-spoiler>.

Отправляйте с parse_mode=HTML. Экранировать нужно меньше, поэтому большинство библиотек берут его по умолчанию.

Синтаксис в обоих parse mode

Telegram принимает три parse mode. Markdown устаревший и поддерживает четыре стиля; MarkdownV2 и HTML поддерживают все десять. В таблице MarkdownV2 и HTML стоят рядом.

СтильMarkdownV2HTML
Жирный*bold*<b>bold</b>
Курсив_italic_<i>italic</i>
Подчёркнутый__underline__<u>underline</u>
Зачёркнутый~strike~<s>strike</s>
Спойлер||hidden||<tg-spoiler>hidden</tg-spoiler>
Код в строке`code`<code>code</code>
Блок кода```python code ```<pre><code class="language-python">code</code></pre>
Цитата>quoted line<blockquote>quoted</blockquote>
Ссылка в тексте[text](https://example.com)<a href="https://example.com">text</a>
Кастомный эмодзи![👍](tg://emoji?id=5368324170671202286)<tg-emoji emoji-id="5368324170671202286">👍</tg-emoji>

Подчёркнутый и курсив нельзя просто вложить друг в друга в MarkdownV2, потому что __ и _ сталкиваются на границе. Когда нужны оба на одном отрезке текста, берите HTML.

Почему MarkdownV2 снова отклоняет ваше сообщение

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

Два из них и подводят почти всех. Точка завершает большинство предложений. Дефис встречается в датах, диапазонах, флагах и составных словах. В заметке о релизе "Fixed: the 2.4-rc build" три зарезервированных символа на девять слов, и API отклоняет сообщение целиком, а не пропускает текст как есть.

Внутри сущности правила другие, и это вторая частая ошибка. В коде внутри строки и в блоке кода особыми остаются только обратная косая черта и обратный апостроф, так что экранирование остального вставит в ваш код видимые слеши. В скобках ссылки или кастомного эмодзи особыми остаются закрывающая скобка и обратная косая черта. Инструмент выше применяет нужное правило для каждого контекста, и это как раз то, чего не умеет поиск с заменой.

Если всё это не нравится, возьмите HTML. Он экранирует три символа, &, < и >, и вкладывается без двусмысленностей. Единственный довод за MarkdownV2 в том, что он лучше читается в системе контроля версий.

Лимит в 4096 символов считает текст, а не разметку

Текстовое сообщение Telegram вмещает 4096 символов. Форматирование передаётся сущностями рядом с текстом, а не внутри него, поэтому теги, звёздочки и слеши в выводе не считаются. Счётчик выше показывает видимую длину, и именно это число проверяет Telegram.

Рядом есть два лимита, которые стоит знать до того, как писать отправщик. Подпись к медиа вмещает 1024 символа, так что форматированное сообщение, которое само по себе проходит с запасом, будет отклонено, как только вы приложите картинку. Сообщение сверх лимита не обрезается: API возвращает ошибку и не отправляет ничего.

Вопросы

Это работает для постов в каналах и обычных чатов или только для ботов?

Таблица синтаксиса относится ко всему, что отправляется через Bot API или клиентскую библиотеку. Если вы печатаете в Telegram сами, у приложения есть своё меню форматирования и MarkdownV2 вы не увидите вовсе. Этот инструмент для случая, когда отправляет что-то другое и текст нужен уже отформатированным.

Какой parse mode выбрать?

HTML, если нет причин для другого. Он экранирует три символа вместо восемнадцати, предсказуемо вкладывается, а при ошибке обычно показывает видимый тег, а не теряет сообщение. MarkdownV2 лучше читается в исходном файле, и это честный довод в его пользу.

Почему сообщение отправилось, но без форматирования?

Почти всегда не указан parse_mode. Без него Telegram считает текст буквальным, и звёздочки с тегами выводятся как символы. Поставьте parse_mode в MarkdownV2 или HTML при отправке, в зависимости от того, какой вывод вы скопировали.

Можно ли вложить жирный в ссылку или курсив в жирный?

Да, в обоих parse mode, с одним исключением: подчёркнутый вместе с курсивом в MarkdownV2 требует обходного приёма, потому что разделители сталкиваются. Код в строке и блок кода не содержат внутри никаких других стилей ни в одном из режимов.

Что такое ID кастомного эмодзи и где его взять?

Это числовой ID премиум-эмодзи, и его считывают из сообщения, где эмодзи уже есть, а не из публичного каталога. Отправителю нужен Telegram Premium или нужно быть ботом, которому принадлежит набор стикеров. Все остальные увидят запасной символ, который вы обернули.

Загружается ли куда-нибудь то, что я здесь пишу?

Нет. Преобразование идёт в браузере, у страницы нет шага отправки, аккаунта и хранилища. Закрыли вкладку, и сообщения больше нет.

Что дальше

Тоже бесплатно: Telegram Group Finder , Telegram Lead Finder , Free QR Code Generator .

Если форматирование нужно для сообщения, которое вы отправите 200 людям

Экранированный текст это меньшая половина рассылки. Большая половина в том, чтобы отправить её с аккаунта, которому действительно отвечают, выдержать темп, при котором Telegram остаётся спокоен, и собрать ответы где-то кроме телефона. Эту часть берёт на себя Entergram: реальные личные аккаунты Telegram вместо бота, каждый через свой прокси, а ответы приходят в один интерфейс рядом с карточкой контакта.

Посмотреть, как устроены рассылки