이 가이드에서는 웹훅 구현을 위한 다양한 샘플과 웹훅 문제 해결 권장사항을 제공합니다.
세션 매개변수 설정
다음 샘플은 세션 매개변수를 설정하는 방법을 보여줍니다.
Go
CTS에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
웹훅 빠른 시작을 참조하세요.Java
CTS에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Node.js
CTS에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Python
CTS에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
fulfillment 응답 반환
다음 샘플은 fulfillment 응답을 반환하는 방법을 보여줍니다.
Go
CTS에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
웹훅 빠른 시작을 참조하세요.Java
CTS에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Node.js
CTS에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Python
CTS에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
필요에 따라 양식 매개변수 설정
다음 샘플은 필요에 따라 매개변수를 플래그 지정하는 방법을 보여줍니다.
Java
CTS에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Node.js
CTS에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
양식 매개변수 확인
다음 샘플은 양식 매개변수를 확인하는 방법을 보여줍니다.
Java
CTS에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Node.js
CTS에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Python
CTS에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
세션 ID 기록
다음 샘플은 웹훅 요청에서 session ID
를 기록하는 방법을 보여줍니다.
Python
CTS에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
문제 해결
웹훅 문제를 해결할 때는 웹훅에서 세션 ID를 기록하는 것이 도움이 됩니다.
WebhookRequest의 sessionInfo.session
필드에는 세션 ID가 포함됩니다.
세션 ID는 대화마다 고유해야 하며 동일한 세션 ID를 사용하는 요청에 대해 에이전트 로그와 웹훅 로그를 비교하는 데 도움이 될 수 있습니다.
위의 세션 ID 기록 섹션은 웹훅에서 세션 ID를 기록하는 방법을 보여줍니다.
또한 Cloud Functions 또는 유사한 Google Cloud 서버리스 옵션에 웹훅을 호스팅하는 경우 로그 항목의 trace
필드를 로그 필터로 사용할 수 있습니다.
함수를 한 번 실행하면 동일한 trace 값을 가진 여러 로그 항목이 생성됩니다.
아래 예시에서는 세션 ID와 trace 값을 모두 사용하여 특정 Dialogflow 에이전트 오류 로그를 해당 Cloud Functions 웹훅 로그 항목과 연결합니다. 이 예시에서는 Cloud Logging을 사용 설정한 에이전트에 Cloud Logging 필터를 사용합니다.
1. 특정 에이전트의 오류 로그에 대한 Dialogflow 로그 필터링
다음 Cloud Logging 필터를 사용하여 특정 에이전트의 오류 로그에 대한 Dialogflow 로그를 필터링합니다.
labels.location_id="global"
labels.agent_id="AGENT_ID"
severity=ERROR
웹훅 로그 오류 항목은 다음과 같습니다.
{
"insertId": "-zi368ye1ie3r",
"jsonPayload": {
"message": "Webhook error: State: URL_UNREACHABLE, Reason: UNREACHABLE_5xx, HTTP status code: 500",
"code": 14
},
"resource": {
"type": "global",
"labels": {
"project_id": "PROJECT_ID"
}
},
"timestamp": "2022-10-05T19:44:53.098938Z",
"severity": "ERROR",
"labels": {
"session_id": "ec8781-f28-7e6-791-d7e992e8f",
"location_id": "global",
"agent_id": "807346f0-f501-42b5-9642-af59d5e98165"
},
"logName": "projects/PROJECT_ID/logs/dialogflow-runtime.googleapis.com%2Frequests",
"receiveTimestamp": "2022-10-05T19:44:53.222552658Z"
}
세션 ID가 포함된 labels.session_id
필드를 기록합니다.
다음 단계에서 세션 ID를 사용합니다.
2. 세션 ID에 대한 Cloud 함수 로그 필터링
다음 Cloud Logging 필터를 사용하여 세션 ID에 대한 Cloud 함수 로그를 필터링합니다.
resource.type = "cloud_function"
resource.labels.function_name = "CLOUD_FUNCTION_NAME"
resource.labels.region = "CLOUD_FUNCTION_REGION"
textPayload="Debug Node: session ID = SESSION_ID"
결과 로그는 제공된 세션 중에 작성된 웹훅 로그에 해당합니다. 예를 들면 다음과 같습니다.
{
"textPayload": "Debug Node: session ID = ec8781-f28-7e6-791-d7e992e8f",
"insertId": "632bdb2b000b7c6c77d0cc62",
"resource": {
"type": "cloud_function",
"labels": {
"project_id": "PROJECT_ID",
"function_name": "webhook",
"region": "us-central1"
}
},
"timestamp": "2022-10-05T19:44:53.098938Z",
"severity": "INFO",
"labels": {
"execution_id": "ozt5bnz50eeo",
"instance_id": "00c61b117c1f116421aa5503bc80f9aa636b9ef117bb2722f3d54414085e62be6e55af0aa0250a63534262b31a3d3a14af8c940203f1915db8b25b"
},
"logName": "projects/PROJECT_ID/logs/cloudfunctions.googleapis.com%2Fcloud-functions",
"trace": "projects/PROJECT_ID/traces/e41eefc1fac48665b442bfa400cc2f5e",
"receiveTimestamp": "2022-10-05T19:44:53.222552658Z"
}
다음 단계에서 사용되는 trace
필드를 기록합니다.
3. 특정 trace에 대한 Cloud 함수 로그 필터링
다음 Cloud Logging 필터를 사용하여 특정 trace에 대한 Cloud 함수 로그를 필터링합니다.
resource.type = "cloud_function"
resource.labels.function_name = "CLOUD_FUNCTION_NAME"
resource.labels.region = "CLOUD_FUNCTION_REGION"
trace="projects/PROJECT_ID/traces/TRACE_ID"
여기서 TRACE_ID
는 trace의 마지막 세그먼트입니다. 예를 들어 projects/PROJECT_ID/traces/e41eefc1fac48665b442bfa400cc2f5e
의 TRACE_ID
는 e41eefc1fac48665b442bfa400cc2f5e
입니다.
그 결과로 생성되는 로그는 1단계의 세션 ID와 2단계의 trace와 연결된 웹훅 요청을 실행하는 동안 생성된 모든 웹훅 로그에 해당합니다.