Объект NewMessageBody, которым MAX Bot API описывает текст сообщения, поддерживает два способа форматирования — Markdown и HTML. Четыре пары тегов в каждом повторяют привычную разметку: курсив, жирный, зачёркнутый, ссылка. А дальше начинаются расхождения: подчёркивание и выделение оформлены синтаксисом, которого в обычном Markdown нет, упоминание пользователя работает через служебную ссылку на несуществующий домен, моноширинный текст теряет переносы строк, а собственная таблица документации трижды повторяет один и тот же HTML-тег там, где должны стоять разные уровни заголовков. Разобрали таблицу построчно.

2своих тега — ++underline++ и ^^выделенный^^ — которых нет в обычном Markdown
4000символов — предел текста сообщения бота, вместе с любой разметкой внутри
2 из 29страниц методов API прямо объясняют формат текста, хотя пользуются им три
0 из 192статей справки MAX произносят слово Markdown

Markdown или HTML — выбор за полем format

Текст нового сообщения, ответа на callback-кнопку или отредактированного поста бот передаёт одним и тем же объектом — NewMessageBody. У него есть поле text (до 4000 символов) и необязательное поле format, у которого всего два допустимых значения: "markdown" и "html". Документация формулирует это так:

Текст сообщения в чат-боте можно улучшить с помощью базового форматирования.

Раздел «Форматирование», dev.max.ru

Про само поле format объект NewMessageBody говорит отдельно:

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

Объект NewMessageBody, dev.max.ru

Если поле не заполнить, текст уйдёт как есть — без разбора символов *, _ или тегов. Разметка начинает работать только тогда, когда бот сам объявляет её тип.

Два тега, которых нет в обычном Markdown

Курсив, жирный, зачёркнутый и ссылка в таблице документации выглядят ровно так, как их знает любой, кто хоть раз писал текст в Markdown: *emphasized*, **strong**, ~~strikethrough~~, [Inline URL](https://dev.max.ru/). А дальше платформа переходит на собственный синтаксис. Подчёркнутый текст оформляется парой плюсов: ++underline++. Выделенный — парой галочек: ^^выделенный^^. Ни один из этих двух знаков в обычном Markdown ничего не значит — их придумала сама MAX.

Забавная деталь нашлась не в синтаксисе, а в предпросмотре: чтобы показать, каким выделенный текст станет на вид, страница документации использует не современный <mark> (он приберёжен для HTML-режима), а тег <font color="red"> — тот самый, который спецификация HTML давно считает устаревшим.

В HTML-режиме тех же двух эффектов добиться проще: подчёркивание — тегами <ins> или <u>, выделение — тегом <mark>. Но выбор формата — один на всё сообщение: смешать Markdown-плюсы и HTML-теги в одном тексте нельзя.

Упоминание — это ссылка на несуществующий домен

Упомянуть пользователя в тексте бот тоже не может напрямую именем или числовым id в отдельном поле — только оформив обычную ссылку с необычным адресом. В Markdown это выглядит так: [Имя Фамилия](max://user/user_id), в HTML — так: <a href="max://user/user_id">Имя Фамилия</a>. Схема max:// не открывается в браузере — это служебный адрес, который понимает только сама платформа, а держит его та же синтаксическая конструкция, что и обычная ссылка на сайт.

Имя тоже нельзя взять произвольным — документация уточняет:

Вместо User mention указывайте полное имя пользователя из профиля в MAX, в том числе фамилию. Если фамилия отсутствует — только имя.

Раздел «Форматирование», dev.max.ru

Моноширинный текст теряет переносы строк

Моноширинный текст в Markdown оформляется обратными кавычками — `code`. Обычно такой блок в текстовых форматах существует именно затем, чтобы сохранить исходные отступы и переносы: код, таблицы, вывод консоли. У MAX это правило перевёрнуто — рядом с тегом документация оставляет предупреждение:

Переводы строк внутри этого блока обрабатываются как пробелы.

Раздел «Форматирование», dev.max.ru

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

Опечатка выдаёт себя: шесть уровней, а тег один

В Markdown заголовок — это одна решётка: # заголовок. В HTML-режиме документация обещает выбор из шести уровней — <h1><h6>, как в обычном HTML. Но в самой таблице вместо шести разных тегов перечислены только четыре, а два места заняты повтором:

<h1>, <h2>, <h3>, <h4>, <h1>, <h1>

Раздел «Форматирование», dev.max.ru — тег h1 указан вместо h5 и h6

Заметить опечатку в интерфейсе бота невозможно в принципе — документация тут же поясняет почему:

Теги всех уровней отображаются одинаково.

Раздел «Форматирование», dev.max.ru

Раз все шесть уровней визуально неотличимы друг от друга, ошибка в перечне тегов не влияет ни на одного бота — она осталась бы незамеченной и в тексте этой самой таблицы, если бы её не читать посимвольно.

Кто на самом деле пользуется разметкой

Объектом NewMessageBody пользуются три метода API: отправка нового сообщения POST /messages, редактирование PUT /messages и ответ на callback-кнопку POST /answers. Но раздел про форматирование текста на страницах самих методов прямо раскрывают только две — POST и PUT /messages; страница POST /answers лишь ссылается на объект NewMessageBody, не пересказывая его поля.

Пользовательской справки MAX это не касается вовсе: ни слова «Markdown», ни слова «подчёркнутый» в её 192 статьях нет — она рассказывает о переписке, а не о том, как боты собирают текст. Вся разметка целиком — забота стороны, которая пишет код бота, будь то библиотека на Go или любая другая, независимо от того, как именно бот был создан.

Кнопки под сообщением к тексту отношения не имеют — они собираются отдельным полем attachments того же объекта, а не разметкой text. Подробнее — в разборе клавиатуры бота.

Частые вопросы

Можно ли смешать Markdown и HTML в одном сообщении бота?

Нет. Поле format у объекта NewMessageBody принимает одно значение на всё сообщение — либо markdown, либо html. Смешать теги двух форматов в одном тексте нельзя, разбирается только выбранный.

Как подчеркнуть текст в сообщении бота MAX?

В Markdown — обернуть фрагмент двумя плюсами: ++текст++. В HTML — тегом <ins> или <u>. Обычный Markdown символа ++ для подчёркивания не знает — это добавила сама платформа.

Как боту упомянуть пользователя по имени?

Оформить ссылку со служебным адресом max://user/user_id вместо обычного URL: в Markdown — [Имя Фамилия](max://user/user_id), в HTML — <a href="max://user/user_id">. Имя нужно указывать полностью, с фамилией, если она есть в профиле.

Сохранятся ли переносы строк в моноширинном тексте бота?

Нет. Документация прямо предупреждает: переводы строк внутри блока `code` обрабатываются как пробелы, и многострочный фрагмент отобразится одной строкой.

Развиваете канал или бота в MAX?

Добавьте его в каталог MaxOfficial — читатели находят каналы через поиск и подборки, а статистика копится автоматически.

Добавить канал в каталог
разметка текста бота MAXMAX Bot API MarkdownNewMessageBody formatформатирование сообщений ботаподчёркнутый текст MAX
Разбор основан на видимом тексте раздела «Форматирование текста в сообщениях» и объекта NewMessageBody документации dev.max.ru, а также на снимке всех 29 страниц методов API; все замеры — по состоянию на 12 августа 2026 года. Числа справки — по корпусу из 192 статей help.max.ru.