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

admin

Эндпоинтов: 13

GET /admin/api/app-settings

Настройки платформы (вход Studio + Telegram)

Авторизация: Admin cookie

Читает режим входа Studio (dev_login | telegram_widget) и статус Telegram-провайдера. Секреты не отдаются — только флаги *Configured.

Auth: cookie admin_auth. UI: /admin/settings (SSR; GET для curl/Swagger).

curl -s -c admin.txt -X POST http://localhost:5000/admin/api/login \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'key=YOUR_ADMIN_API_KEY'
curl -s http://localhost:5000/admin/api/app-settings -b admin.txt

Параметры

ИмяInОбязательныйОписаниеПример
admin_authcookieнетAdmin cookie после /admin/login (ADMIN_API_KEY). Без неё — 401 ADMIN_UNAUTHORIZED."eyJib2R5IjoiLi4uIiwic2lnIjoiLi4uIn0"

Ответы

КодОписание
200Текущие настройки
401Нет admin-сессии

Пример ответа 200

{
"configured": true,
"auth": {
"loginMode": "dev_login",
"devLoginEnabled": true
},
"providers": {
"telegram": {
"clientId": "123456789",
"botUsername": "my_bot",
"clientSecretConfigured": true,
"botTokenConfigured": true,
"configured": true
}
}
}

PUT /admin/api/app-settings

Сохранить настройки платформы

Авторизация: Admin cookie

Upsert секций auth (режим входа) и telegram (Client ID / secret / bot token / username). Пустой clientSecret / botToken не затирает уже сохранённые значения.

При dev_login поля Telegram необязательны. botUsername можно не слать — резолв через getMe при заданном bot token.

UI: форма /admin/settings.

curl -s -c admin.txt -X POST http://localhost:5000/admin/api/login \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'key=YOUR_ADMIN_API_KEY'
curl -s -X PUT http://localhost:5000/admin/api/app-settings -b admin.txt \
-H 'Content-Type: application/json' \
-d '{"auth":{"loginMode":"dev_login"}}'

Тело запроса: AdminAppSettingsPayload

Параметры

ИмяInОбязательныйОписаниеПример
admin_authcookieнетAdmin cookie после /admin/login (ADMIN_API_KEY). Без неё — 401 ADMIN_UNAUTHORIZED."eyJib2R5IjoiLi4uIiwic2lnIjoiLi4uIn0"

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

{
"auth": {
"loginMode": "dev_login"
},
"telegram": {
"clientId": "123456789",
"botUsername": "my_bot",
"clientSecret": "",
"botToken": ""
}
}

Ответы

КодОписание
200Настройки сохранены
400Валидация секции auth/telegram
401Нет admin-сессии
500Внутренняя ошибка

Пример ответа 200

{
"success": true,
"configured": true,
"auth": {
"loginMode": "dev_login",
"devLoginEnabled": true
},
"providers": {
"telegram": {
"configured": true,
"botUsername": "my_bot"
}
}
}

POST /admin/api/bot-folders/cleanup

Очистить осиротевшие папки bots/

Авторизация: Admin cookie

Сканирует каталог bots/, парсит имена …_{projectId}_{tokenId} и удаляет папки, чей проект уже нет в БД. Непонятные имена → skipped (не трогает).

Auth: только admin_auth. Ops / curl / Swagger (UI в hub пока нет).

curl -s -c admin.txt -X POST http://localhost:5000/admin/api/login \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'key=YOUR_ADMIN_API_KEY'
curl -s -X POST http://localhost:5000/admin/api/bot-folders/cleanup -b admin.txt

Параметры

ИмяInОбязательныйОписаниеПример
admin_authcookieнетAdmin cookie после /admin/login (ADMIN_API_KEY). Без неё — 401 ADMIN_UNAUTHORIZED."eyJib2R5IjoiLi4uIiwic2lnIjoiLi4uIn0"

Ответы

КодОписание
200Очистка выполнена (возможно 0 удалений)
401Нет admin-сессии
500Ошибка чтения БД или fs

Пример ответа 200

