Kampagnenstudio
Gestalte Glücksrad, Rubbellos oder Überraschungsbox zum Selbsthosten. Lokale Demo oder Shop-API, keine gehostete Preisvergabe.
- Komponente: Glücksrad / Rubbellos / Überraschungsboxen
- Thema: Küstenminimalismus / Bonbon-Pop / Retro-Arcade / Mitternachtsgold / Festpapier / Gartenskizze
Ergebnisquelle
Lokale Ziehungen sind veränderbare Demos, keine sichere Preisvergabe. Angebote im Code sind öffentlich. Kein Bestands-, Identitäts- oder Mehrfachschutz.
Dein Server verwaltet Authentifizierung, Chancen, Bestand, Teilnahme und Idempotenz. Keine geheimen Schlüssel eingeben. Die Vorschau ruft die API nie auf.
Anleitung zur API-Anbindung
Dies ist eine Schnittstellenvorgabe, kein Elysia-Ziehungsdienst. Implementiere POST /api/draw auf deinem Server mit denselben Kampagnen- und Preis-IDs und trage den Endpunkt ein. Lade die Dateien herunter und hoste sie auf HTTPS für echte Tests; der Editor simuliert nur.
Anfrage · POST application/json
Das Widget sendet nur version, campaignId und eine zufällige 32-stellige hexadezimale requestId. Keine Kunden-ID, Chancen oder API-Schlüssel. Der Server muss Teilnehmer selbst identifizieren; requestId ist kein Anmeldenachweis.
{
"version": 1,
"campaignId": "summer-boutique",
"requestId": "0123456789abcdef0123456789abcdef"
}
Erfolg · 200 application/json
Gib requestId unverändert zurück. prizeId muss konfiguriert sein, auch bei Nieten. Optional: receiptId (≤200 Zeichen), claim.code (≤300), claim.url (HTTPS, ≤2048). Ungenutzte Felder weglassen, nicht null senden. Keine data/result-Hülle; höchstens 16 KiB. Ein Fehler ist kein verlorenes Los.
{
"requestId": "0123456789abcdef0123456789abcdef",
"prizeId": "p1",
"receiptId": "draw_2026_001",
"claim": {
"code": "SAMPLE-ONLY",
"url": "https://shop.example/redeem"
}
}
Konfigurierte Preis-IDs:
p1: 10 % Rabatt
p2: Gratisversand
p3: Überraschung
p4: Vielleicht nächstes Mal
Hoste Widget und /api/draw möglichst auf derselben Origin (Protokoll, Host, Port), nötigenfalls mit Reverse Proxy. Relative Pfade beziehen sich auf das Widget, nicht auf die Shop-Elternseite. credentials: same-origin sendet nur gleichursprüngliche Cookies. Authorization und eigene Header sind nicht konfigurierbar. Andere Origins benötigen CORS für das Widget und OPTIONS für POST + Content-Type; fremde Cookies werden nicht gesendet. Statisches HTML allein reicht nicht für authentifizierte Ziehungen; iframe-Cookies können blockiert werden.
Der Server prüft Identität, Origin/CSRF und Teilnahme, begrenzt Versuche und Anfragen, zieht mit eigenen Chancen und speichert Bestand und Ergebnis in einer Transaktion. Speichere Idempotenz nach Teilnehmer + campaignId + requestId und liefere bei Wiederholung dasselbe Ergebnis. Einlösung und Ablauf serverseitig prüfen. Browserdaten beweisen keinen Anspruch; keine Geheimnisse veröffentlichen.
Lehne Anfragen mit passendem Nicht-2xx-Status ab (z. B. 401/403/409/429/503). Das Widget zeigt eine allgemeine Meldung, nicht den Serverfehler. Nach 15 Sekunden wird abgebrochen; Redirects, ungültiges JSON, falsche requestId, unbekannte Preise und unsichere Links werden abgelehnt. Manuelles Wiederholen behält die ID nur auf dieser Seite; Neuladen erzeugt eine neue. Limits müssen dauerhaft gespeichert sein. Kein automatischer Retry oder lokaler Ersatzpreis.
Die Offline-Vorschau bleibt bei unvollständigen API- oder Hosting-Feldern aktiv. Ergänze markierte Felder zum Export; bei Preis- oder Stilfehlern bleibt die letzte gültige Vorschau.
Export und Einbettung
HTML / CSS / JavaScript / JSON. Hoste die Dateien auf deiner HTTPS-Seite und füge die URL ein. Dieses Tool veröffentlicht oder hostet keine Kampagnen.
Optionale Bilder laden im Browser von ihren HTTPS-Hosts. Der Editor speichert keine Bilder oder API-Schlüssel.
Gleich große Segmente sind nur Darstellung; die Demo nutzt die angegebenen Chancen. Im API-Modus entscheidet der Server.