Panduan ini memberikan berbagai contoh untuk menerapkan webhook serta rekomendasi pemecahan masalah webhook.
Menetapkan parameter sesi
Contoh berikut menunjukkan cara menyetel parameter sesi.
Go
Untuk melakukan autentikasi ke Dialogflow CX, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Lihat Panduan memulai cepat webhook.Java
Untuk melakukan autentikasi ke Dialogflow CX, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Node.js
Untuk melakukan autentikasi ke Dialogflow CX, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Python
Untuk melakukan autentikasi ke Dialogflow CX, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Menampilkan respons pemenuhan
Contoh berikut menunjukkan cara menampilkan respons pemenuhan.
Go
Untuk melakukan autentikasi ke Dialogflow CX, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Lihat Panduan memulai cepat webhook.Java
Untuk melakukan autentikasi ke Dialogflow CX, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Node.js
Untuk melakukan autentikasi ke Dialogflow CX, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Python
Untuk melakukan autentikasi ke Dialogflow CX, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Tetapkan parameter formulir sesuai kebutuhan
Contoh berikut menunjukkan cara menandai parameter sebagai wajib diisi.
Java
Untuk melakukan autentikasi ke Dialogflow CX, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Node.js
Untuk melakukan autentikasi ke Dialogflow CX, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Memvalidasi parameter formulir
Contoh berikut menunjukkan cara memvalidasi parameter formulir.
Java
Untuk melakukan autentikasi ke Dialogflow CX, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Node.js
Untuk melakukan autentikasi ke Dialogflow CX, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Python
Untuk melakukan autentikasi ke Dialogflow CX, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
ID sesi log
Contoh berikut menunjukkan cara mencatat session ID
dari permintaan webhook.
Python
Untuk melakukan autentikasi ke Dialogflow CX, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Pemecahan masalah
Proses panggilan webhook
Panggilan webhook selalu dimulai oleh Dialogflow CX dan menuju ke server web melalui HTTPS. Panggilan webhook layanan web generik berasal dari alamat IP Internet yang dimiliki Google dan dapat menjangkau server web (server webhook) yang tersedia di Internet publik. Di sisi lain, webhook Service Directory selalu dimulai dari alamat Google Cloud internal dan hanya dapat menjangkau server webhook di jaringan pribadi dalam Google Cloud.
Log yang berguna untuk proses debug webhook
Proses men-debug masalah webhook biasanya melibatkan pengumpulan log Dialogflow CX Cloud Logging dan log server webhook. Jika server webhook diimplementasikan menggunakan Cloud Run Functions, lognya akan berada di Cloud Logging. Jika tidak, log biasanya berada di tempat server webhook berjalan.
Log webhook standar berisi kolom detectIntentResponseId dengan UUID yang dapat berguna untuk melacak panggilan tertentu di server webhook. Log ini ada di log Cloud Logging Dialogflow CX saat Cloud Logging diaktifkan.
Masalah webhook umum
Beberapa error yang dapat ditemukan dalam log Dialogflow CX untuk panggilan webhook adalah:
Error penyelesaian nama host server webhook
Dialogflow CX mencari nama host webhook Generik dan nama host tidak ada di DNS. Pastikan nama host terdaftar di DNS publik. Jika nama host baru, mungkin perlu waktu beberapa saat agar
catatan diterapkan. Pesan Cloud Logging:
State: URL_ERROR, Reason: ERROR_DNS.
Server webhook menampilkan error sisi klien
Selain ERROR_DNS, status ini menunjukkan respons 4xx dari server webhook. Hal ini dapat berupa status tidak sah (401 - ERROR_AUTHENTICATION)
atau URL tidak ditemukan di server webhook (404 - ERROR_NOT_FOUND).
Pesan Cloud Logging: State: URL_ERROR.
Agen Dialogflow kehabisan waktu sebelum server webhook menampilkan respons
Dialogflow CX mencapai batas waktu tunggu webhook sebelum server web selesai. Dua kemungkinan pendekatan di sini adalah mengurangi waktu pemrosesan server webhook atau meningkatkan waktu tunggu Dialogflow CX untuk webhook. Mengurangi waktu pemrosesan biasanya memberikan hasil terbaik meskipun
tidak mudah dalam banyak kasus. Perhatikan bahwa ada batas waktu tunggu maksimum untuk webhook dan penelepon atau pengguna akhir harus menunggu lebih lama untuk mendapatkan jawaban dari agen sebelum meningkatkan setelan ini. Pesan Cloud Logging: State: URL_TIMEOUT, Reason: TIMEOUT_WEB.
gRPC kehabisan waktu sebelum server webhook menampilkan respons
Batas waktu yang ditetapkan oleh gRPC dalam panggilan API Dialogflow CX tercapai sebelum panggilan webhook selesai. Batas ini biasanya ditetapkan di tingkat integrasi dan tidak bergantung pada parameter Dialogflow CX dan batas waktu tunggu webhook. Untuk mengetahui informasi selengkapnya tentang batas waktu gRPC, lihat
https://grpc.io/docs/guides/deadlines/.
Pesan Cloud Logging: State: URL_REJECTED, Reason: REJECTED_DEADLINE_EXCEEDED.
Dialogflow tidak dapat menghubungi server webhook
Server webhook tidak dapat dijangkau karena
error jaringan atau koneksi telah dibuat dan server webhook
mengembalikan status HTTP 5xx yang menunjukkan masalah saat memproses
permintaan. Pastikan Dialogflow CX dapat menjangkau alamat server webhook
di tingkat jaringan. Jika permintaan muncul di log server webhook, cari tahu alasan panggilan menampilkan error 5xx. Pesan Cloud Logging:
State: URL_UNREACHABLE.
Melacak panggilan webhook
Panggilan webhook standar dapat dikorelasikan antara Dialogflow CX dan server webhook menggunakan ID sesi, ID detectIntentResponse, ID rekaman aktivitas untuk fungsi Cloud Run, dan stempel waktu panggilan. Pelacakan webhook yang fleksibel dapat dilakukan menggunakan stempel waktu panggilan dan nilai parameter sesi yang ditentukan dalam definisi webhook pada waktu desain. Untuk mengetahui informasi selengkapnya tentang permintaan webhook standar dan fleksibel, lihat Webhook.
ID sesi muncul di kolom sessionInfo.session dari
WebhookRequest.
ID sesi ini harus unik untuk setiap percakapan,
dan dapat membantu Anda membandingkan log agen dengan log webhook
untuk permintaan yang menggunakan ID sesi yang sama.
Bagian Log session ID sebelumnya
menunjukkan cara mencatat ID sesi dari webhook.
Selain itu, jika Anda menghosting webhook di
Cloud Run Functions
atau opsi serverless Google Cloud serupa,
Anda dapat menggunakan kolom trace dari
entri log
sebagai filter log.
Satu eksekusi fungsi menghasilkan beberapa entri log
dengan nilai rekaman aktivitas yang sama.
Contoh berikutnya menggunakan ID sesi dan nilai rekaman aktivitas untuk mengaitkan log error agen Dialogflow CX tertentu dengan entri log webhook fungsi Cloud Run yang sesuai. Contoh ini menggunakan Filter Cloud Logging untuk agen yang telah mengaktifkan Cloud Logging.
1. Memfilter log Dialogflow CX untuk log error agen tertentu
Gunakan filter Cloud Logging berikut untuk memfilter log Dialogflow CX Anda untuk log error agen tertentu:
labels.location_id="global"
labels.agent_id="AGENT_ID"
severity=ERROR
Entri error log webhook terlihat seperti berikut:
{
"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"
}
Perhatikan kolom labels.session_id yang berisi ID sesi.
Anda akan menggunakan ID sesi pada langkah berikutnya.
2. Memfilter log fungsi Cloud Run menurut ID sesi
Gunakan filter Cloud Logging berikut untuk memfilter log Cloud Run Functions Anda menurut ID sesi:
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"
Log yang dihasilkan sesuai dengan log webhook yang dibuat selama sesi yang diberikan. Contoh:
{
"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"
}
Catat kolom trace yang digunakan di langkah berikutnya.
3. Memfilter log Cloud Function untuk rekaman aktivitas tertentu
Gunakan filter Cloud Logging berikut untuk memfilter log Cloud Function untuk rekaman aktivitas tertentu:
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"
dengan TRACE_ID adalah segmen terakhir rekaman aktivitas. Misalnya, TRACE_ID
untuk projects/PROJECT_ID/traces/e41eefc1fac48665b442bfa400cc2f5e adalah
e41eefc1fac48665b442bfa400cc2f5e.
Hasilnya adalah log server webhook yang dibuat selama eksekusi permintaan webhook yang terkait dengan ID sesi dari langkah 1 dan dengan rekaman aktivitas dari langkah 2. Log akan terlihat seperti berikut.
{
"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
}