במדריך הזה מפורטות דוגמאות שונות להטמעה של תגובות לפעולה מאתר אחר (webhooks), וגם המלצות לפתרון בעיות שקשורות לתגובות לפעולה מאתר אחר.
הגדרת פרמטר של סשן
הדוגמאות הבאות מראות איך להגדיר פרמטר של סשן.
Go
כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.
מדריך למתחילים בנושא תגובות לפעולה מאתר אחר (webhook)Java
כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.
Node.js
כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.
Python
כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.
החזרת תגובה למילוי בקשה
הדוגמאות הבאות מראות איך להחזיר תגובת מילוי בקשה.
Go
כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.
מדריך למתחילים בנושא תגובות לפעולה מאתר אחר (webhook)Java
כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.
Node.js
כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.
Python
כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.
מגדירים את הפרמטרים של הטופס לפי הצורך
בדוגמאות הבאות אפשר לראות איך לסמן פרמטר כנדרש.
Java
כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.
Node.js
כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.
אימות של פרמטר בטופס
בדוגמאות הבאות מוסבר איך לאמת פרמטר של טופס.
Java
כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.
Node.js
כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.
Python
כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.
מזהה הסשן ביומן
בדוגמה הבאה אפשר לראות איך מתעדים ביומן את session ID מבקשת webhook.
Python
כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.
פתרון בעיות
מחזור החיים של קריאת webhook
הקריאות ל-webhook תמיד מתחילות ב-Dialogflow CX ומגיעות לשרת אינטרנט דרך HTTPS. הקריאות ל-webhooks של שירות אינטרנט גנרי מגיעות מכתובת IP באינטרנט ששייכת ל-Google, ויכולות להגיע לשרתי אינטרנט (שרתי webhook) שזמינים באינטרנט הציבורי. לעומת זאת, תמיד מתחילים את ה-webhooks של Service Directory מכתובת פנימית של Google Cloud , והם יכולים להגיע רק לשרתי webhook ברשתות פרטיות בתוך Google Cloud.
יומנים שימושיים לניפוי באגים של תגובות לפעולה מאתר אחר (webhooks)
כדי לנפות באגים בבעיות שקשורות ל-webhook, בדרך כלל צריך לאסוף את יומני Dialogflow CX ב-Cloud Logging ואת יומני השרת של ה-webhook. אם שרת ה-webhook מיושם באמצעות פונקציות Cloud Run, היומנים שלו יהיו ב-Cloud Logging. אחרת, היומנים בדרך כלל נמצאים במקום שבו פועל שרת ה-webhook.
יומני ה-webhook הרגילים מכילים שדה detectIntentResponseId עם UUID, שיכול להיות שימושי למעקב אחרי קריאה מסוימת בשרתי webhook. היומן הזה קיים ביומני Cloud Logging של Dialogflow CX כשהאפשרות Cloud Logging מופעלת.
בעיות נפוצות ב-webhook
אלה כמה מהשגיאות שיכולות להופיע ביומני Dialogflow CX בקריאות ל-webhooks:
שגיאה בפענוח של שם המארח בשרת ה-webhook
Dialogflow CX חיפש את שם המארח של תגובה גנרית לפעילות אינטרנט, ושם המארח לא קיים ב-DNS. מוודאים ששם המארח רשום ב-DNS הציבורי. אם שם המארח חדש, יכול להיות שיחלוף זמן מה עד שהרשומה תופץ. הודעה ביומן של Cloud Logging:
State: URL_ERROR, Reason: ERROR_DNS.
שרת ה-webhook מחזיר שגיאה בצד הלקוח
מלבד ERROR_DNS, המצב הזה מציין תגובת 4xx משרת ה-webhook. יכול להיות שהסטטוס הוא "לא מורשה" (401 – ERROR_AUTHENTICATION) או שכתובת ה-URL לא נמצאה בשרת ה-webhook (404 – ERROR_NOT_FOUND).
הודעה ביומן של Cloud Logging: State: URL_ERROR.
הזמן הקצוב לתפוגה של נציג Dialogflow מסתיים לפני ששרת ה-webhook מחזיר תשובה
Dialogflow CX הגיע למגבלת הזמן הקצוב לתפוגה של ה-webhook לפני ששרת האינטרנט סיים. יש שתי דרכים לפתור את הבעיה: לקצר את זמן העיבוד של שרת ה-webhook או להאריך את הזמן שבו Dialogflow CX ממתין ל-webhook. קיצור זמן העיבוד בדרך כלל מניב את התוצאות הטובות ביותר, אבל במקרים רבים זה לא פשוט. חשוב לזכור שיש מגבלת זמן קצובה מקסימלית ל-webhooks, ושהמתקשרים או המשתמשים יצטרכו לחכות יותר זמן כדי לקבל תשובה מהנציג לפני הגדלת ההגדרה הזו. Cloud Logging
הודעה: State: URL_TIMEOUT, Reason: TIMEOUT_WEB.
הזמן הקצוב לתפוגה של gRPC מסתיים לפני ששרת ה-webhook מחזיר תשובה
מגבלת הזמן שהוגדרה על ידי gRPC בקריאה ל-Dialogflow CX API הסתיימה לפני שהקריאה ל-webhook הסתיימה. המגבלה הזו מוגדרת בדרך כלל ברמת השילוב, והיא לא תלויה בפרמטרים של Dialogflow CX ובמגבלות הזמן הקצוב לתפוגה של ה-webhook. מידע נוסף על מועדים אחרונים ב-gRPC זמין בכתובת https://grpc.io/docs/guides/deadlines/.
Cloud Logging
הודעה: State: URL_REJECTED, Reason: REJECTED_DEADLINE_EXCEEDED.
ל-Dialogflow לא הייתה אפשרות ליצור קשר עם שרת ה-webhook
לא הייתה אפשרות להגיע לשרת ה-webhook בגלל שגיאה בחיבור לרשת, או שהחיבור נוצר ושרת ה-webhook החזיר סטטוס HTTP 5xx שמציין שהייתה בעיה בזמן עיבוד הבקשה. מוודאים ש-Dialogflow CX יכול להגיע לכתובת של שרת ה-webhook ברמת הרשת. אם הבקשה מופיעה ביומני השרת של ה-webhook, צריך לבדוק למה הקריאה החזירה שגיאת 5xx. הודעה מ-Cloud Logging:
State: URL_UNREACHABLE.
מעקב אחרי קריאות ל-webhook
אפשר לקשר בין קריאה רגילה ל-webhook ב-Dialogflow CX לבין שרת webhook באמצעות מזהה הסשן, מזהה detectIntentResponse, מזהה המעקב של פונקציות Cloud Run וחותמת הזמן של הקריאה. אפשר לבצע מעקב גמיש אחרי ה-webhook באמצעות חותמת הזמן של הקריאה וערכי הפרמטרים של הסשן שצוינו בהגדרה של ה-webhook בזמן התכנון. מידע נוסף על בקשות סטנדרטיות וגמישות של תגובות לפעילות אינטרנט מופיע במאמר תגובות לפעילות אינטרנט.
מזהה הסשן מופיע בשדה sessionInfo.session של WebhookRequest.
מזהה הסשן הזה צריך להיות ייחודי לכל שיחה, והוא יכול לעזור לכם להשוות בין יומני הפעילות של סוכן לבין יומני ה-webhook לבקשות שמשתמשות באותו מזהה סשן.
בקטע הקודם, רישום מזהה הסשן ביומן, מוסבר איך לרשום ביומן את מזהה הסשן מ-webhook.
בנוסף, אם אתם מארחים את ה-webhook בפונקציות Cloud Run או באפשרות דומה Google Cloud ללא שרת (serverless), אתם יכולים להשתמש בשדה trace מרשומות ביומן כמסנן של היומן.
הרצה אחת של פונקציה יוצרת כמה רשומות ביומן עם אותו ערך מעקב.
בדוגמה הבאה נעשה שימוש גם במזהה הסשן וגם בערך המעקב כדי לשייך יומן שגיאות מסוים של סוכן Dialogflow CX לרשומות היומן התואמות של ה-webhook של פונקציות Cloud Run. בדוגמה הזו משתמשים במסננים של Cloud Logging לנציג שהופעל בו Cloud Logging.
1. סינון יומני Dialogflow CX כדי למצוא יומני שגיאות של נציג מסוים
כדי לסנן את יומני Dialogflow CX לפי יומני השגיאות של נציג מסוים, משתמשים במסנן הבא של Cloud Logging:
labels.location_id="global"
labels.agent_id="AGENT_ID"
severity=ERROR
רשומת שגיאה ביומן של ה-webhook נראית כך:
{
"insertId": "-j4gkkre31e2o",
"jsonPayload": {
"code": 14,
"message": "Error calling webhook 'https://us-central1-PROJECT_ID.cloudfunctions.net/function-webhook': State: URL_UNREACHABLE, Reason: UNREACHABLE_5xx, HTTP status code: 500"
},
"labels": {
"agent_id": "e9e01392-1351-42dc-9b15-b583fb2d2881",
"environment_id": "",
"location_id": "global",
"session_id": "07c899-a86-78b-a77-569625b37"
},
"logName": "projects/PROJECT_ID/logs/dialogflow-runtime.googleapis.com%2Frequests",
"receiveTimestamp": "2024-10-28T21:49:04.288439054Z",
"resource": {
"labels": {
"project_id": "PROJECT_ID"
},
"type": "global",
},
"severity": "ERROR",
"timestamp": "2024-10-28T21:49:04.132548Z"
}
שימו לב לשדה labels.session_id שמכיל את מזהה הסשן.
בשלב הבא תשתמשו במזהה הסשן.
2. סינון היומנים של פונקציות Cloud Run לפי מזהה סשן
כדי לסנן את היומנים של פונקציות Cloud Run לפי מזהה סשן, משתמשים במסנן הבא של Cloud Logging:
resource.type = "cloud_run_revision"
resource.labels.service_name = "CLOUD_RUN_FUNCTION_NAME"
resource.labels.location = "CLOUD_RUN_FUNCTION_REGION"
textPayload="Debug Node: session ID = SESSION_ID"
היומנים שמתקבלים תואמים ליומני ה-webhook שנוצרו במהלך הסשן שצוין. לדוגמה:
{
"insertId": "671c42940007ebebdbb1d56e",
"labels": {
"execution_id": "pgy8jvvblovs",
"goog-managed-by": "cloudfunctions",
"instance_id": "004940b3b8e3d975a4b11a4ed7d1ded4ce3ed37467ffc5e2a8f13a1908db928f8200b01cc554a5eda66ffc9d23d76dd75cec1619a07cb5751fa2e8a93bc6cfc3df86dfa0650a"
},
"logName": "projects/PROJECT_ID/logs/run.googleapis.com%2Fstdout",
"receiveTimestamp": "2024-10-26T01:15:00.523313187Z",
"resource": {
"labels": {
"configuration_name": "function-webhook",
"location": "us-central1",
"project_id": "PROJECT_ID",
"revision_name": "function-webhook-00001-jiv",
"service_name": "function-webhook",
},
"type": "cloud_run_revision"
},
"spanId": "6938366936362981595",
"trace": "d1b54fbc8945dd59bdcaed37d7d5e185",
"textPayload": "Debug Node: session ID = 07c899-a86-78b-a77-569625b37",
"timestamp": "2024-10-26T01:15:00.519147Z"
}
שימו לב לשדה trace שבו תשתמשו בשלב הבא.
3. סינון של יומני Cloud Functions לפי מעקב ספציפי
כדי לסנן את היומנים של פונקציה של Cloud Functions לפי מעקב מסוים, משתמשים במסנן הבא של Cloud Logging:
resource.type = "cloud_run_revision"
resource.labels.service_name = "CLOUD_RUN_FUNCTION_NAME"
resource.labels.location = "CLOUD_RUN_FUNCTION_REGION"
trace="projects/PROJECT_ID/traces/TRACE_ID"
כאשר TRACE_ID הוא הקטע האחרון של המעקב. לדוגמה, הערך של TRACE_ID עבור projects/PROJECT_ID/traces/e41eefc1fac48665b442bfa400cc2f5e הוא e41eefc1fac48665b442bfa400cc2f5e.
התוצאה היא יומן השרת של ה-webhook שנוצר במהלך הביצוע של בקשת ה-webhook שמשויכת למזהה הסשן משלב 1 ולמעקב משלב 2. היומן ייראה כך:
{
"insertId": "671c42940008465e29f5faf0",
"httpRequest": {
"requestMethod": "POST",
"requestUrl": "https://us-central1-TEST_PROJECT.cloudfunctions.net/function-webhook",
"requestSize": "2410",
"status": 200,
"responseSize": "263",
"userAgent": "Google-Dialogflow",
"remoteIp": "8.34.210.1",
"serverIp": "216.239.36.1",
"latency": "0.166482342s",
"protocol": "HTTP/1.1"
},
"resource": {
"type": "cloud_run_revision",
"labels": {
"project_id": "PROJECT_ID",
"service_name": "function-webhook",
"location": "us-central1",
"revision_name": "function-webhook-00001-jiv",
"configuration_name": "function-webhook"
}
},
"timestamp": "2024-10-26T01:15:00.352197Z",
"severity": "INFO",
"labels": {
"instanceId": "004940b3b813af8a656c92aac1bd07ffad5165f1353e1e346b6161c14bcde225f68f4a88ceedc08aa9020f387b1b59471f73de45f2882a710ced37dea921f05ad962347690be",
"goog-managed-by": "cloudfunctions"
},
"logName": "projects/test-project-12837/logs/run.googleapis.com%2Frequests",
"trace": "projects/test-project-12837/traces/d1b54fbc8945dd59bdcaed37d7d5e185",
"receiveTimestamp": "2024-10-26T01:15:00.548931586Z",
"spanId": "604a07f7b33b18db",
"traceSampled": true
}