Skip to main content
Der Hook useThunderPhone gibt Ihnen vollständige Kontrolle über die Benutzeroberfläche, während ThunderPhone die Sprachsitzung, Audio-Routing und den Verbindungsstatus verwaltet. Verwenden Sie ihn, wenn Sie eine vollständig individuelle UI wünschen — mit eigenen Schaltflächen, Layouts, Animationen und Branding — während ThunderPhone alles im Hintergrund übernimmt.

Wann Sie den Headless-Hook verwenden sollten

Die vorgefertigte Komponente ThunderPhoneWidget deckt die meisten Anwendungsfälle ab. Verwenden Sie den Headless-Hook jedoch, wenn Sie Folgendes benötigen:
  • Eine vollständig individuelle Anruf-UI, die zum Designsystem Ihrer App passt
  • Audioreaktive Visualisierungen (Wellenformen, Kugeln, pulsierende Anzeigen), die von Audiopegeln in Echtzeit gesteuert werden
  • Individuelle Anrufflüsse wie Formulare vor dem Anruf, Umfragen nach dem Anruf oder Inline-Chat neben der Sprachfunktion
  • Integration in eine bestehende Komponentenbibliothek (Material UI, Chakra, Radix usw.)

Installation

Der Headless-Hook erfordert nicht den Import von @thunderphone/widget/style.css, da Sie Ihre eigene UI bereitstellen. Sie müssen jedoch weiterhin dasselbe Paket @thunderphone/widget installieren.

Grundlegende Verwendung

Sie müssen phone.audio an einer Stelle in Ihrem Komponentenbaum rendern. Es ist ein unsichtbares React-Element, das die zugrunde liegende Audioverbindung verwaltet. Wenn Sie es weglassen, wird kein Audio wiedergegeben und die Sitzung funktioniert nicht.

Optionen

Übergeben Sie diese Optionen über UseThunderPhoneOptions an useThunderPhone:
Der Hook ist Headless: Er akzeptiert nicht die Darstellungs-Props von ThunderPhoneWidget (theme, primaryColor, title, position, className). Die Übergabe dieser Props führt zu einem TypeScript-Fehler — die Darstellung erstellen Sie vollständig selbst.

Rückgabewert

Der Hook gibt ein UseThunderPhoneReturn-Objekt zurück:

Audioreaktive UI

Die Ref audioLevelRef liefert Ihnen Audiopegel mit Bildrate, ohne React-Neurenderings auszulösen. Dadurch eignet sie sich ideal für flüssige Wellenformvisualisierungen, pulsierende Kugeln oder jede Animation, die an die Unterhaltung gekoppelt ist. Der Pegel entspricht jeweils der lauteren Quelle: der Stimme des Agenten oder dem Mikrofon des Besuchers.

Wellenformbeispiel

Beispiel für eine pulsierende Kugel

Beispiel für eine Sprechindikator

Für eine von React gerenderte UI, die sich mit der Lautstärke ändert – etwa ein schwellenwertbasierter Badge für „spricht“ –, lesen Sie audioLevelRef.current in einem Intervall aus und speichern Sie das Ergebnis im State:
Lesen Sie Pegel immer aus audioLevelRef.current. Die Zahl audioLevel im Rückgabeobjekt ist veraltet und immer 0 – jede darauf basierende Logik liest stillschweigend null.

Zustandsautomat

Die Eigenschaft state durchläuft diesen Lebenszyklus:

Beispiele

Mit Stummschaltfunktion

Mit Klingelton

Spielen Sie während des Verbindungsaufbaus einen Klingelton ab, um einen Telefonanruf zu simulieren:
Der Klingelton wird während des Status connecting wiederholt und ausgeblendet, wenn der Agent verbunden ist. Übergeben Sie true für den integrierten Standardklingelton oder einen URL-String, um Ihre eigene Audiodatei zu verwenden.

Mit Ereignis-Callbacks

Vollständig benutzerdefinierte UI


Tipps

Das Element phone.audio ist unsichtbar, aber erforderlich. Platzieren Sie es an einer beliebigen Stelle in Ihrem JSX — es rendert kein sichtbares DOM, verwaltet jedoch intern die WebRTC-Audioverbindung.
Der Status connecting kann 1–3 Sekunden dauern. Deaktivieren Sie während dieses Status die Anrufschaltfläche, um doppelte Verbindungsversuche zu verhindern.
Wenn der Status error ist, zeigen Sie dem Benutzer phone.error an und lassen Sie Ihre Anrufschaltfläche aktiviert. Der Hook verlässt den Status error nicht selbstständig — ein erneuter Aufruf von connect() startet einen neuen Versuch und löscht den vorherigen Fehler.
Die Callbacks onConnect, onDisconnect und onError eignen sich ideal für Analysen, Protokollierung oder zum Auslösen anderer Anwendungslogik, ohne den Status abzufragen.
audioLevelRef ist die einzige Live-Quelle für Audiopegel. Lesen Sie audioLevelRef.current innerhalb von requestAnimationFrame für flüssige Animationen wie Wellenformen aus (das Lesen einer Ref verursacht keine erneuten Renderings), oder fragen Sie sie in einem Intervall ab und speichern Sie das Ergebnis im Status für von React gerenderte UI. Die Zahl audioLevel ist veraltet und immer 0 — bauen Sie keine Logik darauf auf.