בדף הזה מוסבר איך להשתמש בנקודות קצה של צ'אט, כפי שמתואר במאמר נקודות קצה של API של פלטפורמת צ'אט.
הסברים על המונחים
לשם הבהרה, הנה כמה הגדרות שחשוב לזכור כשמשתמשים במסמך הזה.
לקוח: לקוח של Contact Center AI Platform (פלטפורמת CCAI) שמטמיע את ה-API של פלטפורמת הצ'אט בתוכנה שלו.
צרכן: התוכנה ששולחת בקשות ל-API של פלטפורמת הצ'אט.
משתמש קצה: המשתמש בתוכנה של הלקוח שמנסה לנהל צ'אט עם נציג.
אימות webhook
ה-API של פלטפורמת הצ'אט מעביר אירועים שמתרחשים במהלך הצ'אט לצרכן על ידי שליחת בקשות webhook לשרת של הצרכן. המטען הייעודי (Payload) והסוגים של התגובה לפעולה מאתר אחר (webhook) מוגדרים במפרט ה-API. כל בקשת webhook מכילה שתי כותרות: X-Signature ו-X-Signature-Timestamp.
הכותרת X-Signature מכילה חתימת webhook בפורמט הבא:
primary=<primary_signature> secondary=<secondary_signature>
החתימות הראשית והמשנית הן תקציר הודעה (digest) בקידוד base64 של sha256 של הסודות הראשוניים או המשניים של ה-webhook, בהתאמה, עם מחרוזת משורשרת של הכותרת X-Signature-Timestamp ומטען ה-JSON של הבקשה.
הדוגמה הבאה מציגה הטמעה של הרשאה לבקשות של webhook באפליקציית Ruby on Rails לדוגמה:
def authorize_webhook
# In a real consumer use case, these webhook secrets would be
# stored/retrieved along with other application secrets, however the application chooses to do that
primary_secret = @company.primary_webhook_secret
secondary_secret = @company..secondary_webhook_secret
signature_header = request.headers['X-Signature']
timestamp_header = request.headers['X-Signature-Timestamp']
if signature_header.present? && timestamp_header.present?
# Header will be in the format "primary=abcdefg12341234 secondary=qwertyuiop567890" if a tenant has both webhook
# secrets generated in Contact Center AI Platform, otherwise it will be in the format ""primary=abcdefg12341234"
primary_signature, secondary_signature = signature_header.scan(/primary=(.*)\ssecondary=(.*)/).flatten
# Optional: check age of request timestamp to protect against replays
# raise UnauthorizedException unless Time.now - timestamp_header.to_time < 1.minute
# String value of the request body JSON
payload = request.body.read
expected_primary_signature = Base64.strict_encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::SHA256.new, primary_secret, "#{timestamp_header}#{payload}"))
expected_secondary_signature = Base64.strict_encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::SHA256.new, secondary_secret, "#{timestamp_header}#{payload}"))
# Only one signature needs to be valid, this allows for easier rotation of secrets in the Contact Center AI Platform developer portal
if primary_signature == expected_primary_signature || primary_signature == expected_secondary_signature ||
secondary_signature == expected_primary_signature || secondary_signature == expected_secondary_signature
true
else
head :unauthorized
end
else
head :bad_request
end
end
סקירה כללית
באופן כללי, התהליך הבסיסי של שיחה בממשק API של פלטפורמת צ'אט צריך להתנהל כך: הנקודות העיקריות ממוספרות, ויש הערות שמספקות הקשר נוסף. שימו לב שהלקוח אחראי רק להטמעה של הצד 'לקוח' בתרשים, בעוד ש-Contact Center AI Platform מטפל בצדדים של המערכת והסוכן בתרשים. ההכללה שלהם בתרשים נועדה רק לספק לקורא הקשר לזרימה הכוללת של הצ'אט.

