Перейти к содержимому

Разметка текста

Обновлено 19 октября 2026

Приложение пишет текст со спецсимволами — один и тот же для всех каналов: *жирный*, _курсив_, [ссылка](https://…). Канал переводит разметку в оформление своей площадки. Чего площадка не умеет, то уходит обычным текстом, без спецсимволов.

Разметка

Стиль Как написать Пример
жирный *текст* или **текст** *Сегодня занятие в каб. 104*
курсив _текст_ _по желанию_
подчёркнутый __текст__ __обязательно__
зачёркнутый ~текст~ или ~~текст~~ ~в 15:00~ в 16:00
спойлер ||текст|| ||ответ: 42||
моноширинный `текст` — внутри разметки нет `ROBO-2026`
блок кода ```текст``` — можно в несколько строк, внутри разметки нет
цитата > текст в начале строки; строки подряд — одна цитата > Вопрос родителя
ссылка [текст](https://…); ещё mailto: и tel: [расписание](https://school.ru/schedule)

Стили можно вкладывать: *жирный _и курсив_*.

Правила знаков

  • Открывающий знак стоит в начале слова, закрывающий — в конце. Текст между ними не начинается и не кончается пробелом и не переходит на новую строку.
  • Поэтому 2*3*4, snake_case, a * b, пункты списка * … и знак без пары остаются как есть.
  • Адрес в тексте всегда цельный: знаки внутри https://school.ru/a_b_c не разбираются.
  • Обратная косая черта перед спецсимволом оставляет его как есть: \* — звёздочка. Так экранируются *, _, ~, `, |, скобки, > и сама косая черта.

Пример запроса

Объявление с жирным, зачёркнутым и ссылкой:

curl

curl -X POST "$GRATIO_URL/v1/instances/$GRATIO_ID/sendMessage" \
  -H "Authorization: Bearer $GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "chatId": "+79991234567",
    "message": "*Занятие переносится* ~в 15:00~ в 16:00.\nРасписание — [на сайте](https://school.ru/schedule).",
    "clientMessageId": "notice-1"
  }'

Python

import os
import requests

BASE = f"{os.environ['GRATIO_URL']}/v1/instances/{os.environ['GRATIO_ID']}"
HEADERS = {"Authorization": f"Bearer {os.environ['GRATIO_TOKEN']}"}

url = f"{BASE}/sendMessage"
payload = {
    "chatId": "+79991234567",
    "message": "*Занятие переносится* ~в 15:00~ в 16:00.\nРасписание — [на сайте](https://school.ru/schedule).",
    "clientMessageId": "notice-1",
}
response = requests.post(url, json=payload, headers=HEADERS, timeout=60)
print(response.status_code, response.json())

Node.js

const { GRATIO_URL, GRATIO_ID, GRATIO_TOKEN } = process.env;
const base = `${GRATIO_URL}/v1/instances/${GRATIO_ID}`;
const auth = { Authorization: `Bearer ${GRATIO_TOKEN}` };

const url = `${base}/sendMessage`;
const payload = {
  chatId: "+79991234567",
  message: "*Занятие переносится* ~в 15:00~ в 16:00.\nРасписание — [на сайте](https://school.ru/schedule).",
  clientMessageId: "notice-1",
};
const response = await fetch(url, {
  method: "POST",
  headers: { ...auth, "Content-Type": "application/json" },
  body: JSON.stringify(payload),
});
console.log(response.status, await response.json());

PHP

<?php
$base = getenv('GRATIO_URL') . '/v1/instances/' . getenv('GRATIO_ID');
$auth = 'Authorization: Bearer ' . getenv('GRATIO_TOKEN');
$url = $base . '/sendMessage';
$payload = [
    'chatId' => '+79991234567',
    'message' => '*Занятие переносится* ~в 15:00~ в 16:00.
Расписание — [на сайте](https://school.ru/schedule).',
    'clientMessageId' => 'notice-1',
];

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [$auth, 'Content-Type: application/json'],
    CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 60,
]);
$response = json_decode(curl_exec($ch), true);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), PHP_EOL;
print_r($response);

В журнале, уведомлениях и getChatHistory остаётся исходный текст со спецсимволами.

Как показывает каждая площадка

Стиль MAX Telegram WhatsApp Почта Чат на сайте
жирный пока со знаками жирный жирный жирный жирный
курсив пока со знаками курсив курсив курсив курсив
подчёркнутый пока со знаками подчёркнутый текстом подчёркнутый подчёркнутый
зачёркнутый пока со знаками зачёркнутый зачёркнутый зачёркнутый зачёркнутый
спойлер пока со знаками спойлер текстом текстом текстом
моноширинный пока со знаками код код код код
блок кода пока со знаками блок кода блок кода блок кода блок кода
цитата пока со знаками цитата цитата цитата цитата
ссылка пока со знаками ссылка «текст (адрес)» ссылка ссылка

«Текстом» — без спецсимволов: __обязательно__ в WhatsApp дойдёт словом «обязательно». «Со знаками» — как написано, со звёздочками и скобками.

  • MAX — разметка включится после проверки на живом номере; пока formatting: false в getCapabilities, и спецсимволы доходят как есть.
  • WhatsApp экранирования не знает: знак, который остался текстом, площадка может прочитать как своё оформление.
  • Почта. Письмо уходит с HTML-оформлением; простая часть письма и тема — без спецсимволов.
  • Чат на сайте — свои правила ссылок, см. Разметка в окне чата.

Где работает

Метод Где разметка
sendMessage, editMessage текст
sendFileByUpload, sendFileByUrl подпись caption
sendInteractiveButtons и sendButtons шапка, текст и подвал
sendForm заголовок и текст формы

Входящие сообщения разметкой не размечаются: оформление собеседника в текст уведомления пока не переводится.

Чужой текст: formatting none

Параметр formatting: "gratio" — по умолчанию, "none" — текст как есть, без разбора. Другое значение — 400 validation.

Чужой текст — сообщение собеседника из другого канала, отзыв, ввод пользователя — отправляйте с "none". Иначе [Подтвердить](https://…) из такого текста станет ссылкой от имени компании, а случайные звёздочки — жирным:

curl -X POST "$GRATIO_URL/v1/instances/$GRATIO_ID/sendMessage" \
  -H "Authorization: Bearer $GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "chatId": "+79991234567",
    "message": "Ваш вопрос: «Можно *перенести* на воскресенье?» Передали администратору.",
    "formatting": "none"
  }'

Вместо "none" можно экранировать спецсимволы косой чертой: \*, \[, \_.

Кнопки оформления в интерфейсе

getCapabilities отвечает formatting: true, если канал переводит разметку в оформление. Показывайте кнопки «жирный», «курсив», «ссылка» в своём интерфейсе только для таких каналов — иначе собеседник увидит звёздочки.

Что дальше

Была ли статья полезна?