{
"deleted": [
"bot_999_1"
],
"skipped": [],
"count": 1,
"message": "Удалено 1 папок"
}

POST /admin/api/login

Войти в админку

Авторизация: Публичный

Форма с полем key = ADMIN_API_KEY. При успехе ставит httpOnly cookie admin_auth (Path=/admin, 7 дней, HMAC от ключа) и редиректит на /admin или /admin/settings (если платформа ещё не настроена).

Неверный ключ → 302 на /admin/login?error=1. Без ключа в non-prod → 503; в production без ADMIN_API_KEY весь /admin не монтируется.

UI: /admin/login. User connect.sid / Bearer PAT здесь не работают.

curl -s -c admin.txt -X POST http://localhost:5000/admin/api/login \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'key=YOUR_ADMIN_API_KEY'

Ответы

КодОписание
302Успех → Location /admin или /admin/settings + Set-Cookie. Ошибка ключа → /admin/login?error=1
503Admin не настроен (нет ключа)

POST /admin/api/logout

Выйти из админки

Авторизация: Публичный

Сбрасывает cookie admin_auth и редиректит на /admin/login.

UI: кнопка «Выйти» на hub /admin.

curl -s -c admin.txt -b admin.txt -X POST http://localhost:5000/admin/api/logout

Параметры

ИмяInОбязательныйОписаниеПример
admin_authcookieнетAdmin cookie после /admin/login (ADMIN_API_KEY). Без неё — 401 ADMIN_UNAUTHORIZED."eyJib2R5IjoiLi4uIiwic2lnIjoiLi4uIn0"

Ответы

КодОписание
302Location /admin/login, cookie очищена

GET /admin/api/status

Статус admin-сессии

Авторизация: Публичный

Публичный JSON: валидна ли admin_auth и доступна ли админка. adminEnabled всегда true, если роут смонтирован.

curl -s -b admin.txt http://localhost:5000/admin/api/status

Параметры

ИмяInОбязательныйОписаниеПример
admin_authcookieнетAdmin cookie после /admin/login (ADMIN_API_KEY). Без неё — 401 ADMIN_UNAUTHORIZED."eyJib2R5IjoiLi4uIiwic2lnIjoiLi4uIn0"

Ответы

КодОписание
200Состояние сессии

Пример ответа 200

{
"authenticated": true,
"adminEnabled": true
}

PATCH /admin/api/templates/{id}/featured

Рекомендуемый сценарий (featured on/off)

Авторизация: Admin cookie

Включает или снимает «рекомендуемый» шаблон в каталоге Studio (featured 0|1). Обычный PUT /api/templates/{id} это поле игнорирует.

Auth: только admin_auth. Ops / curl / Swagger.

curl -s -c admin.txt -X POST http://localhost:5000/admin/api/login \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'key=YOUR_ADMIN_API_KEY'
curl -s -X PATCH http://localhost:5000/admin/api/templates/12/featured -b admin.txt \
-H 'Content-Type: application/json' -d '{"featured":1}'

Тело запроса: AdminSetTemplateFeaturedRequest

Параметры

ИмяInОбязательныйОписаниеПример
idpathдаID записи bot_templates"12"
admin_authcookieнетAdmin cookie после /admin/login (ADMIN_API_KEY). Без неё — 401 ADMIN_UNAUTHORIZED."eyJib2R5IjoiLi4uIiwic2lnIjoiLi4uIn0"

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

{
"featured": 1
}

Ответы

КодОписание
200Шаблон обновлён
400Неверный id или featured
401Нет admin-сессии
404Шаблон не найден

Пример ответа 200

