תיעוד

טלפוניה בזמן אמת

קול נכנס ויוצא דרך LiveKit + SIP — תמלול וסינתזה ב-streaming, barge-in, העברת שיחה, שיחות יוצאות המופעלות על ידי pipeline.

ערוץ הטלפוניה מאפשר ל-pipeline של betool לקבל שיחות ולבצע שיחות. אודיו בזמן אמת, תמלול streaming, סינתזת קול streaming, תמיכה בהפרעה (barge-in).

ארכיטקטורה

מתחת למכסה:

  • LiveKit מנהל את תעבורת האודיו בזמן אמת.
  • LiveKit-SIP מחבר בין LiveKit לבין trunk הספק שלכם (SIP).
  • worker ייעודי מתזמר את השיחה: תמלול (STT), LLM, סינתזת קול (TTS).

ערמת הטכנולוגיות הזו רצה בתהליך נפרד מה-backend הראשי. אינכם מגדירים אותה ישירות — מפעיל המופע שלכם הוא שמקים את גשר ה-SIP.

ספקי קול

תפקידספקיםברירת מחדל
תמלול (STT)Deepgram, faster-whisper (מורץ מקומית)Deepgram
סינתזה (TTS)ElevenLabs, Cartesia, OpenAI, Deepgram AuraElevenLabs

קטלוג הקולות של כל ספק TTS זמין לעיון בממשק הניהול, עם האזנה לדוגמה לפני הבחירה. ה-LLM הוא לבחירתכם (מודל מנוהל, BYOK או מודל פרטי — ראו חיבור מפתח LLM).

דרישות מוקדמות

  • trunk SIP אצל ספק.
  • מספר נכנס ו/או יכולת ביצוע שיחות יוצאות.
  • גישה לספקי ה-STT / TTS שנבחרו.

בהצעה המנוהלת, betool יכולה לבצע provisioning של trunk ה-SIP וספקי הקול עבורכם.

תכנון pipeline קולי (שיחה נכנסת)

pipeline קולי מתחיל בצומת Start הנושא את הרסיבר phone_gateway. בכל סבב דיבור שתומלל, ה-pipeline מקבל בין היתר:

  • user_message ו-phone.transcript — סבב הדיבור שתומלל
  • phone.call — השיחה: מזהה, מספרי המתקשר / הנמען, כיוון (inbound / outbound), קו
  • phone.from — מספר המתקשר
  • phone.caller_timezone — אזור הזמן הנגזר מהקידומת (ריק כאשר הקידומת מכסה מספר אזורי זמן)

הטקסט שה-pipeline מפיק נקרא בקול על ידי ה-TTS.

הגדרות הרסיבר

הרסיבר phone_gateway מגדיר את התנהגות השיחה, ללא קוד:

  • פתיח — מספר גרסאות של הודעת פתיחה (אחת נבחרת באקראי), פתיח נפרד לשיחות יוצאות, השהיה לפני הפתיח.
  • שתיקה — תזכורת לאחר שתיקה ממושכת, ולאחר מכן הודעת פרידה וניתוק אם השתיקה נמשכת; משך שיחה מקסימלי.
  • הפרעה (barge-in) — מופעלת כברירת מחדל: המתקשר יכול לקטוע את הסוכן. משך ומספר מילים מינימליים כדי שהפרעה תיחשב.
  • זיהוי סוף תור — מצב הזיהוי ופרקי הזמן של סוף הדיבור.
  • Fillers — משפטי המתנה הנאמרים כשהתשובה מתעכבת, משפטים ייעודיים בזמן הרצת tool, או רקע קולי להמתנה (מקלדת, משרד, מוזיקת המתנה). מושבתים כברירת מחדל.
  • קול — ספק, מודל, שפה וקול STT / TTS, עם כוונון עדין של הקול (יציבות, מהירות…).
  • סיווגי שיחה — רשימה סגורה של קודי תוצאה שהסוכן יכול להצמיד לשיחה.

מה הסוכן יכול לעשות במהלך השיחה

