Mengintegrasikan modul backend dengan sistem Anda

Modul backend menyediakan infrastruktur untuk memproses pesan terkait fitur dalam jumlah besar dan berinteraksi dengan UI desktop agen. Tutorial ini akan memandu Anda melalui proses mengintegrasikan modul backend dengan sistem agen.

Untuk mengetahui informasi selengkapnya tentang konsep dan struktur modul backend, lihat dokumentasi dasar-dasar modul backend.

Prasyarat

  1. Jika Anda belum mengonfigurasinya, instal Google Cloud CLI.
  2. Buat topik Cloud Pub/Sub untuk setiap jenis notifikasi peristiwa yang Anda butuhkan dari Dialogflow. Catat ID topik dan nama topik untuk deployment backend nanti.
  3. Konfigurasi profil percakapan Anda menggunakan konsol Agent Assist dengan topik Pub/Sub.

Deployment Otomatis

Deployment dapat diotomatiskan oleh Google Cloud skrip otomatisasi atau terraform.

Skrip Otomatisasi

Anda dapat memeriksa ./deploy.sh untuk mengetahui detail selengkapnya.

Menerapkan perubahan terraform

Anda dapat mengotomatiskan deployment dengan skrip otomatisasi gcloud CLI atau terraform. Sebelum menerapkan perubahan terraform, selesaikan langkah-langkah berikut.

  1. Berikan peran IAM berikut ke akun Anda:
    • 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. Bangun image untuk UI Connector dan untuk Cloud Pub/Sub Interceptor, lalu catat nama image.
    • Untuk UI Connector, jalankan perintah berikut di folder ./ui-connector.
      $ gcloud builds submit --tag gcr.io/$GCP_PROJECT_ID/aa-integration-backend/ui-connector
    • Untuk Cloud Pub/Sub Interceptor, jalankan perintah berikut di folder ./cloud-pubsub-interceptor.
      $ gcloud builds submit --tag gcr.io/$GCP_PROJECT_ID/aa-integration-backend/cloud-pubsub-interceptor
  3. Buat bucket Cloud Storage untuk menyimpan status terraform dan perbarui nilai bucket backend di /terraform/backend.tf menggunakan perintah berikut.
    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. Ekspor nilai variabel terraform yang diperlukan gcp_project_id, ui_connector_docker_image, dan cloud_pubsub_interceptor_docker_image. Contoh: export TF_VAR_gcp_project_id='you-gcp-project-id'. Atau, Anda dapat mengisi nilainya di /terraform/variables.tf secara langsung.
  5. Sesuaikan metode autentikasi dengan mengubah metode auth.check_auth() di /ui-connector/auth.py.

Jika Anda ingin mengotomatiskan langkah-langkah ini menggunakan Cloud Build, ikuti petunjuk ini dan gunakan file konfigurasi build ./terraform_cloudbuild.yaml. Agar Cloud Build dapat men-deploy layanan, Anda harus memberikan peran IAM yang tercantum di Langkah 1 kepada Akun Layanan Cloud Build.

Deployment manual

Langkah-langkah berikut menjelaskan cara men-deploy modul backend secara manual.

Menyiapkan variabel lingkungan

Untuk menyederhanakan perintah deployment, sebaiknya tetapkan variabel lingkungan berguna berikut di shell Anda. Anda dapat menetapkan variabel menggunakan contoh perintah berikut:

$ export GCP_PROJECT_ID='aa-integration-service'

Tetapkan variabel lingkungan berikut:

  • GCP_PROJECT_ID: Project ID project Cloud Platform Anda yang menghosting resource terkait. Contoh: my-project.
  • SERVICE_REGION: Lokasi atau region layanan dan resource Google Cloud terkait. Resource platform. Contoh: us-central1.

Menyiapkan akun administratif

Sebaiknya gunakan akun Google Cloud terpisah untuk administrasi layanan dan identitas runtime. Administrasi layanan terutama dilakukan oleh manusia dengan Akun Google, sementara pemberian identitas runtime memberikan izin layanan Cloud Run menggunakan akun layanan untuk mengaktifkan akses ke resource yang diperlukan.

Menyiapkan akun administratif manusia

Jika berencana menggunakan akun yang sudah memiliki izin Editor atau Pemilik di project Anda, Anda dapat langsung melanjutkan ke bagian berikutnya.

