Кастомные редакторы
Бывает работа, которой нет ни в одной панели, потому что она только ваша: свой пересчёт цен по формуле поставщика, сверка каталога с чужой учётной системой, экран «заполнить характеристики партии за один проход». Раздел «Кастомные редакторы» позволяет написать такой мини-редактор самому (или заказать его) и запустить внутри админки — в песочнице, с доступом ровно к тем данным, которые вы разрешили.
Открыть: Админ-панель → Кастомные редакторы (admin.cenaly.com/custom-editors). Раздел включается карточкой «Кастомные редакторы (SDK)» в магазине приложений — по умолчанию он скрыт. Кнопка «📌 В сайдбар» на самой странице выносит его в боковое меню, когда он нужен часто.
Что это за раздел#
Плагин — это собранный скрипт (index.js) и его описание (manifest.json). Панель загружает скрипт в изолированный фрейм: у него нет доступа ни к вашей сессии, ни к коду админки, ни к сети. Разговаривать с данными он может только через мост — набор разрешённых запросов, каждый из которых проверяется по выданным правам.
Страница состоит из блоков:
| Блок | Что в нём |
|---|---|
| Установленные редакторы | карточка на плагин: имя, «Версия», «Права», «Размещение», «Разрешённые сетевые хосты», «Обновлён», источник (репозиторий и тег ссылкой). Действия: «Открыть», «Включить» / «Выключить», проверка обновлений, «Удалить» |
| Установить редактор | установка из файлов с диска |
| Установка из GitHub | установка по адресу публичного репозитория и тегу |
| 🤖 Разработка с ИИ (вайб-кодинг) | шаблон проекта, промпт для ИИ-агента и снимок каталога как тестовые данные |
| 👩💻 Доступ разработчика | временные гранты подрядчику на режим разработчика |
| 🛠️ Режим разработчика | запуск плагина прямо с вашего компьютера, без установки |
Открытый редактор занимает весь экран, а адрес страницы получает пометку ?app=<идентификатор> — такой ссылкой можно поделиться с тем, у кого есть доступ.
Что нужно для запуска#
| Что | Зачем |
|---|---|
| Карточка «Кастомные редакторы (SDK)» в магазине приложений | раздел нишевый и по умолчанию выключен |
| Вы — владелец аккаунта | устанавливать, включать, удалять плагины и выдавать гранты может только владелец; сотрудники видят список только для чтения |
Собранный плагин: index.js + manifest.json |
либо ваш, либо от разработчика, либо релиз в публичном GitHub-репозитории |
| Для разработки — учётка сотрудника для разработчика | режим разработчика выдаётся по e-mail его рабочего логина |
Шаг 1. Решить, кто напишет редактор#
Путей три, и они отличаются тем, кто держит код:
| Путь | Кому подходит | Как |
|---|---|---|
| ИИ-агент по нашему шаблону | владелец, который готов объяснить задачу словами | блок «Разработка с ИИ»: шаблон + промпт → агент собирает релиз → вы его ставите |
| Свой или наёмный разработчик | есть подрядчик или разработчик в команде | выдайте ему грант на режим разработчика, он пишет и отлаживает на живом аккаунте, вы ставите готовый релиз |
| Готовый релиз из GitHub | плагин уже написан (вами или для вас) | «Установка из GitHub»: адрес репозитория и тег |
Во всех трёх случаях установка остаётся за владельцем: даже разработчик с грантом может только запустить свой код у себя в режиме разработчика, но не поставить его в аккаунт.
Шаг 2. Разработка с ИИ (вайб-кодинг)#
Блок «🤖 Разработка с ИИ (вайб-кодинг)» даёт четыре вещи, чтобы отдать задачу ИИ-агенту (Claude Code, Cursor и подобным) и не объяснять ему контракт с нуля:
- «⬇️ Скачать шаблон проекта (zip)» — готовый каркас плагина: манифест, точка входа, описание контракта (
GUIDE.en.md) и инструкция для агента. Архив собирается прямо в браузере, ничего внешнего скачивать не нужно. - «📋 Скопировать промпт для агента» — текст задания на английском: стартовать от шаблона, сверяться с гидом, чем проверять результат.
- Конфигурация набора инструментов для агента — с ним агент собирает плагин, поднимает локальный стенд-копию песочницы, делает скриншоты и снимки состояния, а в конце собирает релиз: zip для ручной установки или релиз в GitHub.
- «⬇️ Скачать снимок каталога (тестовая фикстура)» — ваши категории и позиции файлом, чтобы агент тестировал на реальных данных, а не на выдуманных.
⚠️ Из снимка целиком вырезаются кастомные поля других плагинов: данные, которые чужое расширение хранит на ваших карточках, не покидают аккаунт вместе с фикстурой.
Шаг 3. Установить редактор#
Из файлов. Блок «Установить редактор»: выберите «Бандл (index.js)» и «Манифест (manifest.json)» → «Проверить и установить». Панель сначала проверяет манифест — идентификатор, локализованное имя, версию, минимальную версию SDK, места размещения, права и список сетевых хостов, — а затем показывает консент: «Этот редактор запрашивает:» и список прав человеческим языком. Пока вы не нажали «Установить», ничего не устанавливается.
Из GitHub. Блок «Установка из GitHub»: поле «Репозиторий (URL или owner/repo)», поле «Тег (пусто = последний релиз)» и кнопка «Проверить репозиторий». Конвенция простая: manifest.json в корне репозитория, собранный dist/index.js в теге, тег вида v{версия}. Манифест и бандл тянутся прямо из вашего браузера. В обоих случаях при установке считается и запоминается отпечаток бандла (sha256): если файл потом подменят, запуск будет заблокирован, и панель попросит переустановить редактор.
Права и места размещения#
Права (их же называют скоупами) плагин просит в манифесте, а вы подтверждаете при установке. Полный список — вот он, больше мост не умеет ничего:
| Право | Что открывается |
|---|---|
| Читать каталог | категории, позиции, характеристики и кастомные поля карточек |
| Создавать и изменять позиции каталога | создание и правка позиций, импорт партии, свои поля и определения характеристик |
| Менять цены, доступность и стоп-листы по локациям | то же, что делает панель в меню точки |
| Читать складской справочник товаров | номенклатура склада на чтение |
| Хранить свои настройки в вашем хранилище | собственные ключи плагина в вашем аккаунте (до 1 МБ на ключ) |
| Серверная часть расширения | вызовы кода плагина на нашем сервере — единственный способ для него сходить в интернет |
Чего в списке нет вовсе — того плагин не получит никакими настройками: гостей и клиентов, заказов, чеков, финансов, сотрудников, переписок и звонков мост не отдаёт.
Места размещения (слоты) — три:
| Слот | Где появится |
|---|---|
| Своя страница | пункт внутри раздела «Кастомные редакторы», открывается на весь экран |
| Кнопка на странице каталога | инструмент рядом с каталогом позиций |
| Вкладка раздела «Склад» | плагин рисуется вкладкой склада — так упаковано наше встроенное расширение «ВетИС» |
Режим разработчика и доступ подрядчику#
Режим разработчика (блок «🛠️ Режим разработчика») монтирует плагин живьём с вашего компьютера: поле «URL бандла» принимает только адреса localhost / 127.0.0.1, рядом — «JSON манифеста», кнопка «Запустить dev-сессию». Отпечаток при этом не пиннится, а сессия живёт до закрытия вкладки; «Остановить dev-сессию» выключает её сразу.
Гранты разработчику (блок «👩💻 Доступ разработчика») нужны, когда пишет не владелец. Разработчику заводится обычная учётка сотрудника, а затем владелец выдаёт грант: «Email разработчика (его staff-логин)», «Разрешённые права», «Срок действия (дней)» и необязательная заметка → «Выдать доступ». Отозвать можно в любой момент кнопкой «Отозвать».
Что даёт грант, а что нет:
- даёт — только режим разработчика с правами, которые вы отметили (по умолчанию срок 14 дней, максимум 90);
- права режутся пересечением: что просит манифест и что выдано грантом; лишнего плагин не получит, даже если попросит в манифесте;
- не даёт — установку, включение и удаление плагинов: это остаётся владельцу.
Обновление, включение и удаление#
| Действие | Как |
|---|---|
| Открыть | кнопка «Открыть» на карточке (или ссылка с ?app=…) |
| Выключить временно | «Выключить» — плагин остаётся установленным, но не исполняется и не показывается в своих местах |
| Обновить | у плагинов из GitHub — «Проверить обновления» и затем «Обновить до …»; если версия свежая, панель скажет «Установлена последняя версия». Плагины из файлов обновляются повторной установкой |
| Удалить | «Удалить» с подтверждением: настройки и пункт убираются, загруженные релизы остаются в хранилище |
Автообновления нет намеренно: новая версия чужого кода — это новый отпечаток и, возможно, новые права, поэтому обновление всегда осознанное действие владельца.
Встроенные расширения#
Часть наших собственных модулей упакована в тот же формат — это видно по поведению, но ставить их не нужно: они приезжают вместе с панелью и включаются карточкой в магазине приложений, а не в этом разделе.
Сейчас такой модуль один — «Меркурий/ВетИС» для России: он живёт вкладкой раздела «Склад», исполняется в той же песочнице и с теми же проверками отпечатка. В список установленных редакторов встроенные расширения не попадают.
Что редактор может и чего не может#
| Может | Не может |
|---|---|
| Читать и менять каталог в пределах выданных прав | узнать ваш пароль или воспользоваться вашей сессией |
| Показывать свой интерфейс, уведомления и запросы подтверждения | открыть код или данные админки вокруг себя |
| Открыть родной редактор позиции панели | обратиться в интернет напрямую из окна плагина |
| Хранить свои настройки в вашем аккаунте | увидеть данные другого плагина на ваших карточках |
| Ходить в интернет через серверную часть — и только по тем https-адресам, что перечислены в манифесте (их не больше восьми) | исполняться после подмены файла: несовпадение отпечатка блокирует запуск |
Сторонние плагины помечаются на карточке предупреждением: «Стороннее приложение в песочнице — оно никогда не спрашивает пароль». Если плагин просит логин от панели, платёжные данные или код из SMS — это мошенничество, а не работа расширения.
Ограничения#
- Раздел выключен по умолчанию и рассчитан на тех, кто пишет код (или заказывает его): рядовому владельцу здесь делать нечего.
- Всё, кроме просмотра, — только у владельца аккаунта. Сотрудник видит хаб read-only; режим разработчика — только с живым грантом.
- Приватные GitHub-репозитории не поддерживаются — репозиторий должен быть публичным, установка идёт по тегу.
- Автообновления нет: обновление плагина всегда запускает владелец.
- Магазина чужих плагинов нет. Готовые расширения не публикуются и не продаются через панель — источник только ваш файл или ваш репозиторий.
- Слотов три (своя страница, кнопка каталога, вкладка склада) — встроиться в произвольный экран панели плагин не может.
- Мост не отдаёт гостей, заказы, финансы, сотрудников и переписки — обойти это правами нельзя, таких запросов просто не существует.
- Отдельного журнала «плагин сделал то-то» нет. Права видны на карточке, а правки каталога попадают в обычную историю позиций; если нужен контроль, начинайте с плагина, которому выдано только чтение.
- Технические потолки: бандл до 4 МБ, до 8 сетевых адресов в манифесте, до 1 МБ на один ключ хранилища; серверный прогон — до 30 секунд и до 50 обращений в интернет за раз.
- Данные плагина остаются в облаке вашего бренда: у аккаунта на
cenaly.ruсостояние серверной части лежит в российском контуре.
Устранение неполадок#
| Симптом | Проверьте |
|---|---|
| Раздела нет в меню | включена ли карточка «Кастомные редакторы (SDK)» в магазине приложений; вынесен ли раздел кнопкой «📌 В сайдбар» |
| Сотрудник не видит кнопок установки | так и задумано: установка, удаление и гранты — только у владельца аккаунта |
| «Бандл в хранилище не совпадает с установленным отпечатком. Запуск заблокирован» | файл плагина подменили после установки — переустановите редактор, чтобы записать новый отпечаток |
| «Редактор не запустился вовремя (нет connect() за 10 с)» | плагин не вышел на связь: ошибка в его коде или не тот файл собран |
| «Не удалось загрузить бандл редактора» | релиз недоступен или файл повреждён — переустановите |
«Редактор не найден или выключен» при переходе по ссылке ?app=… |
плагин удалён или выключен на карточке |
| «Не удалось получить редактор из GitHub» | репозиторий приватный, нет manifest.json в корне, нет dist/index.js в теге или тег назван не по конвенции v{версия} |
| «Допустимы только адреса localhost / 127.0.0.1» | режим разработчика умышленно не принимает внешние адреса — поднимите сборку локально |
| Плагин не видит нужные данные | сверьте «Права» на карточке; у разработчика с грантом права дополнительно режутся пересечением с грантом |
| Плагин не может обратиться к чужому сервису | прямой сети из песочницы нет: обращение делается серверной частью, а адрес должен быть в манифесте |
| «Редактор сообщает о несохранённых изменениях. Закрыть всё равно?» | плагин сам сообщил о черновике — сохраните работу внутри него перед закрытием |
Частые вопросы#
Нужно ли уметь программировать?#
Чтобы установить готовый релиз — нет. Чтобы получить сам релиз — да: его пишет разработчик или ИИ-агент по нашему шаблону из блока «Разработка с ИИ». Раздел — инструмент для кода, а не конструктор «мышкой».
Может ли чужой плагин увидеть моих клиентов или выручку?#
Нет. Плагин работает в песочнице и получает данные только через мост, а мост умеет ровно шесть вещей: каталог, цены и стоп-листы, справочник склада, своё хранилище, вызов своей серверной части и элементы интерфейса. Гостей, заказов, чеков, финансов, сотрудников и переписок там нет в принципе. Что именно разрешено конкретному плагину, всегда видно на его карточке в строке «Права».
Как отдать разработку подрядчику и не пускать его в аккаунт целиком?#
Заведите ему учётку сотрудника, а затем выдайте грант в блоке «Доступ разработчика»: отметьте только нужные права и поставьте срок (по умолчанию 14 дней, максимум 90). Он получит режим разработчика и ничего больше; установка плагина всё равно останется за вами. Грант отзывается одной кнопкой.
Обновится ли плагин сам, когда автор выпустит новую версию?#
Нет. Обновление запускает владелец: «Проверить обновления» → «Обновить до …». Так новая версия не появится в аккаунте без ведома человека — вместе с версией могли поменяться и запрашиваемые права.
Где плагин хранит свои настройки и данные?#
В вашем аккаунте, в отдельном хранилище под его идентификатором (до 1 МБ на ключ), плюс, если он их использует, в кастомных полях ваших карточек — каждый плагин видит только своё пространство. У аккаунта на cenaly.ru серверная часть и её состояние остаются в российском контуре.
Чем это отличается от API и MCP?#
API для разработчиков и MCP нужны, когда программа работает снаружи: свой сайт, чужая учётная система, ИИ-агент. Кастомный редактор — наоборот, интерфейс внутри панели: сотрудник открывает его как обычную страницу админки и не выходит из рабочего окна.
Связанные разделы#
- Магазин приложений — где включается раздел и встроенные расширения
- Склад — вкладка, в которой живут расширения вроде «ВетИС», и справочник товаров
- Импорт каталога — штатный путь загрузки позиций, если задача только в этом
- Витрина на своём коде (headless) — открытый контракт данных для внешнего сайта
- MCP Server и Guest API для ИИ-агентов — работа снаружи, а не внутри панели
- Сотрудники и смены — учётка для разработчика и роли
- Безопасность и данные — где хранятся данные и кто имеет к ним доступ
- Поддержка — куда писать, если плагин ведёт себя подозрительно