Webhook יכול להיות Webhook רגיל או Webhook גמיש. ב-webhook רגיל, שדות הבקשה והתגובה מוגדרים על ידי Dialogflow CX. ב-webhook גמיש, אתם מגדירים את שדות הבקשה והתגובה.
אפשר לגשת לקוד סטטוס של HTTP של קריאת ה-webhook גם באמצעות הפרמטר $request.webhook_status_code request.
תגובות לפעולות מאתרים אחרים (webhooks) רגילות
כשמשתמשים ב-webhook רגיל, משתמשים בהודעות בקשה ותגובה שמוגדרות ב-Dialogflow CX. הודעת הבקשה כוללת פרטים רבים על הסשן. לדוגמה, הדף הפעיל הנוכחי, הכוונה האחרונה שתאמה, ערכי הפרמטרים של הסשן והתגובות שהוגדרו על ידי הנציג.
בקשה רגילה מ-webhook
כשמתבצעת קריאה לfulfillment עם webhook, Dialogflow CX שולח בקשת webhook מסוג HTTPS POST לשירות ה-webhook שלכם. גוף הבקשה הזו הוא אובייקט WebhookRequest JSON עם מידע על הסשן.
חלק מהאינטגרציות מאכלסות את השדה WebhookRequest.payload במידע נוסף. לדוגמה, השילוב של Dialogflow CX Phone Gateway מספק את מזהה המתקשר של משתמש הקצה.
פרטים נוספים מופיעים במאמרי העזרה של WebhookRequest (גרסה 3) או של WebhookRequest (גרסה 3Beta1).
תגובה סטנדרטית לפעולה מאתר אחר (webhook)
אחרי ששירות ה-webhook מקבל בקשה, הוא צריך לשלוח תשובה שעומדת בדרישות הבאות:
- התגובה צריכה להתקבל לפני תום הזמן הקצוב לתפוגה שהוגדר כשיוצרים את משאב ה-webhook.
- התשובה צריכה להיות בגודל של 64KiB או פחות.
פרטים נוספים מופיעים במאמרי העזרה של WebhookResponse (גרסה 3) או של WebhookResponse (גרסה 3Beta1).
הגדרות רגילות של משאבי webhook
בטבלה הבאה מפורטות הגדרות משאבי ה-webhook עבור webhooks רגילים:
| X | פריט |
|---|---|
| השם המוצג | השם שמוצג במסוף עבור ה-webhook. |
| תם הזמן שהוקצב ל-webhook | כש-Dialogflow CX שולח בקשת HTTP לשירות ה-webhook שלכם, ההגדרה הזו קובעת את הזמן הקצוב לתפוגה בשניות לכל ניסיון בקשה בנפרד, ולא לכל תור השיחה. אם ניסיון נכשל או שחלף הזמן הקצוב לתגובה שלו בגלל שגיאה זמנית, Dialogflow CX ינסה שוב באופן אוטומטי. ניסיון החיבור מחדש הזה יכול לגרום לכך שזמן הטיפול הכולל יהיה כפול מהערך של הזמן הקצוב לתפוגה שהוגדר, לפני שהמערכת תחזיר שגיאה. אם מתרחש פסק זמן אחרי ניסיון חוזר, Dialogflow CX מפעיל אירוע של פסק זמן בשליחת בקשת webhook. פרטים נוספים זמינים במאמר ניסיונות חוזרים אוטומטיים. |
| סוג | אם משתמשים בספריית שירותים לגישה לרשת פרטית, בוחרים באפשרות ספריית שירותים. אחרת, בוחרים באפשרות שירות אינטרנט כללי. |
| webhook URL | מזינים את כתובת ה-URL של שירות ה-webhook. |
| סוג משנה | מגדירים את האפשרות Standard (רגילה). |
| ווּבק ספציפי לסביבה | אפשר לספק ווּבּהוּקים ספציפיים לסביבה. |
| אימות | מידע נוסף על אימות |
| אישור CA בהתאמה אישית | האפשרות הזו משמשת להעלאה של אישורי CA בהתאמה אישית. |
תגובות לפעולה מאתר אחר (webhook) גמישות
עם webhook גמיש, אתם מגדירים את ה-method של בקשת ה-HTTP, את הפרמטרים של כתובת ה-URL של הבקשה ואת השדות של הודעות הבקשה והתגובה. בבקשה אפשר לספק רק ערכים נבחרים של פרמטרים, ובתגובה אפשר לספק רק ערכים של שינוי פרמטרים. כך הממשק בין הסוכן לבין ה-webhook פשוט יותר, כי בדרך כלל אין צורך להעביר מידע אחר מלבד ערכי הפרמטרים של הסשן. הוא גם מפשט את ההטמעה של ה-webhook, כי הודעות הבקשה והתגובה מכילות רק את מה שאתם צריכים, ואתם יכולים לספק הודעות webhook ייחודיות לתרחישים שונים.
בקשת webhook גמישה
כשיוצרים את משאב ה-webhook לסוכן, אפשר לציין את הפרטים הבאים לגבי בקשות webhook:
- ה-method של ה-HTTP שמשמשת לבקשות webhook שנשלחות לשירות ה-webhook שלכם.
- ערכי פרמטרים של סשן ש-Dialogflow CX צריך לשלוח לשירות ה-webhook שלכם באמצעות כתובת ה-URL.
- ערכי פרמטרים של סשן ש-Dialogflow CX צריך לשלוח לשירות ה-webhook שלכם דרך גוף ה-JSON של הבקשה, אם בוחרים באפשרות
POST,PUTאוPATCHכשיטה.
כדי לשלוח ערכים של פרמטרים של סשן באמצעות כתובת ה-URL של הבקשה או גוף ה-JSON, צריך להשתמש בהפניות לפרמטרים. אין צורך לבצע escape לפרמטר של כתובת ה-URL או להוסיף לו מרכאות. בזמן ריצה, קוד URL של Dialogflow CX מבצע חיפוש בריחה של ערך הפרמטר לפי הצורך. רשימה או ערך מורכב מופיעים כ-JSON.
כשמשתמשים בהפניה לפרמטר בגוף ה-JSON, צריך להוסיף מרכאות להפניה, בלי קשר לסוג הפרמטר. אם הפרמטר הוא למעשה ערך מספרי סקלרי, רשימה או ערך מורכב, מערכת Dialogflow CX תסיר את המירכאות כשתשלח את הבקשה בזמן הריצה כדי לשמור על סוג הנתונים של הפרמטר. סוגי סקלר של מחרוזות יישארו מוקפים במירכאות. אם יש הפניה לערך מספרי סקלרי, לרשימה או לערך מורכב בתוך ערך מחרוזת (לדוגמה: 'This is a number: $session.params.size'), הפרמטר יטופל כמחרוזת ('This is a number: 3').
לדוגמה, אפשר לספק את ערכי הפרמטרים של הסשן fruit ו-size בכתובת ה-URL של הבקשה באופן הבא:
https://your-webhook-service.com/handler?f=$session.params.fruit&s=$session.params.size
ובתוכן בקשת ה-JSON באופן הבא:
{
"fruitParameter": "$session.params.fruit",
"sizeParameter": "$session.params.size"
}
תגובה גמישה לפעולה מאתר אחר (webhook)
כשיוצרים את משאב ה-webhook של הסוכן, אפשר לציין פרמטרים של סשן ש-Dialogflow CX צריך להגדיר לשדות ספציפיים בתגובת ה-webhook בזמן הריצה.
התשובה שלך צריכה לעמוד במגבלות הבאות:
- התגובה צריכה להתקבל לפני שיחול פסק זמן, כפי שהוגדר כשיוצרים את משאב ה-webhook, אחרת יחול פסק זמן על הבקשה.
- גודל התשובה צריך להיות 64KiB לכל היותר.
כדי לציין שדה סקלרי, שדה רשימה או שדה מורכב, משתמשים בפורמט הבא:
$.fully.qualified.path.to.field
לדוגמה, נניח שזו תגובת ה-JSON:
{
"routes" : [
{
"legs" : [
{
"distance" : {
"text" : "2,064 mi",
"value" : 3321004
}
}
]
}
]
}
כדי לציין את השדה 'ערך', משתמשים בערכים הבאים:
$.routes[0].legs[0].distance.value
הגדרות גמישות של משאבי webhook
בטבלה הבאה מתוארות הגדרות של משאבי webhook עבור webhooks גמישים.
| X | פריט |
|---|---|
| השם המוצג | השם שמוצג במסוף עבור ה-webhook. |
| תם הזמן שהוקצב ל-webhook | כש-Dialogflow CX שולח בקשת HTTP לשירות ה-webhook שלכם, ההגדרה הזו קובעת את הזמן הקצוב לתפוגה בשניות לכל ניסיון בקשה בנפרד, ולא לכל תור השיחה. אם ניסיון נכשל או שחלף הזמן הקצוב לתגובה שלו בגלל שגיאה זמנית, Dialogflow CX ינסה שוב באופן אוטומטי. ניסיון החיבור מחדש הזה יכול לגרום לכך שזמן הטיפול הכולל יהיה כפול מהערך של הזמן הקצוב לתפוגה שהוגדר, לפני שהמערכת תחזיר שגיאה. אם מתרחש פסק זמן אחרי ניסיון חוזר, Dialogflow CX מפעיל אירוע של פסק זמן בשליחת בקשת webhook. פרטים נוספים זמינים במאמר ניסיונות חוזרים אוטומטיים. |
| סוג | אם משתמשים בספריית שירותים לגישה לרשת פרטית, בוחרים באפשרות ספריית שירותים. אחרת, בוחרים באפשרות שירות אינטרנט כללי. |
| webhook URL | מזינים את כתובת ה-URL של שירות ה-webhook, שיכולה לכלול הפניות לפרמטרים של הסשן. |
| סוג משנה | מגדירים את האפשרות גמישה. |
| Method | הגדרת ה-method של ה-HTTP לבקשת ה-webhook. |
| גוף הבקשה | צריך לספק את תוכן בקשת JSON כפי שמתואר למעלה. |
| הגדרת התשובה | מזינים את פרמטרים של הסשן שצריך להגדיר לשדות התגובה כמו שמתואר למעלה. |
| ווּבק ספציפי לסביבה | אפשר לספק ווּבּהוּקים ספציפיים לסביבה |
| אימות | מידע על אימות |
| אישור CA בהתאמה אישית | האפשרות הזו משמשת להעלאה של אישורי CA בהתאמה אישית. |
שימוש בתבנית מותאמת אישית מוגדרת מראש
Dialogflow מציע תבניות מותאמות אישית מוגדרות מראש שאפשר להשתמש בהן כדי לשלב תגובות גמישות לפעולות מאתר אחר (webhook) עם מערכת Salesforce CRM.
- עוברים לכרטיסייה ניהול, בוחרים באפשרות Webhooks ולוחצים על יצירה.
- בקטע סוג משנה, בוחרים באפשרות גמיש.
- לוחצים על הגדרה באמצעות תבנית מוגדרת מראש.
- בתפריט סוג השילוב, בוחרים באפשרות Salesforce.
- בתפריט API name (שם ה-API), בוחרים שם של API. התבנית ממלאת באופן אוטומטי את טופס ה-webhook על סמך שם ה-API שבחרתם.
- אם רלוונטי, מגדירים ידנית את השדות הבאים על סמך הפרמטרים:
- webhook URL
- Method
- תוכן בקשת JSON
- הגדרת התשובה
- שדות החובה של OAuth יסומנו בהדגשה בקטע Authentication (אימות).
- אם רלוונטי, מגדירים ידנית את השדות הבאים על סמך הפרמטרים:
- לוחצים על Save.
דרישות לגבי שירות webhook
שירות ה-webhook צריך לעמוד בדרישות הבאות:
- טיפול בבקשות HTTPS. אין תמיכה ב-HTTP. אם אתם מארחים את שירות ה-webhook ב- Google Cloud באמצעות פתרון Compute או Serverless computing, תוכלו לעיין במסמכי התיעוד בנושא הגשה באמצעות HTTPS. אפשרויות אירוח אחרות מפורטות במאמר קבלת אישור SSL לדומיין.
- מוודאים שכתובת ה-URL של שירות ה-webhook נגישה לכולם, אלא אם היא מתארחת כמשאב Cloud Run או שהגישה אליה היא כ-webhook של Service directory.
- מטפלים בבקשות ובתשובות כמו שמתואר בקטע standard webhook או flexible webhook.
- אם הסוכן שלכם לא משולב עם גישה לרשת פרטית של Service Directory, קריאות ה-webhook נמצאות מחוץ לגבולות גזרה לשירות ונחסמות כשמפעילים את VPC Service Controls. Service Directory תומך במספר מוגבל של נקודות קצה. פרטים נוספים זמינים במאמר בנושא Service Directory.
אימות
חשוב לאבטח את שירות ה-webhook כך שרק אתם או הסוכן שלכם ב-Dialogflow CX יוכלו לשלוח בקשות. מגדירים את זה כשיוצרים או עורכים משאב webhook. Dialogflow CX תומך במנגנוני האימות הבאים:
| X | פריט |
|---|---|
| כותרות אימות | בהגדרות של webhook, אפשר לציין צמדים אופציונליים של מפתח/ערך בכותרת HTTP. אם מספקים כותרות HTTP, מערכת Dialogflow CX מוסיפה אותן לבקשות ל-webhook. מקובל לספק זוג אחד עם מפתח של authorization. ערכי הכותרת תומכים בהפניות לפרמטרים של סשן ובניתוח של פונקציות מערכת כמו בהודעות תגובה סטטיות. אם אתם משתמשים בפרטי כניסה סטטיים בכותרת authorization, מומלץ לספק את פרטי הכניסה באמצעות Secret Manager. |
| אימות בסיסי עם שם משתמש וסיסמה | בהגדרות של webhook, אפשר לציין ערכים אופציונליים של שם משתמש וסיסמה להתחברות. אם מספקים את הכותרת, Dialogflow CX מוסיף כותרת HTTP של הרשאה לבקשות של webhook. הכותרת הזו היא מהסוג הבא: "authorization: Basic <base 64 encoding of the string username:password>". מומלץ לספק את שם המשתמש והסיסמה באמצעות Secret Manager. |
| OAuth של צד שלישי | ניתן לציין את תצורת OAuth של צד שלישי כך ש-Dialogflow CX יחליף אסימון גישה ממערכת OAuth ויוסיף אותו לכותרת HTTP של ההרשאה. יש תמיכה רק בתהליך העברת נתוני הכניסה של הלקוח. מומלץ לספק את הסוד של הלקוח באמצעות Secret Manager. |
| אסימוני גישה של סוכני שירות | הוצא משימוש. |
| חשבון שירות | אפשר להשתמש בחשבון שירות לצורך אימות. אפשר להשתמש ב-API הזה כדי לגשת ל-API אחרים Google Cloud . |
| אסימונים מזהים של סוכני שירות | אפשר לבחור באפשרות 'טוקן של מזהה' בקטע 'אימות סוכן שירות', כדי להשתמש בטוקן של מזהה של סוכן שירות לצורך אימות. כך תוכלו לגשת למשאבים של Cloud Run. |
| אימות TLS הדדי | מידע נוסף זמין במאמר בנושא אימות TLS בו-זמני (mTLS). |
OAuth של צד שלישי
Dialogflow CX אוסף טוקן גישה מספק OAuth של צד שלישי ומוסיף אותו לכותרת ההרשאה של HTTP כשמתבצעות בקשות webhook.
בטבלה הבאה מתוארות הגדרות המשאבים ל-OAuth של צד שלישי:
| X | פריט |
|---|---|
| מזהה לקוח | מזהה הלקוח שבו משתמשים כשמבקשים טוקן OAuth. |
| סוד לקוח | הסוד שבו משתמשים כשמבקשים טוקן OAuth. מומלץ לספק את הסוד של הלקוח באמצעות Secret Manager. |
| כתובת ה-URL של נקודת הקצה של OAuth | כתובת האתר שמשמשת לבקשת טוקן OAuth. |
| היקפי OAuth | רשימה מופרדת בפסיקים של היקפים שאפשר להשתמש בהם בטוקן OAuth. |
בקשות שנשלחות לכתובת ה-URL של נקודת הקצה של OAuth כדי לקבל טוקן לא כוללות את כותרות הבקשה המותאמות אישית שהוגדרו לבקשת ה-webhook. אפשר להעביר מידע מותאם אישית לשרת OAuth כפרמטרים במחרוזת השאילתה של כתובת נקודת הקצה של OAuth.
טוקן של מזהה של סוכן שירות
Dialogflow CX יכול ליצור טוקן של מזהה באמצעות סוכן השירות של Dialogflow CX. האסימון הזה מתווסף לכותרת Authorization ב-HTTP כש-Dialogflow CX קורא ל-webhook.
אפשר להשתמש בטוקן של מזהה כדי לגשת למשאבי Cloud Run אחרי שמקצים את התפקיד Cloud Run Invoker (roles/run.invoker)
service-agent-project-number@gcp-sa-dialogflow.
קהל היעד שמשמש ליצירת טוקן של מזהה הוא webhook URL המלא, לא כולל פרמטרים של שאילתה. אם אתם משתמשים ב-Cloud Run, ודאו שכתובת ה-URL הזו נתמכת על ידי קהלים ב-Cloud Run.
לדוגמה, אם כתובת ה-URL של ה-webhook היא:
https://myproject.cloudfunctions.net/my-function/method1?query=value
כתובת ה-URL הבאה צריכה להיות בפלחים של קהלים בהתאמה אישית:
https://myproject.cloudfunctions.net/my-function/method1
כל webhook יכול גם לאמת את האסימון באמצעות ספריות לקוח של Google או ספריות בקוד פתוח כמו Google Auth Library for Node.js.
אם ה-webhook שלכם מתארח ב-Cloud Run ומתבצעת אליו גישה דרך מאזן עומסים, צריך להוסיף את כתובת ה-URL של מאזן העומסים כקהל בהתאמה אישית ל-Cloud Run. מידע נוסף על קהלים בהתאמה אישית זמין במאמר בנושא הגדרת קהלים בהתאמה אישית לשירותים.
חשבון השירות
אפשר להשתמש בחשבונות שירות כדי לאמת בקשות של webhook לכל Google APIs שתומכים בהם.
אם עדיין לא עשיתם זאת, צרו חשבון שירות.
מאחר שחשבונות שירות הם חשבונות משתמשים, הם יכולים לגשת למשאבים בפרויקט על ידי הקצאת תפקיד, בדיוק כמו כל חשבון משתמש אחר. כתובת האימייל בחשבון השירות משמשת ליצירת טוקן גישה שנשלח בכותרת Authorization של בקשת ה-webhook.
כדי להגדיר את ה-webhook לשימוש בחשבונות שירות, צריכות להיות לכם ההרשאות הבאות:
roles/iam.serviceAccountUser
כדי ליצור אסימונים, לסוכן השירות של Dialogflow צריכות להיות ההרשאות הבאות:
roles/iam.serviceAccountTokenCreator
בנוסף, לחשבון השירות צריכות להיות הרשאות גישה לשירות שמארח את ה-webhook.
אימות ב-Secret Manager
אם אתם משתמשים בכותרות אימות, באימות בסיסי עם שם משתמש וסיסמה או ב-OAuth של צד שלישי, אתם יכולים לאחסן את פרטי הכניסה כסודות באמצעות Secret Manager. כדי לאמת את ה-webhook באמצעות סודות, צריך לבצע את השלבים הבאים:
- אם אין לכם סוד, צריך ליצור אותו.
- מקצים לסוכן השירות של Dialogflow (Dialogflow Service Agent) את התפקיד Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor) בסוד החדש. - מעתיקים את פרטי הכניסה ללוח.
- מוסיפים גרסה חדשה של הסוד לסוד ומדביקים את פרטי הכניסה כערך הסוד:
- אם אתם משתמשים בכותרות אימות, מזינים
Bearer <YOUR_CREDENTIAL>. - אם אתם משתמשים באימות בסיסי של שם משתמש וסיסמה, מזינים
<YOUR_USERNAME>:<YOUR_PASSWORD>. - אין להוסיף תו מעבר לשורה בסוף.
- אם אתם משתמשים בכותרות אימות, מזינים
- מעתיקים את השם של גרסת הסוד שהוספתם. פורמט השם הוא
projects/<var>PROJECT_ID</var>/secrets/<var>SECRET_ID</var>/versions/<var>VERSION_ID</var>. - פותחים את המסך לעריכת ה-webhook.
- קובעים את הגדרות האימות:
- אם משתמשים בכותרות אימות, צריך ליצור כותרת בקשה חדשה של גרסה סודית. מזינים Authorization בשדה Key (מפתח) ומדביקים את שם הגרסה הסודית בשדה Secret version (גרסה סודית).
- כדי להשתמש באימות בסיסי של שם משתמש וסיסמה, לוחצים על Secret version (גרסת הסוד) בקטע Basic Auth (אימות בסיסי) ומדביקים את שם גרסת הסוד בשדה Secret version (גרסת הסוד).
- אם משתמשים ב-OAuth של צד שלישי, לוחצים על גרסת הסוד בקטע OAuth של צד שלישי ומדביקים את השם של גרסת הסוד בשדה גרסת הסוד.
- לוחצים על Save.
אימות אישור HTTPS
כברירת מחדל, מערכת Dialogflow CX משתמשת במאגר האישורים של Google כדי לאמת אישורי HTTPS. אם אתם מתכוונים להשתמש באישורים שלא מוכרים על ידי מאגר האישורים המהימנים שמוגדר כברירת מחדל ב-Google עבור שרת ה-HTTPS שלכם, כמו אישורים בחתימה עצמית או אישורי בסיס מותאמים אישית, כדאי לעיין במאמר בנושא אישורי CA מותאמים אישית.
Webhooks ספציפיים לסביבה
אם אתם משתמשים בסביבות כדי לבודד את הייצור מהפיתוח, אתם יכולים להגדיר את ה-Webhook כך שיהיה ספציפי לסביבה. אתם יכולים לספק כתובת URL ספציפית לסביבה והגדרות אימות לכל משאב של webhook.
ההגדרה הזו מאפשרת לכם לפתח ולבדוק את העדכונים של קוד ה-webhook בצורה בטוחה לפני שאתם פורסים אותם בסביבת הייצור.
יצירה או עריכה של משאבי webhook
אחרי שמפעילים שירות webhook, יוצרים משאב webhook בסוכן שכולל מידע על קישוריות ואימות. אפשר לערוך את הגדרות המשאבים של ה-webhook בכל שלב.
כדי ליצור או לערוך משאב webhook:
המסוף
- פותחים את מסוף Dialogflow CX.
- עוברים לפרויקט.
- בוחרים את הסוכן.
- לוחצים על הכרטיסייה ניהול.
- לוחצים על Webhooks.
- לוחצים על יצירה או בוחרים webhook קיים כדי לערוך אותו.
- מגדירים את ההגדרות של משאב webhook רגיל או את ההגדרות של משאב webhook גמיש.
- לוחצים על Save.
API
מידע על יצירת משאב webhook זמין בשיטה create של הסוג Webhook. מידע על עריכת משאב של webhook (למעט הגדרות ספציפיות לסביבה) זמין בשיטה patch או update עבור הסוג Webhook.
בוחרים פרוטוקול וגרסה להפניה של ה-Webhook:
| פרוטוקול | V3 | V3beta1 |
|---|---|---|
| REST | משאב webhook | משאב webhook |
| RPC | ממשק webhook | ממשק webhook |
| C++ | WebhooksClient | לא זמין |
| C# | WebhooksClient | לא זמין |
| המשך | WebhooksClient | לא זמין |
| Java | WebhooksClient | WebhooksClient |
| Node.js | WebhooksClient | WebhooksClient |
| PHP | לא זמין | לא זמין |
| Python | WebhooksClient | WebhooksClient |
| Ruby | לא זמין | לא זמין |
מידע על עריכת ההגדרות הספציפיות לסביבה של webhook זמין בשיטה patch או update עבור הסוג Environment.
בוחרים פרוטוקול וגרסה עבור הפניה לסביבה:
| פרוטוקול | V3 | V3beta1 |
|---|---|---|
| REST | משאב סביבה | משאב סביבה |
| RPC | ממשק הסביבה | ממשק הסביבה |
| C++ | EnvironmentsClient | לא זמין |
| C# | EnvironmentsClient | לא זמין |
| המשך | EnvironmentsClient | לא זמין |
| Java | EnvironmentsClient | EnvironmentsClient |
| Node.js | EnvironmentsClient | EnvironmentsClient |
| PHP | לא זמין | לא זמין |
| Python | EnvironmentsClient | EnvironmentsClient |
| Ruby | לא זמין | לא זמין |
שגיאות ב-webhook
אם שירות ה-webhook שלך נתקל בשגיאה בעת טיפול בבקשת webhook, קוד ה-webhook שלך אמור להחזיר אחד מקודי סטטוס ה-HTTP הבאים:
400: בקשה שגויה401: לא מורשה403: הגישה אסורה404: לא נמצא500: שגיאה בחיבור לשרת-
503: השירות לא זמין
Dialogflow CX מפעיל שגיאת webhook או אירוע מובנה של timeout וממשיך לעבד כרגיל במצבי השגיאה הבאים:
- הזמן הקצוב לתשובה חרג.
- מתקבל קוד סטטוס של שגיאה.
- התגובה לא תקינה.
- שירות ה-webhook לא זמין.
אם הקריאה לשירות ה-webhook הופעלה על ידי קריאה ל-API של זיהוי כוונות, השדה queryResult.webhookStatuses בתגובה לזיהוי הכוונות מכיל את פרטי הסטטוס של ה-webhook.
ניסיונות חוזרים אוטומטיים
Dialogflow CX מנסה לשלוח מחדש בקשות באופן אוטומטי במקרה של שגיאות מסוימות ב-webhook, כדי לשפר את האמינות. הניסיונות החוזרים האוטומטיים מופעלים כברירת מחדל ואי אפשר להשבית אותם.
מערכת Dialogflow CX מבצעת ניסיון חוזר אחד לשגיאות זמניות, כמו זמנים קצובים לתפוגה של בקשות, ניתוקים של חיבורי רשת וקודי סטטוס של HTTP בטווח 5xx (כמו 500 Server fault או 503 Service unavailable). שגיאות סופיות של לקוח, כמו קוד הסטטוס 404 Not found של HTTP, נכשלות באופן מיידי ללא ניסיון חוזר.
תקצוב של זמן אחזור מצטבר ופסק זמן
מכיוון ש-Dialogflow CX מנסה שוב לתקן כשלים זמניים פעם אחת, נקודת קצה של webhook שלא מגיבה עלולה לגרום לזמן תגובה מצטבר של עד פי שניים מערך הזמן הקצוב לתפוגה שהוגדר לפני ש-Dialogflow CX מחזיר שגיאה. לדוגמה, אם הגדרת ברירת המחדל של הזמן הקצוב לתפוגה היא 5 שניות, נקודת קצה שלא מגיבה תגיע לזמן הקצוב לתפוגה אחרי 5 שניות בניסיון הראשוני, ואחרי 5 שניות נוספות בניסיון החוזר. התוצאה היא זמן אחזור כולל של כ-10 שניות
לפני ש-Dialogflow CX מפעיל את הגורמים המטפלים בשגיאות, כמו webhook.error.timeoutגורם מטפל באירועים או sys.no-match-defaultגורם מטפל באירועים.
אם לארכיטקטורה שלכם יש מגבלות מחמירות על זמן האחזור של נתונים שנשלחים לשרת (למשל, מערכות טלפוניה או מערכות תגובה קולית אינטראקטיבית (IVR) שמנתקות שיחות אחרי חלון זמן של 10 שניות), כדאי להקצות תקציב לשני הניסיונות על ידי הגדרת פסק הזמן של ה-webhook למחצית חלון הזמן המותר (לדוגמה, בין 2.5 ל-4 שניות).
שיטות מומלצות לניסיונות חוזרים
כדי לטפל ביעילות בניסיונות חוזרים בשירות ה-webhook:
- כדי לעבד בבטחה בקשות כפולות, צריך להטמיע אידמפוטנטיות או ביטול כפילויות של בקשות בלוגיקה של שירות ה-webhook.
- אם פעולת ה-webhook נמשכת יותר זמן מהזמן הקצוב לתפוגה שהוגדר, צריך להחזיר תגובה מיידית עם קוד סטטוס של HTTP
200 OKוהודעת גיבוי, ולעבד את המשימה ארוכת הטווח באופן אסינכרוני.
שימוש ב-Cloud Run
Dialogflow CX משתלב עם Cloud Run, כך שאפשר ליצור webhook מאובטח ללא שרת (serverless). אם יוצרים משאב Cloud Run שנמצא באותו פרויקט כמו הסוכן, בוחרים באפשרות Service Agent Auth ואז באפשרות טוקן של מזהה בהגדרת האימות, כדי שהסוכן יוכל להתקשר בבטחה אל ה-webhook.
צריך להגדיר את השילוב הזה באופן ידני בשני המקרים הבאים:
- חשבון השירות של סוכן השירות של Dialogflow CX עם הכתובת הבאה צריך להתקיים בפרויקט הסוכן:
חשבון השירות המיוחד הזה והמפתח שמשויך אליו נוצרים בדרך כלל באופן אוטומטי כשיוצרים את הסוכן הראשון לפרויקט. אם הסוכן שלכם נוצר לפני 1 בנובמבר 2020, אתם יכולים להפעיל את היצירה של חשבון השירות המיוחד הזה:service-agent-project-number@gcp-sa-dialogflow.
- יוצרים סוכן חדש לפרויקט.
- מריצים את הפקודה הבאה:
gcloud beta services identity create --service=dialogflow.googleapis.com --project=agent-project-id
- אם פונקציית ה-webhook נמצאת בפרויקט אחר מזה של הסוכן, צריך להקצות את תפקיד ה-IAM של הפעלת Cloud Run או הפעלת Cloud Functions לחשבון השירות של הסוכן של שירות Dialogflow CX בפרויקט של משאב Cloud Run.
בקטע Auth configuration, בוחרים באפשרות Service Agent Auth > ID Token.
שימוש בוווב-הוקים מבוססי-קונטיינר ובמסגרת Go ezcx
כדי להטמיע webhook בקונטיינר באמצעות Go, אפשר לעיין במסגרת Go ezcx. המסגרת הזו מפשטת הרבה מהשלבים שנדרשים ליצירת webhook.
שימוש ב-Cloud Run עם תעבורה פנימית בלבד
אתם יכולים להשתמש במשאבי Cloud Run שהוגדרו לקבל תעבורה פנימית מרשתות של ענן וירטואלי פרטי (VPC) באותו פרויקט או באותו מתחם היקפי של VPC Service Controls כ-webhook, בתנאי שהסוכן נמצא באותו פרויקט או באותו מתחם היקפי של VPC Service Controls.
שימוש ב-Service Directory לגישה לרשת פרטית
Dialogflow CX משתלב עם גישה לרשת פרטית של Service Directory, כך שהוא יכול להתחבר ליעדי webhook בתוך רשת ה-VPC שלכם. כך התנועה נשארת בתוך רשת Google Cloud ומאפשרת לאכוף את IAM ואת VPC Service Controls.
כדי להגדיר תגובה לפעולה מאתר אחר (webhook) שמטרגטת רשת פרטית:
פועלים לפי ההוראות להגדרת רשת פרטית ב-Service Directory כדי להגדיר את רשת ה-VPC ואת נקודת הקצה של Service Directory.
חשבון השירות של סוכן השירות של Dialogflow CX עם הכתובת הבאה צריך להתקיים בפרויקט של הסוכן:
service-agent-project-number@gcp-sa-dialogflow.
מקצים לחשבון השירות Dialogflow CX Service Agent את התפקידים הבאים בפרויקט שבו נמצא Service Directory:
servicedirectory.viewerservicedirectory.pscAuthorizedService
בנוסף, אם Service Directory נמצא בפרויקט אחר מהסוכן שלכם ב-Dialogflow CX, אתם צריכים גם להעניק את התפקיד
servicedirectory.viewerלחשבון של סוכן השירות של Dialogflow CX בפרויקט שמארח את הסוכן שלכם ב-Dialogflow CX.כשיוצרים את ה-webhook, מציינים את השירות של Service Directory, את כתובת ה-URL ופרטי אימות אופציונליים.
המסוף

API
אפשר לעיין בשדה
serviceDirectoryשל הסוגWebhook.בוחרים פרוטוקול וגרסה להפניה של ה-Webhook:
פרוטוקול V3 V3beta1 REST משאב webhook משאב webhook RPC ממשק webhook ממשק webhook C++ WebhooksClient לא זמין C# WebhooksClient לא זמין המשך WebhooksClient לא זמין Java WebhooksClient WebhooksClient Node.js WebhooksClient WebhooksClient PHP לא זמין לא זמין Python WebhooksClient WebhooksClient Ruby לא זמין לא זמין
כדי לפתור בעיות, אפשר להגדיר בדיקת זמינות פרטית כדי לוודא שספריית השירותים מוגדרת בצורה נכונה.
דוגמאות ופתרון בעיות
מידע נוסף זמין במדריך בנושא Webhook.