Untuk mengelola infrastruktur backend, buat akun administrator dan berikan peran Identity and Access Management (IAM) berikut kepadanya. Semua izinnya disertakan dalam peran dasar Editor dan Pemilik.

  • roles/secretmanager.admin (Admin Secret Manager): Mengelola secret yang disimpan di Secret Manager untuk pembuatan dan verifikasi JWT.
  • roles/run.admin (Admin Cloud Run): Men-deploy dan mengelola layanan Cloud Run.
  • roles/iam.serviceAccountUser (Pengguna Akun Layanan): Memberi akun layanan runtime Cloud Run izin iam.serviceAccounts.actAs.
  • roles/cloudbuild.builds.editor (Cloud Build Editor): Membangun image Docker untuk layanan integrasi menggunakan Cloud Build.
  • Administrator Artifact Registry: Menyimpan dan mengelola image Docker yang dibuat untuk layanan integrasi.
  • roles/pubsub.editor (Editor Cloud Pub/Sub): Membuat dan mengelola topik dan langganan Cloud Pub/Sub.
  • roles/redis.admin (Redis Admin): Membuat dan mengelola resource Memorystore for Redis.

Untuk memberikan peran IAM ke akun pengguna, gunakan perintah add-iam-policy-binding Google Cloud CLI. Berikut adalah contoh perintah:

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

Tetapkan akun administratif manusia di gcloud

Ganti $ADMIN_ACCOUNT dengan akun administrator yang ingin Anda gunakan (misalnya: myaccount@gmail.com) dalam contoh berikut:

$ gcloud config set account $ADMIN_ACCOUNT

Menyiapkan akun layanan

Secara default, layanan atau tugas Cloud Run dijalankan sebagai Akun layanan Compute Engine default. Daripada menggunakan akun layanan default, sebaiknya berikan identitas khusus pada setiap layanan Cloud Run dengan menetapkan akun layanan yang dikelola pengguna dengan kumpulan izin minimum yang diperlukan. Jika Anda berencana untuk mempertahankan akun layanan default, Anda dapat langsung menuju ke menetapkan variabel lingkungan.

Buat dua akun layanan untuk setiap runtime Cloud Run

  1. Untuk membuat akun layanan, ganti nilai $CONNECTOR_SERVICE_ACCOUNT_ID dan $INTERCEPTOR_SERVICE_ACCOUNT_ID jika ada, lalu jalankan perintah berikut:

    $ 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. Gunakan contoh perintah berikut untuk menetapkan peran berikut ke akun layanan konektor UI dan konektor Cloud Pub/Sub:

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

Berikan peran IAM berikut ke akun layanan konektor UI:

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

Berikan peran berikut ke akun layanan konektor Cloud Pub/Sub:

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

Menetapkan variabel lingkungan

Tetapkan nilai variabel lingkungan berikut menjadi akun layanan yang baru saja Anda buat atau akun layanan Compute Engine default di project Anda.

  1. CONNECTOR_SERVICE_ACCOUNT: Akun layanan untuk runtime konektor UI. Contoh: aa-ui-connector@my-project-id..
  2. INTERCEPTOR_SERVICE_ACCOUNT: Akun layanan untuk runtime Cloud Pub/Sub Interceptor. Contoh: aa-pubsub-interceptor@my-project-id..

Menyesuaikan metode autentikasi pengguna

Repositori kode mendukung pengguna backend dan pengguna modul frontend untuk Genesys Cloud dan Twilio.

  1. Dalam repositori kode, buka file ui_connector/auth.py.
  2. Tentukan penyedia identitas yang didukung dengan menetapkan variabel lingkungan AUTH_OPTION atau terapkan metode autentikasi Anda dengan auth.check_auth.

    Secara default, AUTH_OPTION kosong dan tidak ada pengguna yang diizinkan untuk mendaftarkan JWT dengan layanan UI Connector. Nilai yang didukung:

    • Salesforce: Verifikasi token autentikasi menggunakan Salesforce OpenID Connect. Variabel lingkungan yang diperlukan: SALESFORCE_ORGANIZATION_ID.
    • SalesforceLWC: Verifikasi token autentikasi Kredensial Klien OAuth Salesforce menggunakan endpoint REST oauth2/userinfo. Variabel lingkungan yang diperlukan: SALESFORCE_ORGANIZATION_ID, SALESFORCE_DOMAIN.
    • GenesysCloud: Verifikasi token autentikasi menggunakan Genesys SDK UsersAPI.
    • Twilio: Verifikasi token autentikasi untuk Twilio. Variabel lingkungan yang diperlukan: TWILIO_FLEX_ENVIRONMENT.
    • Skip: Lewati verifikasi token autentikasi. Fitur ini tidak boleh digunakan dalam produksi.

    Contoh:

    $ export AUTH_OPTION='Salesforce'

    Setiap jenis token mungkin memiliki cara validasi yang berbeda. Anda yang memutuskan cara token divalidasi. Tanpa perubahan apa pun, auth.check_auth akan menampilkan false untuk setiap permintaan.

