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 rakennettuThunderPhoneWidget-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ö
Asetukset
Välitä nämä asetuksetuseThunderPhone-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 palauttaaUseThunderPhoneReturn-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 — lueaudioLevelRef.current säännöllisin välein ja tallenna tulos tilaan:
Tilakone
state-ominaisuus noudattaa tätä elinkaarta:
Esimerkkejä
Mykistyksen hallinnalla
Soittoäänellä
Toista soittoääntä yhteyden muodostamisen aikana simuloidaksesi puhelua: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
Renderöi aina phone.audio
Renderöi aina phone.audio
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.Poista painike käytöstä yhdistämisen aikana
Poista painike käytöstä yhdistämisen aikana
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.Käsittele virhetila hallitusti
Käsittele virhetila hallitusti
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.Käytä takaisinsoittoja sivuvaikutuksiin
Käytä takaisinsoittoja sivuvaikutuksiin
onConnect-, onDisconnect- ja onError-takaisinsoitot sopivat erinomaisesti analytiikkaan, lokitukseen tai muun sovelluslogiikan käynnistämiseen ilman tilan pollausta.Lue äänitasot audioLevelRefistä
Lue äänitasot audioLevelRefistä
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.