API поддержки: FAQ / Help
База: https://api.bot-t.com
Все методы — POST, тело JSON, Content-Type: application/json.
Доступ (авторизация)
Для всех FAQ-методов нужны только:
| Параметр | Где | Обязательность | Описание |
|---|---|---|---|
bot_id | тело | да | ID бота |
token / botToken | query или тело | да* | Токен бота |
secretKey | query или тело | да* | Секретный ключ бота (вместо токена) |
* Достаточно либо token / botToken, либо secretKey.
Что не нужно
В отличие от тикетов, в FAQ не передавайте:
actor/lk_actor_user_id/lk_actor_ticketimplementer_id/manager_iduser_id/secret_user_key
Достаточно токена (или secretKey) и bot_id. Премиум-тариф не нужен.
POST https://api.bot-t.com/v1/support/question/<метод>?token=BOT_TOKEN
Content-Type: application/json
{ "bot_id": 1, ... }
Лимит: 120 запросов в минуту с одного IP.
Формат ответа
{ "result": true, "data": ... }
{ "result": false, "message": "текст ошибки" }
Булевы методы (delete, change-status, block-delete): data = "1".
Всегда проверяйте result === true перед использованием data.
Список методов
Чтение
| Метод | URL | Назначение |
|---|---|---|
index | POST /v1/support/question/index | Список siblings (корни или дети) |
tree | POST /v1/support/question/tree | Полное дерево с блоками |
get | POST /v1/support/question/get | Один вопрос + блоки + meta |
get-by-alias | POST /v1/support/question/get-by-alias | Вопрос по alias |
search | POST /v1/support/question/search | Поиск по title/alias/status |
block-index | POST /v1/support/question/block-index | Блоки вопроса |
export | POST /v1/support/question/export | Выгрузка дерева JSON |
export-html | POST /v1/support/question/export-html | HTML как на сайте + SEO |
analyze | POST /v1/support/question/analyze | Сводка структуры |
analyze-seo | POST /v1/support/question/analyze-seo | SEO-аудит |
promo-get | POST /v1/support/question/promo-get | landing_promo страницы |
settings-get | POST /v1/support/question/settings-get | Настройки веб-FAQ (alias, is_web) |
Управление вопросами
| Метод | URL | Назначение |
|---|---|---|
create | POST /v1/support/question/create | Создать вопрос / подвопрос |
update | POST /v1/support/question/update | title / alias / page_type |
meta-update | POST /v1/support/question/meta-update | SEO meta |
change-status | POST /v1/support/question/change-status | Вкл / выкл |
delete | POST /v1/support/question/delete | Архивировать (каскад, из каталога скрывается) |
move | POST /v1/support/question/move | К родителю или в корень |
sort-up | POST /v1/support/question/sort-up | Выше среди siblings |
sort-down | POST /v1/support/question/sort-down | Ниже среди siblings |
promo-update | POST /v1/support/question/promo-update | Обновить landing_promo |
promo-clear | POST /v1/support/question/promo-clear | Сбросить landing_promo к дефолтам |
settings-update | POST /v1/support/question/settings-update | Обновить alias / is_web веб-FAQ |
Управление блоками
| Метод | URL | Назначение |
|---|---|---|
block-create | POST /v1/support/question/block-create | Создать блок (+ text/title; фото — file/link) |
block-change-type | POST /v1/support/question/block-change-type | Сменить тип текст ↔ фото |
block-update | POST /v1/support/question/block-update | Текст / заголовок / is_faq |
upload-photo | POST /v1/support/question/upload-photo | Загрузить фото в S3 (ссылка) |
block-assign-photo | POST /v1/support/question/block-assign-photo | Картинка фото-блока |
block-delete | POST /v1/support/question/block-delete | Удалить блок |
block-move | POST /v1/support/question/block-move | В другой вопрос |
block-sort-up | POST /v1/support/question/block-sort-up | Выше в вопросе |
block-sort-down | POST /v1/support/question/block-sort-down | Ниже в вопросе |
Идентификаторы
| Поле | Что это |
|---|---|
bot_id | ID бота (всегда) |
id / support_id | ID поддержки (= model_id бота); можно не передавать |
question_id | ID вопроса |
where_question_id | Новый родитель (null/0 — корень) или вопрос для block-move |
block_id | ID блока |
type | 1 текст, 2 фото |
alias | URL-алиас вопроса |
message_id | ID сообщения блока (в ответе) |
photo_host / photo_url | Файл фото-блока в ответе (type: 2, после assign) |
file | Картинка base64 (upload-photo, block-create, block-change-type) |
name | Имя файла с расширением (с file, опционально) |
link | Публичная URL / host для block-assign-photo, block-create, block-change-type |
host | Имя файла в S3 после upload-photo (передавайте как link) |
landing_promo | Promo страницы: {ru:{url,title,text,button}, en:{…}} |
page_type | Тип публичной страницы: article (по умолчанию), collection_page или faq_page |
is_faq | У блока: true/false — Q&A FAQPage (title = вопрос, text = ответ) |
meta_description | SEO description; если непустой — перекрывает автотекст из блоков; на сайте обрезается до 160 |
alias (в settings) | Alias веб-FAQ → /faq/{alias} |
is_web | Включена ли публичная веб-версия FAQ |
Корень FAQ: question_id = null. Контент ответа — в блоках.
1. Чтение вопросов
Список siblings
POST /v1/support/question/index
curl -X POST "https://api.bot-t.com/v1/support/question/index?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
question_id | нет | Родитель; без / 0 — корни |
Дерево
POST /v1/support/question/tree
curl -X POST "https://api.bot-t.com/v1/support/question/tree?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "status": 1}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
status | нет | Фильтр 0 / 1 |
Получить один
POST /v1/support/question/get
curl -X POST "https://api.bot-t.com/v1/support/question/get?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "question_id": 10}'
data — вопрос + blocks[] + meta_*.
По alias
POST /v1/support/question/get-by-alias
curl -X POST "https://api.bot-t.com/v1/support/question/get-by-alias?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "alias": "kak-oplatit"}'
Поиск
POST /v1/support/question/search
curl -X POST "https://api.bot-t.com/v1/support/question/search?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "title": "оплат", "limit": 50, "offset": 0}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
title | нет | LIKE по названию |
alias | нет | LIKE по alias |
status | нет | 0 / 1 |
limit | нет | 1–200, по умолчанию 50 |
offset | нет | по умолчанию 0 |
2. Управление вопросами
Только token + bot_id (+ question_id где нужно). Без actor.
Создать
POST /v1/support/question/create
curl -X POST "https://api.bot-t.com/v1/support/question/create?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "title": "Как оплатить?", "question_id": null}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
title | да | Название |
question_id | нет | Родитель; без — корень |
alias из translit(title).
Обновить title / alias / page_type
POST /v1/support/question/update
curl -X POST "https://api.bot-t.com/v1/support/question/update?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "question_id": 10, "title": "Оплата", "alias": "oplata", "page_type": "faq_page"}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
question_id | да | Вопрос |
title | нет | Новое название |
alias | нет | Новый alias |
page_type | нет | article, collection_page или faq_page; если не передан — не меняется |
faq_page — страница вопросов и ответов: на сайте блоки рендерятся аккордеоном, в schema.org — FAQPage (title блока = вопрос, text = ответ).
Отдельно у любого блока на article можно поставить is_faq: true — тогда он тоже попадает в FAQPage-разметку.
Рекомендация: блоки с is_faq лучше ставить в конец статьи (после основного текста), чтобы Q&A шли отдельным блоком внизу.
article — обычная статья (schema.org Article). collection_page — хаб: CollectionPage + ItemList из дочерних статей; у BreadcrumbList у текущего пункта есть item.
SEO meta
POST /v1/support/question/meta-update
Единственный API-метод для SEO Meta вопроса. В ЛК meta правятся в одной форме с title/alias/page_type; в API это отдельный вызов (не через update).
curl -X POST "https://api.bot-t.com/v1/support/question/meta-update?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "question_id": 10, "meta_title": "Оплата — FAQ", "meta_description": "Как оплатить…", "meta_keywords": "оплата, faq"}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
question_id | да | Вопрос |
meta_title | нет | Если ключ не передан — старое значение. Если передан (в т.ч. "") — записывается как есть |
meta_description | нет | То же |
meta_keywords | нет | То же |
Ответ: объект вопроса (QuestionDto) без blocks, с полями meta_title / meta_description / meta_keywords.
Ошибка: meta not found (битая связь meta_id).
Рекомендуемые лимиты хранения (как в ЛК; API их не валидирует): meta_title / meta_keywords ≤ 255, meta_description ≤ 1000.
На публичной FAQ-странице (/faq/HELP/…):
| Поле | Поведение на сайте |
|---|---|
meta_description | Если непустой — в <meta name="description"> и OG. Если пустой — автотекст из первого блока (или fallback «Развернутые ответы…»). На выводе всегда обрезается до 160 символов (по словам). |
meta_title | Если непустой — в <title> / og:title; иначе title вопроса / логика блоков |
meta_keywords | Хранится в Meta; в head при наличии |
OG / Twitter (отдельного API нет)
| Тег | Откуда |
|---|---|
og:title / twitter title | meta_title или title страницы |
og:description / twitter description | тот же resolved meta_description |
og:image | первое подходящее фото из блоков (не из Meta); иначе дефолт help-og |
og:locale, hreflang | от URL (/en → en), не из Meta |
Полей og_* в meta-update нет и не планируется.
i18n Meta / контента
Через API двуязычен только landing_promo (ru / en).
Title, блоки и Meta — один RU-источник в БД. EN на /faq/…/en — on-demand перевод (в т.ч. meta_description), как у title и текста блоков. Отдельного EN-meta endpoint нет.
Статус
POST /v1/support/question/change-status
Переключает status 0 ↔ 1.
curl -X POST "https://api.bot-t.com/v1/support/question/change-status?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "question_id": 10}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
question_id | да | Вопрос |
Архивация (delete)
POST /v1/support/question/delete
Каскад по дереву: вопрос и все дочерние получают статус archived (status = 2).
Блоки и meta не удаляются — статья остаётся по прямому URL, но не попадает в публичный каталог / sitemap.
curl -X POST "https://api.bot-t.com/v1/support/question/delete?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "question_id": 10}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
question_id | да | Архивируемый вопрос |
Ответ: { "result": true, "data": "1" }.
Перемещение
К родителю или в корень
POST /v1/support/question/move
curl -X POST "https://api.bot-t.com/v1/support/question/move?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "question_id": 10, "where_question_id": 5}'
В корень — where_question_id: null, 0 или не передавать:
curl -X POST "https://api.bot-t.com/v1/support/question/move?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "question_id": 10, "where_question_id": 0}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
question_id | да | Какой вопрос |
where_question_id | нет | Новый родитель; null/0/нет — корень |
Порядок среди siblings
POST /v1/support/question/sort-up
POST /v1/support/question/sort-down
curl -X POST "https://api.bot-t.com/v1/support/question/sort-up?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "question_id": 10}'
curl -X POST "https://api.bot-t.com/v1/support/question/sort-down?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "question_id": 10}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
question_id | да | Вопрос |
Объект вопроса
{
"id": 10,
"support_id": 1,
"question_id": null,
"title": "Как оплатить?",
"alias": "kak-oplatit",
"status": 1,
"sort": 0,
"page_type": "article",
"blocks_count": 2,
"children_count": 1,
"meta_title": "Как оплатить?",
"meta_description": "",
"meta_keywords": "",
"blocks": [],
"children": []
}
3. Управление блоками
Только token + bot_id (+ block_id / question_id). Без actor.
Список
POST /v1/support/question/block-index
curl -X POST "https://api.bot-t.com/v1/support/question/block-index?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "question_id": 10}'
Создать
POST /v1/support/question/block-create
# текстовый блок
curl -X POST "https://api.bot-t.com/v1/support/question/block-create?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "question_id": 10, "type": 1, "text": "Оплата картой…", "title": ""}'
# Q&A-блок FAQPage (title = вопрос, text = ответ)
curl -X POST "https://api.bot-t.com/v1/support/question/block-create?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "question_id": 10, "type": 1, "is_faq": true, "title": "Как оплатить?", "text": "Картой или через ЮKassa."}'
# фото-блок сразу с картинкой (file = base64)
curl -X POST "https://api.bot-t.com/v1/support/question/block-create?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "question_id": 10, "type": 2, "text": "Подпись", "name": "faq.jpg", "file": "<base64>"}'
# фото-блок, файл уже в S3 (host из upload-photo)
curl -X POST "https://api.bot-t.com/v1/support/question/block-create?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "question_id": 10, "type": 2, "link": "faq-pay_xxxxx.jpg"}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
question_id | да | Вопрос |
type | да | 1 текст, 2 фото |
text / title | нет | Сразу записать; при is_faq — ответ / вопрос |
is_faq | нет | true/false/1/0 — блок как Q&A FAQPage; лучше размещать в конце статьи |
file | нет | Base64 картинки — только для type: 2 (загрузка + привязка) |
name | нет | Имя файла с расширением (с file) |
link | нет | host из upload-photo или URL — только для type: 2 |
Если переданы и file, и link — берётся результат загрузки file.
Лимит блоков — по тарифу.
Блоки FAQ (is_faq) лучше писать в конце статьи — после обычных текстовых/фото-блоков.
Смена типа блока
POST /v1/support/question/block-change-type
Меняет type блока и тип связанного сообщения (текст ↔ фото). Можно сразу приложить картинку.
# текст → фото
curl -X POST "https://api.bot-t.com/v1/support/question/block-change-type?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "block_id": 55, "type": 2, "link": "faq-pay_xxxxx.jpg"}'
# или с загрузкой
curl -X POST "https://api.bot-t.com/v1/support/question/block-change-type?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "block_id": 55, "type": 2, "name": "faq.jpg", "file": "<base64>"}'
# фото → текст
curl -X POST "https://api.bot-t.com/v1/support/question/block-change-type?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "block_id": 55, "type": 1}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
block_id | да | Блок |
type | да | Новый тип: 1 текст, 2 фото |
file / name / link | нет | Как у block-create — только вместе с type: 2 |
Тот же тип — no-op (блок без изменений). При смене фото → текст медиа сообщения сбрасывается.
Текст и заголовок
POST /v1/support/question/block-update
curl -X POST "https://api.bot-t.com/v1/support/question/block-update?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "block_id": 55, "text": "Обновлённый ответ", "title": "Заголовок"}'
# только пометить как Q&A FAQPage
curl -X POST "https://api.bot-t.com/v1/support/question/block-update?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "block_id": 55, "is_faq": true}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
block_id | да | Блок |
text | да* | Текст / ответ (при is_faq) |
title | да* | Заголовок / вопрос (при is_faq) |
is_faq | да* | true/false — блок как элемент FAQPage |
* Нужен хотя бы один из text / title / is_faq.
В ответе блока есть поле is_faq (bool).
Загрузка фото в storage
POST /v1/support/question/upload-photo
Кладёт картинку в photos бота на S3. В ответе — публичная ссылка и имя файла для block-assign-photo.
curl -X POST "https://api.bot-t.com/v1/support/question/upload-photo?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "name": "faq-pay.jpg", "file": "<base64 или data:image/jpeg;base64,...>"}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
file | да | Содержимое файла в base64 (можно data-URI) |
name | нет | Имя с расширением (jpg, jpeg, png, webp, …); без него — из data-URI или clipboard.png |
Ответ:
{
"result": true,
"data": {
"ok": true,
"link": "https://storage.bot-t.com/bot/1/photos/faq-pay_xxxxx.jpg",
"host": "faq-pay_xxxxx.jpg"
}
}
| Поле | Описание |
|---|---|
link | Публичная URL файла |
host | Имя в хранилище — передайте в block-assign-photo как link |
Картинка (type = 2)
POST /v1/support/question/block-assign-photo
Файл уже в хранилище фото бота (см. upload-photo). link — имя файла (host) или полный путь/URL (берётся последний сегмент).
Для нового блока удобнее сразу block-create с type: 2 и file/link. Для существующего текстового — block-change-type с type: 2 и file/link.
curl -X POST "https://api.bot-t.com/v1/support/question/block-assign-photo?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "block_id": 56, "link": "faq-pay_xxxxx.jpg"}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
block_id | да | Блок с type: 2 |
link | да | host из upload-photo или URL / путь (последний сегмент) |
В ответе у фото-блока будут photo_host и photo_url. Подпись — через block-update.
Удаление блока
POST /v1/support/question/block-delete
curl -X POST "https://api.bot-t.com/v1/support/question/block-delete?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "block_id": 55}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
block_id | да | Блок |
Перемещение блоков
В другой вопрос
POST /v1/support/question/block-move
curl -X POST "https://api.bot-t.com/v1/support/question/block-move?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "block_id": 55, "where_question_id": 12}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
block_id | да | Блок |
where_question_id | да | Целевой вопрос |
Порядок внутри вопроса
POST /v1/support/question/block-sort-up
POST /v1/support/question/block-sort-down
curl -X POST "https://api.bot-t.com/v1/support/question/block-sort-up?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "block_id": 55}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
block_id | да | Блок |
Объект блока
{
"id": 55,
"question_id": 10,
"type": 2,
"sort": 0,
"message_id": 500,
"is_faq": false,
"title": "",
"text": "Подпись к фото",
"photo_host": "faq-pay_xxxxx.jpg",
"photo_url": "https://storage.bot-t.com/bot/1/photos/faq-pay_xxxxx.jpg"
}
У текстового блока (type: 1) поля photo_* — null.
При is_faq: true на сайте блок — аккордеон Q&A, в schema.org — элемент FAQPage (title = вопрос, text = ответ).
Такие блоки лучше держать в конце статьи.
4. Выгрузка и анализ
JSON
POST /v1/support/question/export — пагинация по корням. limit / offset обязательны.
curl -X POST "https://api.bot-t.com/v1/support/question/export?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "limit": 20, "offset": 0}'
HTML (SEO)
POST /v1/support/question/export-html
curl -X POST "https://api.bot-t.com/v1/support/question/export-html?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "limit": 20, "offset": 0, "lang": "ru"}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
limit / offset | да | Пагинация по корням |
status | нет | Фильтр статуса |
lang | нет | ru / en — влияет на promo в HTML, не дублирует title/блоки |
Элемент data[]:
| Поле | Описание |
|---|---|
id, support_id, alias, status | Идентификаторы |
url, amphtml | Канон и AMP URL |
title, description, keywords, h1 | SEO-поля (description ≤ 160, как на сайте) |
landing_promo | Promo с учётом lang |
html | Полный HTML-документ |
seo | {title_length, description_length, content_length, has_h1, has_description, issues[]} |
Упрощённый OG в export-html: есть og:type / title / url; полный набор как на layout сайта не дублируется.
Анализ
Структура
POST /v1/support/question/analyze
curl -X POST "https://api.bot-t.com/v1/support/question/analyze?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
status | нет | Фильтр |
data: questions_total, questions_active, questions_inactive, roots_total, max_depth, blocks_total, blocks_text, blocks_photo, questions_without_blocks, empty_leaves.
SEO-аудит
POST /v1/support/question/analyze-seo
Те же параметры, что у export-html (bot_id, limit/offset, опционально status / lang).
data: pages_total, with_issues, issues (счётчики кодов), samples (до 5 примеров {id, url} на код). Типичные коды: title_too_short / title_too_long, missing_description, description_too_short / description_too_long, missing_h1, empty_content, дубли title/description.
5. Настройки FAQ и landing_promo
Только token + bot_id. Без actor.
Два уровня настроек:
| Уровень | Что | Методы |
|---|---|---|
| Поддержка (весь FAQ-сайт) | alias URL, is_web | settings-get / settings-update |
| Вопрос (каждая страница) | landing_promo ru/en, page_type | promo-*, update (page_type) |
Также у вопроса: update (title/alias/page_type), meta-update (SEO) — см. раздел 2.
5.1. Веб-FAQ: alias и is_web
Публичный адрес: /faq/{alias}/…
Получить
POST /v1/support/question/settings-get
curl -X POST "https://api.bot-t.com/v1/support/question/settings-get?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1}'
Ответ data:
{
"alias": "my-bot-help",
"is_web": true,
"faq_url": "/faq/my-bot-help"
}
| Поле ответа | Описание |
|---|---|
alias | Сегмент URL веб-FAQ |
is_web | Веб-версия FAQ включена |
faq_url | Относительный путь /faq/{alias} |
Обновить
POST /v1/support/question/settings-update
Непереданные поля не затираются.
curl -X POST "https://api.bot-t.com/v1/support/question/settings-update?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "alias": "my-bot-help", "is_web": true}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
alias | нет | Новый alias веб-FAQ |
is_web | нет | true / false / 1 / 0 |
Ответ — тот же объект, что у settings-get.
5.2. landing_promo вопроса
Рекламный блок внизу конкретной FAQ-страницы (не у всей поддержки).
Хранится в вопросе. Языки: ru, en.
Поля на язык:
| Поле | Описание |
|---|---|
url | Ссылка: https://… или /…. javascript: / data: запрещены |
title | Заголовок |
text | Описание |
button | Текст кнопки |
Пустые title / text / button → подставляются дефолты BOT-T.
Если promo не задан (promo-clear или никогда не сохраняли) — на сайте тоже дефолты; promo-get всё равно отдаёт заполненный объект с дефолтами.
landing_promo также приходит в get / tree / export у вопроса (если сохранён; иначе null).
Получить
POST /v1/support/question/promo-get
curl -X POST "https://api.bot-t.com/v1/support/question/promo-get?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "question_id": 10}'
Ответ data:
{
"ru": {
"url": "https://bot-t.com/",
"title": "Создать бота:",
"text": "бесплатно и без знаний программирования",
"button": "BOT-T.COM"
},
"en": {
"url": "https://bot-t.com/en",
"title": "Create a bot:",
"text": "free, no coding required",
"button": "BOT-T.COM"
}
}
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
question_id | да | Вопрос / страница FAQ |
Обновить
POST /v1/support/question/promo-update
Можно передать один язык или оба. Переданные языки мержатся с уже сохранёнными.
curl -X POST "https://api.bot-t.com/v1/support/question/promo-update?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"bot_id": 1,
"question_id": 10,
"landing_promo": {
"ru": {
"url": "https://bot-t.com/",
"title": "Создать бота:",
"text": "бесплатно и без знаний программирования",
"button": "BOT-T.COM"
},
"en": {
"url": "https://bot-t.com/en",
"title": "Create a bot:",
"text": "free, no coding required",
"button": "BOT-T.COM"
}
}
}'
| Поле | Обязательно | Описание |
|---|---|---|
bot_id | да | ID бота |
question_id | да | Вопрос |
landing_promo | да | Объект {ru?:{…}, en?:{…}}; хотя бы один язык |
Ошибки: landing_promo not found, landing_promo empty, landing_promo.ru.url invalid.
Сбросить
POST /v1/support/question/promo-clear
Удаляет сохранённый promo у вопроса → снова дефолты.
curl -X POST "https://api.bot-t.com/v1/support/question/promo-clear?token=BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_id": 1, "question_id": 10}'
Ответ — как у promo-get (с дефолтами).
Типовой сценарий: полная настройка страницы FAQ
Публичный URL: /faq/{alias} (канон раздела — HELP → /faq/HELP/{question_alias}, EN — …/en).
- Веб-FAQ —
settings-update:is_web: true,alias: "HELP"(проверка:settings-get). - Создать страницу —
create(title, опциональноalias,question_idродителя). По умолчаниюstatus=1,page_type=article. Meta создаётся с title вопроса; description/keywords пустые. - Тип страницы —
updateсpage_type:article|collection_page|faq_page(вcreatepage_typeнет). - Контент —
block-create(type: 1текст илиtype: 2+file/link); при необходимостиblock-update(text/title/is_faq),block-change-type,upload-photo→block-assign-photo. Для FAQPage:page_type=faq_pageили блоки сis_faq: true(лучше в конце статьи). - SEO —
meta-update(meta_title,meta_description,meta_keywords). Не черезupdate. - Promo —
promo-update(landing_promo.ru/.en). Сброс:promo-clear. - Структура —
move,sort-up/sort-down; блоки:block-move,block-sort-up/block-sort-down. - Проверка —
get/tree/search;export-html;analyze/analyze-seo. - Публикация / скрытие —
change-status(toggle0↔1, не идемпотентный publish). Архив:delete(status=2каскадом). Удаление блока:block-delete.
Краткий порядок API на одну новую статью:
settings-update → create → update(page_type) → block-create… → meta-update → promo-update → get / export-html.