Este guia explica como configurar e usar uma conta de serviço para acessar a API Google Chat em nome de um app do Chat. Primeiro, ele mostra como criar uma conta de serviço. Em seguida, ele demonstra como escrever um script que usa a conta de serviço para autenticar com a API do Chat e postar uma mensagem em um espaço do Chat.
Quando autenticados com uma conta de serviço, para receber dados ou realizar ações em um espaço do Chat, os apps do Chat precisam ser participantes do espaço. Por exemplo, para listar os participantes de um espaço ou criar uma mensagem nele, o app Chat precisa ser um participante do espaço. A única exceção é quando um app do Chat cria um espaço com autenticação de app. Nesse caso, o app cria o espaço e se torna participante automaticamente.
Os métodos da API Google Chat que oferecem suporte à autorização de apps com escopos de autorização
que têm nomes que começam com https://www.googleapis.com/auth/chat.app.*
exigem
uma aprovação única do administrador.
Os métodos da API Google Chat que oferecem suporte à autorização de apps com o escopo de autorização https://www.googleapis.com/auth/chat.bot
não exigem aprovação adicional.
Se o app de chat precisar acessar dados do usuário ou realizar ações em nome dele, faça a autenticação como usuário em vez disso. Se você for administrador do domínio, poderá conceder a delegação de autoridade em todo o domínio para autorizar a conta de serviço de um app do Chat a acessar os dados dos usuários sem precisar pedir o consentimento de cada um deles. Para mais informações, consulte Autenticar e autorizar usando a delegação em todo o domínio.
Para saber quando os apps do Chat exigem autenticação e qual tipo usar, consulte Tipos de autenticação obrigatória na visão geral sobre autenticação e autorização da API Chat.
Pré-requisitos
Java
- JDK 1.7 ou mais recente
- A ferramenta de gerenciamento de pacotes Maven
-
Um projeto Maven inicializado. Para inicializar um novo projeto, execute o seguinte comando na interface de linha de comando:
mvn archetype:generate -DgroupId=com.google.chat.app.authsample -DartifactId=auth-sample-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
- Um app do Google Chat que recebe e responde a eventos de interação. Para criar um app interativo do Chat usando um serviço HTTP, conclua este guia de início rápido.
- Adicione o app do Chat a um espaço. Para adicionar o app Chat, consulte Testar recursos interativos para apps do Google Chat.
Python
- Python 3.6 ou mais recente
- A ferramenta de gerenciamento de pacotes pip
- Um app do Google Chat que recebe e responde a eventos de interação. Para criar um app interativo do Chat usando um serviço HTTP, conclua este guia de início rápido.
- Adicione o app do Chat a um espaço. Para adicionar o app Chat, consulte Testar recursos interativos para apps do Google Chat.
Node.js
- Node.js 14 ou mais recente
- A ferramenta de gerenciamento de pacotes npm
-
Um projeto Node.js inicializado. Para inicializar um novo projeto, crie e
mude para uma nova pasta. Em seguida, execute o seguinte comando na interface de linha de comando:
npm init
- Um app do Google Chat que recebe e responde a eventos de interação. Para criar um app interativo do Chat usando um serviço HTTP, conclua este guia de início rápido.
- Adicione o app do Chat a um espaço. Para adicionar o app Chat, consulte Testar recursos interativos para apps do Google Chat.
Apps Script
- Um app do Google Chat que recebe e responde a eventos de interação. Para criar um app do Chat interativo no Apps Script, conclua este guia de início rápido.
- Adicione o app do Chat a um espaço. Para adicionar o app Chat, consulte Testar recursos interativos para apps do Google Chat.
Etapa 1: criar uma conta de serviço no console do Google Cloud
Crie uma conta de serviço que seu app do Chat possa usar para acessar as APIs do Google.
Criar uma conta de serviço
Para criar uma conta de serviço, siga estas etapas:
Console do Google Cloud
- No console do Google Cloud, acesse Menu > IAM e administrador > Contas de serviço.
- Clique em Criar conta de serviço.
- Preencha os detalhes da conta de serviço e clique em Criar e continuar.
- Opcional: atribua papéis à sua conta de serviço para conceder acesso aos recursos do projeto do Google Cloud. Para mais detalhes, consulte Como conceder, alterar e revogar o acesso a recursos.
- Clique em Continuar.
- Opcional: insira usuários ou grupos que podem gerenciar e realizar ações com essa conta de serviço. Para mais detalhes, consulte Como gerenciar a representação da conta de serviço.
- Clique em Concluído. Anote o endereço de e-mail da conta de serviço.
CLI da gcloud
- Crie a conta de serviço:
gcloud iam service-accounts create
SERVICE_ACCOUNT_NAME
\ --display-name="SERVICE_ACCOUNT_NAME
" - Opcional: atribua papéis à sua conta de serviço para conceder acesso aos recursos do projeto do Google Cloud. Para mais detalhes, consulte Como conceder, alterar e revogar o acesso a recursos.
A conta de serviço aparece na página de contas de serviço. Em seguida, crie uma chave privada para a conta de serviço.
Criar uma chave privada
Para criar e fazer o download de uma chave privada para a conta de serviço, siga estas etapas:
- No console do Google Cloud, acesse Menu > IAM e administrador > Contas de serviço.
- Selecione sua conta de serviço.
- Clique em Chaves > Adicionar chave > Criar nova chave.
- Selecione JSON e clique em Criar.
Seu novo par de chave pública/privada é gerado e transferido por download para sua máquina como um novo arquivo. Salve o arquivo JSON baixado como
credentials.json
no seu diretório de trabalho. Esse arquivo é a única cópia da chave. Para saber como armazenar sua chave com segurança, consulte Como gerenciar chaves de contas de serviço. - Clique em Fechar.
Para mais informações sobre contas de serviço, consulte Contas de serviço na documentação do IAM do Google Cloud.
Em seguida, crie um cliente OAuth compatível com o Google Workspace Marketplace para essa conta de serviço.
Receber a aprovação do administrador
Para usar o escopo de autorização https://www.googleapis.com/auth/chat.bot
, não é necessária a aprovação do administrador. Acesse Etapa 2: instale a biblioteca de cliente do Google e outras dependências.
O exemplo neste guia usa o escopo de autorização https://www.googleapis.com/auth/chat.bot
. Se você estiver seguindo o exemplo, vá para a etapa 2.
Para usar um escopo de autorização que começa com
https://www.googleapis.com/auth/chat.app.*
, seu
app de chat precisa receber uma
aprovação única do administrador.
Para receber a aprovação do administrador, prepare a conta de serviço do seu app do Chat com as seguintes informações:
- Um cliente OAuth compatível com o Google Workspace Marketplace.
- Configuração do app no SDK do Google Workspace Marketplace.
Criar um cliente OAuth compatível com o Google Workspace Marketplace
Para criar um cliente OAuth compatível com o Google Workspace Marketplace, siga estas etapas:
No console do Google Cloud, acesse Menu > IAM e administrador > Contas de serviço.
Clique na conta de serviço que você criou para seu app do Chat.
Clique em Configurações avançadas.
Clique em Criar cliente OAuth compatível com o Google Workspace Marketplace.
Clique em Continuar.
Uma mensagem de confirmação aparece informando que um cliente OAuth compatível com o Google Workspace Marketplace foi criado.
Configurar o app de chat no SDK do Google Workspace Marketplace
Para configurar o app do Chat no SDK do Google Workspace Marketplace, siga estas etapas:
No console do Google Cloud, ative o SDK do Google Workspace Marketplace.
No console do Google Cloud, acesse Menu > APIs e serviços > APIs e serviços ativados > SDK do Google Workspace Marketplace > Configuração do app.
Preencha a página "Configuração do app". A configuração do app de chat depende do público-alvo e de outros fatores. Para ajuda ao preencher a página de configuração do app, consulte Configurar seu app no SDK do Google Workspace Marketplace. Para fins deste guia, insira as seguintes informações:
- Em Visibilidade do app, selecione Privado.
- Em Configurações de instalação, selecione Instalação individual + de administrador.
- Em Integrações de apps, selecione App de chat.
Em Escopos do OAuth, insira todos os escopos de autenticação usados pelo seu app do Chat.
Em Informações do desenvolvedor, insira seu Nome do desenvolvedor, URL do site do desenvolvedor e E-mail do desenvolvedor.
Clique em Salvar rascunho.
Receber aprovação do administrador
Agora que sua conta de serviço está configurada para receber aprovação do administrador, peça a um administrador do Google Workspace que possa conceder a aprovação seguindo as etapas em Configurar a autorização para apps do Chat.
Etapa 2: instalar a biblioteca de cliente do Google e outras dependências
Instale a biblioteca de cliente do Google e outras dependências necessárias para o projeto.
Java
Para adicionar as bibliotecas de cliente do Google e outras dependências necessárias ao seu
projeto Maven, edite o arquivo pom.xml
no diretório do projeto e adicione as
seguintes dependências:
<dependencies>
<!-- ... existing dependencies ... -->
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-chat</artifactId>
<version>v1-rev20230905-2.0.0</version>
</dependency>
<dependency>
<groupId>com.google.auth</groupId>
<artifactId>google-auth-library-oauth2-http</artifactId>
<version>1.19.0</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
</dependencies>
Python
Se você ainda não instalou as bibliotecas de cliente do Google para Python, execute o comando a seguir na interface de linha de comando:
pip3 install --upgrade google-api-python-client google-auth
Node.js
Para adicionar as bibliotecas de cliente do Google ao seu projeto Node.js, mude para o diretório do projeto e execute o seguinte comando na interface de linha de comando:
npm install "@googleapis/chat"
Apps Script
Este exemplo usa a biblioteca OAuth2 para Apps Script para gerar um token JWT para autenticação de conta de serviço. Para adicionar a biblioteca ao seu projeto do Apps Script:
- À esquerda, clique em Editor .
- À esquerda, ao lado de Bibliotecas, clique em Adicionar uma biblioteca .
- Insira o ID do script
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
. - Clique em Pesquisar e em Adicionar.
Este exemplo usa o Serviço avançado de chat para chamar a API Google Chat. Para ativar o serviço no seu projeto do Apps Script:
- À esquerda, clique em Editor .
- À esquerda, ao lado de Serviços, clique em Adicionar um serviço .
- Selecione API Google Chat.
- Em Versão, selecione v1.
- Clique em Adicionar.
Você pode usar qualquer linguagem compatível com nossas bibliotecas de cliente.
Etapa 3: escrever um script que usa a conta de serviço para autenticar com a API Chat
O código a seguir faz a autenticação com a API Chat usando uma conta de serviço e, em seguida, posta uma mensagem em um espaço do Chat:
Java
- No diretório do projeto, abra o arquivo
src/main/java/com/google/chat/app/authsample/App.java
. Substitua o conteúdo em
App.java
pelo seguinte código:package com.google.chat.app.authsample; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpRequestInitializer; import com.google.api.client.json.gson.GsonFactory; import com.google.api.services.chat.v1.HangoutsChat; import com.google.api.services.chat.v1.model.Message; import com.google.auth.http.HttpCredentialsAdapter; import com.google.auth.oauth2.GoogleCredentials; /** * Authenticates with Chat API using service account credentials, * then creates a Chat message. */ public class App { // Specify required scopes. private static final String CHAT_SCOPE = "https://www.googleapis.com/auth/chat.bot"; // Specify service account details. private static final String PRIVATE_KEY_RESOURCE_URI = "/credentials.json"; public static void main( String[] args ) { try { // Run app. Message response = App.createChatMessage(); // Print details about the created message. System.out.println(response); } catch (Exception e) { e.printStackTrace(); } } private static Message createChatMessage() throws Exception { // Build the Chat API client and authenticate with the service account. GoogleCredentials credentials = GoogleCredentials.fromStream( App.class.getResourceAsStream(PRIVATE_KEY_RESOURCE_URI)) .createScoped(CHAT_SCOPE); HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(credentials); HangoutsChat chatService = new HangoutsChat.Builder( GoogleNetHttpTransport.newTrustedTransport(), GsonFactory.getDefaultInstance(), requestInitializer) .setApplicationName("auth-sample-app") .build(); // The space to create the message in. // // Replace SPACE_NAME with a space name. // Obtain the space name from the spaces resource of Chat API, // or from a space's URL. String spaceName = "spaces/SPACE_NAME"; // Create a Chat message. Message message = new Message().setText("Hello, world!"); return chatService.spaces().messages().create(spaceName, message).execute(); } }
No código, substitua
SPACE_NAME
por um nome de espaço, que pode ser obtido com o métodospaces.list
da API Chat ou no URL de um espaço.Crie um subdiretório chamado
resources
no diretório do projeto.Verifique se o arquivo de chave privada da sua conta de serviço está nomeado como
credentials.json
e copie-o para o subdiretórioresources
.Para configurar o Maven para incluir o arquivo de chave privada no pacote do projeto, edite o arquivo
pom.xml
no diretório do projeto e adicione a seguinte configuração à seção<build>
:<build> <!-- ... existing configurations ... --> <resources> <resource> <directory>resources</directory> </resource> </resources> </build>
Para configurar o Maven para incluir as dependências no pacote do projeto e executar a classe principal do aplicativo, edite o arquivo
pom.xml
no diretório do projeto e adicione a seguinte configuração à seção<plugins>
:<plugins> <!-- ... existing configurations ... --> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.google.chat.app.authsample.App</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin> </plugins>
Python
- No diretório de trabalho, crie um arquivo chamado
chat_app_auth.py
. Inclua o seguinte código em
chat_app_auth.py
:from apiclient.discovery import build from google.oauth2 import service_account # Specify required scopes. SCOPES = ['https://www.googleapis.com/auth/chat.bot'] # Specify service account details. creds = service_account.Credentials.from_service_account_file( 'credentials.json', scopes=SCOPES) # Build the URI and authenticate with the service account. chat = build('chat', 'v1', credentials=creds) # Create a Chat message. result = chat.spaces().messages().create( # The space to create the message in. # # Replace SPACE_NAME with a space name. # Obtain the space name from the spaces resource of Chat API, # or from a space's URL. parent='spaces/SPACE_NAME', # The message to create. body={'text': 'Hello, world!'} ).execute() # Prints details about the created message. print(result)
No código, substitua
SPACE_NAME
por um nome de espaço, que pode ser obtido com o métodospaces.list
da API Chat ou no URL de um espaço. Verifique se o arquivo de chave privada da sua conta de serviço se chamacredentials.json
.
Node.js
- No diretório do projeto, crie um arquivo chamado
chat_app_auth.js
. Inclua o seguinte código em
chat_app_auth.js
:const chat = require('@googleapis/chat'); async function createMessage() { const auth = new chat.auth.GoogleAuth({ // Specify service account details. keyFilename: 'credentials.json', // Specify required scopes. scopes: ['https://www.googleapis.com/auth/chat.bot'] }); const authClient = await auth.getClient(); // Create the Chat API client and authenticate with the service account. const chatClient = await chat.chat({ version: 'v1', auth: authClient }); // Create a Chat message. const result = await chatClient.spaces.messages.create({ // The space to create the message in. // // Replace SPACE_NAME with a space name. // Obtain the space name from the spaces resource of Chat API, // or from a space's URL. parent: 'spaces/SPACE_NAME', // The message to create. requestBody: { 'text': 'Hello, world!' } }); return result; } // Execute function then print details about the created message. createMessage().then(console.log);
No código, substitua
SPACE_NAME
por um nome de espaço, que pode ser obtido com o métodospaces.list
da API Chat ou no URL de um espaço. Verifique se o arquivo de chave privada da sua conta de serviço se chamacredentials.json
.
Apps Script
No editor do Apps Script, edite o arquivo
appsscript.json
e adicione o escopo do OAuth necessário para fazer solicitações externas e receber o token OAuth da conta de serviço:"oauthScopes": [ "https://www.googleapis.com/auth/script.external_request" ]
Salve o código a seguir em um arquivo chamado
ChatAppAuth.gs
no projeto do Apps Script:// Specify the contents of the file credentials.json. const CREDENTIALS = CREDENTIALS; const SCOPE = 'https://www.googleapis.com/auth/chat.bot'; // The space to create the message in. // // Replace SPACE_NAME with a space name. // Obtain the space name from the spaces resource of Chat API, // or from a space's URL. const PARENT = 'spaces/SPACE_NAME' /** * Authenticates with Chat API using app credentials, then posts a message. */ function createMessageWithAppCredentials() { try { const service = getService_(); if (!service.hasAccess()) { console.error(service.getLastError()); return; } // Specify the message to create. const message = {'text': 'Hello world!'}; // Call Chat API with a service account to create a message. const result = Chat.Spaces.Messages.create( message, PARENT, {}, // Authenticate with the service account token. {'Authorization': 'Bearer ' + service.getAccessToken()}); // Log details about the created message. console.log(result); } catch (err) { // TODO (developer) - Handle exception. console.log('Failed to create message with error %s', err.message); } } /** * Configures the OAuth library to authenticate with the service account. */ function getService_() { return OAuth2.createService(CREDENTIALS.client_email) .setTokenUrl('https://oauth2.googleapis.com/token') .setPrivateKey(CREDENTIALS.private_key) .setIssuer(CREDENTIALS.client_email) .setSubject(CREDENTIALS.client_email) .setScope(SCOPE) .setPropertyStore(PropertiesService.getScriptProperties()); }
No código, substitua
CREDENTIALS
pelo conteúdo do arquivocredentials.json
.No código, substitua
SPACE_NAME
por um nome de espaço, que pode ser obtido com o métodospaces.list
da API Chat ou no URL de um espaço.
Etapa 4: executar o exemplo completo
No diretório de trabalho, crie e execute a amostra:
Java
mvn compile assembly:single
java -jar target/auth-sample-app-1.0-SNAPSHOT-jar-with-dependencies.jar
Python
python3 chat_app_auth.py
Node.js
node chat_app_auth.js
Apps Script
Abra o arquivo ChatAppAuth.gs
no editor do Apps Script e clique em Executar.
O script faz uma solicitação autenticada para a API Chat, que responde postando uma mensagem em um espaço do Chat como um app do Chat.
Resolver problemas do exemplo
Esta seção descreve problemas comuns que podem ocorrer ao tentar executar esta amostra.
Você não tem permissão para usar este app
Ao executar o script, talvez você receba um erro que diz:
<HttpError 403 when requesting https://chat.googleapis.com/v1/spaces/{space}/messages?alt=json returned "You are not permitted to use this app". Details: "You are not permitted to use this app">
Essa mensagem de erro significa que o app Chat não tem permissão para criar mensagens no espaço especificado.
Para resolver o erro, adicione o app do Chat ao espaço do Chat especificado no script.
O administrador precisa conceder ao app o escopo de autorização OAuth necessário para essa ação.
Ao executar o script, talvez você receba um erro que diz:
<HttpError 403 when requesting https://chat.googleapis.com/v1/spaces/{space}?alt=json returned "The administrator must grant the app the required OAuth authorization scope for this action.". Details: "The administrator must grant the app the required OAuth authorization scope for this action.">
Essa mensagem de erro significa que um administrador do Google Workspace ainda não concedeu aprovação única ao app Chat para usar escopos de autorização que começam com o nome https://www.googleapis.com/auth/chat.app.*
.
Para resolver o erro:
- Peça ao administrador do Google Workspace para
conceder aprovação ao seu app Chat.
Ao lidar com esse erro na lógica do app Chat,
considere enviar uma mensagem anunciando que
o app Chat precisa da aprovação do administrador para realizar
a ação solicitada, por exemplo:
To perform this action, I need approval. <https://support.google.com/a?p=chat-app-auth|Learn more>.
- Se o método da API Google Chat for compatível com o escopo de autorização
https://www.googleapis.com/auth/chat.bot
, que não exige aprovação do administrador, use-o. Para verificar quais escopos de autorização um método aceita, consulte a documentação de referência da API Google Chat.
Temas relacionados
- Saiba mais sobre o que a API Chat pode fazer consultando a documentação de referência.
- Se você estiver usando escopos de autorização do OAuth que começam com
https://www.googleapis.com/auth/chat.app.*
, saiba como os administradores concedem aprovação única.