백엔드 모듈을 시스템과 통합

백엔드 모듈은 대량의 기능 관련 메시지를 처리하고 상담사 데스크톱 UI와 상호작용하는 인프라를 제공합니다. 이 튜토리얼에서는 백엔드 모듈을 에이전트 시스템과 통합하는 과정을 안내합니다.

백그라운드 모듈 개념 및 구조에 관한 자세한 내용은 백엔드 모듈 기본사항 문서를 참고하세요.

기본 요건

  1. 구성하지 않은 경우 Google Cloud CLI를 설치합니다.
  2. Dialogflow에서 필요한 각 이벤트 알림에 대해 Cloud Pub/Sub 주제를 만듭니다. 나중에 백엔드를 배포할 수 있도록 주제 ID와 주제 이름을 기록해 둡니다.
  3. Pub/Sub 주제를 사용하여 Agent Assist 콘솔대화 프로필을 구성합니다.

자동 배포

배포는 Google Cloud 자동화 스크립트 또는 Terraform으로 자동화할 수 있습니다.

자동화 스크립트

자세한 내용은 ./deploy.sh를 확인하세요.

Terraform 변경사항 적용

gcloud CLI 자동화 스크립트 또는 Terraform을 사용하여 배포를 자동화할 수 있습니다. Terraform 변경사항을 적용하기 전에 다음 단계를 완료하세요.

  1. 계정에 다음 IAM 역할을 부여합니다.
    • Project IAM Admin (roles/resourcemanager.projectIamAdmin)
    • Service Usage Admin (roles/serviceusage.serviceUsageAdmin)
    • Service Account Admin (roles/iam.serviceAccountAdmin)
    • Service Account User (roles/iam.serviceAccountUser)
    • Pub/Sub Admin (roles/pubsub.admin)
    • Secret Manager Admin (roles/secretmanager.admin)
    • Cloud Build Editor (roles/cloudbuild.builds.editor)
    • Artifact Registry Administrator (roles/artifactregistry.admin)
    • Storage Admin (roles/storage.admin)
    • Cloud Run Admin (roles/run.admin)
    • Cloud Memorystore Redis Admin (roles/redis.admin)
    • Serverless VPC Access Admin (roles/vpcaccess.admin)
  2. UI 커넥터와 Cloud Pub/Sub 인터셉터의 이미지를 빌드하고 이미지 이름을 기록합니다.
    • UI 커넥터의 경우 ./ui-connector 폴더에서 다음 명령어를 실행합니다.
      $ gcloud builds submit --tag gcr.io/$GCP_PROJECT_ID/aa-integration-backend/ui-connector
    • Cloud Pub/Sub 인터셉터의 경우 ./cloud-pubsub-interceptor 폴더에서 다음 명령어를 실행합니다.
      $ gcloud builds submit --tag gcr.io/$GCP_PROJECT_ID/aa-integration-backend/cloud-pubsub-interceptor
  3. 다음 명령어를 사용하여 Terraform 상태를 저장할 Cloud Storage 버킷을 만들고 /terraform/backend.tf에서 백엔드 버킷 값을 업데이트합니다.
    GCP_PROJECT_ID=$(gcloud config get-value project)
    # Create the Cloud storage bucket
    gcloud storage buckets create gs://${GCP_PROJECT_ID}-tfstate
    # Enable Object Versioning to keep the history of your deployments
    gcloud storage buckets update gs://${GCP_PROJECT_ID}-tfstate --versioning
  4. 필수 Terraform 변수 gcp_project_id, ui_connector_docker_image, cloud_pubsub_interceptor_docker_image의 값을 내보냅니다. 예: export TF_VAR_gcp_project_id='you-gcp-project-id' 또는 /terraform/variables.tf에서 값을 직접 채울 수 있습니다.
  5. /ui-connector/auth.py에서 auth.check_auth() 메서드를 수정하여 인증 방법을 맞춤설정합니다.

