useThunderPhone vám poskytuje úplnou kontrolu nad uživatelským rozhraním, zatímco ThunderPhone spravuje hlasovou relaci, směrování zvuku a stav připojení. Použijte ho, když chcete plně vlastní uživatelské rozhraní — vlastní tlačítka, rozvržení, animace a branding — zatímco ThunderPhone se postará o vše na pozadí.
Kdy použít headless hook
Předpřipravená komponentaThunderPhoneWidget pokrývá většinu případů použití, ale headless hook použijte, když potřebujete:
- Zcela vlastní uživatelské rozhraní hovoru, které odpovídá designovému systému vaší aplikace
- Vizualizace reagující na zvuk (křivky zvuku, koule, pulzující indikátory) řízené úrovněmi zvuku v reálném čase
- Vlastní toky hovoru, jako jsou formuláře před hovorem, dotazníky po hovoru nebo integrovaný chat vedle hlasové komunikace
- Integraci do existující knihovny komponent (Material UI, Chakra, Radix atd.)
Instalace
Headless hook nevyžaduje import
@thunderphone/widget/style.css, protože poskytujete vlastní uživatelské rozhraní. Stále však musíte nainstalovat stejný balíček @thunderphone/widget.Základní použití
Možnosti
Tyto možnosti předejte douseThunderPhone prostřednictvím UseThunderPhoneOptions:
Hook je headless: nepřijímá vlastnosti vzhledu
ThunderPhoneWidget (theme, primaryColor, title, position, className). Jejich předání způsobí chybu TypeScriptu — prezentaci si vytváříte zcela sami.Návratová hodnota
Hook vrací objektUseThunderPhoneReturn:
Uživatelské rozhraní reagující na zvuk
RefaudioLevelRef poskytuje úrovně zvuku ve snímkové frekvenci bez vyvolání opětovného vykreslení Reactu, takže je ideální pro plynulé vizualizace zvukové vlny, pulzující koule nebo jakoukoli animaci navázanou na konverzaci. Úroveň odráží hlasitější ze dvou zdrojů: hlas agenta nebo mikrofon návštěvníka.
Příklad zvukové vlny
Příklad pulzující koule
Příklad indikátoru mluvení
Pro uživatelské rozhraní vykreslované Reactem, které se mění podle hlasitosti – například štítek „mluví“ založený na prahové hodnotě – načítejteaudioLevelRef.current v intervalu a ukládejte výsledek do stavu:
Stavový automat
Vlastnoststate prochází tímto životním cyklem:
Příklady
S ovládáním ztlumení
S vyzváněním
Při připojování přehrajte vyzváněcí zvuk pro simulaci telefonního hovoru:connecting opakuje a po připojení agenta postupně utichne. Pro vestavěné výchozí vyzvánění předejte hodnotu true, nebo řetězec URL pro použití vlastního zvukového souboru.
S obslužnými funkcemi událostí
Plně vlastní uživatelské rozhraní
Tipy
Vždy vykreslujte phone.audio
Vždy vykreslujte phone.audio
Prvek
phone.audio je neviditelný, ale povinný. Umístěte jej kamkoli do JSX — nevykresluje žádný viditelný DOM, ale interně spravuje zvukové připojení WebRTC.Během připojování tlačítko deaktivujte
Během připojování tlačítko deaktivujte
Stav
connecting může trvat 1–3 sekundy. Během tohoto stavu deaktivujte tlačítko volání, abyste zabránili duplicitním pokusům o připojení.Stav chyby zpracujte vhodně
Stav chyby zpracujte vhodně
Když je stav
error, zobrazte uživateli phone.error a tlačítko volání ponechte aktivní. Hook stav error sám neopustí — opětovné volání connect() zahájí nový pokus a vymaže předchozí chybu.Pro vedlejší efekty používejte callbacky
Pro vedlejší efekty používejte callbacky
Callbacky
onConnect, onDisconnect a onError jsou ideální pro analytiku, protokolování nebo spuštění jiné logiky aplikace bez dotazování na stav.Úrovně zvuku čtěte z audioLevelRef
Úrovně zvuku čtěte z audioLevelRef
audioLevelRef je jediný živý zdroj úrovně zvuku. Pro plynulé animace, například průběhy vln, čtěte audioLevelRef.current uvnitř requestAnimationFrame (čtení ref nezpůsobuje opětovné vykreslení), nebo jej vzorkujte v intervalu a výsledek ukládejte do stavu pro uživatelské rozhraní vykreslované Reactem. Číslo audioLevel je zastaralé a vždy má hodnotu 0 — nestavte na něm logiku.