Skip to main content
useThunderPhone-hooken gir deg full kontroll over brukergrensesnittet mens ThunderPhone håndterer stemmeøkten, lydrutingen og tilkoblingsstatusen. Bruk den når du vil ha et helt tilpasset brukergrensesnitt — egne knapper, oppsett, animasjoner og profilering — mens ThunderPhone håndterer alt i bakgrunnen.

Når du skal bruke Headless-hooken

Den ferdigbygde ThunderPhoneWidget-komponenten dekker de fleste brukstilfeller, men bruk headless-hooken når du trenger:
  • Et helt tilpasset samtalegrensesnitt som matcher designsystemet i appen din
  • Lydreaktive visualiseringer (bølgeformer, kuler, pulserende indikatorer) drevet av lydnivåer i sanntid
  • Tilpassede samtaleflyter som skjemaer før samtalen, undersøkelser etter samtalen eller innebygd chat ved siden av stemmen
  • Integrasjon i et eksisterende komponentbibliotek (Material UI, Chakra, Radix osv.)

Installasjon

Headless-hooken krever ikke at du importerer @thunderphone/widget/style.css, siden du lager ditt eget brukergrensesnitt. Du må imidlertid fortsatt installere den samme @thunderphone/widget-pakken.

Grunnleggende bruk

Du må rendre phone.audio et sted i komponenttreet ditt. Det er et usynlig React-element som håndterer den underliggende lydtilkoblingen. Hvis du utelater det, spilles ingen lyd av, og økten vil ikke fungere.

Alternativer

Send disse alternativene til useThunderPhone via UseThunderPhoneOptions:
Hooken er headless: Den godtar ikke utseendeegenskapene til ThunderPhoneWidget (theme, primaryColor, title, position, className). Det er en TypeScript-feil å sende dem — du bygger hele presentasjonen selv.

Returverdi

Hooken returnerer et UseThunderPhoneReturn-objekt:

Lydreaktivt brukergrensesnitt

Ref-en audioLevelRef gir deg lydnivåer med bildefrekvens uten å utløse React-gjengivelser, noe som gjør den ideell for jevne bølgeformvisualiseringer, pulserende kuler eller enhver animasjon knyttet til samtalen. Nivået gjenspeiler det som er høyest: agentens stemme eller den besøkendes mikrofon.

Eksempel på bølgeform

Eksempel på pulserende kule

Eksempel på taleindikator

For React-gjengitt brukergrensesnitt som endres med volumet — for eksempel et terskelbasert «snakker»-merke — les audioLevelRef.current med et intervall og lagre resultatet i tilstand:
Les alltid nivåer fra audioLevelRef.current. Tallet audioLevel på retur-objektet er utdatert og alltid 0 — all logikk som bygger på det, vil uten varsel lese null.

Tilstandsmaskin

Egenskapen state følger denne livssyklusen:

Eksempler

Med dempekontroll

Med ringetone

Spill av en ringelyd mens tilkoblingen opprettes for å simulere en telefonsamtale:
Ringetonen gjentas mens statusen er connecting og tones ut når stemmeagenten kobler til. Send inn true for den innebygde standardringetonen, eller en URL-streng for å bruke din egen lydfil.

Med hendelsestilbakekall

Fullt tilpasset brukergrensesnitt


Tips

Elementet phone.audio er usynlig, men nødvendig. Plasser det hvor som helst i JSX-en din — det renderer ingen synlig DOM, men håndterer WebRTC-lydtilkoblingen internt.
Tilstanden connecting kan vare i 1–3 sekunder. Deaktiver ringeknappen i denne tilstanden for å forhindre doble tilkoblingsforsøk.
Når tilstanden er error, vis phone.error til brukeren og hold ringeknappen aktivert. Hooken forlater ikke error-tilstanden av seg selv — å kalle connect() på nytt starter et nytt forsøk og fjerner den forrige feilen.
Tilbakeringingene onConnect, onDisconnect og onError er ideelle for analyse, logging eller utløsing av annen applikasjonslogikk uten å polle tilstanden.
audioLevelRef er den eneste direkte kilden til lydnivå. Les audioLevelRef.current inne i requestAnimationFrame for jevne animasjoner som bølgeformer (å lese en ref forårsaker ikke ny rendering), eller hent en prøve med jevne mellomrom og lagre resultatet i tilstanden for React-rendert brukergrensesnitt. Tallet audioLevel er utdatert og alltid 0 — ikke bygg logikk på det.