Skip to main content

Обзор

Редактор меню позволяет администраторам полностью настраивать структуру навигации Cabinet: расположение кнопок, количество кнопок в ряду, стили, иконки, локализованные подписи и добавление кастомных URL-кнопок. Все изменения применяются мгновенно без перезапуска.

Возможности

  • Drag-and-drop сортировка рядов
  • Перемещение кнопок внутри ряда (вверх/вниз)
  • Настройка 1–3 кнопок на ряд
  • 8 встроенных секций (home, subscription, balance, referral, support, info, admin, language)
  • Кастомные URL-кнопки с выбором режима открытия
  • Цветовые стили: primary, success, danger, default
  • Кастомные emoji-иконки (Telegram Custom Emoji ID)
  • Мультиязычные подписи (ru, en, ua, zh, fa)
  • Включение/отключение отдельных кнопок
  • Сброс к настройкам по умолчанию
Для работы редактора меню необходимо:
  1. CABINET_ENABLED=true
  2. MENU_LAYOUT_ENABLED=true в настройках бота
  3. RBAC-разрешение settings:edit для редактирования, settings:read для просмотра

Включение

При включении структура меню управляется через редактор, а не задаётся статически в коде. Подробнее о режимах меню: Интерфейс и брендирование → Динамическое меню.

Использование

Открытие редактора

Cabinet → Админ-панель → Настройки → вкладка Редактор меню

Работа с рядами

Перетаскивание

Захватите ряд за ручку и перетащите для изменения порядка

Кнопок в ряду

Выберите 1, 2 или 3 кнопки на ряд через селектор в заголовке

Удаление ряда

Ряды, содержащие только кастомные кнопки, можно удалить целиком

Настройка кнопки

Нажмите на кнопку для раскрытия настроек:
Встроенные кнопки нельзя удалить — только отключить или переместить. Кастомные кнопки можно удалить через иконку корзины.

Добавление кнопки

  1. В нужном ряду нажмите Добавить кнопку
  2. Выберите из списка:
    • Встроенную секцию — доступны только ещё не использованные
    • URL-кнопку — создаёт кастомную кнопку с настраиваемой ссылкой

Сохранение и сброс

  • Сохранить — применяет все изменения атомарно (один запрос)
  • Отменить — возвращает к последнему сохранённому состоянию
  • Сбросить — восстанавливает расположение по умолчанию (с подтверждением)

Кастомные URL-кнопки

Кастомные кнопки позволяют добавлять внешние ссылки в меню Cabinet.

Режим открытия (open_in)

При выборе webapp URL обязательно должен начинаться с https://. HTTP-ссылки будут отклонены при сохранении.

Примеры использования

  • Ссылка на сайт проекта (external)
  • Ссылка на FAQ или документацию (external)
  • Встроенная веб-форма обратной связи (webapp)
  • Внешний сервис мониторинга (webapp)

Расположение по умолчанию

Встроенные секции:

Ограничения


API эндпоинты

GET /cabinet/admin/menu-layout

Возвращает текущую конфигурацию меню (объединяет layout и стили). Ответ:

PUT /cabinet/admin/menu-layout

Сохранение полной конфигурации. Тело запроса — тот же формат, что и ответ GET. Сервер атомарно обновляет две системные настройки:
  • CABINET_MENU_LAYOUT — расположение рядов и кастомные кнопки
  • CABINET_BUTTON_STYLES — стили встроенных секций

POST /cabinet/admin/menu-layout/reset

Сброс к расположению по умолчанию. Требует подтверждения на фронтенде.

Кэширование

Конфигурация меню кэшируется в памяти для быстрого доступа:
  • Загрузка — при старте бота (load_menu_layout_cache(), load_button_styles_cache())
  • Обновление — автоматически после каждого сохранения через API
  • Формат — deep copy из кэша для защиты от мутаций
Если кэш не загружен, используются значения по умолчанию.

Устранение проблем

Вкладка редактора не отображается

  1. MENU_LAYOUT_ENABLED=true?
  2. У пользователя есть RBAC-разрешение settings:read?
  3. Пользователь является администратором (ADMIN_IDS или ADMIN_EMAILS)?

Кнопка webapp не работает

  1. URL начинается с https://? HTTP не поддерживается для webapp-режима
  2. Сайт по URL доступен и не блокирует iframe?
  3. Telegram WebApp поддерживает URL? (некоторые домены могут быть заблокированы)

Изменения не применяются

  1. Нажали Сохранить после внесения изменений?
  2. Проверьте логи бота на ошибки валидации:
  3. Попробуйте Сбросить и настроить заново