יצירת משתמשי קצה
כדי ליצור צ'אטים, צריך לציין מזהה תקף של משתמש קצה. כלומר, משתמש קצה צריך להיות קיים במערכת Contact Center AI Platform לפני שיוצרים צ'אט.
משתמשי קצה מזוהים באופן ייחודי באמצעות המאפיין
identifier, שהוא ערך מחרוזת שמסופק על ידי הצרכן. יכול להיות שמשתמש קצה כבר קיים במערכת אם הוא השתמש בערכות ה-SDK לאינטרנט או לנייד. נקודת הקצהPOST /end_usersמיושמת כפעולת upsert אידמפוטנטית, כך שאם מנסים ליצור משתמש קצה קיים מחדש, כל הנתונים שהשתנו יעודכנו ופרטי משתמש הקצה יוחזרו.
יצירת צ'אטים
כדי ליצור צ'אטים באמצעות API של פלטפורמת הצ'אט, פועלים לפי השלבים הבאים:
טיפול במטענים ייעודיים (payloads) של צ'אטים חדשים: תהליך ההפעלה של הצ'אט מתבצע באופן אסינכרוני מהבקשה
POST /chats. לכן, יכול להיות שהאירועchat_createdיתקבל לפני או אחרי התגובה של ה-API מנקודת הקצה ליצירתPOST /chats. מומלץ לטפל באירועchat_createdובתגובה של API ליצירת צ'אט באופן אידמפוטנטי כדי למנוע באגים אצל הצרכן.יצירת צ'אטים עם תמלילים: ה-API של פלטפורמת הצ'אט תומך ביצירת צ'אט עם תמליל של שיחה קיימת, בתרחיש שבו מתנהלת שיחה בפלטפורמה של לקוח, למשל עם צ'אטבוט, לפני שהיא נשלחת אל Contact Center AI Platform. כך הסוכן שעונה לצ'אט מקבל מידע נוסף על סשן הצ'אט, וזה עוזר למנוע מצב שבו משתמש הקצה חוזר על עצמו. למידע על פורמט מטען הייעודי (payload) של התמליל, ראו chat_platform_openapi.yaml.
הנציג הווירטואלי לבחירת תור
כדי לייעל את בחירת התפריט עבור צרכני API, ה-API של פלטפורמת הצ'אט מיועד לשימוש בשילוב עם נציג וירטואלי של Dialogflow, כדי לסייע במיקום בתור לצ'אטים חדשים.
כדי להגדיר את הנציג הווירטואלי, צריך לבצע את השלבים הבאים:
יוצרים נציג וירטואלי ייעודי למטרה הזו ומקצים אותו לתור. כל הצ'אטים החדשים שנוצרו באמצעות ה-API של פלטפורמת הצ'אט צריכים להיווצר בתור הזה. יצירה והגדרה של סוכן וירטואלי חדש לא נכללות במסגרת המאמר הזה.
כשיוצרים צ'אט חדש באמצעות נקודת הקצה POST או chats, צריך לכלול מטען ייעודי (payload) של הקשר מותאם אישית, שכולל הקשר מסוים לגבי הצ'אט שנוצר. הנציג הווירטואלי יכול להשתמש בהקשר הזה כדי לקבוע לאיזו רשימת המתנה צריך להפנות את הצ'אט. מטען הייעודי (payload) של ההקשר יכול להכיל כל נתון מותאם אישית שהוגדר על ידי הלקוח, אבל הוא חייב להיות בפורמט הבא כדי שהנציג הווירטואלי שהוקצה לתור יוכל לגשת לנתונים.
- דוגמה:
"context": {"value": {"foo": "bar" } }יאפשר לסוכן הווירטואלי לקרוא את$session.params.context.fooעם הערךbar.
- דוגמה:
הנציג הווירטואלי (בהתאם לאופן שבו הלקוח הגדיר אותו) משתמש בנתונים שמופיעים בשדה ההקשר כדי להעביר את הצ'אט לתור שנבחר. אם אין נציג זמין בתור היעד (למשל, בתרחיש שבו התור הוא מחוץ לשעות הפעילות או מעל הקיבולת), ההעברה תופסק והלקוח יקבל webhook שמציין את הסיבה להפסקת ההעברה ואת האפשרויות הזמינות להפסקת ההעברה.
הפניות לטיפול בבעיות ברמה גבוהה יותר: ממשק ה-API של פלטפורמת הצ'אט תומך בהפניות לטיפול בבעיות ברמה גבוהה יותר בצ'אט באפשרויות ההפניה הבאות, אם הן מוגדרות בפורטל Contact Center AI Platform:
אימייל: מבקשים ממשתמש הקצה לשלוח אימייל לתמיכה ומסיימים את הצ'אט. כשמשתמש קצה בוחר באפשרות הזו, אחרי שליחת האימייל, הלקוח צריך לסמן את הצ'אט כהפניה לפתרון עצמי וכסיום השיחה באמצעות נקודת הקצה
PATCH /chats/:idעם הפרמטרים הבאים בגוף הבקשה:"status": "finished" , "escalation_id": <id of escalation> ,ו-"deflection_channel": "email"המשך עם נציג וירטואלי: זו אפשרות טכנית תקפה להפניית שיחה, אבל היא לא הגיונית אם משתמשים בנציג וירטואלי לבחירת תור, כי הנציג הווירטואלי ינסה להעביר את הצ'אט לטיפול ברמה גבוהה יותר.
המתנה נוספת לנציג שירות: אפשר להשתמש באפשרות הזו רק להעברות לטיפול ברמה גבוהה יותר עם הסיבה
over_capacity. אם משתמש הקצה בוחר באפשרות הזו, צריך לעדכן את ההפניה לטיפול ברמה גבוהה יותר באמצעותPATCH chats/:id/escalations/:id with deflection_channel=human_agent- קישור להפניה חיצונית: מציג אזהרה למשתמש הקצה שלחיצה על קישור שמופיע בהפניה תסיים את הצ'אט. אם נבחר קישור, צריך לסיים את הצ'אט ולהשתמש ב-
external_linkלפרמטרdeflection_channel
- קישור להפניה חיצונית: מציג אזהרה למשתמש הקצה שלחיצה על קישור שמופיע בהפניה תסיים את הצ'אט. אם נבחר קישור, צריך לסיים את הצ'אט ולהשתמש ב-
שליחה וקבלה של הודעות
כדי לשלוח או לקבל הודעות, פועלים לפי השלבים הבאים:
תוכן טקסט: כדי לשלוח הודעות טקסט, משתמשים בנקודת הקצה
POST /chats/:id/messageכמו שמוגדר במסמך ה-API. כדי לקבל הודעות, מאזינים לאירוע webhookmessage_received. חשוב לזכור שצרכן ה-API יקבל אירוע מסוגmessage_receivedלכל ההודעות שנשלחות באמצעות ה-API, כולל הודעות שנשלחות על ידי משתמש הקצה.תוכן של תמונות וסרטונים: כדי לשלוח תוכן של תמונות וסרטונים, המערכת מאחזרת כתובת URL להעלאה בחתימה מראש לשירות Cloud Storage שהוגדר מ-Contact Center AI Platform, מעלה לשירות האחסון ואז שולחת את כתובת ה-URL של האחסון במטען ייעודי (payload) של הודעה אל Contact Center AI Platform.
אחזור כתובת URL עם חתימה מראש: אחזור כתובת URL עם חתימה מראש להעלאה מ-Contact Center AI Platform באמצעות
POST /v1/chats/:chat_id/photos/uploadאוPOST /v1/chats/:chat_id/videos/upload endpoints. נקודת הקצה הזו מחזירה כתובת URL עם חתימה מראש, יחד עם אוסף של שדות להעברה לשירות האחסון כשמעלים את הקובץ. ההגבלות הבאות חלות על העלאות עם חתימה מראש:Content-Type הוא
image/jpegלתמונות ו-video/mp4לסרטונים.הגודל המקסימלי של התמונות הוא 2MB. גודל הסרטון המקסימלי הוא 20MB.
זמן התפוגה הוא 5 דקות.
הלקוח צריך לשנות את הגודל של התמונה ולהתאים את הכיוון שלה לפני ההעלאה.
כל כתובת URL חתומה מראש היא לתמונה או לסרטון אחד – כדי לשלוח כמה קבצים מצורפים, צריך לבקש כתובת URL חתומה מראש לכל אחד מהם.
העלאת קובץ המדיה: כדי להעלות את קובץ המדיה, שולחים בקשת POST לכתובת ה-URL החתומה מראש שאוחזרה בשלב 2א, עם הפרטים הבאים בגוף הבקשה:
"file": הקובץ שרוצים להעלותכל השדות שמוחזרים באובייקט fields בבקשת ה-URL החתום מראש.
הוספת קובץ המדיה לצ'אט: כדי להוסיף את קובץ המדיה לצ'אט, צריך להשתמש בנקודת הקצה
POST /chats/:id/photosאוPOST /chats/:id/videos. שימו לב: נקודת הקצה photos תומכת בשליחת מערך של תמונות, אבל נקודת הקצה video תומכת רק בסרטון אחד בכל פעם.הערך של הפרמטר
s3_pathשל גוף הבקשה צריך להיות זהה לערך של השדהkeyבתגובה של כתובת ה-URL עם החתימה מראש.אם הבקשה תצליח, יוחזרו שני שדות. מומלץ לשמור או לשמור במטמון מיפוי של
media_idלכתובת URL בצרכן ה-API, כי כל המדיה בהודעות בצ'אט תהיה בהפניה רק ל-media_id.
url: כתובת ה-URL לקריאה בלבד ב-S3 או ב-Cloud Storage שבה נמצא הקובץ.
media_id: המזהה של קובץ המדיה ב-Contact Center AI Platform. זהו המזהה שבו המדיה תצוין במטענים הייעודיים (payloads) של הצ'אט.
שליחת קובץ המדיה כהודעה בצ'אט: כדי לשלוח את קובץ המדיה כהודעה בצ'אט, שולחים את מטען הייעודי (payload) הבא אל
POST /chats/:id/message endpoint:
{ "from_user_id": <id of end user>, "message": { "type": <"photo" or "video">, "media_id": < media_id returned as described in 2.c > } }
צפויים מפתחות JSON לא מוכרים בתגובות מה-API
כל העדכונים ב-API תואמים לגרסאות קודמות. אנחנו שומרים לעצמנו את הזכות להוסיף מפתחות JSON חדשים בתגובות קיימות של API בכל שלב. מומלץ לטפל בתגובות באופן מגן על ידי התעלמות ממפתחות לא מזוהים, כדי לשמור על פונקציונליות רציפה.