Skip to main content
Hooken 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 komponenten ThunderPhoneWidget 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

Du måste rendera phone.audio någonstans i komponentträdet. Det är ett osynligt React-element som hanterar den underliggande ljudanslutningen. Om du utelämnar det spelas inget ljud upp och sessionen fungerar inte.

Alternativ

Skicka dessa alternativ till useThunderPhone 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 ett UseThunderPhoneReturn-objekt:

Ljudreaktivt användargränssnitt

Referensen audioLevelRef 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 av audioLevelRef.current med ett intervall och sparar resultatet i state:
Läs alltid nivåer från audioLevelRef.current. Talet audioLevel i returvärdet är föråldrat och alltid 0 — all logik som bygger på det läser tyst av noll.

Tillståndsmaskin

Egenskapen state 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:
Ringsignalen loopas under tillståndet 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

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.
Tillståndet connecting kan vara i 1–3 sekunder. Inaktivera samtalsknappen under detta tillstånd för att förhindra dubbla anslutningsförsök.
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.
Callbackarna onConnect, onDisconnect och onError är idealiska för analys, loggning eller för att utlösa annan programlogik utan att polla tillståndet.
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.