웹훅

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

웹훅은 표준 웹훅 또는 가변형 웹훅일 수 있습니다. 표준 웹훅의 경우 대화형 에이전트(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').

예를 들어 다음과 같이 fruitsize 세션 매개변수 값을 요청 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에 가변형 웹훅을 통합하기 위해 사용할 수 있는 사전 정의된 커스텀 템플릿을 제공합니다.

  1. 관리 탭에서 웹훅을 클릭한 후 + 만들기를 클릭합니다.

  2. 하위 유형에서 가변형을 선택합니다.

  3. 사전 정의된 템플릿을 사용하여 구성을 클릭하여 기능을 사용 설정합니다.

  4. 통합 유형 드롭다운 메뉴에서 Salesforce를 선택합니다.

  5. API 이름 드롭다운 메뉴에서 API 이름을 선택합니다. 템플릿은 선택한 API 이름에 따라 웹훅 양식을 자동으로 작성합니다.

    1. 매개변수에 따라 필요하면 다음 필드를 수동으로 구성할 수 있습니다.

      • 웹훅 URL
      • 메서드
      • 요청 본문 JSON
      • 응답 구성
    2. 필수 OAuth 필드는 인증 섹션에 강조 표시됩니다.

  6. 저장을 클릭하여 웹훅을 만듭니다.

웹훅 서비스 요구사항

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

인증

사용자 또는 대화형 에이전트(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 및 인증 설정을 제공할 수 있습니다.

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

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

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

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

콘솔

  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 CX)는 웹훅 오류 또는 제한 시간 기본 제공 이벤트를 호출하고 평소처럼 처리를 진행합니다.

  • 응답 제한 시간을 초과했습니다.
  • 오류 상태 코드가 수신되었습니다.
  • 응답이 잘못되었습니다.
  • 웹훅 서비스를 사용할 수 없습니다.

또한 인텐트 인식 API 호출에 의해 웹훅 서비스 호출이 트리거된 경우 인텐트 인식 응답의 queryResult.webhookStatuses 필드에 웹훅 상태 정보가 포함됩니다.

Cloud Run Functions 사용

대화형 에이전트(Dialogflow CX)는 Cloud Run Functions와 통합되므로 서버리스 보안 웹훅을 쉽게 만들 수 있습니다. 에이전트와 동일한 프로젝트에 있는 함수를 만들 경우 인증 구성에서 서비스 에이전트 인증 -> ID 토큰만 선택하면 에이전트가 이후 웹훅을 안전하게 호출할 수 있습니다.

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

  1. 에이전트 프로젝트에 대해 다음 주소를 사용하는 대화형 에이전트(Dialogflow CX) 서비스 에이전트 서비스 계정이 존재해야 합니다.
    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 CX) 서비스 에이전트 서비스 계정에 제공해야 합니다.
  3. 인증 구성 섹션에서 서비스 에이전트 인증 -> ID 토큰을 선택합니다.

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

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

내부 전용 트래픽에 Cloud Run Functions 사용

동일한 프로젝트 또는 동일한 VPC SC 경계에 있는 VPC 네트워크로부터 내부 트래픽을 수락하도록 설정된 Cloud Run Functions는 에이전트가 동일한 프로젝트 또는 동일한 VPC SC 경계에 있는 한 웹훅으로 사용할 수 있습니다.

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

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

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

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

  2. 에이전트 프로젝트에 대해 다음 주소를 사용하는 대화형 에이전트(Dialogflow CX) 서비스 에이전트 서비스 계정이 존재해야 합니다.

    service-agent-project-number@gcp-sa-dialogflow.iam.gserviceaccount.com
    대화형 에이전트(Dialogflow CX) 서비스 에이전트 서비스 계정에 다음 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 CX)는 대화형 에이전트(Dialogflow CX) 서비스 에이전트를 사용하여 ID 토큰 또는 액세스 토큰을 생성할 수 있습니다.

토큰은 대화형 에이전트(Dialogflow CX)가 웹훅을 호출할 때 승인 HTTP 헤더에 추가됩니다.

ID 토큰

ID 토큰은 호출자 역할을 부여한 후 Cloud Run Functions 및 Cloud Run 서비스에 액세스하는 데 사용할 수 있습니다.

service-agent-project-number@gcp-sa-dialogflow.iam.gserviceaccount.com
Cloud Run Functions와 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

샘플 및 문제 해결

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