במדריך הזה מוסבר איך ליצור ולהגדיר מספר טלפון חדש ב-Google Telephony Platform (GTP) עבור אפליקציית הנציג. התכונה הזו, שזמינה לשימוש מיידי, מאפשרת לכם לצרף לנציג מספר טלפון חדש שיכול לטפל בתנועה נכנסת תוך כמה דקות בלבד.
אם רוצים להשתמש במספר טלפון קיים, אפשר להגדיר את מערכת ה-Session Border Control (SBC) כך שתפנה אוטומטית את המספר הקיים למספר ה-GTP החדש. הוראות מפורטות לשילוב ולהגדרה של SBC זמינות במסמכי הטלפוניה של Dialogflow CX.
לפני שמתחילים
- פועלים לפי השלבים בדף הגדרה וניקוי כדי ליצור או להגדיר את הפרויקט שבו רוצים להשתמש לפריסה.
- יוצרים ומגדירים אפליקציית סוכן לשימוש בפריסה.
- מפעילים את Dialogflow API בפרויקט.
מגבלות
ההגבלות הבאות חלות:
- מספרי טלפון רגילים של PSTN (מערכת הטלפוניה העולמית) נתמכים ב
usבמספר אזורים. בeumulti-region, אפשר להשתמש במספרי טלפון וירטואליים. - רק מספרי טלפון בארה"ב נתמכים באזור
usמרובה אזורים. - אי אפשר להתקשר למספרי טלפון וירטואליים ממכשירי טלפון רגילים ברשת PSTN.
חיבור אפליקציית נציג למספר טלפון של GTP
- פותחים את מסוף CX Agent Studio ובוחרים את אפליקציית הסוכן.
- בחלק העליון של המסוף, לוחצים על הכרטיסייה פריסה ואז על התחברות לפלטפורמה. אם כבר פרסתם ערוצים, לוחצים על +ערוץ חדש.
- מזינים שם לערוץ ובוחרים באפשרות Google Telephony Platform (GTP) (פלטפורמת הטלפוניה של Google) בתפריט Platform (פלטפורמה).
- אפשרות ברירת המחדל היא הקצאת מספר טלפון וירטואלי לבדיקת אפליקציית הסוכן בדפדפן. כדי להקצות מספר טלפון רגיל ב-PSTN (מערכת הטלפוניה העולמית), בוחרים באפשרות הזו מהתפריט הנפתח
Connection type. - בוחרים גרסה לפריסה. אם אין לכם גרסאות קיימות, אתם יכולים ליצור גרסה חדשה.
- (אופציונלי) לוחצים על המתג התנהגות ספציפית לערוץ כדי להגדיר אפשרויות נוספות. אתם יכולים לשנות את אורך התגובה של הסוכן, להפעיל קלט DTMF ולאפשר למשתמשים לקטוע את הסוכן באמצע התגובה. מידע נוסף על ההגדרות האלה זמין במסמכי העזרה בנושא הגדרות של אפליקציית הסוכן.
- לוחצים על יצירת ערוץ. עכשיו אפשר לראות את מספר הטלפון ואת מזהה הפריסה של הערוץ.
אם הקציתם מספר טלפון ב-PSTN, מתקשרים אליו כדי לבדוק שהוא מתחבר לאפליקציית הסוכן, ואז לוחצים על סיום. הערוץ החדש מופיע בדף Deployed channels באפליקציית הסוכן. מעכשיו אפשר להשתמש במספר הזה כדי לאפשר ללקוחות להתקשר לנציג. אם הקציתם מספר טלפון וירטואלי, אתם יכולים לבדוק אותו בווידג'ט WebRTC.
בדיקת אפליקציית סוכן בווידג'ט WebRTC
בין אם הקציתם מספר טלפון רגיל ב-PSTN או מספר טלפון וירטואלי, אתם יכולים לבדוק את אפליקציית הסוכן שלכם בווידג'ט WebRTC באמצעות אודיו, וידאו או טקסט.
- בחלק העליון של המסוף, לוחצים על הכרטיסייה פריסה.
- לוחצים על הסמל לצד שם הערוץ שהופעל. ווידג'ט של WebRTC ייפתח בצד שמאל.
- אם מופיעה בקשה בווידג'ט WebRTC, צריך לתת לדפדפן הרשאת גישה למיקרופון ולמצלמה.
- אינטראקציה עם הנציג באמצעות אודיו, וידאו או טקסט. כשמשתמשים בווידאו, אפשר לעבור לשיתוף מסך גם באמצעות התפריט הנפתח שליד סמל המצלמה.
הגדרת אופן הפעולה של אפליקציית הסוכן
אתם יכולים להתאים אישית את ההתנהגות של הסוכן הווירטואלי בנוגע לסיום שיחות ולהעברת שיחות.
הגדרת סיום שיחות של סוכנים
כדי לאפשר לסוכן לסיים שיחה:
- לוחצים על סמל הפלוס בפינה השמאלית העליונה של הסוכן ואז על הוספת כלים.
- מוסיפים את הכלי
end_sessionלסוכן (ולכל הסוכנים המשניים, אם יש כאלה). כלי המערכת הזה זמין לכל נציג באופן אוטומטי כברירת מחדל. - מוסיפים תיאור של התנהגות סיום השיחה להוראות.
לדוגמה:
End the call by executing the end_session tool with arguments reason="customer_query_ended".
העברת שיחה לנציג אנושי
כדי להגדיר את הנציג הווירטואלי להעברת השיחה לסוכן אנושי ולסיום החלק של הנציג הווירטואלי בשיחה:
- מוסיפים את כלי המערכת
end_sessionלסוכן (ולכל סוכני המשנה, אם יש כאלה). - יוצרים את המשתנים הבאים:
-
escalationMessage: אופציונלי: מוסיפים טקסט לשדה ערך ברירת מחדל אם רוצים שהסוכן יקריא הודעה לפני העברת השיחה. -
telephonyTransferCall: מגדירים את הסוג לסכימה מותאמת אישית. מזינים את אובייקט ה-JSON הבא בתיבת הקלט סכימה עם מספר הטלפון שאליו רוצים שהנציג יעביר את השיחות (חובה להזין בפורמט E.164).
-
{
"phoneNumber": "+PHONE_NUMBER"
}- מוסיפים לתיאור את ההתנהגות הזו. לדוגמה:
Escalate the call to a human agent by executing the end_session tool with session_escalated=true
העברה לנציג אנושי דרך שותף
אם המערכת שלכם משלבת שותף שאינו של Google, יש שתי אפשרויות להעברה לסוכן אנושי: משתנה liveAgentHandoff או משתנה telephonyPayload. בשני המקרים, מטען ה-JSON עשוי להיות שונה בהתאם להוראות השותף.
העברה לנציג אנושי:
- מוסיפים את כלי המערכת
end_sessionלסוכן (ולכל סוכני המשנה, אם יש כאלה). - יוצרים את המשתנה הבא:
-
liveAgentHandoff: מגדירים את Type (סוג) ל-Custom schema (סכימה בהתאמה אישית) ומוסיפים את סכימת ה-JSON שנדרשת על ידי השותף, לדוגמה:
-
{ "PARTNER_NAME": { "type": "action", "action": "deflection", "deflection_type": "sip", "sip_uri": "SIP_URI", "sip_refer": true, "sip_parameters": { "x-header": "value" } } }
- מוסיפים לתיאור את ההתנהגות הזו. לדוגמה:
Escalate the call to a human agent by executing the end_session tool with session_escalated=true
העברה של מטען ייעודי (payload) מותאם אישית לסוכן אנושי:
- מוסיפים את כלי המערכת
end_sessionלסוכן (ולכל סוכני המשנה, אם יש כאלה). - יוצרים את המשתנה הבא:
-
telephonyPayload: מגדירים את Type (סוג) ל-Custom schema (סכימה בהתאמה אישית) ומוסיפים את סכימת ה-JSON שנדרשת על ידי השותף, לדוגמה:
-
{ "PARTNER_NAME": { "type": "action", "action": "deflection", "deflection_type": "sip", "sip_uri": "SIP_URI", "sip_refer": true, "sip_parameters": { "x-header": "value" } } }
- מוסיפים לתיאור את ההתנהגות הזו. לדוגמה:
Escalate the call to a human agent by executing the end_session tool with session_escalated=true
שימוש באיתות SIP כדי להעביר נתונים לסוכן וממנו
אם ביצעתם שילוב של SBC, אתם יכולים להשתמש באיתות SIP כדי להעביר נתונים לסוכן באמצעות כותרות SIP. אפשר גם להעביר נתונים החוצה כשסוכן מפעיל BYE, REFER או INVITE.
אפשר לגשת לכל הנתונים שמועברים לסוכן באמצעות משתנים. כדי לגשת לנתונים, קודם צריך ליצור את המשתנים.
מספר הטלפון של המתקשר (ANI) מאוחסן במשתנה telephony-caller-id מהסוג Text.
אם הנציג צריך להגיד הודעה לפני העברת השיחה לטיפול ברמה גבוהה יותר, ההודעה צריכה להיות מאוחסנת במשתנה escalationMessage מסוג Text.
כדי לבצע SIP REFER או SIP INVITE, צריך שיהיה משתנה telephonyTransferCall מסוג Custom schema (advanced) עם המשתנים phoneNumber ו-useOriginatingTrunk.
כל הנתונים שצריך להעביר החוצה צריכים להיות במשתנה liveAgentHandoff מסוג Custom schema (advanced).
כותרת SIP של UUI
אפשר להעביר רשימה של צמדי מפתח/ערך שמופרדים באמצעות נקודה ופסיק, מקודדים בפורמט הקסדצימלי,
ואחריהם ;encoding=hex;purpose=Goog-Session-Param. כדי לגשת לערך הזה בסוכן, יוצרים משתנה עם השם uui-headers והסוג List.
לדוגמה, אם צריך להעביר את המחרוזת key1=value1;key2=value2, צריך לשלוח את כותרת ה-UUI הבאה, שבה המטען הייעודי (payload) הוא הערך key1=value1;key2=value2 בקידוד הקסדצימלי.
User-to-User: 6B6579313D76616C7565313B6B6579323D76616C756532;encoding=hex;purpose=Goog-Session-Param
המשתנה uui-headers יכיל את האובייקט הבא:
"uui-headers": ["key1=value1;key2=value2"]
כדי להעביר את uuiHeaders כשקוראים לכלי end_session, מציינים params={"liveAgentHandoff": {"uuiHeaders": [ {uui-headers}[0] ]}}
לדוגמה, אם כותרות ה-UUI שהועברו צריכות להיות מועברות ב-SIP BYE, תהיה לכם הוראה דומה לזו:
If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"escalationMessage": "I am transferring you to an agent", "liveAgentHandoff":{"uuiHeaders": [ {uui-headers}[0] ]}}.
כותרות x של SIP
אפשר להעביר לסוכן כותרות SIP שמתחילות ב-x- ולשמור אותן כמשתנה x-headers מסוג Custom schema (advanced). הקידומת x- מוסרת משם הכותרת במשתנה.
לדוגמה, אם הודעת ה-SIP INVITE מכילה את ה-header הבא:
x-billing-id: 12345
המשתנה x-headers יכיל את האובייקט הבא:
{
"x-headers": {
"billing-id": "12345"
}
}
כדי להעביר את xHeaders החוצה כשקוראים לכלי end_session, מציינים params={"liveAgentHandoff": {"xHeaders": {x-headers} }}
לדוגמה, אם צריך להעביר את כותרות ה-x שהועברו ב-SIP BYE, תהיה לכם הוראה שדומה להוראה הבאה:
If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"escalationMessage": "I am transferring you to an agent", "liveAgentHandoff":{"xHeaders": {x-headers} }}.
שליחת SIP BYE
כשהנציג מסיים את השיחה, נשלחת הודעת SIP BYE. כדי לשלוח את uuiHeaders ואת xHeaders בהודעת SIP BYE, משתמשים בהוראה שדומה לדוגמה הבאה:
If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"escalationMessage": "I am transferring you to an agent", "liveAgentHandoff":{"xHeaders": {x-headers}, "uuiHeaders": [{uui-headers[0]}] }}.
שליחת SIP REFER
אם הנציג צריך להעביר את השיחה לנציג אנושי ולנתק את השיחה, צריך להשתמש ב-SIP REFER. הפניה ב-SIP מופעלת על ידי ציון "sipRefer": true במשתנה liveAgentHandoff, ומספר refer-to צריך להיות במשתנה telephonyTransferCall. דוגמה להוראה לביצוע SIP REFER ולהעברת הערכים uuiHeaders ו-xHeaders:
If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"escalationMessage": "I am transferring you to an agent", "telephonyTransferCall": {"phoneNumber": "+19496855555", "useOriginatingTrunk": true}, "liveAgentHandoff":{"sipRefer": true, "xHeaders": {x-headers}, "uuiHeaders": [{uui-headers[0]}] }}.
שליחת SIP INVITE
אם הסוכן צריך להעביר את השיחה לסוכן אנושי ולהישאר בשיחה כדי שאפשר יהיה להשתמש בתכונות של Agent Assist, צריך להשתמש ב-SIP INVITE. הודעת SIP INVITE מופעלת על ידי phoneNumber במשתנה telephonyTransferCall. דוגמה להוראה לביצוע SIP INVITE ולהעברת uuiHeaders ו-xHeaders:
If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"escalationMessage": "I am transferring you to an agent", "telephonyTransferCall": {"phoneNumber": "+19496855555", "useOriginatingTrunk": true}, "liveAgentHandoff":{"xHeaders": {x-headers}, "uuiHeaders": [{uui-headers[0]}] }}.
יצירת handler לניתוקים של שיחות מרחוק
כשלקוח מנתק את השיחה, מופעל אירוע ספציפי, sys.remote-call-disconnected, שאפשר להשתמש בו כדי להפעיל קריאה לכלי ב-CX Agent Studio. בדוגמה הבאה, הכלי sum מופעל כשהלקוח מנתק את השיחה.
הכלי sum מוגדר ככלי קוד Python ומכיל את הקוד:
def sum(x: int, y: int) -> int:
"""
Computes the sum of two numbers.
Args:
x: The first number.
y: The second number.
Returns:
The sum of the two numbers.
"""
return x+y
בסוכן הבסיסי, יוצרים Before LLM callback עם הלוגיקה למעקב אחרי אירוע ניתוק השיחה. ב-LlmResponse, מבצעים קריאה לכלי sum ואז קוראים לכלי end_session.
def before_model_callback(callback_context: CallbackContext, llm_request: LlmRequest) -> Optional[LlmResponse]:
for part in callback_context.get_last_user_input():
if part.text == "<event>sys.remote-call-disconnected</event>":
return LlmResponse.from_parts(
[Part.from_function_call('sum', {'x': 1, 'y': 2}),
Part.from_end_session(reason='sum tool called after caller disconnected')]
)
return None