useThunderPhone ger dig fullständig kontroll över användargränssnittet medan ThunderPhone hanterar röstsessionen, ljudroutningen och anslutningsstatusen. Använd den när du vill ha ett helt anpassat UI — egna knappar, layouter, animationer och varumärkesprofilering — medan ThunderPhone hanterar allt i bakgrunden.
När du ska använda den headlessa hooken
Den färdiga komponentenThunderPhoneWidget täcker de flesta användningsfall, men använd den headlessa hooken när du behöver:
- Ett helt anpassat samtals-UI som matchar appens designsystem
- Ljudreaktiva visualiseringar (vågformer, klot, pulserande indikatorer) som styrs av ljudnivåer i realtid
- Anpassade samtalsflöden, till exempel formulär före samtalet, enkäter efter samtalet eller integrerad chatt vid sidan av röst
- Integration i ett befintligt komponentbibliotek (Material UI, Chakra, Radix osv.)
Installation
Den headlessa hooken kräver inte att du importerar
@thunderphone/widget/style.css, eftersom du tillhandahåller ditt eget UI. Du måste dock fortfarande installera samma paket, @thunderphone/widget.Grundläggande användning
Alternativ
Skicka dessa alternativ tilluseThunderPhone via UseThunderPhoneOptions:
Hooken är headless: den accepterar inte utseendeegenskaperna för
ThunderPhoneWidget (theme, primaryColor, title, position, className). Att skicka dem ger ett TypeScript-fel — presentationen är helt din att bygga.Returvärde
Hooken returnerar ettUseThunderPhoneReturn-objekt:
Ljudreaktivt användargränssnitt
ReferensenaudioLevelRef ger dig ljudnivåer i bildfrekvens utan att utlösa React-omrenderingar, vilket gör den idealisk för att styra jämna vågformsvisualiseringar, pulserande sfärer eller andra animationer som är kopplade till samtalet. Nivån återspeglar det som är högst: agentens röst eller besökarens mikrofon.
Exempel på vågform
Exempel på pulserande sfär
Exempel på talindikator
För React-renderade användargränssnitt som ändras med volymen — till exempel en tröskelbaserad indikator för ”talar” — läser du avaudioLevelRef.current med ett intervall och sparar resultatet i state:
Tillståndsmaskin
Egenskapenstate följer denna livscykel:
Exempel
Med ljudavstängningskontroll
Med ringsignal
Spela upp ett ringsignal-ljud medan anslutningen upprättas för att simulera ett telefonsamtal:connecting och tonas ut när agenten ansluter. Skicka true för den inbyggda standardringsignalen, eller en URL-sträng för att använda din egen ljudfil.
Med händelseåteranrop
Helt anpassat användargränssnitt
Tips
Rendera alltid phone.audio
Rendera alltid phone.audio
Elementet
phone.audio är osynligt men krävs. Placera det var som helst i din JSX — det renderar ingen synlig DOM men hanterar WebRTC-ljudanslutningen internt.Inaktivera knappen under anslutning
Inaktivera knappen under anslutning
Tillståndet
connecting kan vara i 1–3 sekunder. Inaktivera samtalsknappen under detta tillstånd för att förhindra dubbla anslutningsförsök.Hantera feltillståndet smidigt
Hantera feltillståndet smidigt
När tillståndet är
error visar du phone.error för användaren och låter samtalsknappen vara aktiverad. Hooken lämnar inte tillståndet error på egen hand — om du anropar connect() igen startar ett nytt försök och det tidigare felet rensas.Använd callbacks för bieffekter
Använd callbacks för bieffekter
Callbackarna
onConnect, onDisconnect och onError är idealiska för analys, loggning eller för att utlösa annan programlogik utan att polla tillståndet.Läs ljudnivåer från audioLevelRef
Läs ljudnivåer från audioLevelRef
audioLevelRef är den enda källan för ljudnivåer i realtid. Läs audioLevelRef.current inuti requestAnimationFrame för mjuka animationer som vågformer (att läsa en ref orsakar inga omrenderingar), eller sampla den med ett intervall och lagra resultatet i state för React-renderat gränssnitt. Talet audioLevel är föråldrat och alltid 0 — bygg inte logik på det.