Cloud Build를 사용하여 이러한 단계를 자동화하려면 이 안내를 따르고 빌드 구성 파일 ./terraform_cloudbuild.yaml을 사용하세요. Cloud Build가 서비스를 배포하도록 허용하려면 1단계에 나열된 IAM 역할을 Cloud Build 서비스 계정에 부여해야 합니다.

수동 배포

다음 단계에서는 백엔드 모듈을 수동으로 배포하는 방법을 설명합니다.

환경 변수 설정

배포 명령어를 더 간단하게 만들려면 셸에서 다음 유용한 환경 변수를 설정하는 것이 좋습니다. 다음 예시 명령어를 사용하여 변수를 설정할 수 있습니다.

$ export GCP_PROJECT_ID='aa-integration-service'

다음 환경 변수를 설정합니다.

  • GCP_PROJECT_ID: 관련 리소스를 호스팅하는 Cloud Platform 프로젝트의 프로젝트 ID입니다. 예: my-project
  • SERVICE_REGION: 서비스 및 관련 Google Cloud 리소스의 위치 또는 리전입니다. 플랫폼 리소스입니다. 예를 들면 us-central1입니다.

관리자 계정 설정

서비스 관리 및 런타임 ID에는 별도의 Google Cloud 계정을 사용하는 것이 좋습니다. 서비스 관리는 주로 Google 계정이 있는 사용자가 실행하며, 런타임 ID는 서비스 계정을 사용하여 Cloud Run 서비스에 필요한 리소스에 액세스할 수 있는 권한을 부여합니다.

인간 관리 계정 준비

프로젝트에 이미 편집자 또는 소유자 권한이 있는 계정을 사용하려는 경우 다음 섹션으로 건너뛰세요.

백엔드 인프라를 관리하려면 관리자 계정을 설정하고 다음 Identity and Access Management (IAM) 역할을 부여합니다. 이러한 사용자의 권한은 모두 편집자 및 소유자 기본 역할에 포함됩니다.

  • roles/secretmanager.admin (Secret Manager 관리자): JWT 생성 및 확인을 위해 Secret Manager에 저장된 보안 비밀을 관리합니다.
  • roles/run.admin (Cloud Run 관리자): Cloud Run 서비스를 배포하고 관리합니다.
  • roles/iam.serviceAccountUser (서비스 계정 사용자): Cloud Run 런타임 서비스 계정에 iam.serviceAccounts.actAs 권한을 부여합니다.
  • roles/cloudbuild.builds.editor (Cloud Build 편집자): Cloud Build를 사용하여 통합 서비스용 Docker 이미지를 빌드합니다.
  • Artifact Registry 관리자: 통합 서비스를 위해 빌드된 Docker 이미지를 저장하고 관리합니다.
  • roles/pubsub.editor (Cloud Pub/Sub 편집자): Cloud Pub/Sub 주제 및 구독을 만들고 관리합니다.
  • roles/redis.admin (Redis 관리자): Redis용 Memorystore 리소스를 만들고 관리합니다.

사용자 계정에 IAM 역할을 부여하려면 add-iam-policy-binding Google Cloud CLI 명령어를 사용합니다. 다음은 명령어의 예입니다.

$ gcloud projects add-iam-policy-binding $GCP_PROJECT_ID \
 --member='user:test-user@gmail.com' \
 --role='roles/pubsub.editor'

gcloud에서 사람 관리 계정 설정

다음 샘플에서 $ADMIN_ACCOUNT을 사용할 관리자 계정(예: myaccount@gmail.com)으로 바꿉니다.

$ gcloud config set account $ADMIN_ACCOUNT

서비스 계정 설정

기본적으로 Cloud Run 서비스 또는 작업은 기본 Compute Engine 서비스 계정으로 실행됩니다. 기본값을 그대로 두는 대신 최소한의 필수 권한 집합이 있는 사용자 관리형 서비스 계정을 할당하여 모든 Cloud Run 서비스에 전용 ID를 제공하는 것이 좋습니다. 기본 서비스 계정을 유지하려면 환경 변수 설정으로 건너뛰세요.

