<iframe> in eine beliebige Webseite einbetten. Der Avatar verbindet sich dann direkt aus dem Browser deiner Besucher mit dem Agenten — auf deiner Seite ist kein Backend nötig.
Voraussetzungen
Embedding aktivieren
Öffne den Agenten im Dashboard und aktiviere Einbettung erlauben. Nur freigegebene Agenten können eingebettet werden. Das Umschalten dieses Schalters wird sofort gespeichert — du kannst direkt testen, ohne den Agenten erst manuell zu speichern.
Origin freigeben
Trage unter Erlaubte Origins die Adresse(n) der Seite(n) ein, auf denen der Avatar laufen darf — z. B.
https://www.deine-domain.de.Schnellstart
AGENT_ID durch die UUID deines Agenten (im Dashboard sichtbar).
Das Attribut
allow="microphone; autoplay" ist erforderlich: Ohne microphone kann der Besucher nicht sprechen, ohne autoplay startet die Audiowiedergabe in manchen Browsern nicht automatisch (es greift dann das „Ton aktivieren”-Overlay).Vollbild-Displays
Die Einbettung rendert den Avatar immer inline, innerhalb des iframe-Containers, den du auf deiner Seite platzierst. Für ein eigenständiges Vollbild-Display — etwa einen unbeaufsichtigten Aufsteller — nutze statt eines iframes den dedizierten Kiosk-Modus. Er wird direkt als Top-Level-Seite geöffnet (kein iframe) und ergänzt einen Display-Wachhalter (Wake-Lock), einen Auto-Reset bei Inaktivität und eine Startbildschirm-Web-App für echtes Vollbild.Query-Parameter
Alle Optionen werden als Query-Parameter an die/embed-URL gehängt. Ungültige Werte fallen automatisch auf den Standard zurück.
Hintergrund-/Letterbox-Farbe als 6-stelliger Hex-Wert ohne
# (z. B. f5f5f5).UI-Sprache der Bedienelemente.
de oder en.Mit
true wird die Text-Chat-Eingabe ausgeblendet (reiner Sprach-/Avatar-Modus).Mit
true wird der „Auflegen”-Button eingeblendet.Das Mikrofon ist während eines Gesprächs dauerhaft offen. Möchtest du es von deiner Seite aus stummschalten oder wieder aktivieren (z. B. ein eigener Push-to-Talk-Button), steuere es per
postMessage — siehe Messaging.Beispiel mit mehreren Optionen
Messaging
Über das reine Einbetten hinaus kannst du den Avatar programmatisch steuern und auf sein Verhalten reagieren. Ein eingebetteter Agent läuft in einem<iframe> — deine Seite und der Avatar leben also in unterschiedlichen Browser-Kontexten. Sie kommunizieren über die standardisierte window.postMessage-API: Du sendest Nachrichten an den iframe und empfängst Events vom iframe.
Alle Nachrichten tragen das Präfix avaluma:, damit fremde Messages (z. B. von Drittanbieter-Skripten) sicher ignoriert werden.
Referenz auf den iframe holen
Gib deinem Embed eineid, damit du sein contentWindow ansprechen kannst:
Ablauf (Handshake)
Die Brücke meldet sich bei jedem (Re-)Mount mit einemready-Beacon. Die Parent-Seite bestätigt mit init und registriert damit ihren Origin als Ziel für ausgehende Events.
init zurücksenden
Die Parent-Seite antwortet mit
{ type: "avaluma:init" }. Erst dadurch kennt die Brücke den Ziel-Origin und kann Events zustellen.Nachrichten an den Avatar senden
Sende eine Nachricht an dascontentWindow des iframes. Übergib immer den Avaluma-Origin als zweites Argument, damit die Nachricht nur an den Avatar zugestellt wird:
| Nachricht | Payload | Wirkung |
|---|---|---|
avaluma:init | — | Registriert den Origin der Parent-Seite und schließt den Handshake ab. Auf jeden ready-Beacon senden. |
avaluma:sendMessage | { text } | Sendet Text an den Agenten — als hätte der Nutzer ihn ins Chat-Feld getippt. Leere Nachrichten werden ignoriert. |
avaluma:setMicrophone | { enabled } | Schaltet das Mikrofon des Besuchers an (true) oder stumm (false). Damit baust du z. B. einen eigenen Push-to-Talk-Button auf deiner Seite auf. |
Eine Konversation startet der Besucher selbst über „Gespräch starten” im iframe.
avaluma:sendMessage wirkt nur, solange eine Konversation aktiv ist.Events vom Avatar empfangen
Lausche aufmessage-Events am window. Prüfe immer event.origin, bevor du den Daten vertraust:
| Event | Daten | Bedeutung |
|---|---|---|
avaluma:ready | — | Die Brücke ist bereit. Bei jedem (Re-)Mount gesendet — mit init beantworten. |
avaluma:connected | — | Eine Konversation wurde aufgebaut (Avatar verbunden). |
avaluma:disconnected | — | Die Konversation wurde beendet. |
avaluma:agentMessage | { id, text, final } | Eine Nachricht des Agenten. Transkripte werden gestreamt — derselbe id-Wert wird mit wachsendem text mehrfach gesendet. |
Wie wird „final" bestimmt?
Wie wird „final" bestimmt?
Getippte Chat-Nachrichten sind sofort
final: true. Gestreamte Sprach-Transkripte gelten als fertig, sobald sich der Text rund 1 Sekunde nicht mehr ändert — dann folgt genau ein abschließendes final: true-Event mit dem kompletten Text. Mehrere Events mit gleicher id gehören zur selben Nachricht; nutze die id, um die Anzeige zu aktualisieren statt anzuhängen. Wer nur das Endergebnis braucht, filtert auf final === true.Vollständiges Testbeispiel
Eine eigenständige HTML-Seite, die den Avatar einbettet, Text an ihn sendet und alle Events in einem kleinen Log anzeigt. Lokal mit einem statischen Server ausliefern (z. B.python3 -m http.server 8080) und dessen Origin (http://localhost:8080) bei den Erlaubten Origins des Agenten eintragen.
Sicherheits-Checkliste
Immer den Ziel-Origin angeben
Verwende niemals
"*" als Ziel-Origin in postMessage. Gib https://avaluma.ai an, damit Nachrichten nicht an andere Frames gelangen können.Immer den Quell-Origin prüfen
Weise in deinem
message-Listener jedes Event ab, dessen event.origin nicht https://avaluma.ai ist.