useThunderPhone تحكمًا كاملًا في واجهة المستخدم بينما يدير ThunderPhone جلسة الصوت وتوجيه الصوت وحالة الاتصال. استخدمه عندما تريد واجهة مستخدم مخصصة بالكامل — بأزرارك وتخطيطاتك ورسومك المتحركة وهويتك التجارية — بينما يتولى ThunderPhone كل شيء في الخلفية.
متى تستخدم الخطاف بلا واجهة
يغطي المكوّنThunderPhoneWidget المُنشأ مسبقًا معظم حالات الاستخدام، لكن استخدم الخطاف بلا واجهة عندما تحتاج إلى:
- واجهة مكالمات مخصصة بالكامل تتوافق مع منظومة تصميم تطبيقك
- تصورات مرئية تتفاعل مع الصوت (أشكال موجية أو كرات أو مؤشرات نابضة) مدفوعة بمستويات الصوت في الوقت الفعلي
- تدفقات مكالمات مخصصة، مثل نماذج ما قبل المكالمة واستبيانات ما بعد المكالمة أو دردشة مضمّنة بجانب الصوت
- التكامل مع مكتبة مكوّنات موجودة (Material UI أو Chakra أو Radix وغيرها)
التثبيت
لا يتطلب الخطاف بلا واجهة استيراد
@thunderphone/widget/style.css لأنك توفر واجهة المستخدم الخاصة بك. ومع ذلك، يجب عليك تثبيت حزمة @thunderphone/widget نفسها.الاستخدام الأساسي
الخيارات
مرّر هذه الخيارات إلىuseThunderPhone عبر UseThunderPhoneOptions:
الخطاف بلا واجهة: فهو لا يقبل خصائص مظهر
ThunderPhoneWidget (theme وprimaryColor وtitle وposition وclassName). يؤدي تمريرها إلى خطأ TypeScript — فالعرض التقديمي متروك لك بالكامل لإنشائه.قيمة الإرجاع
يعيد الخطاف كائنUseThunderPhoneReturn:
واجهة مستخدم متفاعلة مع الصوت
يمنحك المرجعaudioLevelRef مستويات الصوت بمعدل الإطارات دون تشغيل عمليات إعادة العرض في React، ما يجعله مثاليًا لتشغيل تصورات موجية سلسة، أو كرات نابضة، أو أي حركة مرتبطة بالمحادثة. يعكس المستوى أيهما أعلى صوتًا: صوت الوكيل أو ميكروفون الزائر.
مثال على الشكل الموجي
مثال على الكرة النابضة
مثال على مؤشر التحدث
بالنسبة إلى واجهة مستخدم معروضة عبر React وتتغير مع مستوى الصوت، مثل شارة «يتحدث» تعتمد على عتبة، خذ عينة منaudioLevelRef.current على فترات وخزّن النتيجة في الحالة:
آلة الحالات
تتبع الخاصيةstate دورة الحياة التالية:
أمثلة
مع التحكم في كتم الصوت
مع نغمة الرنين
شغّل صوت رنين أثناء الاتصال لمحاكاة مكالمة هاتفية:connecting وتتلاشى عند اتصال الوكيل. مرّر true لاستخدام نغمة الرنين الافتراضية المضمّنة، أو سلسلة URL لاستخدام ملفك الصوتي الخاص.
مع استدعاءات الأحداث
واجهة مستخدم مخصصة بالكامل
نصائح
اعرض phone.audio دائمًا
اعرض phone.audio دائمًا
العنصر
phone.audio غير مرئي لكنه مطلوب. ضعه في أي مكان داخل JSX — فهو لا يعرض أي DOM مرئي، لكنه يدير اتصال الصوت عبر WebRTC داخليًا.عطّل الزر أثناء الاتصال
عطّل الزر أثناء الاتصال
قد تستمر حالة
connecting لمدة 1-3 ثوانٍ. عطّل زر الاتصال خلال هذه الحالة لمنع محاولات الاتصال المكررة.تعامل مع حالة الخطأ بسلاسة
تعامل مع حالة الخطأ بسلاسة
عندما تكون الحالة
error، اعرض phone.error للمستخدم وأبقِ زر الاتصال مفعّلًا. لا تخرج الخطّافة من حالة error تلقائيًا — إذ يؤدي استدعاء connect() مرة أخرى إلى بدء محاولة جديدة ومسح الخطأ السابق.استخدم ردود النداء للتأثيرات الجانبية
استخدم ردود النداء للتأثيرات الجانبية
تُعد ردود النداء
onConnect وonDisconnect وonError مثالية للتحليلات أو التسجيل أو تشغيل منطق آخر في التطبيق دون استطلاع الحالة.اقرأ مستويات الصوت من audioLevelRef
اقرأ مستويات الصوت من audioLevelRef
يُعد
audioLevelRef المصدر الوحيد المباشر لمستوى الصوت. اقرأ audioLevelRef.current داخل requestAnimationFrame للحصول على رسوم متحركة سلسة، مثل الأشكال الموجية (قراءة المرجع لا تؤدي إلى إعادة العرض)، أو خذ عينة منه على فواصل زمنية وخزّن النتيجة في الحالة لواجهة مستخدم يعرضها React. الرقم audioLevel مهمل وتكون قيمته دائمًا 0 — لا تبنِ عليه أي منطق.