Skip to main content
useThunderPhone hook’u, ThunderPhone ses oturumunu, ses yönlendirmesini ve bağlantı durumunu yönetirken kullanıcı arayüzü üzerinde tam denetim sağlar. ThunderPhone arka planda her şeyi yönetirken kendi düğmeleriniz, düzenleriniz, animasyonlarınız ve markalamanızla tamamen özel bir kullanıcı arayüzü istediğinizde kullanın.

Arayüzsüz Hook Ne Zaman Kullanılmalı

Hazır ThunderPhoneWidget bileşeni çoğu kullanım durumunu kapsar, ancak aşağıdakilere ihtiyacınız olduğunda arayüzsüz hook’u kullanın:
  • Uygulamanızın tasarım sistemine uyan tamamen özel bir arama kullanıcı arayüzü
  • Gerçek zamanlı ses seviyelerine dayalı, sese duyarlı görselleştirmeler (dalga formları, küreler, titreşimli göstergeler)
  • Arama öncesi formlar, arama sonrası anketler veya sesin yanında satır içi sohbet gibi özel arama akışları
  • Mevcut bir bileşen kitaplığıyla entegrasyon (Material UI, Chakra, Radix vb.)

Kurulum

Kendi kullanıcı arayüzünüzü sağladığınız için arayüzsüz hook, @thunderphone/widget/style.css içe aktarımını gerektirmez. Ancak yine de aynı @thunderphone/widget paketini yüklemelisiniz.

Temel Kullanım

Bileşen ağacınızda bir yerde phone.audio öğesini oluşturmalısınız. Bu, temel ses bağlantısını yöneten görünmez bir React öğesidir. Atlarsanız ses oynatılmaz ve oturum çalışmaz.

Seçenekler

Bu seçenekleri UseThunderPhoneOptions aracılığıyla useThunderPhone için iletin:
Hook arayüzsüzdür: ThunderPhoneWidget görünüm prop’larını (theme, primaryColor, title, position, className) kabul etmez. Bunları iletmek bir TypeScript hatasıdır — sunumu tamamen siz oluşturursunuz.

Dönüş Değeri

Hook, bir UseThunderPhoneReturn nesnesi döndürür:

Sese Duyarlı UI

audioLevelRef ref’i, React yeniden oluşturmalarını tetiklemeden kare hızı düzeyinde ses seviyeleri sunar; bu da onu akıcı dalga biçimi görselleştirmeleri, titreşen küreler veya konuşmaya bağlı herhangi bir animasyonu çalıştırmak için ideal kılar. Seviye, yapay zeka ajanının sesi ya da ziyaretçinin mikrofonundan hangisi daha yüksekse onu yansıtır.

Dalga Biçimi Örneği

Titreşen Küre Örneği

Konuşma Göstergesi Örneği

Ses düzeyiyle değişen React ile işlenen bir kullanıcı arayüzü için — eşik tabanlı bir “konuşuyor” rozeti gibi — audioLevelRef.current değerini düzenli aralıklarla örnekleyin ve sonucu durumda saklayın:
Seviyeleri her zaman audioLevelRef.current üzerinden okuyun. Dönüş nesnesindeki audioLevel sayısı kullanımdan kaldırılmıştır ve her zaman 0 değerindedir — buna dayalı tüm mantık sessizce sıfır değerini okur.

Durum Makinesi

state özelliği şu yaşam döngüsünü izler:

Örnekler

Sessize Alma Denetimi ile

Zil Sesi ile

Telefon aramasını simüle etmek için bağlanırken bir zil sesi çalın:
Zil sesi, connecting durumu sırasında döngü halinde çalar ve ajan bağlandığında kademeli olarak azalır. Yerleşik varsayılan zil sesi için true, kendi ses dosyanızı kullanmak için ise bir URL dizesi iletin.

Olay Geri Çağrıları ile

Tam Özel Arayüz


İpuçları

phone.audio öğesi görünmez ancak gereklidir. JSX’inizde herhangi bir yere yerleştirin — görünür bir DOM render etmez, ancak WebRTC ses bağlantısını dahili olarak yönetir.
connecting durumu 1-3 saniye sürebilir. Yinelenen bağlantı denemelerini önlemek için bu durum sırasında arama düğmesini devre dışı bırakın.
Durum error olduğunda, kullanıcıya phone.error değerini gösterin ve arama düğmenizi etkin tutun. Hook, error durumundan kendiliğinden çıkmaz — connect() işlevini yeniden çağırmak yeni bir deneme başlatır ve önceki hatayı temizler.
onConnect, onDisconnect ve onError geri çağrıları; durumu yoklamadan analitik, günlük kaydı veya diğer uygulama mantıklarını tetiklemek için idealdir.
audioLevelRef, tek canlı ses seviyesi kaynağıdır. Dalga formları gibi akıcı animasyonlar için audioLevelRef.current değerini requestAnimationFrame içinde okuyun (bir ref’i okumak yeniden render işlemine neden olmaz) veya bunu belirli aralıklarla örnekleyip sonucu React tarafından render edilen kullanıcı arayüzü için durumda saklayın. audioLevel sayısı kullanımdan kaldırılmıştır ve her zaman 0 değerindedir — bunun üzerine mantık oluşturmayın.