Skip to main content
Hook 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á komponenta ThunderPhoneWidget 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í

Musíte vykreslit phone.audio někde ve stromu komponent. Jde o neviditelný prvek Reactu, který spravuje základní zvukové připojení. Pokud jej vynecháte, nebude se přehrávat žádný zvuk a relace nebude fungovat.

Možnosti

Tyto možnosti předejte do useThunderPhone 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í objekt UseThunderPhoneReturn:

Uživatelské rozhraní reagující na zvuk

Ref audioLevelRef 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čítejte audioLevelRef.current v intervalu a ukládejte výsledek do stavu:
Úrovně vždy čtěte z audioLevelRef.current. Číslo audioLevel v návratovém objektu je zastaralé a vždy má hodnotu 0 – jakákoli logika založená na něm bude bez upozornění číst nulu.

Stavový automat

Vlastnost state 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:
Vyzvánění se během stavu 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

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.
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í.
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.
Callbacky onConnect, onDisconnect a onError jsou ideální pro analytiku, protokolování nebo spuštění jiné logiky aplikace bez dotazování na stav.
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.