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 ferdigbygdeThunderPhoneWidget-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
Alternativer
Send disse alternativene tiluseThunderPhone 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 etUseThunderPhoneReturn-objekt:
Lydreaktivt brukergrensesnitt
Ref-enaudioLevelRef 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 — lesaudioLevelRef.current med et intervall og lagre resultatet i tilstand:
Tilstandsmaskin
Egenskapenstate følger denne livssyklusen:
Eksempler
Med dempekontroll
Med ringetone
Spill av en ringelyd mens tilkoblingen opprettes for å simulere en telefonsamtale: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
Render alltid phone.audio
Render alltid phone.audio
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.Deaktiver knappen mens tilkoblingen opprettes
Deaktiver knappen mens tilkoblingen opprettes
Tilstanden
connecting kan vare i 1–3 sekunder. Deaktiver ringeknappen i denne tilstanden for å forhindre doble tilkoblingsforsøk.Håndter feiltilstanden på en god måte
Håndter feiltilstanden på en god måte
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.Bruk tilbakeringinger for sideeffekter
Bruk tilbakeringinger for sideeffekter
Tilbakeringingene
onConnect, onDisconnect og onError er ideelle for analyse, logging eller utløsing av annen applikasjonslogikk uten å polle tilstanden.Les lydnivåer fra audioLevelRef
Les lydnivåer fra audioLevelRef
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.