Skip to main content
useThunderPhone-hook antaa sinulle täydellisen hallinnan käyttöliittymästä, kun ThunderPhone hallitsee puheistuntoa, äänen reititystä ja yhteystilaa. Käytä sitä, kun haluat täysin mukautetun käyttöliittymän — omat painikkeet, asettelut, animaatiot ja brändäyksen — samalla kun ThunderPhone hoitaa kaiken taustalla.

Milloin Headless-hookia kannattaa käyttää

Valmiiksi rakennettu ThunderPhoneWidget-komponentti kattaa useimmat käyttötapaukset, mutta käytä headless-hookia, kun tarvitset:
  • Täysin mukautetun puhelukäyttöliittymän, joka vastaa sovelluksesi suunnittelujärjestelmää
  • Reaaliaikaisten äänitasojen ohjaamia ääneen reagoivia visualisointeja (aaltomuotoja, palloja, sykkiviä ilmaisimia)
  • Mukautettuja puheluvirtoja, kuten puhelua edeltäviä lomakkeita, puhelun jälkeisiä kyselyitä tai puheen rinnalla toimivaa upotettua keskustelua
  • Integroinnin olemassa olevaan komponenttikirjastoon (Material UI, Chakra, Radix jne.)

Asennus

Headless-hook ei vaadi @thunderphone/widget/style.css -tiedoston tuomista, koska toteutat oman käyttöliittymäsi. Sinun on kuitenkin asennettava sama @thunderphone/widget-paketti.

Peruskäyttö

Sinun on renderöitävä phone.audio jossakin komponenttipuussasi. Se on näkymätön React-elementti, joka hallitsee taustalla olevaa ääniyhteyttä. Jos jätät sen pois, ääntä ei toisteta eikä istunto toimi.

Asetukset

Välitä nämä asetukset useThunderPhone-hookille UseThunderPhoneOptions-objektin kautta:
Hook on headless: se ei hyväksy ThunderPhoneWidget-komponentin ulkoasuominaisuuksia (theme, primaryColor, title, position, className). Niiden välittäminen aiheuttaa TypeScript-virheen — käyttöliittymän toteutus on kokonaan sinun vastuullasi.

Paluuarvo

Hook palauttaa UseThunderPhoneReturn-objektin:

Ääneen reagoiva käyttöliittymä

audioLevelRef-ref tarjoaa kehysnopeuden mukaiset äänitasot käynnistämättä React-uudelleenrenderöintejä, joten se sopii erinomaisesti sulavien aaltomuotovisualisointien, sykkivien pallojen tai minkä tahansa keskusteluun sidotun animaation ohjaamiseen. Taso vastaa sitä, kumpi on voimakkaampi: agentin ääni vai kävijän mikrofoni.

Aaltomuotoesimerkki

Sykkivä pallo -esimerkki

Puhumisilmaisimen esimerkki

React-renderöityä äänenvoimakkuuden mukaan muuttuvaa käyttöliittymää varten — kuten kynnysarvoon perustuvaa “puhuu”-tunnistetta — lue audioLevelRef.current säännöllisin välein ja tallenna tulos tilaan:
Lue tasot aina kohteesta audioLevelRef.current. Palautusobjektin audioLevel-numero on vanhentunut ja aina 0 — siihen perustuva logiikka lukee huomaamatta nollaa.

Tilakone

state-ominaisuus noudattaa tätä elinkaarta:

Esimerkkejä

Mykistyksen hallinnalla

Soittoäänellä

Toista soittoääntä yhteyden muodostamisen aikana simuloidaksesi puhelua:
Soittoääni toistuu connecting-tilassa ja vaimenee, kun agentti yhdistyy. Välitä sisäänrakennetulle oletussoittoäänelle true tai URL-merkkijono, jos haluat käyttää omaa äänitiedostoasi.

Tapahtumakutsujen kanssa

Täysin mukautettu käyttöliittymä


Vinkit

phone.audio-elementti on näkymätön, mutta pakollinen. Sijoita se mihin tahansa JSX-koodiisi — se ei renderöi näkyvää DOM:ää, mutta hallitsee WebRTC-audioyhteyttä sisäisesti.
connecting-tila voi kestää 1–3 sekuntia. Poista soittopainike käytöstä tämän tilan aikana, jotta vältät päällekkäiset yhdistämisyritykset.
Kun tila on error, näytä käyttäjälle phone.error ja pidä soittopainike käytössä. Hook ei poistu error-tilasta itsestään — connect()-funktion kutsuminen uudelleen aloittaa uuden yrityksen ja tyhjentää aiemman virheen.
onConnect-, onDisconnect- ja onError-takaisinsoitot sopivat erinomaisesti analytiikkaan, lokitukseen tai muun sovelluslogiikan käynnistämiseen ilman tilan pollausta.
audioLevelRef on ainoa reaaliaikainen äänitasolähde. Lue audioLevelRef.current requestAnimationFrame-kutsun sisällä sulavia animaatioita, kuten aaltomuotoja, varten (refin lukeminen ei aiheuta uudelleenrenderöintiä), tai ota siitä näyte aikavälillä ja tallenna tulos tilaan Reactilla renderöityä käyttöliittymää varten. audioLevel-numero on vanhentunut ja aina 0 — älä rakenna logiikkaa sen varaan.