웹훅

웹훅은 비즈니스 로직을 호스팅하거나 다른 서비스를 호출하는 서비스입니다. 세션 중에 웹훅을 사용하면 Dialogflow의 자연어 처리에서 추출한 데이터를 사용하여 동적 응답을 생성하거나, 수집된 데이터를 검증하거나, 백엔드에서 작업을 트리거할 수 있습니다.

웹훅은 표준 웹훅 또는 가변형 웹훅일 수 있습니다. 표준 웹훅을 사용하면 요청 및 응답 필드가 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에 fruitsize 세션 매개변수 값을 제공할 수 있습니다.

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 인증서를 업로드하는 데 사용됩니다.

웹훅 서비스 요구사항

웹훅 서비스에서 다음 요구사항을 충족해야 합니다.

인증

본인 또는 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 및 인증 설정을 제공할 수 있습니다.

이렇게 하면 웹훅 코드 업데이트를 프로덕션 환경에 배포하기 전에 안전하게 개발하고 테스트할 수 있습니다.

웹훅 리소스 만들기 또는 수정

웹훅 서비스가 실행 중이면 에이전트에 연결 및 인증 정보가 있는 웹훅 리소스를 만들어야 합니다. 웹훅 리소스를 만든 후 언제든지 웹훅 리소스 설정을 수정할 수 있습니다.

웹훅 리소스를 만들거나 수정하려면 다음 안내를 따르세요.

콘솔

  1. Dialogflow CX 콘솔을 엽니다.
  2. Google Cloud 프로젝트를 선택합니다.
  3. 에이전트를 선택합니다.
  4. 관리 탭을 선택합니다.
  5. 웹훅을 클릭합니다.
  6. 만들기를 클릭하거나 목록에서 웹훅 리소스를 클릭하여 수정합니다.
  7. 표준 웹훅 리소스 설정 또는 가변형 웹훅 리소스 설정을 입력합니다.
  8. 저장을 클릭합니다.

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와 통합되므로 안전한 서버리스 웹훅을 손쉽게 만들 수 있습니다. 에이전트와 동일한 프로젝트에 있는 함수를 만들면 에이전트가 특별한 구성 없이 웹훅을 안전하게 호출할 수 있습니다.

그러나 다음 두 상황에서는 이 통합을 수동으로 설정해야 합니다.

  1. 에이전트 프로젝트에 다음 주소를 사용하는 Dialogflow Service Agent 서비스 계정이 있어야 합니다.
    service-agent-project-number@gcp-sa-dialogflow.iam.gserviceaccount.com
    이 특수 서비스 계정과 연결된 키는 일반적으로 프로젝트의 첫 번째 에이전트를 만들 때 자동으로 생성됩니다. 에이전트를 2020년 11월 1일 이전에 만든 경우 이 특별 서비스 계정 생성을 트리거할 수 있습니다.
    1. 프로젝트의 새 에이전트를 만듭니다.
    2. 다음 명령어를 실행합니다.
      gcloud beta services identity create --service=dialogflow.googleapis.com --project=agent-project-id
  2. 웹훅 함수가 에이전트가 아닌 다른 프로젝트에 있는 경우Cloud Functions 호출자 IAM 역할을 함수의 프로젝트의 Dialogflow 서비스 에이전트 서비스 계정에 제공해야 합니다.

컨테이너화된 웹훅 및 Go ezcx 프레임워크 사용

Go를 사용하여 컨테이너화된 웹훅을 구현하려면 Go ezcx 프레임워크를 참조하세요. 이 프레임워크는 웹훅을 만들 때 필요한 많은 단계를 단순화할 수 있습니다.

비공개 네트워크 액세스에 서비스 디렉터리 사용

Dialogflow는 서비스 디렉터리 비공개 네트워크 액세스와 통합되므로 VPC 네트워크 내의 웹훅 대상에 연결할 수 있습니다. 이렇게 하면 트래픽이 Google Cloud 네트워크 내에서 유지되며 IAMVPC 서비스 제어가 적용됩니다.

비공개 네트워크를 타겟팅하는 웹훅을 설정하려면 다음 안내를 따르세요.

  1. 서비스 디렉터리 비공개 네트워크 구성을 따라 VPC 네트워크와 서비스 디렉터리 엔드포인트를 구성합니다.

  2. 에이전트 프로젝트에 다음 주소를 사용하는 Dialogflow Service Agent 서비스 계정이 있어야 합니다.

    service-agent-project-number@gcp-sa-dialogflow.iam.gserviceaccount.com
    Dialogflow Service Agent 서비스 계정에 다음 IAM 역할을 부여합니다.

    • 서비스 디렉터리 프로젝트의 servicedirectory.viewer
    • 네트워크 프로젝트의 servicedirectory.pscAuthorizedService
  3. 웹훅을 만들 때 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
Cloud 함수와 Cloud Run 서비스가 동일한 리소스 프로젝트에 있으면 이를 호출하는 데 추가 IAM 권한이 필요하지 않습니다.

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

샘플 및 문제 해결

웹훅 안내 가이드를 참조하세요.