{
"id": 1,
"ownerId": null,
"name": "FAQ-бот",
"description": "Ответы на частые вопросы",
"data": {
"sheets": [
{
"id": "main",
"name": "Основной",
"nodes": [
{
"id": "start",
"type": "start",
"position": {
"x": 0,
"y": 0
},
"data": {
"messageText": "Привет!"
}
}
],
"edges": []
}
]
},
"flow_data": {
"sheets": [
{
"id": "main",
"name": "Основной",
"nodes": [
{
"id": "start",
"type": "start",
"position": {
"x": 0,
"y": 0
},
"data": {
"messageText": "Привет!"
}
}
],
"edges": []
}
]
},
"category": "utility",
"tags": [
"faq",
"support"
],
"isPublic": 1,
"difficulty": "easy",
"authorName": null,
"useCount": 120,
"rating": 0,
"ratingCount": 0,
"featured": 1,
"language": "ru",
"complexity": 2,
"estimatedTime": 10,
"createdAt": "2026-01-10T10:00:00.000Z",
"updatedAt": "2026-01-10T10:00:00.000Z"
}

POST /admin/api/templates/recreate

Пересоздать встроенные сценарии (алиас refresh)

Авторизация: Admin cookie

То же force-seed, что POST …/templates/refresh (совместимый алиас).

Auth: только admin_auth.

curl -s -c admin.txt -X POST http://localhost:5000/admin/api/login \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'key=YOUR_ADMIN_API_KEY'
curl -s -X POST http://localhost:5000/admin/api/templates/recreate -b admin.txt

Параметры

ИмяInОбязательныйОписаниеПример
admin_authcookieнетAdmin cookie после /admin/login (ADMIN_API_KEY). Без неё — 401 ADMIN_UNAUTHORIZED."eyJib2R5IjoiLi4uIiwic2lnIjoiLi4uIn0"

Ответы

КодОписание
200Seed выполнен
401Нет admin-сессии
500Ошибка seed

Пример ответа 200

{
"message": "Templates recreated successfully",
"timestamp": "2026-08-08T19:00:00.000Z"
}

POST /admin/api/templates/refresh

Обновить встроенные сценарии каталога

Авторизация: Admin cookie

Принудительно перезаписывает системные шаблоны в bot_templates (каталог «Сценарии» в Studio).

Auth: только admin_auth. Ops / curl / Swagger.

curl -s -c admin.txt -X POST http://localhost:5000/admin/api/login \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'key=YOUR_ADMIN_API_KEY'
curl -s -X POST http://localhost:5000/admin/api/templates/refresh -b admin.txt

Параметры

ИмяInОбязательныйОписаниеПример
admin_authcookieнетAdmin cookie после /admin/login (ADMIN_API_KEY). Без неё — 401 ADMIN_UNAUTHORIZED."eyJib2R5IjoiLi4uIiwic2lnIjoiLi4uIn0"

Ответы

КодОписание
200Seed выполнен
401Нет admin-сессии
500Ошибка seed

Пример ответа 200

{
"message": "Templates refreshed successfully",
"timestamp": "2026-08-08T19:00:00.000Z"
}

GET /admin/api/update-check

Проверка обновлений на GitHub

Авторизация: Admin cookie

Сравнивает локальный version.json с main на GitHub. ?refresh=1 сбрасывает кеш проверки.

Auth: cookie admin_auth. UI: кнопка «Проверить обновления» на /admin.

curl -s -c admin.txt -X POST http://localhost:5000/admin/api/login \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'key=YOUR_ADMIN_API_KEY'
curl -s 'http://localhost:5000/admin/api/update-check?refresh=1' -b admin.txt

Параметры

ИмяInОбязательныйОписаниеПример
refreshqueryнет"1"
admin_authcookieнетAdmin cookie после /admin/login (ADMIN_API_KEY). Без неё — 401 ADMIN_UNAUTHORIZED."eyJib2R5IjoiLi4uIiwic2lnIjoiLi4uIn0"

Ответы

КодОписание
200Результат сравнения версий
401Нет admin-сессии

Пример ответа 200

{
"current": {
"version": "2.2.0.9",
"releasedAt": "2026-08-20"
},
"latest": {
"version": "2.2.0.9",
"releasedAt": "2026-08-20",
"notesUrl": null
},
"updateAvailable": false,
"checkFailed": false,
"deployGuideUrl": "https://github.com/org/telegram-bot-builder"
}

GET /admin/api/users

Список аккаунтов платформы

Авторизация: Admin cookie

Все записи telegram_users с числом проектов во владении и участий. Поиск по имени, @username и числовому Telegram ID. Только чтение.