각 Cloud Run 런타임에 대해 서비스 계정 두 개 만들기

  1. 서비스 계정을 만들려면 $CONNECTOR_SERVICE_ACCOUNT_ID$INTERCEPTOR_SERVICE_ACCOUNT_ID 값을 바꾸고 다음 명령어를 실행합니다.

    $ export CONNECTOR_SERVICE_ACCOUNT_ID='aa-ui-connector' && gcloud iam service-accounts create $CONNECTOR_SERVICE_ACCOUNT_ID \
    --description='Agent Assist integration - UI connector service account' \
    --display-name='Agent Assist integration - UI connector'
    $ export INTERCEPTOR_SERVICE_ACCOUNT_ID='aa-pubsub-interceptor' && gcloud iam service-accounts create $INTERCEPTOR_SERVICE_ACCOUNT_ID \
    --description='Agent Assist integration - Pubsub interceptor service account' \
    --display-name='Agent Assist integration - Pubsub interceptor'
  2. 다음 샘플 명령어를 사용하여 UI 커넥터 및 Cloud Pub/Sub 커넥터 서비스 계정에 다음 역할을 할당합니다.

    $ gcloud projects add-iam-policy-binding $GCP_PROJECT_ID \
    --member='serviceAccount:$CONNECTOR_SERVICE_ACCOUNT_ID@$GCP_PROJECT_ID.iam.gserviceaccount.com' \
    --role='roles/pubsub.editor'

UI 커넥터 서비스 계정에 다음 IAM 역할을 부여합니다.

  • roles/redis.editor
  • roles/vpcaccess.user
  • roles/compute.viewer
  • roles/secretmanager.secretAccessor
  • roles/dialogflow.agentAssistClient

Cloud Pub/Sub 커넥터 서비스 계정에 다음 역할을 부여합니다.

  • roles/redis.editor
  • roles/vpcaccess.user
  • roles/compute.viewer

환경 변수 설정하기

다음 환경 변수의 값을 방금 만든 서비스 계정 또는 프로젝트의 기본 Compute Engine 서비스 계정으로 설정합니다.

  1. CONNECTOR_SERVICE_ACCOUNT: UI 커넥터 런타임의 서비스 계정입니다. 예: aa-ui-connector@my-project-id.iam.gserviceaccount.com
  2. INTERCEPTOR_SERVICE_ACCOUNT: Cloud Pub/Sub 인터셉터 런타임의 서비스 계정입니다. 예: aa-pubsub-interceptor@my-project-id.iam.gserviceaccount.com

사용자 인증 방법 맞춤설정

코드 저장소는 백엔드 사용자와 Genesys Cloud 및 Twilio용 프런트엔드 모듈 사용자를 모두 지원합니다.

  1. 코드 저장소에서 ui_connector/auth.py 파일을 엽니다.
  2. 환경 변수 AUTH_OPTION를 설정하여 지원되는 ID 공급업체를 지정하거나 auth.check_auth를 사용하여 인증 방법을 구현합니다.

    기본적으로 AUTH_OPTION는 비어 있으며 사용자는 UI 커넥터 서비스에 JWT를 등록할 수 없습니다. 지원되는 값:

    • Salesforce: Salesforce OpenID Connect를 사용하여 인증 토큰을 확인합니다. 필수 환경 변수: SALESFORCE_ORGANIZATION_ID
    • SalesforceLWC: oauth2/userinfo REST 엔드포인트를 사용하여 Salesforce OAuth 클라이언트 사용자 인증 정보 인증 토큰을 확인합니다. 필수 환경 변수: SALESFORCE_ORGANIZATION_ID, SALESFORCE_DOMAIN
    • GenesysCloud: Genesys SDK UsersAPI를 사용하여 인증 토큰을 확인합니다.
    • Twilio: Twilio의 인증 토큰을 확인합니다. 필수 환경 변수: TWILIO_FLEX_ENVIRONMENT
    • Skip: 인증 토큰 확인을 건너뜁니다. 프로덕션에서 사용해서는 안 됩니다.

    예:

    $ export AUTH_OPTION='Salesforce'

    토큰 유형마다 유효성 검사 방법이 다를 수 있습니다. 토큰의 유효성 검사 방법은 개발자가 결정합니다. 변경하지 않으면 auth.check_auth는 모든 요청에 대해 false를 반환합니다.

