Benutzerdefinierte Editoren
Es gibt Arbeit, die in keinem Panel zu finden ist, weil sie nur Ihnen gehört: eine eigene Preisneuberechnung nach der Formel eines Lieferanten, der Abgleich des Katalogs mit einem fremden Buchhaltungssystem, ein Bildschirm „Chargeneigenschaften in einem Durchgang ausfüllen“. Der Bereich „Benutzerdefinierte Editoren“ ermöglicht es Ihnen, einen solchen Mini-Editor selbst zu schreiben (oder schreiben zu lassen) und innerhalb der Admin-Oberfläche zu starten – in einer Sandbox, mit Zugriff genau auf die Daten, die Sie freigegeben haben.
Öffnen: Admin-Panel → Benutzerdefinierte Editoren (admin.cenaly.com/custom-editors). Der Bereich wird über die Karte „Benutzerdefinierte Editoren (SDK)“ im App-Store aktiviert – standardmäßig ist er ausgeblendet. Die Schaltfläche „📌 In die Seitenleiste“ auf der Seite selbst verschiebt ihn ins Seitenmenü, wenn er häufig benötigt wird.
Worum es in diesem Bereich geht#
Ein Plugin besteht aus einem gebündelten Skript (index.js) und seiner Beschreibung (manifest.json). Das Panel lädt das Skript in einen isolierten Frame: Es hat weder Zugriff auf Ihre Sitzung noch auf den Code des Admin-Panels noch auf das Netzwerk. Mit Daten kann es nur über die Bridge kommunizieren – eine Reihe zulässiger Anfragen, von denen jede anhand der erteilten Rechte geprüft wird.
Die Seite besteht aus folgenden Blöcken:
| Block | Inhalt |
|---|---|
| Installierte Editoren | Karte pro Plugin: Name, „Version“, „Rechte“, „Platzierung“, „Erlaubte Netzwerk-Hosts“, „Aktualisiert“, Quelle (Repository und Tag als Link). Aktionen: „Öffnen“, „Aktivieren“ / „Deaktivieren“, Update-Prüfung, „Löschen“ |
| Editor installieren | Installation aus Dateien von der Festplatte |
| Installation von GitHub | Installation über die Adresse eines öffentlichen Repositorys und einen Tag |
| 🤖 Entwicklung mit KI (Vibe-Coding) | Projektvorlage, Prompt für einen KI-Agenten und ein Katalog-Snapshot als Testdaten |
| 👩💻 Entwicklerzugang | temporäre Grants für Auftragnehmer für den Entwicklermodus |
| 🛠️ Entwicklermodus | Start des Plugins direkt von Ihrem Computer, ohne Installation |
Ein geöffneter Editor nimmt den gesamten Bildschirm ein, und die Seitenadresse erhält den Zusatz ?app=<Bezeichner> – einen solchen Link können Sie mit Personen teilen, die Zugriff haben.
Was für den Start benötigt wird#
| Was | Wofür |
|---|---|
| Karte „Benutzerdefinierte Editoren (SDK)“ im App-Store | Der Bereich ist nischenhaft und standardmäßig deaktiviert |
| Sie sind Kontoinhaber | Installieren, Aktivieren, Löschen von Plugins und Erteilen von Grants kann nur der Inhaber; Mitarbeiter sehen die Liste nur lesend |
Ein gebündeltes Plugin: index.js + manifest.json |
entweder von Ihnen, von einem Entwickler oder ein Release in einem öffentlichen GitHub-Repository |
| Für die Entwicklung – ein Mitarbeiterkonto für den Entwickler | Der Entwicklermodus wird per E-Mail seines Arbeitslogins erteilt |
Schritt 1. Entscheiden, wer den Editor schreibt#
Es gibt drei Wege, und sie unterscheiden sich darin, wer den Code verwaltet:
| Weg | Für wen geeignet | Wie |
|---|---|---|
| KI-Agent nach unserer Vorlage | Inhaber, der bereit ist, die Aufgabe in Worten zu erklären | Block „Entwicklung mit KI“: Vorlage + Prompt → der Agent erstellt ein Release → Sie installieren es |
| Eigener oder beauftragter Entwickler | Es gibt einen Auftragnehmer oder Entwickler im Team | Erteilen Sie ihm einen Grant für den Entwicklermodus; er schreibt und debuggt im Live-Konto, Sie installieren das fertige Release |
| Fertiges Release von GitHub | Das Plugin ist bereits geschrieben (von Ihnen oder für Sie) | „Installation von GitHub“: Repository-Adresse und Tag |
In allen drei Fällen bleibt die Installation beim Inhaber: Selbst ein Entwickler mit Grant kann seinen Code nur im Entwicklermodus bei sich ausführen, ihn aber nicht im Konto installieren.
Schritt 2. Entwicklung mit KI (Vibe-Coding)#
Der Block „🤖 Entwicklung mit KI (Vibe-Coding)“ bietet vier Dinge, um die Aufgabe an einen KI-Agenten (Claude Code, Cursor und ähnliche) zu übergeben, ohne ihm den Vertrag von Grund auf erklären zu müssen:
- „⬇️ Projektvorlage herunterladen (zip)“ – ein fertiges Plugin-Gerüst: Manifest, Einstiegspunkt, Beschreibung des Vertrags (
GUIDE.en.md) und Anleitung für den Agenten. Das Archiv wird direkt im Browser erstellt, es muss nichts Externes heruntergeladen werden. - „📋 Prompt für den Agenten kopieren“ – der Aufgabentext auf Englisch: von der Vorlage starten, sich am Guide orientieren, womit das Ergebnis geprüft wird.
- Konfiguration des Tool-Sets für den Agenten – damit erstellt der Agent das Plugin, startet einen lokalen Stand als Kopie der Sandbox, macht Screenshots und Zustands-Snapshots und erstellt am Ende das Release: ein Zip für die manuelle Installation oder ein Release auf GitHub.
- „⬇️ Katalog-Snapshot herunterladen (Test-Fixture)“ – Ihre Kategorien und Artikel als Datei, damit der Agent mit echten Daten testet und nicht mit erfundenen.
⚠️ Aus dem Snapshot werden benutzerdefinierte Felder anderer Plugins vollständig entfernt: Daten, die eine fremde Erweiterung auf Ihren Karten speichert, verlassen das Konto nicht zusammen mit der Fixture.
Schritt 3. Editor installieren#
Aus Dateien. Block „Editor installieren“: Wählen Sie „Bundle (index.js)“ und „Manifest (manifest.json)“ → „Prüfen und installieren“. Das Panel prüft zunächst das Manifest – Bezeichner, lokalisierten Namen, Version, minimale SDK-Version, Platzierungen, Rechte und die Liste der Netzwerk-Hosts – und zeigt dann den Konsent: „Dieser Editor fordert an:“ und die Liste der Rechte in verständlicher Sprache. Solange Sie nicht auf „Installieren“ geklickt haben, wird nichts installiert.
Von GitHub. Block „Installation von GitHub“: Feld „Repository (URL oder owner/repo)“, Feld „Tag (leer = letztes Release)“ und die Schaltfläche „Repository prüfen“. Die Konvention ist einfach: manifest.json im Wurzelverzeichnis des Repositorys, das gebündelte dist/index.js im Tag, Tag im Format v{Version}. Manifest und Bundle werden direkt von Ihrem Browser geladen. In beiden Fällen wird bei der Installation ein Fingerabdruck des Bundles (sha256) berechnet und gespeichert: Wird die Datei später ausgetauscht, wird der Start blockiert, und das Panel fordert Sie auf, den Editor neu zu installieren.
Rechte und Orte der Platzierung#
Die Rechte (auch Scopes genannt) fordert das Plugin im Manifest an, und Sie bestätigen sie bei der Installation. Die vollständige Liste ist folgende, mehr kann die Bridge nicht:
| Recht | Was geöffnet wird |
|---|---|
| Katalog lesen | Kategorien, Artikel, Eigenschaften und benutzerdefinierte Felder der Karten |
| Katalogartikel erstellen und ändern | Erstellen und Bearbeiten von Artikeln, Chargenimport, eigene Felder und Definitionen von Eigenschaften |
| Preise, Verfügbarkeit und Stopplisten je Standort ändern | dasselbe, was das Panel im Menü des Standorts tut |
| Lagerverzeichnis der Waren lesen | Nomenklatur des Lagers zum Lesen |
| Eigene Einstellungen in Ihrem Speicher ablegen | eigene Schlüssel des Plugins in Ihrem Konto (bis zu 1 MB pro Schlüssel) |
| Serverseitiger Teil der Erweiterung | Aufrufe des Plugin-Codes auf unserem Server — die einzige Möglichkeit für es, ins Internet zu gehen |
Was gar nicht in der Liste steht — das erhält das Plugin durch keine Einstellungen: Gäste und Kunden, Bestellungen, Belege, Finanzen, Mitarbeiter, Chats und Anrufe gibt die Bridge nicht heraus.
Orte der Platzierung (Slots) — drei:
| Slot | Wo es erscheint |
|---|---|
| Eigene Seite | ein Punkt innerhalb des Abschnitts „Benutzerdefinierte Editoren“, öffnet sich im Vollbild |
| Schaltfläche auf der Katalogseite | ein Werkzeug neben dem Katalog der Artikel |
| Tab des Abschnitts „Lager“ | das Plugin wird als Tab des Lagers dargestellt — so ist unsere integrierte Erweiterung „ВетИС“ verpackt |
Entwicklermodus und Zugang für Auftragnehmer#
Der Entwicklermodus (Block „🛠️ Entwicklermodus“) bindet das Plugin live von Ihrem Computer ein: das Feld „URL des Bundles“ akzeptiert nur Adressen localhost / 127.0.0.1, daneben — „JSON des Manifests“, die Schaltfläche „Dev-Sitzung starten“. Der Fingerabdruck wird dabei nicht gepinnt, und die Sitzung lebt bis zum Schließen des Tabs; „Dev-Sitzung stoppen“ schaltet sie sofort aus.
Grants für Entwickler (Block „👩💻 Entwicklerzugang“) sind nötig, wenn nicht der Inhaber schreibt. Für den Entwickler wird ein gewöhnliches Mitarbeiterkonto angelegt, und dann vergibt der Inhaber einen Grant: „E-Mail des Entwicklers (sein Staff-Login)“, „Erlaubte Rechte“, „Laufzeit (Tage)“ und eine optionale Notiz → „Zugang gewähren“. Entzogen werden kann er jederzeit mit der Schaltfläche „Entziehen“.
Was der Grant gibt und was nicht:
- gibt — nur den Entwicklermodus mit den Rechten, die Sie angekreuzt haben (standardmäßig Laufzeit 14 Tage, maximal 90);
- die Rechte werden durch die Schnittmenge beschnitten: was das Manifest anfordert und was durch den Grant vergeben ist; mehr erhält das Plugin nicht, selbst wenn es im Manifest darum bittet;
- gibt nicht — Installation, Aktivierung und Löschung von Plugins: das bleibt dem Inhaber vorbehalten.
Aktualisierung, Aktivierung und Löschung#
| Aktion | Wie |
|---|---|
| Öffnen | Schaltfläche „Öffnen“ auf der Karte (oder Link mit ?app=…) |
| Vorübergehend ausschalten | „Ausschalten“ — das Plugin bleibt installiert, wird aber nicht ausgeführt und nicht an seinen Orten angezeigt |
| Aktualisieren | bei Plugins aus GitHub — „Nach Updates suchen“ und dann „Aktualisieren auf …“; ist die Version aktuell, sagt das Panel „Die neueste Version ist installiert“. Plugins aus Dateien werden durch erneute Installation aktualisiert |
| Löschen | „Löschen“ mit Bestätigung: Einstellungen und Punkt werden entfernt, die hochgeladenen Releases bleiben im Speicher |
Automatische Updates gibt es bewusst nicht: eine neue Version fremden Codes ist ein neuer Fingerabdruck und möglicherweise neue Rechte, deshalb ist die Aktualisierung immer eine bewusste Handlung des Inhabers.
Integrierte Erweiterungen#
Ein Teil unserer eigenen Module ist im selben Format verpackt — das ist am Verhalten erkennbar, aber installiert werden müssen sie nicht: sie kommen zusammen mit dem Panel und werden über eine Karte im App-Store aktiviert, nicht in diesem Abschnitt.
Derzeit gibt es ein solches Modul — „Меркурий/ВетИС“ für Russland: es lebt als Tab des Abschnitts „Lager“, wird in derselben Sandbox und mit denselben Fingerabdruck-Prüfungen ausgeführt. In die Liste der installierten Editoren gelangen integrierte Erweiterungen nicht.
Was der Editor kann und was nicht#
| Kann | Kann nicht |
|---|---|
| den Katalog im Rahmen der vergebenen Rechte lesen und ändern | Ihr Passwort erfahren oder Ihre Sitzung nutzen |
| seine eigene Oberfläche, Benachrichtigungen und Bestätigungsanfragen anzeigen | den Code oder die Daten der Admin-Oberfläche um sich herum öffnen |
| den nativen Artikel-Editor des Panels öffnen | aus dem Fenster des Plugins direkt ins Internet gehen |
| seine Einstellungen in Ihrem Konto speichern | die Daten eines anderen Plugins auf Ihren Karten sehen |
| ins Internet über den serverseitigen Teil gehen — und nur über die https-Adressen, die im Manifest aufgeführt sind (es sind nicht mehr als acht) | nach dem Austausch einer Datei ausgeführt werden: die Nichtübereinstimmung des Fingerabdrucks blockiert den Start |
Drittanbieter-Plugins werden auf der Karte mit einer Warnung gekennzeichnet: „Drittanbieter-App in der Sandbox — sie fragt niemals nach einem Passwort.“ Wenn ein Plugin nach dem Login für das Panel, Zahlungsdaten oder einen SMS-Code fragt — das ist Betrug und nicht die Arbeit einer Erweiterung.
Einschränkungen#
- Der Bereich ist standardmäßig deaktiviert und richtet sich an alle, die Code schreiben (oder schreiben lassen): Für einen gewöhnlichen Inhaber gibt es hier nichts zu tun.
- Alles außer der Ansicht ist nur für den Inhaber des Kontos. Mitarbeiter sehen den Hub read-only; der Entwicklermodus nur mit einer aktiven Freigabe.
- Private GitHub-Repositories werden nicht unterstützt — das Repository muss öffentlich sein, die Installation erfolgt über ein Tag.
- Es gibt keine Auto-Updates: Das Aktualisieren des Plugins startet immer der Inhaber.
- Es gibt keinen Store für fremde Plugins. Fertige Erweiterungen werden nicht über das Panel veröffentlicht oder verkauft — die einzige Quelle ist Ihre Datei oder Ihr Repository.
- Es gibt drei Slots (eigene Seite, Katalogschaltfläche, Lager-Tab) — in einen beliebigen Bildschirm des Panels kann sich ein Plugin nicht einfügen.
- Die Bridge gibt keine Gäste, Bestellungen, Finanzen, Mitarbeiter und Chats heraus — das lässt sich nicht über Rechte umgehen, solche Anfragen existieren schlicht nicht.
- Ein separates Protokoll „Plugin hat X getan“ gibt es nicht. Rechte sind auf der Karte sichtbar, und Katalogänderungen landen in der normalen Artikel-Historie; wenn Sie Kontrolle brauchen, beginnen Sie mit einem Plugin, dem nur Lesezugriff erteilt wurde.
- Technische Obergrenzen: Bundle bis 4 MB, bis zu 8 Netzwerkadressen im Manifest, bis zu 1 MB pro Speicherschlüssel; serverseitiger Lauf — bis zu 30 Sekunden und bis zu 50 Internetaufrufe auf einmal.
- Die Daten des Plugins bleiben in der Cloud Ihrer Marke: Bei einem Konto auf
cenaly.ruliegt der Zustand des serverseitigen Teils in der russischen Kontur.
Fehlerbehebung#
| Symptom | Prüfen Sie |
|---|---|
| Der Bereich fehlt im Menü | ob die Karte „Benutzerdefinierte Editoren (SDK)“ im App-Store aktiviert ist; ob der Bereich mit der Schaltfläche „📌 In die Sidebar“ ausgelagert wurde |
| Ein Mitarbeiter sieht die Installationsschaltflächen nicht | das ist so gewollt: Installation, Löschung und Freigaben gibt es nur beim Inhaber des Kontos |
| „Das Bundle im Speicher stimmt nicht mit dem installierten Fingerabdruck überein. Start blockiert“ | die Plugin-Datei wurde nach der Installation ausgetauscht — installieren Sie den Editor neu, um einen neuen Fingerabdruck zu schreiben |
| „Der Editor ist nicht rechtzeitig gestartet (kein connect() innerhalb von 10 s)“ | das Plugin hat sich nicht verbunden: ein Fehler in seinem Code oder die falsche Datei wurde gebaut |
| „Das Bundle des Editors konnte nicht geladen werden“ | das Release ist nicht verfügbar oder die Datei ist beschädigt — installieren Sie neu |
„Editor nicht gefunden oder deaktiviert“ beim Aufruf des Links ?app=… |
das Plugin wurde gelöscht oder auf der Karte deaktiviert |
| „Der Editor konnte nicht von GitHub abgerufen werden“ | das Repository ist privat, es gibt keine manifest.json im Stammverzeichnis, keine dist/index.js im Tag oder das Tag ist nicht nach der Konvention v{версия} benannt |
| „Es sind nur Adressen localhost / 127.0.0.1 zulässig“ | der Entwicklermodus akzeptiert absichtlich keine externen Adressen — starten Sie den Build lokal |
| Das Plugin sieht die benötigten Daten nicht | gleichen Sie die „Rechte“ auf der Karte ab; bei einem Entwickler mit Freigabe werden die Rechte zusätzlich durch die Schnittmenge mit der Freigabe beschnitten |
| Das Plugin kann keinen fremden Dienst erreichen | es gibt kein direktes Netz aus der Sandbox: Der Zugriff erfolgt über den serverseitigen Teil, und die Adresse muss im Manifest stehen |
| „Der Editor meldet ungespeicherte Änderungen. Trotzdem schließen?“ | das Plugin hat selbst einen Entwurf gemeldet — speichern Sie die Arbeit darin vor dem Schließen |
Häufige Fragen#
Muss man programmieren können?#
Um ein fertiges Release zu installieren — nein. Um das Release selbst zu erhalten — ja: Es wird von einem Entwickler oder einem KI-Agenten nach unserer Vorlage aus dem Block „Entwicklung mit KI“ geschrieben. Der Bereich ist ein Werkzeug für Code, kein Konstruktor für die „Maus“.
Kann ein fremdes Plugin meine Kunden oder meinen Umsatz sehen?#
Nein. Das Plugin arbeitet in einer Sandbox und erhält Daten nur über die Bridge, und die Bridge kann genau sechs Dinge: Katalog, Preise und Stopp-Listen, das Lagerverzeichnis, seinen eigenen Speicher, den Aufruf seines serverseitigen Teils und Schnittstellenelemente. Gäste, Bestellungen, Belege, Finanzen, Mitarbeiter und Chats gibt es dort grundsätzlich nicht. Was genau einem bestimmten Plugin erlaubt ist, ist immer auf seiner Karte in der Zeile „Rechte“ sichtbar.
Wie übergibt man die Entwicklung an einen Auftragnehmer und lässt ihn nicht ins ganze Konto?#
Legen Sie ihm ein Mitarbeiterkonto an und erteilen Sie dann eine Freigabe im Block „Entwicklerzugriff“: Markieren Sie nur die benötigten Rechte und setzen Sie eine Frist (standardmäßig 14 Tage, maximal 90). Er erhält den Entwicklermodus und nichts weiter; die Installation des Plugins bleibt trotzdem bei Ihnen. Die Freigabe wird mit einer Schaltfläche widerrufen.
Aktualisiert sich das Plugin selbst, wenn der Autor eine neue Version veröffentlicht?#
Nein. Das Update startet der Inhaber: „Nach Updates suchen“ → „Aktualisieren auf …“. So erscheint eine neue Version nicht ohne Wissen einer Person im Konto — zusammen mit der Version können sich auch die angeforderten Rechte geändert haben.
Wo speichert das Plugin seine Einstellungen und Daten?#
In Ihrem Konto, in einem separaten Speicher unter seiner Kennung (bis zu 1 MB pro Schlüssel), plus, falls es sie verwendet, in benutzerdefinierten Feldern Ihrer Karten — jedes Plugin sieht nur seinen eigenen Bereich. Bei einem Konto auf cenaly.ru bleiben der serverseitige Teil und sein Zustand in der russischen Kontur.
Worin unterscheidet sich das von API und MCP?#
Die API für Entwickler und MCP Ihrer Telefonanlage werden gebraucht, wenn ein Programm von außen arbeitet: eigene Website, fremdes Abrechnungssystem, KI-Agent. Ein benutzerdefinierter Editor ist umgekehrt eine Schnittstelle innerhalb des Panels: Ein Mitarbeiter öffnet ihn wie eine normale Admin-Seite und verlässt das Arbeitsfenster nicht.
Verwandte Bereiche#
- App-Store — wo der Bereich und die integrierten Erweiterungen aktiviert werden
- Lager — der Tab, in dem Erweiterungen wie „ВетИС“ leben, und das Warenverzeichnis
- Katalogimport — der reguläre Weg zum Hochladen von Artikeln, wenn die Aufgabe nur darin besteht
- Schaufenster auf eigenem Code (headless) — der offene Datenvertrag für eine externe Website
- API und MCP Ihrer Telefonanlage und Guest API für KI-Agenten — Arbeit von außen, nicht innerhalb des Panels
- Mitarbeiter und Schichten — Konto für den Entwickler und Rollen
- Sicherheit und Daten — wo Daten gespeichert werden und wer Zugriff darauf hat
- Support — wohin Sie schreiben können, wenn sich das Plugin verdächtig verhält