useThunderPhone giver dig fuld kontrol over brugergrænsefladen, mens ThunderPhone håndterer stemmesessionen, lydrouting og forbindelsestilstand. Brug den, når du vil have et fuldt tilpasset UI — dine egne knapper, layouts, animationer og branding — mens ThunderPhone håndterer alt i baggrunden.
Hvornår du skal bruge headless-hooken
Den færdigbyggede komponentThunderPhoneWidget dækker de fleste anvendelsestilfælde, men brug headless-hooken, når du har brug for:
- Et helt tilpasset opkalds-UI, der matcher din apps designsystem
- Lydreaktive visualiseringer (bølgeformer, kugler, pulserende indikatorer) drevet af lydniveauer i realtid
- Tilpassede opkaldsforløb såsom formularer før opkaldet, spørgeundersøgelser efter opkaldet eller integreret chat ved siden af stemmen
- Integration i et eksisterende komponentbibliotek (Material UI, Chakra, Radix osv.)
Installation
Headless-hooken kræver ikke, at du importerer
@thunderphone/widget/style.css, da du selv leverer dit UI. Du skal dog stadig installere den samme pakke @thunderphone/widget.Grundlæggende brug
Indstillinger
Send disse indstillinger tiluseThunderPhone via UseThunderPhoneOptions:
Hooken er headless: Den accepterer ikke udseende-props fra
ThunderPhoneWidget (theme, primaryColor, title, position, className). Det er en TypeScript-fejl at sende dem — du står helt selv for at bygge præsentationen.Returværdi
Hooket returnerer etUseThunderPhoneReturn-objekt:
Lydreaktivt brugerinterface
Ref’enaudioLevelRef giver dig lydniveauer ved billedfrekvens uden at udloese React-genrenderinger, hvilket goer den ideel til at styre glatte boelgeformsvisualiseringer, pulserende kugler eller enhver animation, der er knyttet til samtalen. Niveauet afspejler den lyd, der er hoejest: agentens stemme eller besoegendes mikrofon.
Eksempel paa boelgeform
Eksempel paa pulserende kugle
Eksempel paa taleindikator
For React-gengivet brugerinterface, der aendrer sig med lydstyrken — som et maerkat for “taler” baseret paa en taerskelvaerdi — skal du maaleaudioLevelRef.current med et interval og gemme resultatet i state:
Tilstandsmaskine
Egenskabenstate følger denne livscyklus:
Eksempler
Med lydstyring
Med ringetone
Afspil en ringelyd under forbindelsen for at simulere et telefonopkald:connecting og toner ud, når agenten forbindes. Angiv true for den indbyggede standardringetone eller en URL-streng for at bruge din egen lydfil.
Med hændelseskald
Fuldt tilpasset brugerflade
Tips
Render altid phone.audio
Render altid phone.audio
Elementet
phone.audio er usynligt, men påkrævet. Placer det hvor som helst i din JSX — det renderer ingen synlig DOM, men administrerer WebRTC-lydforbindelsen internt.Deaktiver knappen under tilslutning
Deaktiver knappen under tilslutning
Tilstanden
connecting kan vare 1-3 sekunder. Deaktiver opkaldsknappen i denne tilstand for at forhindre dublerede forbindelsesforsøg.Håndter fejltilstanden elegant
Håndter fejltilstanden elegant
Når tilstanden er
error, skal du vise phone.error til brugeren og holde opkaldsknappen aktiveret. Hooken forlader ikke selv tilstanden error — et nyt kald til connect() starter et nyt forsøg og rydder den forrige fejl.Brug callbacks til sideeffekter
Brug callbacks til sideeffekter
Callbacksene
onConnect, onDisconnect og onError er ideelle til analyse, logføring eller til at udløse anden applikationslogik uden at polle tilstanden.Læs lydniveauer fra audioLevelRef
Læs lydniveauer fra audioLevelRef
audioLevelRef er den eneste kilde til live-lydniveauer. Læs audioLevelRef.current inde i requestAnimationFrame for jævne animationer som bølgeformer (at læse en ref medfører ikke genrenderinger), eller udtag prøver med et interval og gem resultatet i state for React-renderet brugergrænseflade. Tallet audioLevel er forældet og altid 0 — byg ikke logik på det.