Este guia explica como configurar e usar uma conta de serviço para acessar o API Google Chat em nome de um app do Chat. Primeiro, que vai mostrar como criar uma conta de serviço. Em seguida, ele demonstra como escrever um script que usa a conta de serviço para fazer a autenticação no Chat. e postar uma mensagem em um espaço do Chat.
Os apps do Chat podem usar contas de serviço para autenticação em chamadas assíncronas a API Google Chat para que possam:
- Enviar mensagens para o Google Chat com
spaces.messages.create
para:- Notifique os usuários quando um job em segundo plano de longa duração terminar.
- Alerte os usuários de que um servidor ficou off-line.
- Pedir a um representante de suporte ao cliente para atender a um caso recém-aberto.
- Atualizar mensagens enviadas anteriormente com
spaces.messages.update
para:- Alterar o status da operação em andamento.
- Atualizar o responsável ou a data de conclusão de uma tarefa.
- Listar os usuários em um espaço com
spaces.members.list
para:- Veja quem está em um espaço.
- Verifique se a participação no espaço inclui todos em uma equipe.
Quando autenticado 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. Por exemplo, para listar os participantes de um espaço ou criar uma mensagem em um espaço, o app do Chat precisa se tornar membro do espaço.
Se o app do Chat precisar acessar dados ou realizar ações no usuário autenticar como um usuário.
Se você for um administrador de domínio, poderá conceder delegação de autoridade em todo o domínio para autorizar a conta de serviço de um aplicativo a acessar os dados sem exigindo que cada usuário dê o consentimento. Depois de configurar a delegação em todo o domínio, é possível fazer chamadas de API usando sua conta de serviço para representar uma conta de usuário. Embora uma conta de serviço seja usada para autenticação, a delegação em todo o domínio falsifica a identidade de um usuário e, portanto, considerada a autenticação do usuário. Qualquer funcionalidade que exija que o usuário use a delegação em todo o domínio.
Para saber mais sobre quando os apps do Chat exigem autenticação e o tipo de autenticação a ser usado, consulte Tipos de autenticação obrigatória na visão geral de 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 no seu
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 com recursos interativos ativados. Para criar um interativo do Chat que usa um serviço HTTP, conclua este guia de início rápido.
- Adicione o app do Chat a um espaço. Para adicionar o Chat, consulte Teste os recursos interativos dos apps do Google Chat.
Python
- Python 3.6 ou superior
- a ferramenta de gerenciamento de pacotes PIP;
- Um app do Google Chat com recursos interativos ativados. Para criar um interativo do Chat que usa um serviço HTTP, conclua este guia de início rápido.
- Adicione o app do Chat a um espaço. Para adicionar o Chat, consulte Teste os recursos interativos dos apps do Google Chat.
Node.js
- Node.js 14 ou mais recente
- O npm ferramenta de gerenciamento de pacotes
-
Um projeto Node.js inicializado. Para inicializar um novo projeto, crie e
mude para uma nova pasta e execute o seguinte comando em sua interface de linha de comando:
npm init
- Um app do Google Chat com recursos interativos ativados. Para criar um interativo do Chat que usa um serviço HTTP, conclua este guia de início rápido.
- Adicione o app do Chat a um espaço. Para adicionar o Chat, consulte Teste os recursos interativos dos apps do Google Chat.
Apps Script
- Um app do Google Chat com recursos interativos ativados. Para criar um interativo com o app Chat no Apps Script, conclua este guia de início rápido.
- Adicione o app do Chat a um espaço. Para adicionar o Chat, consulte Teste os recursos interativos dos apps do Google Chat.
Etapa 1: criar uma conta de serviço no console do Google Cloud
Crie uma conta de serviço que possa ser usada pelo app do Chat 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 o 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 à 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 de uma 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 à 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.
Ela aparece na página da conta de serviço. Em seguida, crie um objeto 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 o 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 chaves públicas/privadas é gerado e transferido por download para seu máquina virtual como um novo arquivo. Salve o arquivo JSON baixado como
credentials.json
no de trabalho atual. Esse arquivo é a única cópia da chave. Para saber como armazenar a 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 Google Cloud IAM.
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 o
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 seguinte comando na sua 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, alterne para sua do projeto e execute o seguinte comando em sua interface de linha de comando:
npm install "@googleapis/chat"
Apps Script
Este exemplo usa o OAuth2 para a biblioteca do Apps Script para gerar um token JWT para a autenticação da 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 do Chat para chamar a API Google Chat. Para ativar o serviço para sua 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 idioma compatível com nossa bibliotecas de cliente.
Etapa 3: escrever um script que usa a conta de serviço para fazer a autenticação com a API Chat
O código a seguir faz a autenticação com a API Chat usando uma conta de serviço e posta uma mensagem em um espaço do Chat:
Java
- No diretório do seu 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 via 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 espaço. que você encontra nospaces.list
método na API Chat ou no URL de um espaço.Crie um novo subdiretório chamado
resources
no diretório do seu projeto.Verifique se o nome do arquivo da chave privada da conta de serviço
credentials.json
e o copie para o subdiretórioresources
.Para configurar o Maven para incluir o arquivo de chave privada no pacote do projeto, faça o seguinte: Edite o arquivo
pom.xml
no diretório do seu projeto e adicione o seguinte para a seção<build>
:<build> <!-- ... existing configurations ... --> <resources> <resource> <directory>resources</directory> </resource> </resources> </build>
Configurar o Maven para incluir as dependências no pacote do projeto e para executar a classe principal do seu aplicativo, edite o arquivo
pom.xml
na sua diretório do projeto e adicione a seguinte configuração ao 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. CREDENTIALS = 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=CREDENTIALS) # 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 espaço. que você encontra nospaces.list
método na API Chat ou no URL de um espaço. Certifique-se de que o o arquivo de chave privada da 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 espaço. que você encontra nospaces.list
método na API Chat ou no URL de um espaço. Certifique-se de que o o arquivo de chave privada da conta de serviço se chamacredentials.json
.
Apps Script
No editor do Apps Script, edite o arquivo
appsscript.json
. e adicionar o escopo do OAuth necessário para fazer solicitações externas a fim de obter o Token de OAuth da conta de serviço:"oauthScopes": [ "https://www.googleapis.com/auth/script.external_request" ]
Salve o seguinte código em um arquivo chamado
ChatAppAuth.gs
no seu 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 via 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 espaço. que você encontra nospaces.list
método na API Chat ou no URL de um espaço.
Etapa 4: executar o exemplo completo
No diretório de trabalho, crie e execute o exemplo:
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.
Seu script faz uma solicitação autenticada ao 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 você pode encontrar ao tentar para executar esta amostra.
Você não tem permissão para usar este app
Ao executar o script, você pode receber 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 do Chat não tem permissão para criar mensagens de chat no Espaço do Chat.
Para resolver o erro, adicione o app do Chat ao espaço do Chat especificado no script.
Temas relacionados
Analise a API Chat e saiba o que mais a API Chat pode fazer documentação de referência.