Editores personalizados
Hay trabajos que no están en ningún panel porque son solo suyos: un recálculo propio de precios según la fórmula de un proveedor, la conciliación del catálogo con un sistema contable ajeno, una pantalla para «rellenar las características de un lote de una sola pasada». La sección «Editores personalizados» permite escribir ese mini-editor usted mismo (o encargarlo) y ejecutarlo dentro del panel de administración: en un entorno aislado, con acceso exactamente a los datos que usted autorice.
Abrir: Panel de administración → Editores personalizados (admin.cenaly.com/custom-editors). La sección se activa con la tarjeta «Editores personalizados (SDK)» en la tienda de aplicaciones; por defecto está oculta. El botón «📌 A la barra lateral» en la propia página lo lleva al menú lateral cuando se necesita con frecuencia.
Qué es esta sección#
Un plugin es un script compilado (index.js) y su descripción (manifest.json). El panel carga el script en un marco aislado: no tiene acceso ni a su sesión, ni al código del panel de administración, ni a la red. Solo puede comunicarse con los datos a través del puente: un conjunto de solicitudes permitidas, cada una de las cuales se verifica según los permisos concedidos.
La página consta de bloques:
| Bloque | Qué contiene |
|---|---|
| Editores instalados | tarjeta por plugin: nombre, «Versión», «Permisos», «Ubicación», «Hosts de red permitidos», «Actualizado», origen (repositorio y etiqueta como enlace). Acciones: «Abrir», «Activar» / «Desactivar», comprobación de actualizaciones, «Eliminar» |
| Instalar editor | instalación desde archivos del disco |
| Instalación desde GitHub | instalación por dirección de repositorio público y etiqueta |
| 🤖 Desarrollo con IA (vibe coding) | plantilla de proyecto, prompt para el agente de IA y una instantánea del catálogo como datos de prueba |
| 👩💻 Acceso de desarrollador | concesiones temporales al contratista para el modo desarrollador |
| 🛠️ Modo desarrollador | ejecución del plugin directamente desde su ordenador, sin instalación |
El editor abierto ocupa toda la pantalla, y la dirección de la página recibe la marca ?app=<identificador>: puede compartir ese enlace con quien tenga acceso.
Qué se necesita para empezar#
| Qué | Para qué |
|---|---|
| Tarjeta «Editores personalizados (SDK)» en la tienda de aplicaciones | la sección es específica y está desactivada por defecto |
| Usted es el propietario de la cuenta | solo el propietario puede instalar, activar y eliminar plugins y conceder permisos; los empleados solo ven la lista en modo lectura |
Plugin compilado: index.js + manifest.json |
ya sea suyo, de un desarrollador o un release en un repositorio público de GitHub |
| Para el desarrollo: una cuenta de empleado para el desarrollador | el modo desarrollador se concede por el correo electrónico de su login de trabajo |
Paso 1. Decidir quién escribirá el editor#
Hay tres caminos, y se diferencian en quién controla el código:
| Camino | Para quién es adecuado | Cómo |
|---|---|---|
| Agente de IA con nuestra plantilla | el propietario que está dispuesto a explicar la tarea con palabras | bloque «Desarrollo con IA»: plantilla + prompt → el agente compila el release → usted lo instala |
| Desarrollador propio o contratado | hay un contratista o un desarrollador en el equipo | concédale un permiso para el modo desarrollador; él escribe y depura en la cuenta real, y usted instala el release terminado |
| Release listo desde GitHub | el plugin ya está escrito (por usted o para usted) | «Instalación desde GitHub»: dirección del repositorio y etiqueta |
En los tres casos, la instalación sigue siendo responsabilidad del propietario: incluso un desarrollador con permiso solo puede ejecutar su código en su propio modo desarrollador, pero no instalarlo en la cuenta.
Paso 2. Desarrollo con IA (vibe coding)#
El bloque «🤖 Desarrollo con IA (vibe coding)» ofrece cuatro cosas para entregar la tarea a un agente de IA (Claude Code, Cursor y similares) sin explicarle el contrato desde cero:
- «⬇️ Descargar plantilla de proyecto (zip)»: un esqueleto de plugin listo: manifiesto, punto de entrada, descripción del contrato (
GUIDE.en.md) e instrucciones para el agente. El archivo se genera directamente en el navegador; no hace falta descargar nada externo. - «📋 Copiar prompt para el agente»: el texto de la tarea en inglés: partir de la plantilla, consultar la guía, con qué comprobar el resultado.
- Configuración del conjunto de herramientas para el agente: con ella, el agente compila el plugin, levanta un banco de pruebas local, copia del entorno aislado, hace capturas de pantalla y de estado, y al final compila el release: un zip para la instalación manual o un release en GitHub.
- «⬇️ Descargar instantánea del catálogo (fixture de prueba)»: sus categorías y artículos en un archivo, para que el agente pruebe con datos reales y no inventados.
⚠️ De la instantánea se excluyen por completo los campos personalizados de otros plugins: los datos que una extensión ajena guarda en sus tarjetas no salen de la cuenta junto con el fixture.
Paso 3. Instalar el editor#
Desde archivos. Bloque «Instalar editor»: seleccione «Bundle (index.js)» y «Manifiesto (manifest.json)» → «Verificar e instalar». El panel primero verifica el manifiesto (identificador, nombre localizado, versión, versión mínima del SDK, ubicaciones, permisos y lista de hosts de red) y luego muestra el consentimiento: «Este editor solicita:» y la lista de permisos en lenguaje natural. Mientras no pulse «Instalar», no se instala nada.
Desde GitHub. Bloque «Instalación desde GitHub»: campo «Repositorio (URL o owner/repo)», campo «Etiqueta (vacío = último release)» y botón «Verificar repositorio». La convención es simple: manifest.json en la raíz del repositorio, dist/index.js compilado en la etiqueta, etiqueta con el formato v{versión}. El manifiesto y el bundle se descargan directamente desde su navegador. En ambos casos, al instalar se calcula y se memoriza la huella del bundle (sha256): si el archivo se sustituye después, la ejecución se bloqueará y el panel pedirá reinstalar el editor.
Derechos y ubicaciones#
Los derechos (también llamados scopes) los solicita el plugin en el manifiesto, y usted los confirma durante la instalación. La lista completa es esta; el Puente no puede hacer nada más:
| Derecho | Qué se abre |
|---|---|
| Leer el catálogo | categorías, Artículos, características y campos personalizados de las fichas |
| Crear y modificar Artículos del catálogo | creación y edición de Artículos, importación de lotes, campos propios y definiciones de características |
| Cambiar precios, disponibilidad y listas de parada por Local | lo mismo que hace el panel en el menú del Local |
| Leer el catálogo de productos de almacén | nomenclatura del almacén en modo lectura |
| Guardar su propia configuración en su almacenamiento | claves propias del plugin en su Cuenta (hasta 1 MB por clave) |
| Parte servidor de la extensión | llamadas al código del plugin en nuestro servidor: la única forma de que salga a internet |
Lo que no está en la lista, el plugin no lo obtendrá con ninguna configuración: huéspedes y clientes, Pedidos, Recibos, finanzas, empleados, conversaciones y llamadas, el Puente no lo entrega.
Las ubicaciones (slots) son tres:
| Slot | Dónde aparecerá |
|---|---|
| Página propia | un elemento dentro de la sección «Editores personalizados», se abre a pantalla completa |
| Botón en la página del catálogo | herramienta junto al catálogo de Artículos |
| Pestaña de la sección «Almacén» | el plugin se dibuja como pestaña del almacén: así está empaquetada nuestra extensión integrada «ВетИС» |
Modo desarrollador y acceso para el contratista#
El modo desarrollador (bloque «🛠️ Modo desarrollador») monta el plugin en vivo desde su ordenador: el campo «URL del bundle» solo acepta direcciones localhost / 127.0.0.1, junto a él está «JSON del manifiesto» y el botón «Iniciar sesión de desarrollo». En este caso la huella no se fija, y la sesión dura hasta que se cierre la pestaña; «Detener sesión de desarrollo» la apaga de inmediato.
Los grants para el desarrollador (bloque «👩💻 Acceso del desarrollador») son necesarios cuando no escribe el propietario. Al desarrollador se le crea una cuenta de empleado normal, y luego el propietario emite un grant: «Email del desarrollador (su login de staff)», «Derechos permitidos», «Plazo de vigencia (días)» y una nota opcional → «Conceder acceso». Se puede revocar en cualquier momento con el botón «Revocar».
Qué da el grant y qué no:
- da — solo el modo desarrollador con los derechos que usted haya marcado (por defecto, un plazo de 14 días, máximo 90);
- los derechos se recortan por intersección: lo que pide el manifiesto y lo que se concede con el grant; el plugin no obtendrá nada de más, aunque lo pida en el manifiesto;
- no da — instalación, activación ni eliminación de plugins: eso queda en manos del propietario.
Actualización, activación y eliminación#
| Acción | Cómo |
|---|---|
| Abrir | botón «Abrir» en la ficha (o un enlace con ?app=…) |
| Desactivar temporalmente | «Desactivar»: el plugin sigue instalado, pero no se ejecuta ni se muestra en sus ubicaciones |
| Actualizar | en los plugins de GitHub: «Buscar actualizaciones» y luego «Actualizar a …»; si la versión está al día, el panel dirá «Está instalada la última versión». Los plugins de archivos se actualizan reinstalándolos |
| Eliminar | «Eliminar» con confirmación: la configuración y el elemento se quitan, las versiones publicadas cargadas permanecen en el almacenamiento |
No hay actualizaciones automáticas de forma deliberada: una nueva versión de código ajeno es una nueva huella y, posiblemente, nuevos derechos, por lo que la actualización es siempre una acción consciente del propietario.
Extensiones integradas#
Parte de nuestros propios módulos está empaquetada en el mismo formato: se nota por su comportamiento, pero no hace falta instalarlos: llegan junto con el panel y se activan con su ficha en la tienda de aplicaciones, no en esta sección.
Ahora mismo ese módulo es uno: «Меркурий/ВетИС» para Rusia; vive como pestaña de la sección «Almacén», se ejecuta en la misma sandbox y con las mismas comprobaciones de huella. Las extensiones integradas no aparecen en la lista de editores instalados.
Qué puede y qué no puede el editor#
| Puede | No puede |
|---|---|
| Leer y modificar el catálogo dentro de los derechos concedidos | conocer su contraseña o usar su sesión |
| Mostrar su propia interfaz, notificaciones y solicitudes de confirmación | abrir el código o los datos del panel a su alrededor |
| Abrir el editor de Artículos nativo del panel | acceder a internet directamente desde la ventana del plugin |
| Guardar su propia configuración en su Cuenta | ver los datos de otro plugin en sus fichas |
| Salir a internet a través de la parte servidor, y solo por las direcciones https enumeradas en el manifiesto (no más de ocho) | ejecutarse tras la sustitución de un archivo: la discrepancia de huella bloquea el inicio |
Los plugins de terceros se marcan en la ficha con una advertencia: «Aplicación de terceros en sandbox: nunca pide la contraseña». Si un plugin pide el login del panel, datos de pago o un código de SMS, es un fraude, no el funcionamiento de una extensión.
Limitaciones#
- La sección está desactivada por defecto y está pensada para quienes escriben código (o lo encargan): un propietario corriente no tiene nada que hacer aquí.
- Todo, salvo la visualización, es exclusivo del propietario de la cuenta. El empleado ve el hub en modo de solo lectura; el modo de desarrollador solo con una concesión activa.
- No se admiten repositorios privados de GitHub — el repositorio debe ser público y la instalación se hace por etiqueta.
- No hay actualizaciones automáticas: la actualización del plugin siempre la inicia el propietario.
- No hay tienda de plugins de terceros. Las extensiones listas no se publican ni se venden a través del panel — la única fuente es su archivo o su repositorio.
- Hay tres espacios (página propia, botón del catálogo, pestaña de almacén) — el plugin no puede integrarse en una pantalla arbitraria del panel.
- El puente no entrega huéspedes, pedidos, finanzas, empleados ni conversaciones — esto no se puede eludir con permisos, tales solicitudes simplemente no existen.
- No hay un registro aparte de «el plugin hizo tal cosa». Los permisos se ven en la tarjeta y las modificaciones del catálogo entran en el historial habitual de artículos; si necesita control, empiece por un plugin al que solo se le haya concedido lectura.
- Límites técnicos: bundle de hasta 4 MB, hasta 8 direcciones de red en el manifiesto, hasta 1 MB por clave de almacenamiento; ejecución en el servidor — hasta 30 segundos y hasta 50 solicitudes a internet a la vez.
- Los datos del plugin permanecen en la nube de su marca: en una cuenta de
cenaly.ruel estado de la parte del servidor reside en el contorno ruso.
Solución de problemas#
| Síntoma | Compruebe |
|---|---|
| La sección no está en el menú | si la tarjeta «Editores personalizados (SDK)» está activada en la tienda de aplicaciones; si la sección se ha añadido a la barra lateral con el botón «📌 A la barra lateral» |
| El empleado no ve los botones de instalación | es lo previsto: la instalación, la eliminación y las concesiones son exclusivas del propietario de la cuenta |
| «El bundle en el almacenamiento no coincide con la huella instalada. Inicio bloqueado» | el archivo del plugin fue sustituido después de la instalación — reinstale el editor para registrar una nueva huella |
| «El editor no se inició a tiempo (no hay connect() en 10 s)» | el plugin no estableció conexión: error en su código o se compiló el archivo equivocado |
| «No se pudo cargar el bundle del editor» | la versión no está disponible o el archivo está dañado — reinstale |
«Editor no encontrado o desactivado» al seguir el enlace ?app=… |
el plugin fue eliminado o desactivado en la tarjeta |
| «No se pudo obtener el editor de GitHub» | el repositorio es privado, no hay manifest.json en la raíz, no hay dist/index.js en la etiqueta o la etiqueta no sigue la convención v{versión} |
| «Solo se admiten direcciones localhost / 127.0.0.1» | el modo de desarrollador deliberadamente no acepta direcciones externas — levante la compilación localmente |
| El plugin no ve los datos necesarios | verifique «Permisos» en la tarjeta; en el desarrollador con una concesión, los permisos además se recortan por la intersección con la concesión |
| El plugin no puede acceder a un servicio de terceros | no hay red directa desde el entorno aislado: el acceso se realiza mediante la parte del servidor, y la dirección debe estar en el manifiesto |
| «El editor informa de cambios no guardados. ¿Cerrar de todos modos?» | el plugin mismo informó de un borrador — guarde el trabajo dentro de él antes de cerrar |
Preguntas frecuentes#
¿Hay que saber programar?#
Para instalar una versión lista — no. Para obtener la versión en sí — sí: la escribe un desarrollador o un agente de IA según nuestra plantilla del bloque «Desarrollo con IA». La sección es una herramienta para código, no un constructor «con el ratón».
¿Puede un plugin de terceros ver a mis clientes o los ingresos?#
No. El plugin funciona en un entorno aislado y recibe datos solo a través del puente, y el puente sabe hacer exactamente seis cosas: catálogo, precios y stop-lists, directorio de almacén, su propio almacenamiento, llamada a su propia parte del servidor y elementos de interfaz. Huéspedes, pedidos, recibos, finanzas, empleados y conversaciones no están ahí en absoluto. Lo que exactamente se permite a un plugin concreto siempre se ve en su tarjeta en la línea «Permisos».
¿Cómo entregar el desarrollo a un contratista y no dejarlo entrar en toda la cuenta?#
Cree para él una cuenta de empleado y luego otorgue una concesión en el bloque «Acceso del desarrollador»: marque solo los permisos necesarios y fije un plazo (por defecto 14 días, máximo 90). Recibirá el modo de desarrollador y nada más; la instalación del plugin seguirá siendo suya. La concesión se revoca con un solo botón.
¿Se actualizará el plugin solo cuando el autor publique una nueva versión?#
No. La actualización la inicia el propietario: «Buscar actualizaciones» → «Actualizar a …». Así una nueva versión no aparecerá en la cuenta sin conocimiento de la persona — junto con la versión también podrían haber cambiado los permisos solicitados.
¿Dónde guarda el plugin sus ajustes y datos?#
En su cuenta, en un almacenamiento aparte bajo su identificador (hasta 1 MB por clave), además, si los usa, en los campos personalizados de sus tarjetas — cada plugin ve solo su propio espacio. En una cuenta de cenaly.ru la parte del servidor y su estado permanecen en el contorno ruso.
¿En qué se diferencia esto de API y MCP?#
La API para desarrolladores y el MCP de su centralita se necesitan cuando el programa trabaja desde fuera: su sitio web, un sistema de cuentas ajeno, un agente de IA. El editor personalizado es lo contrario, una interfaz dentro del panel: el empleado lo abre como una página normal del panel de administración y no sale de la ventana de trabajo.
Secciones relacionadas#
- Tienda de aplicaciones — donde se activa la sección y las extensiones integradas
- Almacén — la pestaña en la que viven extensiones como «ВетИС», y el directorio de productos
- Importación del catálogo — la vía estándar de carga de artículos, si la tarea es solo esa
- Escaparate con su propio código (headless) — el contrato de datos abierto para un sitio web externo
- API y MCP de su centralita y Guest API para agentes de IA — trabajo desde fuera, no dentro del panel
- Empleados y turnos — cuenta para el desarrollador y roles
- Seguridad y datos — dónde se guardan los datos y quién tiene acceso a ellos
- Soporte — dónde escribir si el plugin se comporta de forma sospechosa