웹훅은 표준 웹훅 또는 가변형 웹훅일 수 있습니다. 표준 웹훅을 사용하면 요청 및 응답 필드가 Dialogflow에서 정의됩니다. 가변형 웹훅을 사용하면 요청 및 응답 필드를 정의할 수 있습니다.
표준 웹훅
표준 웹훅을 사용하면 Dialogflow에서 정의한 요청과 응답 메시지를 사용할 수 있습니다. 요청 메시지는 세션에 대한 많은 세부정보를 제공합니다. 예를 들어 현재 활성 페이지, 최근 일치하는 인텐트, 세션 매개변수 값, 에이전트 정의 응답이 모두 포함됩니다.
표준 웹훅 요청
웹훅이 포함된 fulfillment가 호출되면 Dialogflow는 웹훅 서비스에 HTTPS POST 웹훅 요청을 보냅니다.
이 요청의 본문은 세션에 대한 정보가 있는 WebhookRequest
JSON 객체입니다.
일부 통합에서는 WebhookRequest.payload
필드를 추가 정보로 채웁니다.
예를 들어 Dialogflow CX 전화 게이트웨이 통합에서는 최종 사용자 호출자 ID를 제공합니다.
자세한 내용은 WebhookRequest
(V3) 또는 WebhookRequest
(V3Beta1) 참조 문서를 확인하세요.
표준 웹훅 응답
웹훅 서비스가 웹훅 요청을 받으면 웹훅 응답을 보내야 합니다. 응답에 대해 다음 제한사항이 적용됩니다.
- 응답은 웹훅 리소스를 만들 때 구성한 제한 시간 내에 발생해야 하며 그렇지 않으면 요청이 타임아웃됩니다.
- 응답 크기는 64KiB 이하여야 합니다.
자세한 내용은 WebhookResponse
(V3) 또는 WebhookResponse
(V3Beta1) 참조 문서를 확인하세요.
표준 웹훅 리소스 설정
다음은 표준 웹훅의 웹훅 리소스 설정을 설명합니다.
용어 | 정의 |
---|---|
표시 이름 | 웹훅이 콘솔에 표시되는 이름입니다. |
웹훅 제한 시간 | Dialogflow가 웹훅 서비스에 웹훅 요청을 보내면 응답을 기다리는 동안 시간 초과될 수 있습니다. 이 설정은 제한 시간을 초 단위로 제어합니다. 시간 초과가 발생하면 Dialogflow는 webhook.error.timeout 이벤트를 호출합니다. |
유형 | 비공개 네트워크 액세스에 서비스 디렉터리를 사용하는 경우 서비스 디렉터리로 설정하고 그렇지 않으면 일반 웹 서비스로 설정합니다. |
웹훅 URL | 웹훅 서비스의 URL 주소를 제공하세요. |
하위 유형 | 표준으로 설정합니다. |
환경별 웹훅 | 환경별 웹훅을 제공할 수 있습니다. |
인증 | 인증 섹션을 참조하세요. |
커스텀 CA 인증서 | 이는 커스텀 CA 인증서를 업로드하는 데 사용됩니다. |
가변형 웹훅
가변형 웹훅을 사용하면 요청 HTTP 메서드, 요청 URL 매개변수, 요청 및 응답 메시지의 필드를 정의합니다. 요청은 선택한 매개변수 값만 제공할 수 있으며 응답은 매개변수 재정의 값만 제공할 수 있습니다. 이러한 제한은 에이전트와 웹훅 사이의 인터페이스를 간소화하므로 실제로 유용합니다. 에이전트와 웹훅 간에 세션 매개변수 값 이외의 다른 항목은 통신할 필요가 거의 없습니다. 또한 요청 및 응답 메시지에 필요한 항목만 포함되며 다양한 시나리오에 고유한 웹훅 메시지를 제공할 수 있으므로 웹훅 구현이 간소화됩니다.
가변형 웹훅 요청
에이전트에 대해 웹훅 리소스를 만들 때 웹훅 요청에 다음을 지정할 수 있습니다.
- 웹훅 서비스로 전송되는 웹훅 요청에 사용되는 HTTP 메서드입니다.
- URL을 사용하여 Dialogflow가 웹훅 서비스에 전송해야 하는 세션 매개변수 값입니다.
- 메서드로
POST
,PUT
, 또는PATCH
를 선택하면 Dialogflow가 요청 JSON 본문을 통해 웹훅 서비스로 전송해야 하는 세션 매개변수 값을 지정할 수 있습니다.
요청 URL 또는 JSON 본문을 사용하여 세션 매개변수 값을 전송하려면 평소와 같이 매개변수 참조를 사용합니다. 매개변수 참조를 URL 이스케이프 처리할 필요가 없으며 참조를 따옴표로 묶지 않습니다. 런타임 시 Dialogflow는 매개변수 값을 필요에 따라 URL 이스케이프 처리합니다. 목록 또는 복합 값이 JSON으로 제공됩니다.
JSON 본문에서 매개변수 참조를 사용하는 경우 매개변수 유형에 관계없이 참조를 따옴표로 묶어야 합니다. 매개변수가 실제로 숫자 스칼라, 목록, 복합 값인 경우 Dialogflow는 런타임 시 요청을 전송할 때 따옴표를 삭제하여 매개변수의 데이터 유형을 보존합니다. 문자열 스칼라 유형은 따옴표로 묶입니다. 문자열 값 내에서 숫자 스칼라, 목록, 복합 값을 참조하는 경우(예: '숫자입니다: $session.params.size') 매개변수는 문자열로 처리됩니다('숫자입니다: 3').
예를 들어 다음과 같이 요청 URL에 fruit
및 size
세션 매개변수 값을 제공할 수 있습니다.
https://your-webhook-service.com/handler?f=$session.params.fruit&s=$session.params.size
그리고 요청 JSON 본문에 다음과 같이 제공합니다.
{
"fruitParameter": "$session.params.fruit",
"sizeParameter": "$session.params.size"
}
가변형 웹훅 응답
에이전트에 대해 웹훅 리소스를 만들 때 Dialogflow가 런타임 시 웹훅 응답의 특정 필드로 설정해야 하는 세션 매개변수를 지정할 수 있습니다.
응답에 대해 다음 제한사항이 적용됩니다.
- 응답은 웹훅 리소스를 만들 때 구성한 제한 시간 내에 발생해야 하며 그렇지 않으면 요청이 타임아웃됩니다.
- 응답 크기는 64KiB 이하여야 합니다.
스칼라, 목록, 복합 필드를 지정하려면 다음 형식을 사용합니다.
$.fully.qualified.path.to.field
예를 들어 다음 JSON 응답을 살펴보세요.
{
"routes" : [
{
"legs" : [
{
"distance" : {
"text" : "2,064 mi",
"value" : 3321004
}
}
]
}
]
}
'value' 필드를 지정하려면 다음을 사용하세요.
$.routes[0].legs[0].distance.value
가변형 웹훅 리소스 설정
다음은 가변형 웹훅의 웹훅 리소스 설정을 설명합니다.
용어 | 정의 |
---|---|
표시 이름 | 웹훅이 콘솔에 표시되는 이름입니다. |
웹훅 제한 시간 | Dialogflow가 웹훅 서비스에 웹훅 요청을 보내면 응답을 기다리는 동안 시간 초과될 수 있습니다. 이 설정은 제한 시간을 초 단위로 제어합니다. 시간 초과가 발생하면 Dialogflow는 webhook.error.timeout 이벤트를 호출합니다. |
유형 | 비공개 네트워크 액세스에 서비스 디렉터리를 사용하는 경우 서비스 디렉터리로 설정하고 그렇지 않으면 일반 웹 서비스로 설정합니다. |
웹훅 URL | 세션 매개변수에 대한 참조가 포함될 수 있는 웹훅 서비스의 URL 주소를 제공하세요. |
하위 유형 | 가변형으로 설정 |
방법 | 웹훅 요청의 HTTP 메서드를 설정합니다. |
요청 본문 | 위 설명대로 요청 JSON 본문을 제공합니다. |
응답 구성 | 위 설명대로 응답 필드에 설정해야 하는 세션 매개변수를 제공합니다. |
환경별 웹훅 | 환경별 웹훅을 제공할 수 있습니다. |
인증 | 인증 섹션을 참조하세요. |
커스텀 CA 인증서 | 이는 커스텀 CA 인증서를 업로드하는 데 사용됩니다. |
웹훅 서비스 요구사항
웹훅 서비스에서 다음 요구사항을 충족해야 합니다.
- HTTPS 요청을 처리해야 합니다. HTTP는 지원되지 않습니다. Compute 또는 서버리스 컴퓨팅 솔루션을 사용하여 Google Cloud Platform에서 웹훅 서비스를 호스팅하는 경우 HTTPS와 함께 제공되는 제품 문서를 참조하세요. 다른 호스팅 옵션은 도메인의 SSL 인증서 받기를 참조하세요.
- Cloud 함수로 호스팅되거나 서비스 디렉터리 웹훅으로 액세스되지 않는 한 요청의 URL은 공개적으로 액세스할 수 있어야 합니다.
- 표준 웹훅 또는 가변형 웹훅 섹션에 설명된 대로 요청과 응답을 처리해야 합니다.
- 에이전트가 서비스 디렉터리 비공개 네트워크 액세스와 통합되지 않으면 웹훅 호출이 서비스 경계 외부로 간주되어 VPC 서비스 제어를 사용 설정할 때 차단됩니다. 제한된 엔드포인트는 서비스 디렉터리에서 지원됩니다. 자세한 내용은 서비스 디렉터리를 참조하세요.
인증
본인 또는 Dialogflow 에이전트만 요청을 실행할 수 있도록 웹훅 서비스를 보호하는 것이 중요합니다. 웹훅 서비스 보호는 웹훅 리소스를 만들 때 구성합니다. Dialogflow CX는 인증을 위해 다음과 같은 메커니즘을 지원합니다.
용어 | 정의 |
---|---|
인증 헤더 | 웹훅 설정의 경우 선택사항인 HTTP 헤더 키-값 쌍을 지정할 수 있습니다. 제공되는 경우 Dialogflow가 이러한 HTTP 헤더를 웹훅 요청에 추가합니다. authorization 키와 함께 단일 쌍을 제공하는 것이 일반적입니다. 헤더 값은 정적 응답 메시지와 같은 세션 매개변수 참조 및 시스템 함수 파싱을 지원합니다 |
사용자 이름과 비밀번호를 사용하는 기본 인증 | 웹훅 설정의 경우 선택사항인 로그인 사용자 이름과 비밀번호 값을 지정할 수 있습니다. 제공되는 경우 Dialogflow가 웹훅 요청에 승인 HTTP 헤더를 추가합니다. 이 헤더는 "authorization: Basic <base 64 encoding of the string username:password>" 형식입니다. |
서드 파티 OAuth | Dialogflow가 OAuth 제공업체의 액세스 토큰을 교환하고 승인 HTTP 헤더에 추가하도록 서드 파티 OAuth 구성을 지정할 수 있습니다. 클라이언트 사용자 인증 정보 흐름만 지원됩니다. |
서비스 에이전트 액세스 토큰 | 인증에 서비스 에이전트 액세스 토큰을 사용하도록 서비스 에이전트 인증에서 액세스 토큰을 선택할 수 있습니다. 다른 Google Cloud API에 액세스하는 데 사용할 수 있습니다. |
서비스 에이전트 ID 토큰 | 인증에 서비스 에이전트 ID 토큰을 사용하도록 서비스 에이전트 인증에서 ID 토큰을 선택할 수 있습니다. Cloud 함수 및 Cloud Run 서비스에 액세스하는 데 사용할 수 있습니다. 다른 인증 옵션을 사용하지 않으면 기본적으로 사용 설정됩니다. |
상호 TLS 인증 | 상호 TLS 인증 문서를 참조하세요. |
HTTPS 인증서 확인
Dialogflow는 기본적으로 Google의 기본 트러스트 저장소를 사용하여 HTTPS 인증서를 확인합니다. 자체 서명된 인증서 또는 커스텀 루트 인증서와 같이 Google의 기본 트러스트 저장소에서 인식하지 못하는 인증서를 HTTPS 서버에 사용하려면 다음을 참조하세요.커스텀 CA 인증서를 참조하세요.
환경별 웹훅
환경을 사용하여 프로덕션 시스템을 개발 시스템과 격리(권장)하는 경우 웹훅을 환경별로 구성할 수 있습니다. 정의한 각 웹훅 리소스의 경우, 에이전트에 정의한 각 환경에 고유한 URL 및 인증 설정을 제공할 수 있습니다.
이렇게 하면 웹훅 코드 업데이트를 프로덕션 환경에 배포하기 전에 안전하게 개발하고 테스트할 수 있습니다.
웹훅 리소스 만들기 또는 수정
웹훅 서비스가 실행 중이면 에이전트에 연결 및 인증 정보가 있는 웹훅 리소스를 만들어야 합니다. 웹훅 리소스를 만든 후 언제든지 웹훅 리소스 설정을 수정할 수 있습니다.
웹훅 리소스를 만들거나 수정하려면 다음 안내를 따르세요.
콘솔
- Dialogflow CX 콘솔을 엽니다.
- Google Cloud 프로젝트를 선택합니다.
- 에이전트를 선택합니다.
- 관리 탭을 선택합니다.
- 웹훅을 클릭합니다.
- 만들기를 클릭하거나 목록에서 웹훅 리소스를 클릭하여 수정합니다.
- 표준 웹훅 리소스 설정 또는 가변형 웹훅 리소스 설정을 입력합니다.
- 저장을 클릭합니다.
API
웹훅 리소스를 만들려면 Webhook
유형의 create
메서드를 참조하세요.
웹훅 리소스(환경별 설정 제외)를 수정하려면 Webhook
유형의 patch
또는 update
메서드를 참조하세요.
웹훅 참조의 프로토콜 및 버전 선택:
프로토콜 | V3 | V3beta1 |
---|---|---|
REST | 웹훅 리소스 | 웹훅 리소스 |
RPC | 웹훅 인터페이스 | 웹훅 인터페이스 |
C++ | WebhooksClient | 사용 불가능 |
C# | WebhooksClient | 사용 불가능 |
Go | WebhooksClient | 사용 불가능 |
자바 | WebhooksClient | WebhooksClient |
Node.js | WebhooksClient | WebhooksClient |
PHP | 사용 불가능 | 사용 불가능 |
Python | WebhooksClient | WebhooksClient |
Ruby | 사용 불가능 | 해당 사항 없음 |
웹훅의 환경별 설정을 수정하려면 Environment
유형의 patch
또는 update
메서드를 참조하세요.
환경 참조의 프로토콜 및 버전을 선택합니다.
프로토콜 | V3 | V3beta1 |
---|---|---|
REST | 환경 리소스 | 환경 리소스 |
RPC | 환경 인터페이스 | 환경 인터페이스 |
C++ | EnvironmentsClient | 사용 불가능 |
C# | EnvironmentsClient | 사용 불가능 |
Go | EnvironmentsClient | 사용 불가능 |
자바 | EnvironmentsClient | EnvironmentsClient |
Node.js | EnvironmentsClient | EnvironmentsClient |
PHP | 사용 불가능 | 사용 불가능 |
Python | EnvironmentsClient | EnvironmentsClient |
Ruby | 사용 불가능 | 해당 사항 없음 |
웹훅 오류
웹훅 서비스가 웹훅 요청을 처리하는 동안 오류가 발생하면 웹훅 코드가 다음 HTTP 상태 코드 중 하나를 반환해야 합니다.
400
잘못된 요청401
승인되지 않음403
금지됨404
찾을 수 없음500
서버 오류503
서비스를 사용할 수 없음
다음과 같은 오류 상황에서 Dialogflow는 웹훅 오류 또는 제한 시간 기본 제공 이벤트를 호출하고 평소처럼 처리를 진행합니다.
- 응답 제한 시간을 초과했습니다.
- 오류 상태 코드가 수신되었습니다.
- 응답이 잘못되었습니다.
- 웹훅 서비스를 사용할 수 없습니다.
또한 인텐트 인식 API 호출에 의해 웹훅 서비스 호출이 트리거된 경우 인텐트 인식 응답의 queryResult.webhookStatuses
필드에 웹훅 상태 정보가 포함됩니다.
Cloud Functions 사용
Dialogflow는 Cloud Functions와 통합되므로 안전한 서버리스 웹훅을 손쉽게 만들 수 있습니다. 에이전트와 동일한 프로젝트에 있는 함수를 만들면 에이전트가 특별한 구성 없이 웹훅을 안전하게 호출할 수 있습니다.
그러나 다음 두 상황에서는 이 통합을 수동으로 설정해야 합니다.
- 에이전트 프로젝트에 다음 주소를 사용하는 Dialogflow Service Agent 서비스 계정이 있어야 합니다.
이 특수 서비스 계정과 연결된 키는 일반적으로 프로젝트의 첫 번째 에이전트를 만들 때 자동으로 생성됩니다. 에이전트를 2020년 11월 1일 이전에 만든 경우 이 특별 서비스 계정 생성을 트리거할 수 있습니다.service-agent-project-number@gcp-sa-dialogflow.iam.gserviceaccount.com
- 프로젝트의 새 에이전트를 만듭니다.
- 다음 명령어를 실행합니다.
gcloud beta services identity create --service=dialogflow.googleapis.com --project=agent-project-id
- 웹훅 함수가 에이전트가 아닌 다른 프로젝트에 있는 경우Cloud Functions 호출자 IAM 역할을 함수의 프로젝트의 Dialogflow 서비스 에이전트 서비스 계정에 제공해야 합니다.
컨테이너화된 웹훅 및 Go ezcx 프레임워크 사용
Go를 사용하여 컨테이너화된 웹훅을 구현하려면 Go ezcx 프레임워크를 참조하세요. 이 프레임워크는 웹훅을 만들 때 필요한 많은 단계를 단순화할 수 있습니다.
비공개 네트워크 액세스에 서비스 디렉터리 사용
Dialogflow는 서비스 디렉터리 비공개 네트워크 액세스와 통합되므로 VPC 네트워크 내의 웹훅 대상에 연결할 수 있습니다. 이렇게 하면 트래픽이 Google Cloud 네트워크 내에서 유지되며 IAM 및 VPC 서비스 제어가 적용됩니다.
비공개 네트워크를 타겟팅하는 웹훅을 설정하려면 다음 안내를 따르세요.
서비스 디렉터리 비공개 네트워크 구성을 따라 VPC 네트워크와 서비스 디렉터리 엔드포인트를 구성합니다.
에이전트 프로젝트에 다음 주소를 사용하는 Dialogflow Service Agent 서비스 계정이 있어야 합니다.
Dialogflow Service Agent 서비스 계정에 다음 IAM 역할을 부여합니다.service-agent-project-number@gcp-sa-dialogflow.iam.gserviceaccount.com
- 서비스 디렉터리 프로젝트의
servicedirectory.viewer
- 네트워크 프로젝트의
servicedirectory.pscAuthorizedService
- 서비스 디렉터리 프로젝트의
웹훅을 만들 때 URL 및 선택적 인증 정보와 함께 서비스 디렉터리 서비스를 제공합니다.
콘솔
API
Webhook
유형의serviceDirectory
필드를 참조하세요.웹훅 참조의 프로토콜 및 버전 선택:
프로토콜 V3 V3beta1 REST 웹훅 리소스 웹훅 리소스 RPC 웹훅 인터페이스 웹훅 인터페이스 C++ WebhooksClient 사용 불가능 C# WebhooksClient 사용 불가능 Go WebhooksClient 사용 불가능 자바 WebhooksClient WebhooksClient Node.js WebhooksClient WebhooksClient PHP 사용 불가능 사용 불가능 Python WebhooksClient WebhooksClient Ruby 사용 불가능 해당 사항 없음
문제를 해결하기 위해 비공개 업타임 체크를 설정하여 서비스 디렉터리가 올바르게 구성되었는지 확인할 수 있습니다.
서비스 에이전트 인증
Dialogflow는 Dialogflow 서비스 에이전트를 사용하여 ID 토큰 또는 액세스 토큰을 생성할 수 있습니다.
토큰은 Dialogflow가 웹훅을 호출할 때 승인 HTTP 헤더에 추가됩니다.
ID 토큰
호출자 역할을 부여한 후 ID 토큰을 사용하여 Cloud 함수 및 Cloud Run 서비스에 액세스할 수 있습니다.
service-agent-project-number@gcp-sa-dialogflow.iam.gserviceaccount.com
ID 토큰을 생성하는 데 사용되는 대상은 쿼리 매개변수를 제외한 전체 웹훅 URL입니다. Cloud Run을 사용하는 경우 이 URL이 Cloud Run 대상에서 지원되는지 확인합니다. 예를 들어 웹훅 URL이 다음과 같은 경우:
https://myproject.cloudfunctions.net/my-function/method1?query=value
다음 URL은 커스텀 대상에 있어야 합니다.
https://myproject.cloudfunctions.net/my-function/method1
모든 웹훅은 Google 클라이언트 라이브러리 또는 github.com/googleapis/google-auth-library-nodejs와 같은 오픈소스 라이브러리를 사용하여 토큰을 선택적으로 검증할 수 있습니다.
액세스 토큰
필요한 역할을 부여한 후 액세스 토큰을 사용하여 다른 Google Cloud API에 액세스할 수 있습니다.
service-agent-project-number@gcp-sa-dialogflow.iam.gserviceaccount.com
샘플 및 문제 해결
웹훅 안내 가이드를 참조하세요.