tools הטלפוניה זמינים לסוכנים של pipeline שכולל phone_gateway במעלה הזרם:

  • phone_gateway.transfer_call — העברת השיחה למספר אחר (SIP REFER). המספר מאומת בפורמט E.164; ההעברה מתבצעת לאחר שהתשובה הנוכחית נאמרה.
  • phone_gateway.hangup_call — ניתוק, לאחר הודעת הפרידה.
  • phone_gateway.set_call_disposition — סיווג השיחה באחד הקודים שהוגדרו.

סוכן יכול גם לשלוח SMS במהלך השיחה (tool allmysms.send_sms, ראו SMS): בערוץ זה, הנמען נעול על בן השיח בשיחה. אם המספר חסוי, השליחה נדחית.

הצעת מועדים

חישוב הזמינות (פעולת free_slots של הצומת compute) מפיק מועדים מוכנים להקראה, באזור הזמן של המתקשר. בשילוב עם קריאת יומן (Google או Microsoft), סוכן קולי יכול להקריא כמה מועדים פנויים ולאחר מכן לקבוע את הפגישה.

שיחות יוצאות

pipeline יכול לבצע שיחה באמצעות הצומת phone_call: למשל לחזור לליד ברגע שהוא מגיע, או לבצע מעקב על רשימה.

שדהתפקיד
trunk_idהקו המשמש לחיוג
voice_modelהמודל שמנהל את השיחה (ה-Start שלו חייב לשאת את הרסיבר phone_gateway)
to_numberהמספר לחיוג (ניתן ל-templating), מנורמל לפורמט E.164
call_varsמשתנים המועברים לשיחה (phone.outbound.vars) — למשל השם הפרטי, שניתן להשתמש בו בפתיח היוצא
allowed_days / allowed_hours / timezoneחלון הזמנים המותר: מחוץ לחלון, השיחה אינה מבוצעת
max_in_flight / max_per_dayתקרות של שיחות בו-זמניות (3 כברירת מחדל) ויומיות (100 כברירת מחדל)
output_keyמפתח הפלט (ברירת מחדל phone.call_result)

מנגנוני הגנה:

  • Exactly-once — הרצה חוזרת לעולם אינה מחייגת שוב למספר שכבר חויג.
  • דחייה לפני החיוג אם לארגון לא נותרו קרדיטים.
  • אין שיחה בסימולציה — הצומת מדולג בהרצת ניסיון (dry-run).

הצומת מחזיר את השליטה ברגע שהשיחה מצלצלת: ok פירושו «השיחה יצאה לדרך», לא «נענתה». כדי לדעת את התוצאה, הוסיפו ל-Start של המודל את הרסיבר phone_call_outcome: הוא מפעיל את ה-pipeline לאחר סיום השיחה, עם phone.outcome — נענתה או לא (answered, no_answer, rejected, unknown), משך, מספר סבבים, הסיווג שהסוכן הצמיד.

שיטות עבודה מומלצות

  • שמרו על משימות קצרות. זמן העיבוד חשוב: סוכן שמהסס 4 שניות נשמע קפוא בטלפון. העדיפו מודלים מהירים פרט לסיבובים המכריעים.
  • השאירו את ה-barge-in פעיל. המתקשר חייב להיות מסוגל להפסיק את הסוכן. זו הגדרת ברירת המחדל.
  • הגדירו fillers לסבבים שקוראים ל-tools: שתיקה ארוכה מדאיגה את המתקשר.

עלויות

ראו תעריפים. לשיחה אין מחיר לדקה כשלעצמה: היא מחויבת לפי רכיביה — תמלול (לפי משך האודיו), סינתזת קול (לפי מספר התווים) ו-LLM (לפי tokens, למעט ב-BYOK).

מגבלות ידועות

  • ערוץ הטלפון הוא אודיו בלבד. וידאו עובר דרך רכיבים אחרים (יצירת וידאו ודיבוב עם HeyGen), לא דרך השיחה.
  • העברה לנציג אנושי דורשת trunk SIP התומך ב-REFER.
  • הסוכן אינו יכול לנחש את זהות המתקשר ללא אינטגרציית CRM: הוא מכיר רק את המספר המוצג.