Auth: cookie admin_auth. Сессия Studio (connect.sid) не подходит.

UI: /admin/users.

curl -s -c admin.txt -X POST http://localhost:5000/admin/api/login \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'key=YOUR_ADMIN_API_KEY'
curl -s 'http://localhost:5000/admin/api/users?search=ivan&page=1&perPage=25' -b admin.txt

Параметры

ИмяInОбязательныйОписаниеПример
searchqueryнет"ivan"
pagequeryнет1
perPagequeryнет25
admin_authcookieнетAdmin cookie после /admin/login (ADMIN_API_KEY). Без неё — 401 ADMIN_UNAUTHORIZED."eyJib2R5IjoiLi4uIiwic2lnIjoiLi4uIn0"

Ответы

КодОписание
200Страница списка аккаунтов
401Нет admin-сессии
500Внутренняя ошибка

Пример ответа 200

{
"items": [
{
"id": 123456789,
"firstName": "Иван",
"lastName": "Петров",
"username": "ivan_bot",
"photoUrl": null,
"createdAt": "2026-01-01T08:00:00.000Z",
"updatedAt": "2026-03-10T09:15:00.000Z",
"ownedCount": 2,
"sharedCount": 1
}
],
"total": 1,
"page": 1,
"perPage": 25
}

GET /admin/api/users/{id}

Карточка аккаунта платформы

Авторизация: Admin cookie

Профиль telegram_users и списки проектов во владении / участия. Из bot_projects отдаются только id, name, даты — без data, bot_token, session_id.

Auth: cookie admin_auth.

UI: /admin/users/{id}.

curl -s -c admin.txt -X POST http://localhost:5000/admin/api/login \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'key=YOUR_ADMIN_API_KEY'
curl -s http://localhost:5000/admin/api/users/123456789 -b admin.txt

Параметры

ИмяInОбязательныйОписаниеПример
idpathда"123456789"
admin_authcookieнетAdmin cookie после /admin/login (ADMIN_API_KEY). Без неё — 401 ADMIN_UNAUTHORIZED."eyJib2R5IjoiLi4uIiwic2lnIjoiLi4uIn0"

Ответы

КодОписание
200Карточка аккаунта
400Неверный id
401Нет admin-сессии
404Аккаунт не найден
500Внутренняя ошибка

Пример ответа 200

{
"user": {
"id": 123456789,
"firstName": "Иван",
"lastName": "Петров",
"username": "ivan_bot",
"photoUrl": null,
"createdAt": "2026-01-01T08:00:00.000Z",
"updatedAt": "2026-03-10T09:15:00.000Z"
},
"ownedProjects": [
{
"id": 42,
"name": "Мой бот",
"createdAt": "2026-01-15T10:00:00.000Z",
"updatedAt": "2026-03-01T12:30:00.000Z"
}
],
"sharedProjects": [
{
"id": 7,
"name": "Командный проект",
"createdAt": "2026-02-01T11:00:00.000Z",
"updatedAt": "2026-02-28T16:00:00.000Z",
"ownerId": 987654321,
"ownerDisplayName": "@team_lead"
}
]
}

GET /admin/api/version

Установленная версия приложения

Авторизация: Admin cookie

Читает version.json из образа/рабочей копии. Без обращения к GitHub.

Auth: cookie admin_auth. UI: карточка на /admin.

curl -s -c admin.txt -X POST http://localhost:5000/admin/api/login \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'key=YOUR_ADMIN_API_KEY'
curl -s http://localhost:5000/admin/api/version -b admin.txt

Параметры

ИмяInОбязательныйОписаниеПример
admin_authcookieнетAdmin cookie после /admin/login (ADMIN_API_KEY). Без неё — 401 ADMIN_UNAUTHORIZED."eyJib2R5IjoiLi4uIiwic2lnIjoiLi4uIn0"

Ответы

КодОписание
200Текущая версия
401Нет admin-сессии

Пример ответа 200

{
"version": "2.2.0.9",
"releasedAt": "2026-08-20",
"notesUrl": null
}