useThunderPhone מעניק לכם שליטה מלאה בממשק המשתמש, בעוד ThunderPhone מנהל את סשן הקול, ניתוב השמע ומצב החיבור. השתמשו בו כאשר אתם רוצים ממשק משתמש מותאם אישית לחלוטין — עם הכפתורים, הפריסות, ההנפשות והמיתוג שלכם — בעוד ThunderPhone מטפל בכל מה שמאחורי הקלעים.
מתי להשתמש בהוק ללא ממשק
הרכיב המובנהThunderPhoneWidget מתאים לרוב תרחישי השימוש, אך השתמשו בהוק ללא ממשק כאשר אתם זקוקים ל:
- ממשק שיחה מותאם אישית לחלוטין שתואם למערכת העיצוב של האפליקציה שלכם
- המחשות חזותיות המגיבות לשמע (צורות גל, כדורים, מחוונים פועמים) המונעות על ידי רמות שמע בזמן אמת
- תהליכי שיחה מותאמים אישית, כגון טפסים לפני שיחה, סקרים לאחר שיחה או צ’אט מוטמע לצד קול
- שילוב בספריית רכיבים קיימת (Material UI, Chakra, Radix וכו’)
התקנה
ההוק ללא ממשק אינו מחייב ייבוא של
@thunderphone/widget/style.css, מכיוון שאתם מספקים ממשק משתמש משלכם. עם זאת, עדיין עליכם להתקין את אותה חבילת @thunderphone/widget.שימוש בסיסי
אפשרויות
העבירו את האפשרויות הבאות אלuseThunderPhone באמצעות UseThunderPhoneOptions:
ההוק הוא ללא ממשק: הוא אינו מקבל את מאפייני המראה של
ThunderPhoneWidget (theme, primaryColor, title, position, className). העברתם גורמת לשגיאת TypeScript — הממשק החזותי כולו באחריותכם לבנות.ערך מוחזר
ה-hook מחזיר אובייקטUseThunderPhoneReturn:
ממשק משתמש המגיב לשמע
ה־refaudioLevelRef מספק לכם רמות שמע בקצב פריימים ללא הפעלת רינדורים חוזרים של React, ולכן הוא אידיאלי להפעלת המחשות חלקות של צורת גל, כדורים פועמים או כל הנפשה המקושרת לשיחה. הרמה משקפת את המקור החזק יותר: קול הסוכן או המיקרופון של המבקר.
דוגמה לצורת גל
דוגמה לכדור פועם
דוגמה למחוון דיבור
עבור ממשק משתמש שמרונדר ב־React ומשתנה בהתאם לעוצמת הקול — למשל תג “מדבר” המבוסס על סף — דגמו אתaudioLevelRef.current במרווח קבוע ושמרו את התוצאה במצב:
מכונת מצבים
המאפייןstate פועל לפי מחזור החיים הבא:
דוגמאות
עם בקרת השתקה
עם צלצול
השמיעו צליל צלצול בזמן ההתחברות כדי לדמות שיחת טלפון:connecting ונחלש כשהסוכן מתחבר. העבירו את true כדי להשתמש בצלצול ברירת המחדל המובנה, או מחרוזת URL כדי להשתמש בקובץ שמע משלכם.
עם קריאות חוזרות לאירועים
ממשק משתמש מותאם אישית מלא
טיפים
הציגו תמיד את phone.audio
הציגו תמיד את phone.audio
הרכיב
phone.audio אינו נראה אך נדרש. מקמו אותו בכל מקום ב-JSX שלכם — הוא אינו מציג DOM נראה לעין, אך מנהל פנימית את חיבור השמע של WebRTC.השביתו את הכפתור בזמן ההתחברות
השביתו את הכפתור בזמן ההתחברות
מצב
connecting יכול להימשך 1–3 שניות. השביתו את כפתור השיחה במהלך מצב זה כדי למנוע ניסיונות חיבור כפולים.טפלו במצב השגיאה בצורה תקינה
טפלו במצב השגיאה בצורה תקינה
כאשר המצב הוא
error, הציגו למשתמשים את phone.error והשאירו את כפתור השיחה שלכם פעיל. ה-hook אינו יוצא ממצב error בעצמו — קריאה נוספת ל-connect() מתחילה ניסיון חדש ומנקה את השגיאה הקודמת.השתמשו ב-callbacks לתופעות לוואי
השתמשו ב-callbacks לתופעות לוואי
ה-callbacks
onConnect, onDisconnect ו-onError מתאימים במיוחד לאנליטיקה, לרישום לוגים או להפעלת לוגיקה אחרת באפליקציה ללא תשאול של המצב.קראו רמות שמע מ-audioLevelRef
קראו רמות שמע מ-audioLevelRef
audioLevelRef הוא המקור החי היחיד לרמת שמע. קראו את audioLevelRef.current בתוך requestAnimationFrame עבור הנפשות חלקות כמו צורות גל (קריאה מ-ref אינה גורמת לעיבודים מחדש), או דגמו אותו במרווחי זמן ושמרו את התוצאה במצב עבור ממשק משתמש שמרונדר על ידי React. המספר audioLevel הוצא משימוש ותמיד הוא 0 — אל תבנו עליו לוגיקה.