Os módulos de back-end fornecem uma infraestrutura para processar grandes volumes de mensagens relacionadas a recursos e interagir com a interface do agente. Este tutorial orienta você no processo de integração de módulos de back-end com o sistema do agente.
Para mais informações sobre os conceitos e a estrutura dos módulos de back-end, consulte a documentação sobre os conceitos básicos dos módulos de back-end.
Pré-requisitos
- Instale a Google Cloud CLI, caso ainda não tenha feito isso.
- Crie um tópico do Cloud Pub/Sub para cada tipo de notificação de evento que você precisa do Dialogflow. Anote o ID e o nome do tópico para a implantação de back-end posterior.
- Configure o perfil de conversa usando o console do Agent Assist com tópicos do Pub/Sub.
Implantação automatizada
A implantação pode ser automatizada por um Google Cloud script de automação ou pelo Terraform.
Script de automação
Consulte ./deploy.sh para mais detalhes.
Aplicar mudanças do Terraform
É possível automatizar a implantação com um script de automação da CLI gcloud ou do Terraform. Antes de aplicar as mudanças do Terraform, conclua as etapas a seguir.
- Conceda os seguintes papéis do IAM à sua conta:
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)
- Crie imagens para o conector da interface e para o interceptor do Cloud Pub/Sub e anote o nome da imagem.
- Para o conector da interface, execute o comando a seguir na pasta
./ui-connector.$ gcloud builds submit --tag gcr.io/$GCP_PROJECT_ID/aa-integration-backend/ui-connector
- Para o interceptor do Cloud Pub/Sub, execute o comando a seguir na pasta
./cloud-pubsub-interceptor.$ gcloud builds submit --tag gcr.io/$GCP_PROJECT_ID/aa-integration-backend/cloud-pubsub-interceptor
- Para o conector da interface, execute o comando a seguir na pasta
- Crie um bucket do Cloud Storage para armazenar o estado do Terraform e atualize o valor do bucket de back-end em
/terraform/backend.tfusando o comando a seguir.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
- Exporte o valor das variáveis necessárias do Terraform
gcp_project_id,ui_connector_docker_imageecloud_pubsub_interceptor_docker_image. Exemplo: export TF_VAR_gcp_project_id='you-gcp-project-id'. Como alternativa, você pode preencher os valores diretamente em/terraform/variables.tf. - Personalize o método de autenticação modificando o método
auth.check_auth()em/ui-connector/auth.py.
Se você quiser automatizar essas etapas usando o Cloud Build, siga esta instrução e use o arquivo de configuração do build ./terraform_cloudbuild.yaml. Para permitir que o Cloud Build implante os serviços, conceda à conta de serviço do Cloud Build os papéis do IAM listados na etapa 1.
Implantação manual
As etapas a seguir explicam como implantar módulos de back-end manualmente.
Configurar variáveis de ambiente
Para simplificar os comandos de implantação, recomendamos que você defina as seguintes variáveis de ambiente úteis no shell. É possível definir as variáveis usando o seguinte comando de exemplo:
$ export GCP_PROJECT_ID='aa-integration-service'
Configure as variáveis de ambiente a seguir:
GCP_PROJECT_ID: o ID do projeto do Cloud Platform que hospeda recursos relacionados. Exemplo:my-project.SERVICE_REGION: o local ou a região dos serviços e dos recursos relacionados. Google Cloud Recursos da plataforma. Exemplo:us-central1.
Configurar uma conta administrativa
Recomendamos o uso de contas separadas para administração de serviços e identidade de ambiente de execução. Google Cloud A administração de serviços é realizada principalmente por pessoas com Contas do Google, enquanto a identidade de ambiente de execução concede permissões de serviços do Cloud Run usando contas de serviço para permitir o acesso aos recursos necessários.
Preparar a conta administrativa humana
Se você planeja usar uma conta que já tenha permissões de editor ou proprietário em seu projeto, pule para a próxima seção.
Para gerenciar a infraestrutura de back-end, estabeleça uma conta de administrador e conceda a ela os seguintes papéis do Identity and Access Management (IAM). As permissões estão incluídas nos papéis básicos de editor e proprietário.
roles/secretmanager.admin(Admin do Secret Manager): gerencie os secrets armazenados no Secret Manager para geração e verificação de JWT.roles/run.admin(Admin do Cloud Run): implante e gerencie serviços do Cloud Run.roles/iam.serviceAccountUser(Usuário da conta de serviço): conceda permissõesiam.serviceAccounts.actAsàs contas de serviço do ambiente de execução do Cloud Run.roles/cloudbuild.builds.editor(Editor do Cloud Build): crie imagens do Docker para os serviços de integração usando o Cloud Build.- Administrador do Artifact Registry: armazene e gerencie imagens do Docker criadas para os serviços de integração.
roles/pubsub.editor(Editor do Cloud Pub/Sub): crie e gerencie tópicos e assinaturas do Cloud Pub/Sub.roles/redis.admin(Admin do Redis): crie e gerencie recursos do Memorystore para Redis.
Para conceder papéis do IAM a uma conta humana, use o
add-iam-policy-binding
comando da Google Cloud CLI. Confira um exemplo de comando:
$ gcloud projects add-iam-policy-binding $GCP_PROJECT_ID \ --member='user:test-user@gmail.com' \ --role='roles/pubsub.editor'
Definir a conta administrativa humana na gcloud
Substitua $ADMIN_ACCOUNT pela conta de administrador que você quer usar (por exemplo, myaccount@gmail.com) no exemplo a seguir:
$ gcloud config set account $ADMIN_ACCOUNT
Configurar contas de serviço
Por padrão, os serviços ou jobs do Cloud Run são executados como a conta de serviço padrão do Compute Engine. Em vez de deixar o padrão, recomendamos dar a cada serviço do Cloud Run uma identidade dedicada, atribuindo a ele uma conta de serviço gerenciado pelo usuário com o conjunto mínimo de permissões necessárias. Se você planeja manter a conta de serviço padrão, pule para definir as variáveis de ambiente.
Criar duas contas de serviço para cada ambiente de execução do Cloud Run
Para criar as contas de serviço, substitua o valor de
$CONNECTOR_SERVICE_ACCOUNT_IDe$INTERCEPTOR_SERVICE_ACCOUNT_IDe execute os comandos a seguir:$ 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'
Use o comando de exemplo a seguir para atribuir os papéis a seguir às contas de serviço do conector da UI e do conector do 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'
Conceda os seguintes papéis do IAM à conta de serviço do conector da UI:
roles/redis.editorroles/vpcaccess.userroles/compute.viewerroles/secretmanager.secretAccessorroles/dialogflow.agentAssistClient
Conceda os seguintes papéis à conta de serviço do conector do Cloud Pub/Sub:
roles/redis.editorroles/vpcaccess.userroles/compute.viewer
Defina as variáveis de ambiente
Defina os valores das seguintes variáveis de ambiente como as contas de serviço que você acabou de criar ou a conta de serviço padrão do Compute Engine no seu projeto.
CONNECTOR_SERVICE_ACCOUNT: a conta de serviço do ambiente de execução do conector da UI. Exemplo:aa-ui-connector@my-project-id.iam.gserviceaccount.com.INTERCEPTOR_SERVICE_ACCOUNT: a conta de serviço do ambiente de execução do interceptor do Cloud Pub/Sub. Exemplo:aa-pubsub-interceptor@my-project-id.iam.gserviceaccount.com.
Personalizar o método de autenticação do usuário
O repositório de código oferece suporte a usuários de back-end e usuários do módulo de front-end para Genesys Cloud e Twilio.
- No repositório de código, abra o arquivo
ui_connector/auth.py. Especifique o provedor de identidade com suporte definindo a variável de ambiente
AUTH_OPTIONou implemente o método de autenticação comauth.check_auth.Por padrão,
AUTH_OPTIONestá vazio e nenhum usuário pode registrar o JWT com o serviço do conector da interface. Valores aceitos:Salesforce: verifique o token de autenticação usando o Salesforce OpenID Connect. Variável de ambiente necessária: SALESFORCE_ORGANIZATION_ID.SalesforceLWC: verifique um token de autenticação de credenciais do cliente OAuth do Salesforce usando o endpoint RESToauth2/userinfo. Variáveis de ambiente necessárias: SALESFORCE_ORGANIZATION_ID, SALESFORCE_DOMAIN.GenesysCloud: verifique o token de autenticação usando a UsersAPI do SDK do Genesys.Twilio: verifique o token de autenticação do Twilio. Variável de ambiente necessária: TWILIO_FLEX_ENVIRONMENT.Skip: pule a verificação do token de autenticação. Ele não pode ser usado na produção.
Exemplo:
$ export AUTH_OPTION='Salesforce'
Cada tipo de token pode ter um meio de validação diferente. Você decide como o token é validado. Sem nenhuma mudança,
auth.check_authretornafalsepara cada solicitação.
Personalizar origens permitidas (recomendado)
Para limitar as origens que podem acessar seu serviço, mude o valor da variável config.CORS_ALLOWED_ORIGINS. O valor padrão * permite que qualquer origem acesse seu serviço.
Gerar e armazenar uma chave secreta JWT
Para que o serviço do conector da UI envie tokens de autenticação seguros de volta ao cliente, ele precisa criptografá-los usando uma chave secreta JWT. O valor da chave pode ser qualquer string arbitrária, embora precise ser exclusivo e difícil de adivinhar.
Essa chave secreta será armazenada no Secret Manager.
Definir variável de ambiente
JWT_SECRET_NAME: o nome da chave secreta no Secret Manager. Pode ser qualquer nome arbitrário. Valor recomendado:aa-integration-jwt-secret.
Gerar a chave
Recomendamos gerar um hash aleatório como a chave secreta JWT para que ela não possa ser adivinhada por invasores. Para fazer isso, use secrets do Python para gerar números aleatórios seguros.
# 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'
Armazenar a chave no Secret Manager
No comando de exemplo a seguir, substitua my_key pela chave secreta que você planeja usar.
$ python generate_secret_key.py | gcloud secrets create $JWT_SECRET_NAME --data-file=- \ --replication-policy=user-managed --locations=$SERVICE_REGION
Configurar o Memorystore para Redis
Para configurar o Redis, você precisa das seguintes variáveis de ambiente:
VPC_CONNECTOR_NAME: o nome do seu conector de acesso VPC sem servidor para conectar serviços do Cloud Run ao Memorystore para Redis. Valor recomendado:aa-integration-vpc.VPC_NETWORK: a rede VPC a que o conector de acesso VPC sem servidor será anexado. O valor precisa serdefaultse você não configurar a VPC para o Google Cloud projeto.VPC_SUBNET: o nome da rede VPC autorizada a que a instância do Redis está anexada. O valor precisa serdefaultse você não tiver personalizado as configurações de rede VPC.REDIS_IP_RANGE: uma rede IP interna não reservada para o conector de acesso VPC sem servidor. É necessário um/28de espaço não alocado. Valor recomendado:10.8.0.0/28(esse valor funciona para a maioria dos novos projetos).REDIS_INSTANCE_ID: um nome para a instância do Redis. Valor recomendado:aa-integration-redis.
Criar uma instância do Redis na região dos serviços do Cloud Run
Execute este comando:
$ gcloud redis instances create $REDIS_INSTANCE_ID --size=5 --region=$SERVICE_REGION
É possível se conectar a uma instância do Redis a partir do Cloud Run usando o tráfego de saída direto ou o acesso VPC sem servidor.
Criar um conector de acesso VPC sem servidor {:#create-svpca-connector} (opcional)
Isso agora é opcional se os clientes escolherem o tráfego de saída direto. Se você escolher o acesso VPC sem servidor, será necessário criar um conector de acesso VPC sem servidor. Para mais detalhes sobre essa etapa, consulte o tutorial do Cloud Run.
Verifique se a API de acesso VPC sem servidor está ativada no seu projeto:
$ gcloud services enable vpcaccess.googleapis.com
Crie um conector de acesso VPC sem servidor com um intervalo de IP personalizado:
$ gcloud compute networks vpc-access connectors create $VPC_CONNECTOR_NAME \ --network $VPC_NETWORK \ --region $SERVICE_REGION \ --range $REDIS_IP_RANGE
Salvar o host e a porta do Redis como variáveis de ambiente
- Defina o endereço IP da instância do Redis como a variável de ambiente
REDIS_HOST. - Defina o número da porta da instância do Redis como a variável de ambiente
REDIS_PORT.
Implantar o serviço do conector da UI
Para o serviço do conector da UI, você precisa das seguintes variáveis de ambiente:
CONNECTOR_SERVICE_NAME: o nome do serviço do Cloud Run do conector da interface. Valor recomendado:ui-connector.CONNECTOR_IMAGE_NAME: o nome da imagem do serviço do conector da interface. Pode ser o mesmo queCONNECTOR_SERVICE_NAME. Valor recomendado:ui-connector.
Compilar a imagem Docker
Na pasta /ui-connector, execute o comando a seguir:
$ gcloud builds submit --tag gcr.io/$GCP_PROJECT_ID/$CONNECTOR_IMAGE_NAME
Implantar o conector da interface no Cloud Run
Na pasta /ui-connector folder,
execute o comando a seguir:
- Se você estiver usando o tráfego de saída direto para se conectar à conexão do 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
- Se você estiver usando um conector de acesso VPC sem servidor criado para a conexão do 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
Anote o URL do serviço para o conector da interface implantado, que será usado pelos clientes (interfaces do agente).
Implantar o serviço do interceptor do Cloud Pub/Sub
Para o serviço do interceptor do Pub/Sub, você precisa das seguintes variáveis de ambiente:
INTERCEPTOR_SERVICE_NAME: o nome do serviço do Cloud Run do interceptor do Cloud Pub/Sub. Valor recomendado:cloud-pubsub-interceptor.INTERCEPTOR_IMAGE_NAME: o nome da imagem do serviço do interceptor do Cloud Pub/Sub. Pode ser o mesmo queINTERCEPTOR_SERVICE_NAME. Valor recomendado:cloud-pubsub-interceptor.INTERCEPTOR_SERVICE_ACCOUNT_NAME: a conta de serviço do ambiente de execução do interceptor do Cloud Pub/Sub.
Compilar a imagem Docker
Na pasta /cloud-pubsub-interceptor, execute o comando a seguir:
$ gcloud builds submit --tag gcr.io/$GCP_PROJECT_ID/$INTERCEPTOR_IMAGE_NAME
Implantar o interceptor do Pub/Sub no Cloud Run
Na pasta /cloud-pubsub-interceptor, execute o comando a seguir:
- Se você estiver usando o tráfego de saída direto para se conectar à conexão do 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
- Se você estiver usando um conector de acesso VPC sem servidor criado para a conexão do 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
Salvar o URL implantado
Defina o URL implantado como a variável de ambiente INTERCEPTOR_SERVICE_URL.
Configurar assinaturas do Cloud Pub/Sub
As assinaturas do Cloud Pub/Sub usam o seguinte:
- Tópicos
- Perfil de conversa
- Conta de serviço
- Permissão da conta de serviço para o serviço de interceptor
Criar tópicos do Cloud Pub/Sub
Crie um tópico do Cloud Pub/Sub para cada tipo de notificação de evento que você precisa do Dialogflow. Os tipos de notificação de evento disponíveis são:
- Novos eventos de sugestão: eventos enviados quando novas sugestões do Agent Assist estão disponíveis (por exemplo, novas sugestões de Resposta Inteligente em resposta a uma declaração do cliente).
- Novos eventos de mensagem: eventos enviados sempre que uma nova declaração é reconhecida
de um agente ou cliente (por exemplo, o cliente diz
Hi). - Novos eventos de ciclo de vida de conversa: eventos enviados para determinadas mudanças no ciclo de vida da conversa (por exemplo, quando uma conversa é iniciada ou concluída).
- Novos eventos de notificação de resultado de reconhecimento: eventos enviados quando uma transcrição intermediária é
reconhecida de um agente ou cliente (por exemplo, o cliente diz
Hi, how can I help you?, uma transcrição intermediária éHi how canenquanto o cliente está falando).
Anote o ID e o nome do tópico para a implantação de back-end posterior.
Configurar um perfil de conversa
Configure um perfil de conversa com os tópicos do Cloud Pub/Sub que você criou na etapa anterior.
- Ao criar um novo perfil de conversa, selecione Notificações do Pub/Sub e Ativar notificações do Pub/Sub. Depois de ativado, você pode marcar as caixas ao lado dos tipos de notificações que quer ativar e inserir o ID do tópico associado do Cloud Pub/Sub.
- Selecione
JSONcomo o formato da mensagem para cada tópico.
Criar uma conta de serviço para a identidade da assinatura do Pub/Sub
Crie uma conta de serviço que represente a identidade da assinatura do Pub/Sub usando o comando a seguir:
$ gcloud iam service-accounts create cloud-run-pubsub-invoker \ --display-name "Cloud Run Pub/Sub Invoker"
Conceder permissão à conta de serviço para invocar o serviço de interceptor
Execute este comando:
$ 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
Criar assinaturas do Cloud Pub/Sub para tópicos
Para cada tópico criado, é necessário criar uma assinatura correspondente do Cloud Pub/Sub.
Novos eventos de sugestão
Substitua your-new-suggestion-topic-id pelo tópico do Cloud Pub/Sub configurado para novas sugestões:
$ 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
Novos eventos de mensagem
Substitua your-new-message-event-topic-id pelo tópico do Cloud Pub/Sub configurado para novos eventos de mensagem:
$ 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
Eventos de ciclo de vida de conversa
Substitua your-conversation-lifecycle-event-topic pelo tópico do Cloud Pub/Sub configurado para novos eventos de ciclo de vida de conversa:
$ 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
Novos eventos de notificação de resultado de reconhecimento
$ 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