Untuk membatasi asal yang dapat mengakses layanan Anda, ubah nilai variabel config.CORS_ALLOWED_ORIGINS. Nilai default * akan mengizinkan asal mana pun untuk mengunjungi layanan Anda.

Membuat dan menyimpan kunci rahasia JWT

Agar layanan konektor UI dapat mengirim token autentikasi yang aman kembali ke klien, layanan tersebut harus mengenkripsinya menggunakan kunci rahasia JWT. Nilai kunci dapat berupa string arbitrer apa pun, meskipun harus unik dan sulit ditebak.

Kunci rahasia ini akan disimpan di Secret Manager.

Menetapkan variabel lingkungan

  • JWT_SECRET_NAME: Nama untuk kunci rahasia di Secret Manager. Nama ini bisa berupa nama arbitrer apa pun. Nilai yang direkomendasikan: aa-integration-jwt-secret.

Buat kunci

Sebaiknya buat hash acak sebagai kunci rahasia JWT agar tidak dapat ditebak oleh penyerang. Untuk melakukannya, Anda dapat menggunakan python secrets untuk membuat angka acak yang aman untuknya.

# 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'

Simpan kunci di Secret Manager

Dalam perintah contoh berikut, ganti my_key dengan kunci rahasia yang akan Anda gunakan.

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

Menyiapkan Memorystore for Redis

Untuk menyiapkan Redis, Anda memerlukan variabel lingkungan berikut:

  • VPC_CONNECTOR_NAME: Nama konektor Akses VPC Serverless Anda untuk menghubungkan layanan Cloud Run ke Memorystore for Redis. Nilai yang direkomendasikan: aa-integration-vpc.
  • VPC_NETWORK: Jaringan VPC untuk melampirkan konektor Akses VPC Serverless Anda. Nilai harus default jika Anda tidak menyiapkan VPC untuk project Google Cloud .
  • VPC_SUBNET: Nama jaringan VPC resmi yang terhubung ke instance Redis Anda. Nilainya harus default jika Anda belum menyesuaikan setelan jaringan VPC.
  • REDIS_IP_RANGE: Jaringan IP internal yang tidak dicadangkan untuk konektor Akses VPC Serverless Anda. Diperlukan /28 ruang yang belum dialokasikan. Nilai yang direkomendasikan: 10.8.0.0/28 (nilai ini akan berfungsi untuk sebagian besar project baru).
  • REDIS_INSTANCE_ID: Nama untuk instance Redis Anda. Nilai yang direkomendasikan: aa-integration-redis.

Buat instance Redis di region layanan Cloud Run Anda

Jalankan perintah berikut:

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

Anda dapat terhubung ke instance Redis dari Cloud Run menggunakan Traffic Keluar Langsung atau Akses VPC Serverless.

