useThunderPhone हुक आपको यूज़र इंटरफ़ेस पर पूरा नियंत्रण देता है, जबकि ThunderPhone वॉइस सेशन, ऑडियो रूटिंग और कनेक्शन स्टेट को मैनेज करता है। जब आपको पूरी तरह कस्टम UI चाहिए हो — अपने बटन, लेआउट, एनिमेशन और ब्रांडिंग के साथ — और ThunderPhone बैकग्राउंड में सब कुछ संभाले, तब इसका उपयोग करें।
हेडलेस हुक का उपयोग कब करें
प्री-बिल्टThunderPhoneWidget कंपोनेंट अधिकांश उपयोग मामलों को कवर करता है, लेकिन जब आपको यह चाहिए हो, तब हेडलेस हुक का उपयोग करें:
- पूरी तरह कस्टम कॉल UI, जो आपके ऐप के डिज़ाइन सिस्टम से मेल खाता हो
- रीयल-टाइम ऑडियो लेवल से संचालित ऑडियो-रिएक्टिव विज़ुअलाइज़ेशन (वेवफॉर्म, ऑर्ब्स, पल्सिंग इंडिकेटर)
- कस्टम कॉल फ्लो, जैसे प्री-कॉल फॉर्म, पोस्ट-कॉल सर्वे या वॉइस के साथ इनलाइन चैट
- किसी मौजूदा कंपोनेंट लाइब्रेरी (Material UI, Chakra, Radix आदि) में इंटीग्रेशन
इंस्टॉलेशन
हेडलेस हुक के लिए
@thunderphone/widget/style.css इंपोर्ट करना ज़रूरी नहीं है, क्योंकि आप अपना UI प्रदान कर रहे हैं। हालांकि, आपको फिर भी वही @thunderphone/widget पैकेज इंस्टॉल करना होगा।बुनियादी उपयोग
विकल्प
इन विकल्पों कोUseThunderPhoneOptions के माध्यम से useThunderPhone में पास करें:
हुक हेडलेस है: यह
ThunderPhoneWidget के अपीयरेंस प्रॉप्स (theme, primaryColor, title, position, className) स्वीकार नहीं करता। इन्हें पास करना TypeScript त्रुटि है — प्रेज़ेंटेशन पूरी तरह से आपको बनाना है।रिटर्न वैल्यू
हुक एकUseThunderPhoneReturn ऑब्जेक्ट रिटर्न करता है:
ऑडियो-रिएक्टिव UI
audioLevelRef ref आपको React re-renders ट्रिगर किए बिना फ्रेम-रेट ऑडियो लेवल देता है, जिससे यह स्मूद वेवफॉर्म विज़ुअलाइज़ेशन, पल्सिंग ऑर्ब्स या बातचीत से जुड़ी किसी भी एनीमेशन को ड्राइव करने के लिए आदर्श है। लेवल इनमें से जो अधिक तेज़ हो उसे दर्शाता है: एजेंट की आवाज़ या विज़िटर का माइक्रोफ़ोन।
वेवफॉर्म उदाहरण
पल्सिंग ऑर्ब उदाहरण
स्पीकिंग इंडिकेटर उदाहरण
वॉल्यूम के साथ बदलने वाले React-rendered UI के लिए — जैसे थ्रेशोल्ड-आधारित “स्पीकिंग” बैज —audioLevelRef.current को एक अंतराल पर सैंपल करें और परिणाम को स्टेट में स्टोर करें:
स्टेट मशीन
state प्रॉपर्टी इस लाइफसाइकल का पालन करती है:
उदाहरण
म्यूट कंट्रोल के साथ
रिंगटोन के साथ
फ़ोन कॉल का सिमुलेशन करने के लिए कनेक्ट करते समय रिंगिंग साउंड चलाएँ:connecting स्टेट के दौरान लूप होती है और एजेंट के कनेक्ट होने पर धीरे-धीरे बंद हो जाती है। बिल्ट-इन डिफ़ॉल्ट रिंगटोन के लिए true पास करें, या अपनी ऑडियो फ़ाइल इस्तेमाल करने के लिए URL स्ट्रिंग पास करें।
इवेंट कॉलबैक के साथ
पूरी तरह कस्टम UI
टिप्स
हमेशा phone.audio रेंडर करें
हमेशा phone.audio रेंडर करें
phone.audio एलिमेंट अदृश्य है, लेकिन आवश्यक है। इसे अपने JSX में कहीं भी रखें — यह कोई दृश्य DOM रेंडर नहीं करता, लेकिन अंदरूनी रूप से WebRTC ऑडियो कनेक्शन मैनेज करता है।कनेक्ट करते समय बटन निष्क्रिय करें
कनेक्ट करते समय बटन निष्क्रिय करें
connecting स्टेट 1-3 सेकंड तक रह सकती है। डुप्लिकेट कनेक्शन प्रयासों को रोकने के लिए इस स्टेट के दौरान कॉल बटन निष्क्रिय करें।एरर स्टेट को सहजता से हैंडल करें
एरर स्टेट को सहजता से हैंडल करें
जब स्टेट
error हो, तो उपयोगकर्ता को phone.error दिखाएँ और अपना कॉल बटन सक्षम रखें। हुक अपने-आप error स्टेट से बाहर नहीं जाता — connect() को फिर से कॉल करने पर नया प्रयास शुरू होता है और पिछली एरर हट जाती है।साइड इफेक्ट्स के लिए कॉलबैक का उपयोग करें
साइड इफेक्ट्स के लिए कॉलबैक का उपयोग करें
onConnect, onDisconnect, और onError कॉलबैक स्टेट को पोल किए बिना एनालिटिक्स, लॉगिंग या अन्य एप्लिकेशन लॉजिक ट्रिगर करने के लिए आदर्श हैं।audioLevelRef से ऑडियो लेवल पढ़ें
audioLevelRef से ऑडियो लेवल पढ़ें
audioLevelRef एकमात्र लाइव ऑडियो-लेवल स्रोत है। वेवफॉर्म जैसी स्मूथ एनिमेशन के लिए requestAnimationFrame के अंदर audioLevelRef.current पढ़ें (रेफ पढ़ने से री-रेंडर नहीं होते), या इसे किसी इंटरवल पर सैंपल करें और React-रेंडर किए गए UI के लिए परिणाम को स्टेट में स्टोर करें। audioLevel नंबर डिप्रिकेटेड है और हमेशा 0 रहता है — इस पर लॉजिक न बनाएँ।