useThunderPhone vă oferă control complet asupra interfeței cu utilizatorul, în timp ce ThunderPhone gestionează sesiunea vocală, rutarea audio și starea conexiunii. Utilizați-l când doriți o interfață complet personalizată — propriile butoane, aspecte, animații și elemente de branding — în timp ce ThunderPhone gestionează totul în fundal.
Când să utilizați hook-ul Headless
Componenta predefinităThunderPhoneWidget acoperă majoritatea cazurilor de utilizare, însă utilizați hook-ul headless când aveți nevoie de:
- O interfață de apel complet personalizată, care se potrivește cu sistemul de design al aplicației dumneavoastră
- Vizualizări reactive la audio (forme de undă, sfere, indicatori pulsați) bazate pe nivelurile audio în timp real
- Fluxuri de apel personalizate, precum formulare înainte de apel, sondaje după apel sau chat integrat alături de voce
- Integrare într-o bibliotecă de componente existentă (Material UI, Chakra, Radix etc.)
Instalare
Hook-ul headless nu necesită importarea
@thunderphone/widget/style.css, deoarece furnizați propria interfață. Totuși, trebuie să instalați în continuare același pachet @thunderphone/widget.Utilizare de bază
Opțiuni
Transmiteți aceste opțiuni cătreuseThunderPhone prin UseThunderPhoneOptions:
Hook-ul este headless: nu acceptă proprietățile de aspect ale
ThunderPhoneWidget (theme, primaryColor, title, position, className). Transmiterea acestora produce o eroare TypeScript — prezentarea vă revine în întregime.Valoare returnată
Hook-ul returnează un obiectUseThunderPhoneReturn:
Interfață reactivă la audio
ReferințaaudioLevelRef vă oferă niveluri audio la rata cadrelor fără a declanșa re-randări React, ceea ce o face ideală pentru vizualizări fluide ale formei de undă, sfere pulsante sau orice animație legată de conversație. Nivelul reflectă sursa mai puternică: vocea agentului sau microfonul vizitatorului.
Exemplu de formă de undă
Exemplu de sferă pulsantă
Exemplu de indicator pentru vorbire
Pentru o interfață redată de React care se modifică în funcție de volum — precum o insignă „vorbește” bazată pe prag — eșantionațiaudioLevelRef.current la un interval și stocați rezultatul în stare:
Mașina de stări
Proprietateastate urmează acest ciclu de viață:
Exemple
Cu controlul dezactivării sunetului
Cu ton de apel
Redați un sunet de apel în timpul conectării pentru a simula un apel telefonic:connecting și se estompează când agentul se conectează. Transmiteți true pentru tonul de apel implicit integrat sau un șir URL pentru a utiliza propriul fișier audio.
Cu callback-uri de evenimente
Interfață UI complet personalizată
Sfaturi
Redați întotdeauna phone.audio
Redați întotdeauna phone.audio
Elementul
phone.audio este invizibil, dar obligatoriu. Plasați-l oriunde în JSX — nu redă niciun DOM vizibil, dar gestionează intern conexiunea audio WebRTC.Dezactivați butonul în timpul conectării
Dezactivați butonul în timpul conectării
Starea
connecting poate dura 1-3 secunde. Dezactivați butonul de apel în această stare pentru a preveni încercările de conectare duplicate.Gestionați elegant starea de eroare
Gestionați elegant starea de eroare
Când starea este
error, afișați utilizatorului phone.error și păstrați activat butonul de apel. Hook-ul nu părăsește singur starea error — apelarea din nou a connect() începe o încercare nouă și șterge eroarea anterioară.Utilizați callback-uri pentru efecte secundare
Utilizați callback-uri pentru efecte secundare
Callback-urile
onConnect, onDisconnect și onError sunt ideale pentru analiză, jurnalizare sau declanșarea altor logici ale aplicației fără interogarea repetată a stării.Citiți nivelurile audio din audioLevelRef
Citiți nivelurile audio din audioLevelRef
audioLevelRef este singura sursă live pentru nivelul audio. Citiți audioLevelRef.current în interiorul requestAnimationFrame pentru animații fluide, cum ar fi formele de undă (citirea unui ref nu provoacă rerandări), sau eșantionați-l la un interval și stocați rezultatul în stare pentru interfața redată de React. Numărul audioLevel este depreciat și este întotdeauna 0 — nu construiți logică bazată pe acesta.