서비스에 액세스할 수 있는 출처를 제한하려면 config.CORS_ALLOWED_ORIGINS 변수의 값을 변경하세요. 기본값 *을 사용하면 모든 출처에서 서비스를 방문할 수 있습니다.

JWT 보안 비밀 키 생성 및 저장

UI 커넥터 서비스가 보안 인증 토큰을 클라이언트에 다시 전송하려면 JWT 비밀 키를 사용하여 토큰을 암호화해야 합니다. 키의 값은 임의의 문자열일 수 있지만 고유하고 추측하기 어려워야 합니다.

이 보안 비밀 키는 Secret Manager에 저장됩니다.

환경 변수 설정

  • JWT_SECRET_NAME: Secret Manager의 보안 비밀 키 이름입니다. 임의의 이름을 지정할 수 있습니다. 권장 값: aa-integration-jwt-secret

키 생성

공격자가 추측할 수 없도록 JWT 보안 키로 임의 해시를 생성하는 것이 좋습니다. 이렇게 하려면 python secrets를 사용하여 안전한 난수를 생성하면 됩니다.

# generate_secret_key.py
import secrets
jwt_secret_key = secrets.token_bytes(16)
print(jwt_secret_key) # Output example: b'L\x9b\xd6i4\xc3\x1d\x95\xe3\xf78z\xdda\x97\xec'

Secret Manager에 키 저장

다음 예시 명령어에서 my_key를 사용할 보안 키로 바꿉니다.

$ python generate_secret_key.py | gcloud secrets create $JWT_SECRET_NAME --data-file=- \
--replication-policy=user-managed --locations=$SERVICE_REGION

Redis용 Memorystore 설정

Redis를 설정하려면 다음 환경 변수가 필요합니다.

  • VPC_CONNECTOR_NAME: Cloud Run 서비스를 Memorystore for Redis에 연결하는 서버리스 VPC 액세스 커넥터의 이름입니다. 권장 값: aa-integration-vpc
  • VPC_NETWORK: 서버리스 VPC 액세스 커넥터를 연결할 VPC 네트워크입니다. Google Cloud 프로젝트에 VPC를 설정하지 않은 경우 값은 default여야 합니다.
  • VPC_SUBNET: Redis 인스턴스가 연결된 승인된 VPC 네트워크의 이름입니다. VPC 네트워크 설정을 맞춤설정하지 않은 경우 값은 default이어야 합니다.
  • REDIS_IP_RANGE: 서버리스 VPC 액세스 커넥터의 예약되지 않은 내부 IP 네트워크입니다. 할당되지 않은 공간의 /28이 필요합니다. 권장 값: 10.8.0.0/28 (이 값은 대부분의 새 프로젝트에 적합함)
  • REDIS_INSTANCE_ID: Redis 인스턴스의 이름입니다. 권장 값: aa-integration-redis

Cloud Run 서비스의 리전에 Redis 인스턴스 만들기

다음 명령어를 실행합니다.

$ gcloud redis instances create $REDIS_INSTANCE_ID --size=5 --region=$SERVICE_REGION

직접 이그레스 또는 서버리스 VPC 액세스를 사용하여 Cloud Run에서 Redis 인스턴스에 연결할 수 있습니다.

