웹훅은 표준 웹훅 또는 가변형 웹훅일 수 있습니다. 표준 웹훅의 경우 대화형 에이전트(Dialogflow CX)에서 요청 및 응답 필드를 정의합니다. 가변형 웹훅에서는 개발자가 요청 및 응답 필드를 정의합니다.
표준 웹훅
표준 웹훅에서는 대화형 에이전트(Dialogflow CX)에서 정의된 요청 및 응답 메시지를 사용합니다. 요청 메시지는 세션에 대한 많은 세부정보를 제공합니다. 예를 들어 현재 활성 페이지, 최근에 일치한 의도, 세션 매개변수 값, 에이전트에서 정의된 응답이 모두 포함됩니다.
표준 웹훅 요청
웹훅이 포함된 fulfillment가 호출되면 대화형 에이전트(Dialogflow CX)가 웹훅 서비스로 HTTPS POST 웹훅 요청을 보냅니다.
이 요청의 본문은 세션 정보가 포함된 WebhookRequest
JSON 객체입니다.
일부 통합에서는 WebhookRequest.payload
필드를 추가 정보로 채웁니다.
예를 들어 Dialogflow CX Phone Gateway 통합에서는 최종 사용자 호출자 ID를 제공합니다.
자세한 내용은 WebhookRequest
(V3) 또는 WebhookRequest
(V3Beta1) 참고 문서를 확인하세요.
표준 웹훅 응답
웹훅 서비스가 웹훅 요청을 받으면 웹훅 응답을 보내야 합니다. 응답에 대해 다음 제한사항이 적용됩니다.
- 응답은 웹훅 리소스를 만들 때 구성한 제한 시간 내에 발생해야 하며 그렇지 않으면 요청이 타임아웃됩니다.
- 응답 크기는 64KiB 이하여야 합니다.
자세한 내용은 WebhookResponse
(V3) 또는 WebhookResponse
(V3Beta1) 참고 문서를 확인하세요.
표준 웹훅 리소스 설정
다음은 표준 웹훅의 웹훅 리소스 설정을 설명합니다.
용어 | 정의 |
---|---|
표시 이름 | 웹훅이 콘솔에 표시되는 이름입니다. |
웹훅 제한 시간 | 대화형 에이전트(Dialogflow CX)가 웹훅 서비스에 웹훅 요청을 보내면 응답을 기다리는 동안 시간 초과될 수 있습니다. 이 설정은 제한 시간을 초 단위로 제어합니다. 제한 시간이 초과되면 대화형 에이전트(Dialogflow CX)가 webhook.error.timeout 이벤트를 호출합니다. |
유형 | 비공개 네트워크 액세스에 서비스 디렉터리를 사용하는 경우 서비스 디렉터리로 설정하고 그렇지 않으면 일반 웹 서비스로 설정합니다. |
웹훅 URL | 웹훅 서비스의 URL 주소를 제공하세요. |
하위 유형 | 표준으로 설정합니다. |
환경별 웹훅 | 환경별 웹훅을 제공할 수 있습니다. |
인증 | 인증 섹션을 참조하세요. |
커스텀 CA 인증서 | 이는 커스텀 CA 인증서를 업로드하는 데 사용됩니다. |
가변형 웹훅
가변형 웹훅에서는 요청 HTTP 메서드, 요청 URL 매개변수, 요청 및 응답 메시지의 필드를 정의합니다. 요청은 선택한 매개변수 값만 제공할 수 있고 응답은 매개변수 재정의 값만 제공할 수 있습니다. 이러한 제한은 에이전트와 웹훅 사이의 인터페이스를 간소화하기 때문에 실제로 유용합니다. 에이전트와 웹훅 간에 세션 매개변수 값 이외의 다른 항목은 통신할 필요가 거의 없습니다. 또한 요청 및 응답 메시지에 필요한 것만 포함되기 때문에 웹훅 구현을 간소화할 수 있고 다양한 시나리오에 대해 고유한 웹훅 메시지를 제공할 수 있습니다.
가변형 웹훅 요청
에이전트의 웹훅 리소스를 만들 때 웹훅 요청에 대해 다음을 지정할 수 있습니다.
- 웹훅 서비스에 전송된 웹훅 요청에 사용되는 HTTP 메서드
- 대화형 에이전트(Dialogflow CX)가 URL을 사용해서 웹훅 서비스에 전송해야 하는 세션 매개변수 값
POST
,PUT
,PATCH
를 메서드로 선택한 경우 요청 JSON 본문을 통해 대화형 에이전트(Dialogflow CX)가 웹훅 서비스로 전송해야 하는 세션 매개변수 값을 지정할 수 있습니다.
요청 URL 또는 JSON 본문을 사용하여 세션 매개변수 값을 전송하려면 평소와 같이 매개변수 참조를 사용합니다. 매개변수 참조를 URL로 이스케이프 처리할 필요도 없고 따옴표로 참조를 묶지 않아도 됩니다. 런타임에 대화형 에이전트(Dialogflow CX)가 필요에 따라 매개변수 값을 URL로 이스케이프 처리합니다. 목록 또는 조합 값은 JSON으로 제공됩니다.
JSON 본문에서 매개변수 참조를 사용할 때는 매개변수 유형에 관계없이 참조를 따옴표로 묶어야 합니다. 매개변수가 실제로 숫자 스칼라, 목록, 조합 값이면 대화형 에이전트(Dialogflow CX)가 매개변수 데이터 유형을 보존하기 위해 런타임에 요청을 전송할 때 따옴표를 삭제합니다. 문자열 스칼라 유형은 따옴표가 있는 상태로 유지됩니다. 문자열 값 내에서 숫자 스칼라, 목록, 복합 값을 참조하는 경우(예: '숫자입니다: $session.params.size') 매개변수는 문자열로 처리됩니다('숫자입니다: 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"
}
가변형 웹훅 응답
에이전트의 웹훅 리소스를 만들 때 대화형 에이전트(Dialogflow CX)가 런타임에 웹훅 응답의 특정 필드로 설정되도록 세션 매개변수를 지정할 수 있습니다.
응답에 대해 다음 제한사항이 적용됩니다.
- 응답은 웹훅 리소스를 만들 때 구성한 제한 시간 내에 발생해야 하며 그렇지 않으면 요청이 타임아웃됩니다.
- 응답 크기는 64KiB 이하여야 합니다.
스칼라, 목록, 조합 필드를 지정하려면 다음 형식을 사용합니다.
$.fully.qualified.path.to.field
예를 들어 다음 JSON 응답을 사용한다고 가정해 보세요.
{
"routes" : [
{
"legs" : [
{
"distance" : {
"text" : "2,064 mi",
"value" : 3321004
}
}
]
}
]
}
"value" 필드를 지정하려면 다음을 사용합니다.
$.routes[0].legs[0].distance.value
가변형 웹훅 리소스 설정
다음은 가변형 웹훅의 웹훅 리소스 설정을 설명합니다.
용어 | 정의 |
---|---|
표시 이름 | 웹훅이 콘솔에 표시되는 이름입니다. |
웹훅 제한 시간 | 대화형 에이전트(Dialogflow CX)가 웹훅 서비스에 웹훅 요청을 보내면 응답을 기다리는 동안 시간 초과될 수 있습니다. 이 설정은 제한 시간을 초 단위로 제어합니다. 제한 시간이 초과되면 대화형 에이전트(Dialogflow CX)가 webhook.error.timeout 이벤트를 호출합니다. |
유형 | 비공개 네트워크 액세스에 서비스 디렉터리를 사용하는 경우 서비스 디렉터리로 설정하고 그렇지 않으면 일반 웹 서비스로 설정합니다. |
웹훅 URL | 세션 매개변수에 대한 참조가 포함될 수 있는 웹훅 서비스의 URL 주소를 제공합니다. |
하위 유형 | 가변형으로 설정 |
메서드 | 웹훅 요청의 HTTP 메서드를 설정합니다. |
요청 본문 | 위에서 설명한 대로 요청 JSON 본문을 제공합니다. |
응답 구성 | 위에서 설명한 대로 응답 필드로 설정할 세션 매개변수를 제공합니다. |
환경별 웹훅 | 환경별 웹훅을 제공할 수 있습니다. |
인증 | 인증 섹션을 참조하세요. |
커스텀 CA 인증서 | 이는 커스텀 CA 인증서를 업로드하는 데 사용됩니다. |
사전 정의된 커스텀 템플릿 사용
Dialogflow는 Salesforce CRM에 가변형 웹훅을 통합하기 위해 사용할 수 있는 사전 정의된 커스텀 템플릿을 제공합니다.
관리 탭에서 웹훅을 클릭한 후 + 만들기를 클릭합니다.
하위 유형에서 가변형을 선택합니다.
사전 정의된 템플릿을 사용하여 구성을 클릭하여 기능을 사용 설정합니다.
통합 유형 드롭다운 메뉴에서 Salesforce를 선택합니다.
API 이름 드롭다운 메뉴에서 API 이름을 선택합니다. 템플릿은 선택한 API 이름에 따라 웹훅 양식을 자동으로 작성합니다.
매개변수에 따라 필요하면 다음 필드를 수동으로 구성할 수 있습니다.
- 웹훅 URL
- 메서드
- 요청 본문 JSON
- 응답 구성
필수 OAuth 필드는 인증 섹션에 강조 표시됩니다.
저장을 클릭하여 웹훅을 만듭니다.
웹훅 서비스 요구사항
웹훅 서비스에서 다음 요구사항을 충족해야 합니다.
- HTTPS 요청을 처리해야 합니다. HTTP는 지원되지 않습니다. Compute 또는 서버리스 컴퓨팅 솔루션을 사용하여 Google Cloud Platform에서 웹훅 서비스를 호스팅하는 경우 HTTPS와 함께 제공되는 제품 문서를 참조하세요. 다른 호스팅 옵션은 도메인의 SSL 인증서 받기를 참조하세요.
- Cloud Run Functions로 호스팅되거나 서비스 디렉터리 웹훅으로 액세스되지 않는 한 요청 URL에 공개적으로 액세스할 수 있어야 합니다.
- 표준 웹훅 또는 가변형 웹훅 섹션에 설명된 대로 요청과 응답을 처리해야 합니다.
- 에이전트가 서비스 디렉터리 비공개 네트워크 액세스와 통합되지 않으면 웹훅 호출이 서비스 경계 외부로 간주되어 VPC 서비스 제어를 사용 설정할 때 차단됩니다. 제한된 엔드포인트는 서비스 디렉터리에서 지원됩니다. 자세한 내용은 서비스 디렉터리를 참조하세요.
인증
사용자 또는 대화형 에이전트(Dialogflow CX)만 요청 수행이 승인되도록 웹훅 서비스를 보호하는 것이 중요합니다. 웹훅 서비스 보호는 웹훅 리소스를 만들 때 구성합니다. 대화형 에이전트(Dialogflow CX)는 다음과 같은 인증 메커니즘을 지원합니다.
용어 | 정의 |
---|---|
인증 헤더 | 웹훅 설정의 경우 선택사항인 HTTP 헤더 키-값 쌍을 지정할 수 있습니다. 제공된 경우 대화형 에이전트(Dialogflow CX)가 이러한 HTTP 헤더를 웹훅 요청에 추가합니다. authorization 키와 함께 단일 쌍을 제공하는 것이 일반적입니다. 헤더 값은 정적 응답 메시지와 같은 세션 매개변수 참조 및 시스템 함수 파싱을 지원합니다 |
사용자 이름과 비밀번호를 사용하는 기본 인증 | 웹훅 설정의 경우 선택사항인 로그인 사용자 이름과 비밀번호 값을 지정할 수 있습니다. 제공된 경우 대화형 에이전트(Dialogflow CX)가 웹훅 요청에 승인 HTTP 헤더를 추가합니다. 이 헤더는 "authorization: Basic <base 64 encoding of the string username:password>" 형식입니다. |
서드 파티 OAuth | 대화형 에이전트(Dialogflow CX)가 OAuth 제공업체의 액세스 토큰을 교환하고 승인 HTTP 헤더에 추가하도록 서드 파티 OAuth 구성을 지정할 수 있습니다. 클라이언트 사용자 인증 정보 흐름만 지원됩니다. |
서비스 에이전트 액세스 토큰 | 인증에 서비스 에이전트 액세스 토큰을 사용하려면 서비스 에이전트 인증에서 액세스 토큰을 선택하면 됩니다. 이 토큰은 다른 Google Cloud API에 액세스하는 데 사용할 수 있습니다. |
서비스 에이전트 ID 토큰 | 인증에 서비스 에이전트 ID 토큰을 사용하려면 서비스 에이전트 인증에서 ID 토큰을 선택하면 됩니다. 이 토큰은 Cloud Run Functions 및 Cloud Run 서비스에 액세스하는 데 사용할 수 있습니다. |
상호 TLS 인증 | 상호 TLS 인증 문서를 참조하세요. |
HTTPS 인증서 확인
대화형 에이전트(Dialogflow CX)는 기본적으로 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 CX)는 웹훅 오류 또는 제한 시간 기본 제공 이벤트를 호출하고 평소처럼 처리를 진행합니다.
- 응답 제한 시간을 초과했습니다.
- 오류 상태 코드가 수신되었습니다.
- 응답이 잘못되었습니다.
- 웹훅 서비스를 사용할 수 없습니다.
또한 인텐트 인식 API 호출에 의해 웹훅 서비스 호출이 트리거된 경우 인텐트 인식 응답의 queryResult.webhookStatuses
필드에 웹훅 상태 정보가 포함됩니다.
자동 재시도
대화형 에이전트(Dialogflow CX)에는 안정성을 높이기 위해 특정 웹훅 오류가 발생할 때 자동으로 재시도하는 내부 메커니즘이 포함되어 있습니다. 시간 초과 또는 연결 오류와 같은 비종단적 오류만 재시도됩니다.
중복 호출 가능성을 줄이려면 다음 안내를 따르세요.
- 웹훅 제한 시간 기준점을 더 길게 설정합니다.
- 웹훅 로직 또는 중복 제거에서 멱등성을 지원합니다.
Cloud Run Functions 사용
대화형 에이전트(Dialogflow CX)는 Cloud Run Functions와 통합되므로 서버리스 보안 웹훅을 쉽게 만들 수 있습니다. 에이전트와 동일한 프로젝트에 있는 함수를 만들 경우 인증 구성에서 서비스 에이전트 인증 -> ID 토큰만 선택하면 에이전트가 이후 웹훅을 안전하게 호출할 수 있습니다.
그러나 다음 두 상황에서는 이 통합을 수동으로 설정해야 합니다.
- 에이전트 프로젝트에 대해 다음 주소를 사용하는 대화형 에이전트(Dialogflow CX) 서비스 에이전트 서비스 계정이 존재해야 합니다.
이 특수 서비스 계정과 연결된 키는 일반적으로 프로젝트의 첫 번째 에이전트를 만들 때 자동으로 생성됩니다. 에이전트를 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 CX) 서비스 에이전트 서비스 계정에 제공해야 합니다.
- 인증 구성 섹션에서 서비스 에이전트 인증 -> ID 토큰을 선택합니다.
컨테이너화된 웹훅 및 Go ezcx 프레임워크 사용
Go를 사용하여 컨테이너화된 웹훅을 구현하려면 Go ezcx 프레임워크를 참조하세요. 이 프레임워크를 사용하면 웹훅을 만들 때 필요한 여러 단계를 간소화할 수 있습니다.
내부 전용 트래픽에 Cloud Run Functions 사용
동일한 프로젝트 또는 동일한 VPC SC 경계에 있는 VPC 네트워크로부터 내부 트래픽을 수락하도록 설정된 Cloud Run Functions는 에이전트가 동일한 프로젝트 또는 동일한 VPC SC 경계에 있는 한 웹훅으로 사용할 수 있습니다.
비공개 네트워크 액세스에 서비스 디렉터리 사용
대화형 에이전트(Dialogflow CX)는 서비스 디렉터리 비공개 네트워크 액세스와 통합되므로 VPC 네트워크 내의 웹훅 대상에 연결할 수 있습니다. 이렇게 하면 트래픽이 Google Cloud 네트워크 내에서 유지되며 IAM 및 VPC 서비스 제어가 적용됩니다.
비공개 네트워크를 타겟팅하는 웹훅을 설정하려면 다음 안내를 따르세요.
서비스 디렉터리 비공개 네트워크 구성을 따라 VPC 네트워크와 서비스 디렉터리 엔드포인트를 구성합니다.
에이전트 프로젝트에 대해 다음 주소를 사용하는 대화형 에이전트(Dialogflow CX) 서비스 에이전트 서비스 계정이 존재해야 합니다.
대화형 에이전트(Dialogflow CX) 서비스 에이전트 서비스 계정에 다음 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 CX)는 대화형 에이전트(Dialogflow CX) 서비스 에이전트를 사용하여 ID 토큰 또는 액세스 토큰을 생성할 수 있습니다.
토큰은 대화형 에이전트(Dialogflow CX)가 웹훅을 호출할 때 승인 HTTP 헤더에 추가됩니다.
ID 토큰
ID 토큰은 호출자 역할을 부여한 후 Cloud Run Functions 및 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
샘플 및 문제 해결
웹훅 안내 가이드를 참조하세요.