Beispiel-App: von null auf eine laufende Erweiterung
Eine vollständige, kleine App im Repository — Manifest, Server und Anbindung. Der kürzeste Weg zu einer Erweiterung, die wirklich läuft.
Für EntwicklerVoraussetzungen
- Node.js 22
- Eigener Server mit HTTPS
- Angelegte App mit Zugangsdaten
Im Repository liegt unter `examples/extensions/menu-display` eine vollständige kleine App: Manifest, ein Node-Server und eine Beschreibung. Sie zeigt die Speisekarten-Metadaten eines Betriebs an und tut sonst nichts — genau deshalb ist sie als Vorlage brauchbar. Ein Beispiel, das gleich fünf Dinge tut, lehrt keines davon.
Was sie vorführt, ist der ganze Ablauf: Die App wird im Dashboard in einem Rahmen geladen. Sie fragt beim Elternfenster einen Startnachweis an, tauscht ihn gegen ein Zugriffstoken und ruft damit die REST-Schnittstelle auf. Der Startnachweis ist kurzlebig, das Zugriffstoken gilt 15 Minuten — nichts davon gehört in einen Browser-Speicher oder in ein Protokoll.
Drei Dinge müssen Sie ersetzen, bevor etwas läuft: die Adressen (alle Platzhalter unter `.example.invalid`), das Host-Land, und die Zugangsdaten, die Sie beim Anlegen der App bekommen. Die Zugangsdaten gehören ausschließlich in die Serverumgebung — nicht ins Manifest, nicht in den Browsercode, nicht in die Versionsverwaltung und nicht in einen Chat.
Die Rechtsangaben des Beispiels sind ebenfalls Platzhalter. Eine bestandene Schemaprüfung belegt weder Hosting noch Rechtskonformität: Datenschutzerklärung, Nutzungsbedingungen und Support-Seite müssen echte, erreichbare Seiten sein, bevor eine App in die Prüfung geht.
Schritt für Schritt
Beispiel ansehen
`examples/extensions/menu-display` — Manifest, Server und Beschreibung. Der begleitende Test prüft Verträge und Sicherheitsfälle ohne Netzwerk.
App anlegen
Als individuelle App im Betrieb (zum Ausprobieren) oder als öffentliche App im Agentur-Dashboard (zum Verkaufen).
Adressen und Land ersetzen
Alle `.example.invalid`-Adressen durch die eigene HTTPS-Domain, `hostingCountry` auf das tatsächliche Land.
Zugangsdaten in die Serverumgebung
Client-ID, Client-Geheimnis und Webhook-Geheimnis in eine private Umgebungsdatei außerhalb der Versionsverwaltung.
Version anlegen und installieren
Bei einer individuellen App ist die Version sofort einsatzbereit. Danach installieren und den Rechten zustimmen.
Codebeispiele
// Im Rahmen der App: Startnachweis beim Elternfenster anfragen.const nachweis = await new Promise<string>((auf, ab) => { const nonce = crypto.randomUUID() const uhr = setTimeout(() => ab(new Error('Kein Startnachweis erhalten')), 10_000) window.addEventListener('message', function horcher(e) { // Herkunft prüfen: eine Nachricht von irgendwoher ist kein Nachweis. if (e.origin !== PARENT_ORIGIN) return if (e.data?.type !== 'tt:token-response' || e.data.nonce !== nonce) return clearTimeout(uhr) window.removeEventListener('message', horcher) auf(e.data.token) }) window.parent.postMessage({ type: 'tt:token-request', nonce }, PARENT_ORIGIN)}) // Den Nachweis an den EIGENEN Server geben — nur dort liegt das Geheimnis.const res = await fetch('/api/sitzung', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ nachweis }),})const antwort = await fetch(`${APP_ORIGIN}/api/v1/menus`, { headers: { Authorization: `Bearer ${zugriffstoken}` },})if (!antwort.ok) { // 401 heißt abgelaufen — neu tauschen, nicht wiederholen. // 403 heißt: das Recht fehlt. Das behebt kein Wiederholen, nur eine neue Zustimmung. throw new Error(`Menüs nicht abrufbar: ${antwort.status}`)}const { data, hasMore } = await antwort.json()Siehe auch
- Das Manifest schreibenJedes Feld, was es bedeutet und welche Grenzen gelten — das Manifest ist ein geschlossener Vertrag, unbekannte Felder werden abgelehnt.
- Eine App anlegen, einreichen und veröffentlichenVom Entwurf über die Prüfung bis in den Katalog — welche Zustände es gibt, was die Prüfung verlangt und woran Einreichungen scheitern.
- Apps: Zugriff auf die installierte ErweiterungWie eine installierte App ihre Metadaten, Manifest und Abrechnung liest; nur die App-Installation darf diese Route aufrufen.
- Apps: Verbrauch melden (Usage)Die installierte App meldet Verbrauchseinheiten; idempotente Einreichung, atomische Kap-Abbuchung und eindeutige Antwort.