Skip to main content
useThunderPhone हुक आपको यूज़र इंटरफ़ेस पर पूरा नियंत्रण देता है, जबकि ThunderPhone वॉइस सेशन, ऑडियो रूटिंग और कनेक्शन स्टेट को मैनेज करता है। जब आपको पूरी तरह कस्टम UI चाहिए हो — अपने बटन, लेआउट, एनिमेशन और ब्रांडिंग के साथ — और ThunderPhone बैकग्राउंड में सब कुछ संभाले, तब इसका उपयोग करें।

हेडलेस हुक का उपयोग कब करें

प्री-बिल्ट ThunderPhoneWidget कंपोनेंट अधिकांश उपयोग मामलों को कवर करता है, लेकिन जब आपको यह चाहिए हो, तब हेडलेस हुक का उपयोग करें:
  • पूरी तरह कस्टम कॉल UI, जो आपके ऐप के डिज़ाइन सिस्टम से मेल खाता हो
  • रीयल-टाइम ऑडियो लेवल से संचालित ऑडियो-रिएक्टिव विज़ुअलाइज़ेशन (वेवफॉर्म, ऑर्ब्स, पल्सिंग इंडिकेटर)
  • कस्टम कॉल फ्लो, जैसे प्री-कॉल फॉर्म, पोस्ट-कॉल सर्वे या वॉइस के साथ इनलाइन चैट
  • किसी मौजूदा कंपोनेंट लाइब्रेरी (Material UI, Chakra, Radix आदि) में इंटीग्रेशन

इंस्टॉलेशन

हेडलेस हुक के लिए @thunderphone/widget/style.css इंपोर्ट करना ज़रूरी नहीं है, क्योंकि आप अपना UI प्रदान कर रहे हैं। हालांकि, आपको फिर भी वही @thunderphone/widget पैकेज इंस्टॉल करना होगा।

बुनियादी उपयोग

आपको अपने कंपोनेंट ट्री में कहीं phone.audio रेंडर करना आवश्यक है। यह एक अदृश्य React एलिमेंट है जो अंतर्निहित ऑडियो कनेक्शन को मैनेज करता है। यदि आप इसे छोड़ देते हैं, तो कोई ऑडियो नहीं चलेगा और सेशन काम नहीं करेगा।

विकल्प

इन विकल्पों को UseThunderPhoneOptions के माध्यम से useThunderPhone में पास करें:
हुक हेडलेस है: यह ThunderPhoneWidget के अपीयरेंस प्रॉप्स (theme, primaryColor, title, position, className) स्वीकार नहीं करता। इन्हें पास करना TypeScript त्रुटि है — प्रेज़ेंटेशन पूरी तरह से आपको बनाना है।

रिटर्न वैल्यू

हुक एक UseThunderPhoneReturn ऑब्जेक्ट रिटर्न करता है:

ऑडियो-रिएक्टिव UI

audioLevelRef ref आपको React re-renders ट्रिगर किए बिना फ्रेम-रेट ऑडियो लेवल देता है, जिससे यह स्मूद वेवफॉर्म विज़ुअलाइज़ेशन, पल्सिंग ऑर्ब्स या बातचीत से जुड़ी किसी भी एनीमेशन को ड्राइव करने के लिए आदर्श है। लेवल इनमें से जो अधिक तेज़ हो उसे दर्शाता है: एजेंट की आवाज़ या विज़िटर का माइक्रोफ़ोन।

वेवफॉर्म उदाहरण

पल्सिंग ऑर्ब उदाहरण

स्पीकिंग इंडिकेटर उदाहरण

वॉल्यूम के साथ बदलने वाले React-rendered UI के लिए — जैसे थ्रेशोल्ड-आधारित “स्पीकिंग” बैज — audioLevelRef.current को एक अंतराल पर सैंपल करें और परिणाम को स्टेट में स्टोर करें:
हमेशा audioLevelRef.current से लेवल पढ़ें। रिटर्न ऑब्जेक्ट पर मौजूद audioLevel नंबर deprecated है और हमेशा 0 रहता है — इस पर बनी कोई भी लॉजिक बिना किसी संकेत के शून्य पढ़ेगी।

स्टेट मशीन

state प्रॉपर्टी इस लाइफसाइकल का पालन करती है:

उदाहरण

म्यूट कंट्रोल के साथ

रिंगटोन के साथ

फ़ोन कॉल का सिमुलेशन करने के लिए कनेक्ट करते समय रिंगिंग साउंड चलाएँ:
रिंगटोन connecting स्टेट के दौरान लूप होती है और एजेंट के कनेक्ट होने पर धीरे-धीरे बंद हो जाती है। बिल्ट-इन डिफ़ॉल्ट रिंगटोन के लिए true पास करें, या अपनी ऑडियो फ़ाइल इस्तेमाल करने के लिए URL स्ट्रिंग पास करें।

इवेंट कॉलबैक के साथ

पूरी तरह कस्टम UI


टिप्स

phone.audio एलिमेंट अदृश्य है, लेकिन आवश्यक है। इसे अपने JSX में कहीं भी रखें — यह कोई दृश्य DOM रेंडर नहीं करता, लेकिन अंदरूनी रूप से WebRTC ऑडियो कनेक्शन मैनेज करता है।
connecting स्टेट 1-3 सेकंड तक रह सकती है। डुप्लिकेट कनेक्शन प्रयासों को रोकने के लिए इस स्टेट के दौरान कॉल बटन निष्क्रिय करें।
जब स्टेट error हो, तो उपयोगकर्ता को phone.error दिखाएँ और अपना कॉल बटन सक्षम रखें। हुक अपने-आप error स्टेट से बाहर नहीं जाता — connect() को फिर से कॉल करने पर नया प्रयास शुरू होता है और पिछली एरर हट जाती है।
onConnect, onDisconnect, और onError कॉलबैक स्टेट को पोल किए बिना एनालिटिक्स, लॉगिंग या अन्य एप्लिकेशन लॉजिक ट्रिगर करने के लिए आदर्श हैं।
audioLevelRef एकमात्र लाइव ऑडियो-लेवल स्रोत है। वेवफॉर्म जैसी स्मूथ एनिमेशन के लिए requestAnimationFrame के अंदर audioLevelRef.current पढ़ें (रेफ पढ़ने से री-रेंडर नहीं होते), या इसे किसी इंटरवल पर सैंपल करें और React-रेंडर किए गए UI के लिए परिणाम को स्टेट में स्टोर करें। audioLevel नंबर डिप्रिकेटेड है और हमेशा 0 रहता है — इस पर लॉजिक न बनाएँ।