Buat konektor Akses VPC Serverless {:#create-svpca-connector} (Opsional)

Opsi ini sekarang bersifat opsional jika pelanggan memilih Direct Egress. Jika memilih Akses VPC Tanpa Server, Anda harus membuat konektor Akses VPC Tanpa Server. Untuk mengetahui detail selengkapnya tentang langkah ini, lihat tutorial Cloud Run.

Pastikan API Akses VPC Serverless diaktifkan untuk project Anda:

$ gcloud services enable vpcaccess.googleapis.com

Buat konektor Akses VPC Serverless dengan rentang IP kustom:

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

Simpan host Redis dan port Redis sebagai variabel lingkungan

  • Tetapkan Alamat IP instance Redis Anda ke variabel lingkungan REDIS_HOST.
  • Tetapkan nomor port instance Redis Anda ke variabel lingkungan REDIS_PORT.

Men-deploy layanan konektor UI

Untuk layanan konektor UI, Anda memerlukan variabel lingkungan berikut:

  • CONNECTOR_SERVICE_NAME: Nama layanan Cloud Run untuk UI Connector Anda. Nilai yang direkomendasikan: ui-connector.
  • CONNECTOR_IMAGE_NAME: Nama image layanan UI Connector Anda. Link ini bisa sama dengan CONNECTOR_SERVICE_NAME. Nilai yang direkomendasikan: ui-connector.

Membangun gambar Docker

Di folder /ui-connector, jalankan perintah berikut:

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

Men-deploy konektor UI ke Cloud Run

Di folder /ui-connector, jalankan perintah berikut:

  • Jika menggunakan Direct Egress untuk terhubung ke koneksi 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
  • Jika menggunakan konektor Akses VPC Serverless yang dibuat untuk koneksi 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

Catat URL layanan untuk Konektor UI yang di-deploy, yang akan digunakan oleh klien (desktop agen).

Men-deploy layanan pencegat Cloud Pub/Sub

Untuk layanan interseptor Pub/Sub, Anda memerlukan variabel lingkungan berikut:

  • INTERCEPTOR_SERVICE_NAME: Nama layanan Cloud Run dari pencegat Cloud Pub/Sub Anda. Nilai yang direkomendasikan: cloud-pubsub-interceptor.
  • INTERCEPTOR_IMAGE_NAME: Nama image layanan pencegat Cloud Pub/Sub Anda. Link ini bisa sama dengan INTERCEPTOR_SERVICE_NAME. Nilai yang direkomendasikan: cloud-pubsub-interceptor.
  • INTERCEPTOR_SERVICE_ACCOUNT_NAME: Akun layanan untuk runtime interseptor Cloud Pub/Sub.

Membangun gambar Docker

Di folder /cloud-pubsub-interceptor, jalankan perintah berikut:

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

Men-deploy interseptor Pub/Sub ke Cloud Run

Di folder /cloud-pubsub-interceptor, jalankan perintah berikut:

  • Jika menggunakan Direct Egress untuk terhubung ke koneksi 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
  • Jika menggunakan konektor Akses VPC Serverless yang dibuat untuk koneksi 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

Simpan URL yang di-deploy

Tetapkan URL yang di-deploy sebagai variabel lingkungan INTERCEPTOR_SERVICE_URL.

Mengonfigurasi langganan Cloud Pub/Sub

Langganan Cloud Pub/Sub menggunakan hal berikut:

  • Topik
  • Profil percakapan
  • Akun layanan
  • Izin akun layanan untuk layanan interceptor

Buat topik Cloud Pub/Sub

Buat topik Cloud Pub/Sub untuk setiap jenis notifikasi peristiwa yang Anda butuhkan dari Dialogflow. Jenis notifikasi peristiwa yang tersedia adalah:

  • Peristiwa saran baru: Peristiwa yang dikirim saat saran Agent Assist baru tersedia (misalnya, saran Smart Reply baru sebagai respons terhadap ucapan pelanggan).
  • Peristiwa pesan baru: Peristiwa yang dikirim setiap kali ucapan baru dikenali dari agen atau pelanggan (misalnya, pelanggan mengatakan Hi).
  • Peristiwa siklus proses percakapan baru: Peristiwa yang dikirim untuk perubahan siklus proses percakapan tertentu (misalnya, saat percakapan dimulai, atau saat percakapan selesai).
  • Peristiwa notifikasi hasil pengenalan baru: Peristiwa yang dikirim saat transkrip sementara dikenali dari agen atau pelanggan (misalnya, pelanggan mengatakan Hi, how can I help you?, transkrip sementara adalah Hi how can saat pelanggan berbicara).

Catat ID topik dan nama topik untuk deployment backend nanti.

Mengonfigurasi profil percakapan

Konfigurasi profil percakapan dengan topik Cloud Pub/Sub yang Anda buat pada langkah sebelumnya.

  • Saat Anda membuat profil percakapan baru, pilih Notifikasi Pub/Sub, lalu Aktifkan notifikasi Pub/Sub. Setelah diaktifkan, Anda dapat mencentang kotak di samping jenis notifikasi yang ingin diaktifkan dan memasukkan ID topik untuk topik Cloud Pub/Sub terkait notifikasi.
  • Pilih JSON sebagai format pesan untuk setiap topik.

Buat akun layanan untuk identitas langganan Pub/Sub

Buat akun layanan yang merepresentasikan identitas langganan Pub/Sub menggunakan perintah berikut:

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

Beri akun layanan izin untuk memanggil layanan interceptor Anda

Jalankan perintah berikut:

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

Membuat langganan Cloud Pub/Sub untuk topik

Untuk setiap topik yang Anda buat, Anda harus membuat langganan Cloud Pub/Sub yang sesuai.

Peristiwa saran baru

Ganti your-new-suggestion-topic-id dengan topik Cloud Pub/Sub yang Anda konfigurasi untuk saran baru:

$ 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.
Peristiwa pesan baru

Ganti your-new-message-event-topic-id dengan topik Cloud Pub/Sub yang Anda konfigurasi untuk peristiwa pesan baru:

$ 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.
Peristiwa siklus proses percakapan

Ganti your-conversation-lifecycle-event-topic dengan topik Cloud Pub/Sub yang Anda konfigurasi untuk peristiwa siklus proses percakapan baru:

$ 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.
Peristiwa notifikasi hasil pengenalan baru
$ 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.