Este guia explica como usar o OAuth 2.0 com contas de usuário credenciais do Google para acesse API Chat. Como autenticar e autorizar com credenciais de usuário, permite que os apps do Chat acessem dados do usuário e realizem em nome do usuário autenticado. Ao fazer a autenticação no dispositivo nome, o app tem as mesmas permissões que o usuário e pode realizar ações como se ela fosse realizada por esse usuário.
Depois de autenticar e autorizar uma chamada de API com credenciais de usuário, os apps do Chat podem fazer o seguintes:
- Criar espaços do Chat.
- Adicione usuários a espaços e conversas em grupo do Chat.
- Trabalhe com dados do usuário em outras APIs do Workspace, como estas:
- Criar eventos no Google Agenda.
- Itens de registro no Planilhas Google.
- Enviar um e-mail com o Gmail.
Quando um app realiza uma ação com autenticação do usuário (como criar um espaço), o Google Chat vai mostrar uma mensagem de atribuição que informe aos usuários o nome do aplicativo que executou a ação para o usuário que o autorizou.
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.
Autenticar e autorizar usando a delegação em todo o domínio
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, as a conta de serviço pode 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.
Autenticar e autorizar usando privilégios de administrador
Se você é um administrador de domínio ou um administrador delegado com privilégios de administrador, pode autenticar e autorizar suas chamadas para a API Google Chat com privilégios de administrador definindo o campo use_admin_access
nas solicitações dos métodos aplicáveis. Para mais informações, consulte a documentação de referência da API.
Quando um app do Google Chat realiza uma ação com privilégios de administrador, o app não informa aos usuários o nome do app que realizou a ação nem o nome do administrador que a autorizou, mas apenas informa que a ação foi realizada pelo administrador da organização.
Pré-requisitos
Java
- Uma empresa Conta do Google Workspace com acesso a Google Chat.
- Crie um projeto do Google Cloud.
- Ative e configure a API Google Chat com um nome. o ícone e a descrição do app do Chat.
- 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
Python
- Uma empresa Conta do Google Workspace com acesso a Google Chat.
- Crie um projeto do Google Cloud.
- Ative e configure a API Google Chat com um nome. o ícone e a descrição do app do Chat.
- Python 3.6 ou superior
- a ferramenta de gerenciamento de pacotes PIP;
Node.js
- Uma empresa Conta do Google Workspace com acesso a Google Chat.
- Crie um projeto do Google Cloud.
- Ative e configure a API Google Chat com um nome. o ícone e a descrição do app do Chat.
- 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
Apps Script
- Uma empresa Conta do Google Workspace com acesso a Google Chat.
- Crie um projeto do Google Cloud.
- Ative e configure a API Google Chat com um nome. o ícone e a descrição do app do Chat.
- Crie um projeto independente do Apps Script, e ative o Serviço avançado de chat.
Etapa 1: configurar a tela de permissão OAuth, especificar escopos e registrar seu app
Quando você usa o OAuth 2.0 para autorização, o Google exibe uma tela de consentimento para o usuário, incluindo um resumo do seu projeto, as políticas dele e as solicitações escopos de autorização. Configurar a tela de permissão OAuth do app define o que o Google exibe para os usuários e revisores e registra seu app para que você possa publicá-lo depois.
Todos os aplicativos que usam o OAuth 2.0 exigem uma configuração de tela de consentimento, mas você só precisa listar os escopos dos apps usados por pessoas fora do Google Workspace. organização.
No console do Google Cloud, acesse o menu > APIs e Serviços > Tela de permissão OAuth.
Selecione o tipo de usuário para seu app e clique em Criar.
Preencha o formulário de registro do app e clique em Save and continue.
Clique em Adicionar ou remover escopos. Adicione e verifique escopos de autorização exigidos pelo app, clique em Atualizar e em Salvar e continuar.
Analise o resumo do registro do app. Clique em Editar para fazer alterações. Clique em Voltar ao painel.
Etapa 2: criar credenciais de ID do cliente OAuth no console do Google Cloud
Para autenticar como usuário final e acessar os dados do usuário no seu app, você precisa Criar um ou mais IDs do cliente OAuth 2.0. Um ID do cliente é usado para identificar um único app nos servidores OAuth do Google. Caso seu app seja executado em vários plataformas, como Android, iOS e Web, você precisa criar um ID do cliente separado para em cada plataforma.
.Criar credenciais de ID do cliente OAuth
Escolha seu tipo de aplicativo para conferir instruções específicas sobre como criar um ID do cliente OAuth:
Aplicativo da Web
- No console do Google Cloud, acesse Menu > APIs e Serviços > Credenciais.
- Clique em Criar credenciais > ID do cliente OAuth.
- Clique em Tipo de aplicativo > Aplicativo da Web.
- No campo Nome, digite um nome para a credencial. Esse nome só é mostrado no console do Google Cloud.
- Adicione URIs autorizados relacionados ao app:
- Apps do lado do cliente (JavaScript): em Origens JavaScript autorizadas, clique em Adicionar URI. Em seguida, insira um URI a ser usado para solicitações do navegador. Isso identifica os domínios dos quais seu aplicativo pode enviar solicitações de API para o servidor OAuth 2.0.
- Apps do lado do servidor (Java, Python e mais): em URIs de redirecionamento autorizados, clique em Adicionar URI. Em seguida, insira um URI de endpoint para o qual o servidor OAuth 2.0 pode enviar respostas.
- Clique em Criar. A tela criada pelo cliente OAuth será exibida, mostrando o novo ID e a chave secreta do cliente.
Anote o ID do cliente. As chaves secretas não são usadas para aplicativos da Web.
- Clique em OK. A credencial recém-criada aparece em IDs do cliente do OAuth 2.0.
Android
- No console do Google Cloud, acesse Menu > APIs e Serviços > Credenciais.
- Clique em Criar credenciais > ID do cliente OAuth.
- Clique em Tipo de aplicativo > Android.
- No campo "Nome", digite um nome para a credencial. Esse nome só é mostrado no console do Google Cloud.
- No campo "Package name" (Nome do pacote), digite o nome do pacote do arquivo
AndroidManifest.xml
. - Na "Impressão digital do certificado SHA-1" digite a impressão digital gerada pelo certificado SHA-1.
- Clique em Criar. A tela criada pelo cliente OAuth vai aparecer, mostrando o novo ID do cliente.
- Clique em OK. A credencial recém-criada aparece em "IDs do cliente OAuth 2.0".
iOS
- No console do Google Cloud, acesse Menu > APIs e Serviços > Credenciais.
- Clique em Criar credenciais > ID do cliente OAuth.
- Clique em Tipo de aplicativo > iOS.
- No campo "Nome", digite um nome para a credencial. Esse nome só é mostrado no console do Google Cloud.
- Em "ID do pacote" digite o identificador do pacote conforme listado no arquivo
Info.plist
do app. - Opcional: se o seu aplicativo aparecer na App Store da Apple, digite o ID da App Store.
- Opcional: em "ID da equipe" digite a string exclusiva de 10 caracteres, gerada pela Apple e atribuída à sua equipe.
- Clique em Criar. A tela criada pelo cliente OAuth será exibida, mostrando o novo ID e a chave secreta do cliente.
- Clique em OK. A credencial recém-criada aparece em "IDs do cliente OAuth 2.0".
App do Chrome
- No console do Google Cloud, acesse Menu > APIs e Serviços > Credenciais.
- Clique em Criar credenciais > ID do cliente OAuth.
- Clique em Tipo de aplicativo > App do Chrome.
- No campo "Nome", digite um nome para a credencial. Esse nome só é mostrado no console do Google Cloud.
- No campo "ID do aplicativo", digite a string de ID exclusiva de 32 caracteres do seu aplicativo. Você pode encontrar esse valor de ID no URL da Chrome Web Store do seu app e no Painel de controle do desenvolvedor da Chrome Web Store.
- Clique em Criar. A tela criada pelo cliente OAuth será exibida, mostrando o novo ID e a chave secreta do cliente.
- Clique em OK. A credencial recém-criada aparece em "IDs do cliente OAuth 2.0".
App para computador
- No console do Google Cloud, acesse Menu > APIs e Serviços > Credenciais.
- Clique em Criar credenciais > ID do cliente OAuth.
- Clique em Tipo de aplicativo > App para computador.
- No campo Nome, digite um nome para a credencial. Esse nome só é mostrado no console do Google Cloud.
- Clique em Criar. A tela criada pelo cliente OAuth será exibida, mostrando o novo ID e a chave secreta do cliente.
- Clique em OK. A credencial recém-criada aparece em IDs do cliente OAuth 2.0.
TVs e Dispositivos de entrada limitada
- No console do Google Cloud, acesse Menu > APIs e Serviços > Credenciais.
- Clique em Criar credenciais > ID do cliente OAuth.
- Clique em Tipo de aplicativo > TVs e Dispositivos de entrada limitada.
- No campo "Nome", digite um nome para a credencial. Esse nome só é mostrado no console do Google Cloud.
- Clique em Criar. A tela criada pelo cliente OAuth será exibida, mostrando o novo ID e a chave secreta do cliente.
- Clique em OK. A credencial recém-criada aparece em "IDs do cliente OAuth 2.0".
Plataforma Universal do Windows (UWP)
- No console do Google Cloud, acesse Menu > APIs e Serviços > Credenciais.
- Clique em Criar credenciais > ID do cliente OAuth.
- Clique em Tipo de aplicativo > Plataforma Universal do Windows (UWP).
- No campo "Nome", digite um nome para a credencial. Esse nome só é mostrado no console do Google Cloud.
- Em "ID da loja" , insira o valor exclusivo do ID da Microsoft Store de 12 caracteres para seu aplicativo. Encontre esse ID no URL da Microsoft Store do seu app e na Central de parceiros.
- Clique em Criar. A tela criada pelo cliente OAuth será exibida, mostrando o novo ID e a chave secreta do cliente.
- Clique em OK. A credencial recém-criada aparece em "IDs do cliente OAuth 2.0".
Baixe o arquivo JSON da chave secreta do cliente
O arquivo de chave secreta do cliente é uma representação JSON do ID do cliente OAuth credenciais que o app do Chat pode referenciar ao fornecendo credenciais.
No console do Google Cloud, acesse o menu > APIs e Serviços > Credenciais.
Em IDs do cliente OAuth 2.0, clique no ID do cliente que você criou.
Clique em Fazer o download do JSON.
Salve o arquivo como
client_secrets.json
.
Etapa 3: 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.oauth-client</groupId>
<artifactId>google-oauth-client-jetty</artifactId>
<version>1.34.1</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-oauthlib
Node.js
Para adicionar as bibliotecas de cliente do Google e outras dependências necessárias ao seu projeto Node.js, alterne para o diretório do seu projeto e execute o seguinte na interface de linha de comando:
npm install "@googleapis/chat" open server-destroy
Apps Script
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 4: escrever um script que chame a API Chat
Chamar uma API com autorização OAuth é um processo de várias etapas. Na Web ou desktop, o processo normalmente é o seguinte:
- O aplicativo direciona o usuário a uma página de autorização que solicita acesso ao usuário dados especificados por escopos de autorização. O app se identifica com o cliente Credenciais de ID.
- O usuário analisa as permissões solicitadas pelo aplicativo e aprova a solicitação.
- O servidor de autenticação do Google redireciona o navegador para o HTTP do aplicativo com um código de autorização.
- O aplicativo envia outra solicitação ao servidor de autorização do Google para trocar o código de autorização por um token de acesso.
- O aplicativo usa o token de acesso para chamar a API em nome do usuário.
Para saber mais sobre o processo de autorização OAuth, consulte Guia de uso do OAuth 2.0 para acessar as APIs do Google.
Os seguintes exemplos de código em Java, Python e Node.js usam uma Biblioteca de cliente para executar o fluxo de autorização OAuth. Ele abre um servidor HTTP local para recebe o código de autorização do servidor de autorização, que por um token de acesso. No exemplo de código do Apps Script, esse fluxo de autorização é gerenciados pelo Apps Script.
Depois de concluir o fluxo de autenticação, o script faz a autenticação com o API Chat com o token de acesso do usuário e depois cria um espaço.
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.auth.oauth2.Credential; import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp; import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.gson.GsonFactory; import com.google.api.client.util.store.FileDataStoreFactory; import com.google.api.services.chat.v1.HangoutsChat; import com.google.api.services.chat.v1.model.Space; import java.io.InputStreamReader; import java.util.Collection; import java.util.Collections; /** * Authenticates with Chat API via user credentials, then creates a Chat space. */ public class App { // Application OAuth credentials. private static final String KEYS_RESOURCE_URI = "/client_secrets.json"; // Define your app's authorization scopes. private static final Collection<String> SCOPES = Collections.singleton("https://www.googleapis.com/auth/chat.spaces.create"); // Directory to store user credentials. private static final java.io.File DATA_STORE_DIR = new java.io.File(System.getProperty("user.home"), ".store/auth-sample-app"); // Global instance of the JSON factory. private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance(); // Global instance of the HTTP transport. private static HttpTransport httpTransport; // Global instance of the DataStoreFactory. The best practice is to make it a single // globally shared instance across your application. private static FileDataStoreFactory dataStoreFactory; public static void main( String[] args ) { try { // Run app. httpTransport = GoogleNetHttpTransport.newTrustedTransport(); dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR); Credential userCredential = authorize(); Space response = App.createChatSpace(userCredential); // Print details about the created space. System.out.println(response); } catch (Exception e) { e.printStackTrace(); } } /** * Authorizes the installed application to access user's protected data. */ private static Credential authorize() throws Exception { // Load client secrets. GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(App.class.getResourceAsStream("/client_secrets.json"))); // Set up authorization code flow. GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder( httpTransport, JSON_FACTORY, clientSecrets, SCOPES) .setDataStoreFactory(dataStoreFactory) .build(); // Authorize. return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user"); } /** * Creates a Chat space. */ private static Space createChatSpace(Credential userCredential) throws Exception { // Build the Chat API client and authenticate with the user account. HangoutsChat chatService = new HangoutsChat.Builder( httpTransport, JSON_FACTORY, userCredential) .setApplicationName("auth-sample-app") .build(); // Create a Chat space. Space space = new Space() // To create a named space, set spaceType to SPACE. .setSpaceType("SPACE") // The user-visible name of the space. .setDisplayName("API-made"); return chatService.spaces().create(space).execute(); } }
Crie um novo subdiretório chamado
resources
no diretório do seu projeto.Copie o arquivo
client_secrets.json
para o subdiretórioresources
.Configure o Maven para incluir o arquivo de chaves secretas do cliente no pacote do projeto: 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
Salve o seguinte código em um arquivo chamado
chat_space_create_named.py
no mesmo diretório que contémclient_secrets.json
:from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build # Define your app's authorization scopes. # When modifying these scopes, delete the file token.json, if it exists. SCOPES = ["https://www.googleapis.com/auth/chat.spaces.create"] def main(): ''' Authenticates with Chat API via user credentials, then creates a Chat space. ''' flow = InstalledAppFlow.from_client_secrets_file( 'client_secrets.json', SCOPES) creds = flow.run_local_server() # Build a service endpoint for Chat API. service = build('chat', 'v1', credentials=creds) # Use the service endpoint to call Chat API. result = service.spaces().create( # Details about the space to create. body = { # To create a named space, set spaceType to SPACE. 'spaceType': 'SPACE', # The user-visible name of the space. 'displayName': 'API-made' } ).execute() # Prints details about the created space. print(result) if __name__ == '__main__': main()
Node.js
Salve o seguinte código em um arquivo chamado
chat_space_create_named.js
no mesmo diretório que contém o projeto Node.js eclient_secrets.json
:const fs = require('fs'); const path = require('path'); const http = require('http'); const url = require('url'); const destroyer = require('server-destroy'); const chat = require('@googleapis/chat'); // Application OAuth credentials. const keys = require('./client_secrets.json').installed; // Define your app's authorization scopes. // When modifying these scopes, delete the file token.json, if it exists. const scopes = ["https://www.googleapis.com/auth/chat.spaces.create"]; // Create a new OAuth2 client with the configured keys. const oauth2Client = new chat.auth.OAuth2( keys.client_id, keys.client_secret, 'http://localhost:3000' ); /** * Opens an HTTP server to accept the OAuth callback. * In this simple example, the only request to our webserver is to /?code=<code>. */ async function authenticate(scopes) { const opn = (await import('open')).default; return new Promise((resolve, reject) => { // Generate the URL for authorization. const authorizeUrl = oauth2Client.generateAuthUrl({ access_type: 'offline', scope: scopes.join(' '), }); // Start the HTTP server to listen for the callback. const server = http .createServer(async (req, res) => { try { const qs = new url.URL(req.url, 'http://localhost:3000').searchParams; res.end('Authentication successful! Please return to the console.'); server.destroy(); const { tokens } = await oauth2Client.getToken(qs.get('code')); oauth2Client.credentials = tokens; resolve(oauth2Client); } catch (e) { reject(e); } }) .listen(3000, () => { // Open the browser to the authorize URL to start the workflow. opn(authorizeUrl, { wait: false }).then(cp => cp.unref()); }); destroyer(server); }); } /** * Authenticates with Chat API via user credentials, then creates a Chat space. */ async function createSpace() { // Create the Chat API client and authenticate with the authorized user. const chatClient = await chat.chat({ version: 'v1', auth: oauth2Client }); // Call the Chat API to create a space. const result = await chatClient.spaces.create({ // Details about the space to create. requestBody: { // To create a named space, set spaceType to SPACE. 'spaceType': 'SPACE', // The user-visible name of the space. 'displayName': 'API-made' } }); return result; } // Authenticate the user, execute the function, // then print details about the created space. authenticate(scopes) .then(createSpace) .then(console.log);
Apps Script
No editor do Apps Script, edite o arquivo
appsscript.json
. e adicione o escopo do OAuth necessário para chamar a API:"oauthScopes": [ "https://www.googleapis.com/auth/chat.spaces.create" ]
Salve o seguinte código em um arquivo chamado
ChatSpaceCreateNamed.gs
no Projeto do Apps Script:/** * Authenticates with Chat API via user credentials, then creates a * Chat space. */ function createSpace() { try { // Details about the space to create. // To create a named space, set spaceType to SPACE. // The user-visible name of the space is displayName. const space = {'displayName': 'API-made', 'spaceType': 'SPACE'}; // Call Chat API with user credentials to create the space. const result = Chat.Spaces.create(space); // Log details about the created space. console.log(result); } catch (err) { // TODO (developer) - Handle exception console.log('Failed to create space with error %s', err.message); } }
Etapa 5: executar o script de exemplo
Para executar o exemplo, na linha de comando, navegue até o diretório que contém seus arquivos do projeto e execute o seguinte comando:
Java
mvn compile assembly:single
java -jar target/auth-sample-app-1.0-SNAPSHOT-jar-with-dependencies.jar
Python
python3 chat_space_create_named.py
Node.js
node chat_space_create_named.js
Apps Script
Abra o arquivo ChatSpaceCreateNamed.gs
no Apps Script.
Editor e clique em Executar.
Um navegador será aberto e vai solicitar que você faça login na sua Conta do Google:
Depois de fazer login, a tela de permissão OAuth vai aparecer e pedir que você conceda permissão ao app.
Depois que você concede permissão, o script chama o método
API Chat, que responde criando a
Espaço do Chat com o nome de exibição API-made
. O console imprime
da chamada de API. Para encontrar o espaço, acesse o painel Espaços em
Google Chat
Resolver problemas do exemplo
Ao executar chat_space_create_named.py
, é possível receber um erro que diz:
Expected a JSON object with a single property for a "web" or "installed" application
Essa mensagem de erro significa que o arquivo client_secrets.json
que você transferiu por download
no console do Google Cloud não começa com "web"
ou "installed"
.
. Depois de autenticar com o arquivo baixado, se o código não
salvar o token de acesso em um novo arquivo, como token.json
, o token de acesso será
gravado em client_secrets.json
, o que pode causar esse erro durante as
de tentativas de autorização.
Para resolver o erro, faça o download do arquivo de chave secreta do cliente no console do Google Cloud novamente e salve o novo arquivo no local do arquivo atual.
Temas relacionados
Se seu aplicativo precisa continuar usando os tokens de usuário fora do escopo de um único fluxo, ele pode armazenar os tokens para reutilizá-los depois. Nesse caso, seu aplicativo precisa lidar com tokens de usuário com segurança e com atualização revogação e expiração do token. Para mais informações, consulte Como usar o Guia de práticas recomendadas do OAuth 2.0.
Saiba o que mais a API Chat pode fazer analisando o Documentação de referência da API Chat.