서버리스 VPC 액세스 커넥터 만들기({:#create-svpca-connector})(선택사항)

고객이 다이렉트 이그레스를 선택하는 경우 이제 선택사항입니다. 서버리스 VPC 액세스를 선택하는 경우 서버리스 VPC 액세스 커넥터를 만들어야 합니다. 이 단계에 대한 자세한 내용은 Cloud Run 튜토리얼을 참고하세요.

서버리스 VPC 액세스 API가 프로젝트에 대해 사용 설정되어 있는지 확인합니다.

$ gcloud services enable vpcaccess.googleapis.com

커스텀 IP 범위로 서버리스 VPC 액세스 커넥터를 만듭니다.

$ gcloud compute networks vpc-access connectors create $VPC_CONNECTOR_NAME \
  --network $VPC_NETWORK \
  --region $SERVICE_REGION \
  --range $REDIS_IP_RANGE

Redis 호스트와 Redis 포트를 환경 변수로 저장합니다.

  • Redis 인스턴스의 IP 주소를 환경 변수 REDIS_HOST로 설정합니다.
  • Redis 인스턴스의 포트 번호를 환경 변수 REDIS_PORT로 설정합니다.

UI 커넥터 서비스 배포

UI 커넥터 서비스에는 다음 환경 변수가 필요합니다.

  • CONNECTOR_SERVICE_NAME: UI 커넥터의 Cloud Run 서비스 이름입니다. 권장 값: ui-connector
  • CONNECTOR_IMAGE_NAME: UI 커넥터 서비스의 이미지 이름입니다. CONNECTOR_SERVICE_NAME과 동일할 수 있습니다. 권장 값: ui-connector

Docker 이미지 빌드

/ui-connector 폴더에서 다음 명령어를 실행합니다.

$ gcloud builds submit --tag gcr.io/$GCP_PROJECT_ID/$CONNECTOR_IMAGE_NAME

Cloud Run에 UI 커넥터 배포

/ui-connector 폴더에서 다음 명령어를 실행합니다.

  • Redis 연결을 위해 직접 이그레스를 사용하는 경우
$ gcloud run deploy $CONNECTOR_IMAGE_NAME \
--image gcr.io/$GCP_PROJECT_ID/$CONNECTOR_IMAGE_NAME \
--platform managed \
--service-account=$CONNECTOR_SERVICE_ACCOUNT_NAME \
--allow-unauthenticated \
--timeout 3600 \
--region $SERVICE_REGION \
--network $VPC_NETWORK \
--subnet $VPC_SUBNET \
--clear-vpc-connector \
--min-instances=1 \
--set-env-vars REDISHOST=$REDIS_HOST,REDISPORT=$REDIS_PORT,GCP_PROJECT_ID=$GCP_PROJECT_ID,AUTH_OPTION=$AUTH_OPTION \
--update-secrets=/secret/jwt_secret_key=${JWT_SECRET_NAME}:latest
  • 생성된 서버리스 VPC 액세스 커넥터를 Redis 연결에 사용하는 경우
$ gcloud run deploy $CONNECTOR_IMAGE_NAME \
--image gcr.io/$GCP_PROJECT_ID/$CONNECTOR_IMAGE_NAME \
--platform managed \
--service-account=$CONNECTOR_SERVICE_ACCOUNT_NAME \
--allow-unauthenticated \
--timeout 3600 \
--region $SERVICE_REGION \
--vpc-connector $VPC_CONNECTOR_NAME \
--clear-network \
--min-instances=1 \
--no-cpu-throttling \
--set-env-vars REDISHOST=$REDIS_HOST,REDISPORT=$REDIS_PORT,GCP_PROJECT_ID=$GCP_PROJECT_ID,AUTH_OPTION=$AUTH_OPTION \
--update-secrets=/secret/jwt_secret_key=${JWT_SECRET_NAME}:latest

배포된 UI 커넥터의 서비스 URL을 기록해 둡니다. 이 URL은 클라이언트 (에이전트 데스크톱)에서 사용됩니다.

Cloud Pub/Sub 인터셉터 서비스 배포

Pub/Sub 인터셉터 서비스의 경우 다음 환경 변수가 필요합니다.

  • INTERCEPTOR_SERVICE_NAME: Cloud Pub/Sub 인터셉터의 Cloud Run 서비스 이름입니다. 권장 값: cloud-pubsub-interceptor
  • INTERCEPTOR_IMAGE_NAME: Cloud Pub/Sub 인터셉터 서비스의 이미지 이름입니다. INTERCEPTOR_SERVICE_NAME과 동일할 수 있습니다. 권장 값: cloud-pubsub-interceptor
  • INTERCEPTOR_SERVICE_ACCOUNT_NAME: Cloud Pub/Sub 인터셉터 런타임의 서비스 계정입니다.

Docker 이미지 빌드

/cloud-pubsub-interceptor 폴더에서 다음 명령어를 실행합니다.

$ gcloud builds submit --tag gcr.io/$GCP_PROJECT_ID/$INTERCEPTOR_IMAGE_NAME

Cloud Run에 Pub/Sub 인터셉터 배포

/cloud-pubsub-interceptor 폴더에서 다음 명령어를 실행합니다.

  • Redis 연결을 위해 직접 이그레스를 사용하는 경우
$ gcloud run deploy $INTERCEPTOR_SERVICE_NAME \
--image gcr.io/$GCP_PROJECT_ID/$INTERCEPTOR_IMAGE_NAME \
--platform managed \
--service-account=$INTERCEPTOR_SERVICE_ACCOUNT_NAME \
--region $SERVICE_REGION \
--network $VPC_NETWORK \
--subnet $VPC_SUBNET \
--clear-vpc-connector \
--ingress=internal \
--min-instances=1 \
--no-cpu-throttling \
# You can also add LOGGING_FILE here to specify the logging file path on Cloud Run.
--set-env-vars REDISHOST=$REDIS_HOST,REDISPORT=$REDIS_PORT
  • 생성된 서버리스 VPC 액세스 커넥터를 Redis 연결에 사용하는 경우
$ gcloud run deploy $INTERCEPTOR_SERVICE_NAME \
--image gcr.io/$GCP_PROJECT_ID/$INTERCEPTOR_IMAGE_NAME \
--platform managed \
--service-account=$INTERCEPTOR_SERVICE_ACCOUNT_NAME \
--region $SERVICE_REGION \
--vpc-connector $VPC_CONNECTOR_NAME \
--clear-network \
--ingress=internal \
--min-instances=1 \
# You can also add LOGGING_FILE here to specify the logging file path on Cloud Run.
--set-env-vars REDISHOST=$REDIS_HOST,REDISPORT=$REDIS_PORT

배포된 URL 저장

배포된 URL을 INTERCEPTOR_SERVICE_URL 환경 변수로 설정합니다.

Cloud Pub/Sub 구독 구성

Cloud Pub/Sub 구독은 다음을 사용합니다.

  • 주제
  • 대화 프로필
  • 서비스 계정
  • 인터셉터 서비스의 서비스 계정 권한

Cloud Pub/Sub 주제 만들기

Dialogflow에서 필요한 각 이벤트 알림에 대해 Cloud Pub/Sub 주제를 만듭니다. 사용 가능한 이벤트 알림 유형은 다음과 같습니다.

  • 새 추천 이벤트: 새로운 상담사 지원 제안이 제공될 때 전송되는 이벤트입니다 (예: 고객 발언에 대한 새로운 스마트 답장 제안).
  • 새 메시지 이벤트: 상담사 또는 고객으로부터 새로운 발화가 인식될 때마다 전송되는 이벤트입니다 (예: 고객이 Hi라고 말함).
  • 새 대화 수명 주기 이벤트: 특정 대화 수명 주기 변경사항 (예: 대화가 시작되거나 완료된 경우)에 대해 전송되는 이벤트입니다.
  • 새 인식 결과 알림 이벤트: 상담사 또는 고객으로부터 중간 스크립트가 인식될 때 전송되는 이벤트입니다 (예: 고객이 Hi, how can I help you?라고 말하면 고객이 말하는 동안 중간 스크립트는 Hi how can임).

나중에 백엔드를 배포할 수 있도록 주제 ID와 주제 이름을 기록해 둡니다.

대화 프로필 구성하기

이전 단계에서 만든 Cloud Pub/Sub 주제로 대화 프로필을 구성합니다.

  • 새 대화 프로필을 만들 때 Pub/Sub 알림을 선택한 다음 Pub/Sub 알림 사용 설정을 선택합니다. 사용 설정하면 사용 설정할 알림 유형 옆의 체크박스를 선택하고 알림과 연결된 Cloud Pub/Sub 주제의 주제 ID를 입력할 수 있습니다.
  • 각 주제의 메시지 형식으로 JSON을 선택합니다.

Pub/Sub 구독 ID의 서비스 계정 만들기

다음 명령어를 사용하여 Pub/Sub 구독 ID를 나타내는 서비스 계정을 만듭니다.

$ gcloud iam service-accounts create cloud-run-pubsub-invoker \
     --display-name "Cloud Run Pub/Sub Invoker"

서비스 계정에 인터셉터 서비스 호출 권한 부여

다음 명령어를 실행합니다.

$ gcloud run services add-iam-policy-binding $INTERCEPTOR_SERVICE_NAME \ 
  --member=serviceAccount:cloud-run-pubsub-invoker@$GCP_PROJECT_ID.iam.gserviceaccount.com \
   --role=roles/run.invoker

주제에 대한 Cloud Pub/Sub 구독 만들기

만든 각 주제에 대해 해당하는 Cloud Pub/Sub 구독을 만들어야 합니다.

새 추천 이벤트

your-new-suggestion-topic-id을 새 추천에 대해 구성한 Cloud Pub/Sub 주제로 바꿉니다.

$ export TOPIC_ID='your-new-suggestion-topic-id' && gcloud pubsub subscriptions create $SUBSCRIPTION_NAME --topic $TOPIC_ID \
   --push-endpoint=$INTERCEPTOR_SERVICE_URL/human-agent-assistant-event \
   --push-auth-service-account=cloud-run-pubsub-invoker@$GCP_PROJECT_ID.iam.gserviceaccount.com
새 메시지 이벤트

your-new-message-event-topic-id을 새 메시지 이벤트에 대해 구성한 Cloud Pub/Sub 주제로 바꿉니다.

$ export TOPIC_ID='your-new-message-event-topic-id' && gcloud pubsub subscriptions create $SUBSCRIPTION_NAME --topic $TOPIC_ID \
   --push-endpoint=$INTERCEPTOR_SERVICE_URL/new-message-event \
   --push-auth-service-account=cloud-run-pubsub-invoker@$GCP_PROJECT_ID.iam.gserviceaccount.com
대화 수명 주기 이벤트

your-conversation-lifecycle-event-topic을 새 대화 수명 주기 이벤트에 대해 구성한 Cloud Pub/Sub 주제로 바꿉니다.

$ export TOPIC_ID='your-conversation-lifecycle-event-topic' && gcloud pubsub subscriptions create $SUBSCRIPTION_NAME --topic $TOPIC_ID \
   --push-endpoint=$INTERCEPTOR_SERVICE_URL/conversation-lifecycle-event \
   --push-auth-service-account=cloud-run-pubsub-invoker@$GCP_PROJECT_ID.iam.gserviceaccount.com
새 인식 결과 알림 이벤트
$ export TOPIC_ID='your-new-recognition-result-notification-event-topic' && gcloud pubsub subscriptions create $SUBSCRIPTION_NAME --topic $TOPIC_ID \
   --push-endpoint=$INTERCEPTOR_SERVICE_URL/new-recognition-result-notification-event \
   --push-auth-service-account=cloud-run-pubsub-invoker@$GCP_PROJECT_ID.iam.gserviceaccount.com