Ответы в окне чата оформляются разметкой Gratio — той же, что в мессенджерах и почте: *жирный*, _курсив_, [ссылка](https://…). Знаки и правила — в статье Разметка текста. Здесь — что особенного у окна.
Что показывает окно
Жирный, курсив, подчёркнутый, зачёркнутый, код, блок кода, цитату и ссылку. Спойлер — обычным текстом. getCapabilities у чата на сайте отвечает formatting: true.
Пример запроса
Ответ ассистента с жирным и ссылкой на расписание:
curl
curl -X POST "$GRATIO_URL/v1/instances/$GRATIO_ID/sendMessage" \
-H "Authorization: Bearer $GRATIO_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"chatId": "vq3k7m2x4a6b2c4d6e7f2g3h4",
"message": "*Пробное занятие* — бесплатно.\nРасписание — [на сайте](https://school.ru/schedule).",
"author": {
"kind": "assistant",
"name": "Алина"
}
}'
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": "vq3k7m2x4a6b2c4d6e7f2g3h4",
"message": "*Пробное занятие* — бесплатно.\nРасписание — [на сайте](https://school.ru/schedule).",
"author": {"kind": "assistant", "name": "Алина"},
}
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: "vq3k7m2x4a6b2c4d6e7f2g3h4",
message: "*Пробное занятие* — бесплатно.\nРасписание — [на сайте](https://school.ru/schedule).",
author: { kind: "assistant", name: "Алина" },
};
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' => 'vq3k7m2x4a6b2c4d6e7f2g3h4',
'message' => '*Пробное занятие* — бесплатно.
Расписание — [на сайте](https://school.ru/schedule).',
'author' => ['kind' => 'assistant', 'name' => 'Алина'],
];
$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);
Посетитель увидит «Пробное занятие» жирным и ссылку «на сайте». В уведомлении и истории текст придёт как отправлен — со звёздочками и скобками.
Где работает
| Что | Где разметка |
|---|---|
| sendMessage, editMessage | текст |
| sendFileByUpload, sendFileByUrl | подпись caption |
| sendInteractiveButtons и sendButtons | шапка, текст и подвал |
| sendForm | заголовок title и текст body |
Реплики посетителя не разбираются: их текст приходит как есть. Отправленное раньше окно не перерисовывает.
Ссылки
- Адрес ссылки — только
httpsбез логина в адресе,mailto— один адрес, из параметров толькоsubjectиbody— иtel. Остальное ссылкой не станет. - Подпись, в которой виден другой адрес, почта или номер, ссылкой не станет:
[school.ru](https://example.org)уйдёт текстом. - Голые адреса в тексте окно делает ссылками само.
Чужой текст
Вопрос из другого канала, отзыв, ввод пользователя отправляйте с formatting: "none" — иначе [Подтвердить](https://…) из него станет ссылкой от имени компании. "none" работает и для кнопок — шапка, текст, подвал, — и для формы:
curl -X POST "$GRATIO_URL/v1/instances/$GRATIO_ID/sendMessage" \
-H "Authorization: Bearer $GRATIO_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"chatId": "vq3k7m2x4a6b2c4d6e7f2g3h4",
"message": "Ваш вопрос: «Можно *перенести* на воскресенье?» Передали администратору.",
"formatting": "none"
}'
Что дальше
- Разметка текста — знаки, правила и другие площадки.
- Автор сообщения — подпись под ответом.
- Чат на сайте через API — что ещё умеет канал.
