Questa guida spiega come configurare e utilizzare un account di servizio per accedere all'API Google Chat per conto di un'app Chat. Innanzitutto, illustra come creare un account di servizio. Quindi, dimostra come scrivere uno script che utilizzi l'account di servizio per l'autenticazione con l'API Chat e per pubblicare un messaggio in uno spazio di Chat.
Le app di chat possono utilizzare account di servizio per l'autenticazione quando chiamano l'API Google Chat in modo asincrono, in modo da poter:
- Invia messaggi a Google Chat con
spaces.messages.create
a:- Invia una notifica agli utenti quando termina l'esecuzione di un job in background a lunga esecuzione.
- Avvisa gli utenti che un server è offline.
- Chiedi a un addetto all'assistenza clienti di occuparsi di un caso di cliente appena aperto.
- Aggiorna i messaggi inviati in precedenza con
spaces.messages.update
per:- Modifica lo stato di su operazione in corso.
- Aggiorna l'assegnatario o la data di scadenza di un'attività.
- Elenca gli utenti in uno spazio con
spaces.members.list
per:- Vedere chi si trova in uno spazio.
- Verifica che l'iscrizione allo spazio includa tutti i membri del team.
Se autenticate con un account di servizio, per ottenere dati su uno spazio di Chat o eseguire azioni in uno spazio di Chat è necessario che le app di Chat siano membri dello spazio. Ad esempio, per elencare i membri di uno spazio o per creare un messaggio in uno spazio, l'app di chat deve essere membro dello spazio.
Se l'app di chat deve accedere ai dati utente o eseguire azioni per conto di un utente, esegui l'autenticazione come utente.
Se sei un amministratore di dominio, puoi concedere una delega dell'autorità a livello di dominio per autorizzare l'account di servizio di un'applicazione ad accedere ai dati degli utenti senza richiedere il consenso di ogni utente. Dopo aver configurato la delega a livello di dominio, puoi effettuare chiamate API utilizzando il tuo account di servizio per impersonare un account utente. Sebbene per l'autenticazione venga utilizzato un account di servizio, la delega a livello di dominio si spaccia per un utente e viene quindi considerata autenticazione dell'utente. Per tutte le funzionalità che richiedono l'autenticazione utente, puoi utilizzare la delega a livello di dominio.
Per scoprire di più su quando le app di Chat richiedono l'autenticazione e sul tipo di autenticazione da utilizzare, vedi Tipi di autenticazione richiesta nella panoramica dell'autenticazione e dell'autorizzazione dell'API Chat.
Prerequisiti
Per eseguire l'esempio in questa guida, sono necessari i seguenti prerequisiti:
- Un account Google Workspace con accesso a Google Chat .
- Un progetto Google Cloud con l'API Chat abilitata. Per creare un progetto e abilitare un'API, consulta Creare un progetto e abilitare l'API.
- Un'app di Chat pubblicata con iscrizione a uno spazio di Chat:
- Per creare e pubblicare un'app di chat, vedi Creare un'app di Google Chat con Cloud Functions.
- Per aggiungere un'app di Chat a uno spazio di Chat, vedi Aggiungere app agli spazi o alle conversazioni in Google Chat.
Inoltre, sono necessari i seguenti prerequisiti specifici per le lingue:
Java
- JDK 1.7 o versioni successive
- Lo strumento per la gestione dei pacchetti di Maven
Un progetto Maven inizializzato. Per inizializzare un nuovo progetto, esegui questo comando nell'interfaccia a riga di comando:
mvn archetype:generate -DgroupId=com.google.chat.app.authsample -DartifactId=auth-sample-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Python
- Python 3.6 o versioni successive
- Lo strumento per la gestione dei pacchetti pip
Node.js
Apps Script
- Un progetto Apps Script collegato al tuo progetto Google Cloud. Per inizializzare un progetto Apps Script, consulta la guida rapida dell'app Chat di Google Apps Script.
Passaggio 1: crea un account di servizio nella console Google Cloud
Creare un account di servizio che l'app di chat possa utilizzare per accedere alle API di Google.
Creare un account di servizio
Per creare un account di servizio:
Console Google Cloud
- Nella console Google Cloud, vai a Menu > IAM e amministrazione > Account di servizio.
- Fai clic su Crea account di servizio.
- Inserisci i dettagli dell'account di servizio, quindi fai clic su Crea e continua.
- (Facoltativo) Assegna ruoli all'account di servizio per concedere l'accesso alle risorse del tuo progetto Google Cloud. Per maggiori dettagli, vedi Concessione, modifica e revoca dell'accesso alle risorse.
- Fai clic su Continua.
- (Facoltativo) Inserisci gli utenti o i gruppi che possono gestire ed eseguire azioni con questo account di servizio. Per maggiori dettagli, consulta Gestire il furto d'identità degli account di servizio.
- Fai clic su Fine. Prendi nota dell'indirizzo email dell'account di servizio.
Interfaccia a riga di comando gcloud
- Crea l'account di servizio:
gcloud iam service-accounts create
SERVICE_ACCOUNT_NAME
\ --display-name="SERVICE_ACCOUNT_NAME
" - (Facoltativo) Assegna ruoli all'account di servizio per concedere l'accesso alle risorse del tuo progetto Google Cloud. Per maggiori dettagli, vedi Concessione, modifica e revoca dell'accesso alle risorse.
L'account di servizio viene visualizzato nella pagina dell'account di servizio. Quindi, crea una chiave privata per l'account di servizio.
Crea una chiave privata
Per creare e scaricare una chiave privata per l'account di servizio, segui questi passaggi:
- Nella console Google Cloud, vai a Menu > IAM e amministrazione > Account di servizio.
- Seleziona il tuo account di servizio.
- Fai clic su Chiavi > Aggiungi chiave > Crea nuova chiave.
- Seleziona JSON, quindi fai clic su Crea.
La nuova coppia di chiavi pubblica/privata viene generata e scaricata sul tuo computer come nuovo file. Salva il file JSON scaricato come
credentials.json
nella tua directory di lavoro. Questo file è l'unica copia di questa chiave. Per informazioni su come archiviare la chiave in modo sicuro, consulta Gestire le chiavi degli account di servizio. - Fai clic su Chiudi.
Per ulteriori informazioni sugli account di servizio, consulta la pagina relativa agli account di servizio nella documentazione di Google Cloud IAM.
Passaggio 2: installa la libreria client di Google e altre dipendenze
Installa la libreria client di Google e le altre dipendenze necessarie per il progetto.
Java
Per aggiungere le librerie client di Google e altre dipendenze necessarie al progetto Maven, modifica il file pom.xml
nella directory del progetto e aggiungi le seguenti dipendenze:
<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 non hai ancora installato le librerie client di Google per Python, esegui il seguente comando nell'interfaccia a riga di comando:
pip3 install --upgrade google-api-python-client google-auth
Node.js
Per aggiungere le librerie client di Google al progetto Node.js, passa alla directory del progetto ed esegui questo comando nell'interfaccia a riga di comando:
npm install "@googleapis/chat"
Apps Script
In questo esempio viene utilizzata la libreria OAuth2 per Apps Script per generare un token JWT per l'autenticazione degli account di servizio. Per aggiungere la libreria al tuo progetto Apps Script:
- A sinistra, fai clic su Editor .
- A sinistra, accanto a Librerie, fai clic su Aggiungi una libreria .
- Inserisci l'ID script
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
. - Fai clic su Cerca e poi su Aggiungi.
In questo esempio viene utilizzato il servizio Chat avanzato per chiamare l'API Google Chat. Per attivare il servizio per il tuo progetto Apps Script:
- A sinistra, fai clic su Editor .
- A sinistra, accanto a Servizi, fai clic su Aggiungi un servizio .
- Seleziona l'API Google Chat.
- In Versione, seleziona v1.
- Fai clic su Aggiungi.
Puoi utilizzare qualsiasi linguaggio supportato dalle nostre librerie client.
Passaggio 3: scrivi uno script che utilizzi l'account di servizio per l'autenticazione con l'API Chat
Il codice seguente viene autenticato con l'API Chat utilizzando un account di servizio, quindi pubblica un messaggio in uno spazio di Chat:
Java
- Nella directory del progetto, apri il file
src/main/java/com/google/chat/app/authsample/App.java
. Sostituisci i contenuti in
App.java
con il seguente codice: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(); } }
Nel codice, sostituisci
SPACE_NAME
con un nome spazio, che puoi ottenere dal metodospaces.list
nell'API Chat o dall'URL di uno spazio.Crea una nuova sottodirectory denominata
resources
nella directory del progetto.Assicurati che il file della chiave privata per il tuo account di servizio sia denominato
credentials.json
e copialo nella sottodirectoryresources
.Per configurare Maven in modo che includa il file della chiave privata nel pacchetto del progetto, modifica il file
pom.xml
nella directory del progetto e aggiungi la seguente configurazione alla sezione<build>
:<build> <!-- ... existing configurations ... --> <resources> <resource> <directory>resources</directory> </resource> </resources> </build>
Per configurare Maven in modo da includere le dipendenze nel pacchetto di progetto ed eseguire la classe principale dell'applicazione, modifica il file
pom.xml
nella directory del progetto e aggiungi la seguente configurazione alla sezione<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
- Nella directory di lavoro, crea un file denominato
chat_app_auth.py
. Includi il seguente codice in
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)
Nel codice, sostituisci
SPACE_NAME
con un nome spazio, che puoi ottenere dal metodospaces.list
nell'API Chat o dall'URL di uno spazio. Assicurati che il file della chiave privata del tuo account di servizio sia denominatocredentials.json
.
Node.js
- Nella directory del progetto, crea un file denominato
chat_app_auth.js
. Includi il seguente codice in
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);
Nel codice, sostituisci
SPACE_NAME
con un nome spazio, che puoi ottenere dal metodospaces.list
nell'API Chat o dall'URL di uno spazio. Assicurati che il file della chiave privata del tuo account di servizio sia denominatocredentials.json
.
Apps Script
Nell'editor di Apps Script, modifica il file
appsscript.json
e aggiungi l'ambito OAuth necessario per effettuare richieste esterne per ottenere il token OAuth dell'account di servizio:"oauthScopes": [ "https://www.googleapis.com/auth/script.external_request" ]
Salva il seguente codice in un file denominato
ChatAppAuth.gs
nel tuo progetto 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()); }
Nel codice, sostituisci
CREDENTIALS
con i contenuti del filecredentials.json
.Nel codice, sostituisci
SPACE_NAME
con un nome spazio, che puoi ottenere dal metodospaces.list
nell'API Chat o dall'URL di uno spazio.
Passaggio 4: esegui l'esempio completo
Nella directory di lavoro, crea ed esegui l'esempio:
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
Apri il file ChatAppAuth.gs
nell'editor di Apps Script e fai clic su Esegui.
Lo script invia una richiesta autenticata all'API Chat, che risponde pubblicando un messaggio in uno spazio di Chat come app di Chat.
Risolvere i problemi relativi all'esempio
Questa sezione descrive i problemi comuni che potresti riscontrare durante il tentativo di eseguire questo esempio.
Non disponi dell'autorizzazione per utilizzare questa app
Durante l'esecuzione dello script, potresti ricevere un errore che indica:
<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">
Questo messaggio di errore indica che l'app Chat non dispone dell'autorizzazione per creare messaggi di Chat nello spazio Chat specificato.
Per risolvere l'errore, aggiungi l'app di Chat allo spazio di Chat specificato nello script.
Argomenti correlati
Per scoprire cos'altro può fare l'API Chat, consulta la documentazione di riferimento dell'API Chat.