Autentica come app Google Chat

Questa guida spiega come configurare e utilizzare un account di servizio per accedere a API Google Chat per conto di un'app di Chat. Per prima cosa, ti guiderà nella creazione di un account di servizio. Poi, mostra come per scrivere uno script che utilizzi l'account di servizio per l'autenticazione con Chat API e pubblicare un messaggio in uno spazio di Chat.

Le app di chat possono utilizzare gli account di servizio per eseguire l'autenticazione durante le chiamate in modo asincrono l'API Google Chat per poter:

  • Invia messaggi a Google Chat con spaces.messages.create a:
    • Invia una notifica agli utenti al termine dell'esecuzione di un job in background a lunga esecuzione.
    • Avvisa gli utenti che un server è offline.
    • Chiedi a un addetto dell'assistenza clienti di occuparsi di un caso cliente appena aperto.
  • Aggiorna i messaggi inviati in precedenza con spaces.messages.update a:
    • Modifica lo stato di durante l'operazione.
    • Aggiorna l'assegnatario o la data di scadenza di un'attività.
  • Elenca gli utenti in uno spazio con spaces.members.list per:
    • Scopri chi si trova in uno spazio.
    • Verifica che l'appartenenza allo spazio includa tutti i membri di un team.

Per ottenere dati o eseguire azioni dopo l'autenticazione con un account di servizio in uno spazio di Chat, le app di Chat devono disporre di membri per lo spazio. Ad esempio, per per elencare i membri di uno spazio o per creare un messaggio in uno spazio, l'app Chat deve essere membro dello spazio.

Se l'app di Chat deve accedere ai dati utente o eseguire azioni sulla di autenticazione, autenticarsi come utente.

Se sei un amministratore di dominio, puoi concedere delega dell'autorità a livello di dominio per autorizzare l'account di servizio di un'applicazione ad accedere ai tuoi utenti senza dati richiedere a ciascun utente di dare il proprio consenso. Dopo aver configurato la delega a livello di dominio, puoi effettuare chiamate API utilizzando il tuo account di servizio per impersonare un account utente. Anche se un account di servizio viene utilizzato autenticazione, la delega a livello di dominio simula un utente ed è pertanto considerata autenticazione dell'utente. Qualsiasi funzionalità che richiede all'utente autenticazione, puoi usare la delega a livello di dominio.

Per scoprire di più su quando le app di chat richiedono l'autenticazione e quale tipo di autenticazione usare, vedi Tipi di autenticazione richiesta nella panoramica dell'autenticazione e dell'autorizzazione dell'API Chat.

Prerequisiti

Java

  • JDK 1.7 o versioni successive
  • Lo strumento di gestione dei pacchetti Maven
  • Un progetto Maven inizializzato. Per inizializzare un nuovo progetto, esegui questo comando 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
    
  • Un'app di Google Chat abilitata per le funzionalità interattive. Per creare un un'app di chat interattiva utilizzando un servizio HTTP, completa questa guida rapida.
  • Aggiungi l'app Chat a uno spazio. Per aggiungere il parametro App Chat, vedi Prova le funzionalità interattive per le app Google Chat.

Python

  • Python 3.6 o versioni successive
  • Lo strumento di gestione dei pacchetti pip
  • Un'app di Google Chat abilitata per le funzionalità interattive. Per creare un un'app di chat interattiva utilizzando un servizio HTTP, completa questa guida rapida.
  • Aggiungi l'app Chat a uno spazio. Per aggiungere il parametro App Chat, vedi Prova le funzionalità interattive per le app Google Chat.

Node.js

  • Node.js 14 o versioni successive
  • npm strumento di gestione dei pacchetti
  • Un progetto Node.js inizializzato. Per inizializzare un nuovo progetto, crea e passa a una nuova cartella, quindi esegui il comando seguente nell'interfaccia a riga di comando:
    npm init
    
  • Un'app di Google Chat abilitata per le funzionalità interattive. Per creare un un'app di chat interattiva utilizzando un servizio HTTP, completa questa guida rapida.
  • Aggiungi l'app Chat a uno spazio. Per aggiungere il parametro App Chat, vedi Prova le funzionalità interattive per le app Google Chat.

Apps Script

Passaggio 1: crea un account di servizio nella console Google Cloud

Crea un account di servizio utilizzabile dall'app Chat accedere alle API di Google.

Crea un account di servizio

Per creare un account di servizio, segui questi passaggi:

Console Google Cloud

  1. Nella console Google Cloud, vai al Menu > IAM e Amministratore > Account di servizio.

    Vai a Service account

  2. Fai clic su Crea account di servizio.
  3. Inserisci i dettagli dell'account di servizio, quindi fai clic su Crea e continua.
  4. (Facoltativo) Assegna ruoli all'account di servizio per concedere l'accesso alle risorse del progetto Google Cloud. Per maggiori dettagli, consulta Concessione, modifica e revoca dell'accesso alle risorse.
  5. Fai clic su Continua.
  6. (Facoltativo) Inserisci gli utenti o i gruppi che possono gestire ed eseguire azioni con questo account di servizio. Per ulteriori dettagli, consulta Gestire il furto d'identità degli account di servizio.
  7. Fai clic su Fine. Prendi nota dell'indirizzo email dell'account di servizio.

Interfaccia a riga di comando gcloud

  1. Crea l'account di servizio:
    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
      --display-name="SERVICE_ACCOUNT_NAME"
  2. (Facoltativo) Assegna ruoli all'account di servizio per concedere l'accesso alle risorse del progetto Google Cloud. Per maggiori dettagli, consulta Concessione, modifica e revoca dell'accesso alle risorse.

L'account di servizio viene visualizzato nella pagina dell'account di servizio. Quindi, crea un chiave per l'account di servizio.

Crea una chiave privata

Per creare e scaricare una chiave privata per l'account di servizio, segui questi passaggi:

  1. Nella console Google Cloud, vai al Menu > IAM e Amministratore > Account di servizio.

    Vai a Service account

  2. Seleziona il tuo account di servizio.
  3. Fai clic su Chiavi > Aggiungi chiave > Crea nuova chiave.
  4. Seleziona JSON, quindi fai clic su Crea.

    La nuova coppia di chiavi pubblica/privata viene generata e scaricata sul come un nuovo file. Salva il file JSON scaricato come credentials.json nel nella directory di lavoro. Questo file è l'unica copia di questa chiave. Per informazioni su come archiviare la chiave in modo sicuro, vedi Gestione delle chiavi degli account di servizio.

  5. Fai clic su Chiudi.

Per ulteriori informazioni sugli account di servizio, vedi 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 ai tuoi 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 già 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 tuo progetto Node.js, passa a del progetto ed esegui questo comando nell'interfaccia a riga di comando:

npm install "@googleapis/chat"

Apps Script

Questo esempio utilizza OAuth2 per la libreria Apps Script per generare un token JWT per l'autenticazione dell'account di servizio. Per aggiungere la raccolta al tuo progetto Apps Script:

  1. A sinistra, fai clic su Editor .
  2. A sinistra, accanto a Librerie, fai clic su Aggiungi una biblioteca. .
  3. Inserisci l'ID script 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF.
  4. Fai clic su Cerca e poi su Aggiungi.

Questo esempio utilizza Servizio Chat avanzato per chiamare l'API Google Chat. Per attivare il servizio per il tuo Progetto Apps Script:

  1. A sinistra, fai clic su Editor .
  2. A sinistra, accanto a Servizi, fai clic su Aggiungi un servizio. .
  3. Seleziona API Google Chat.
  4. In Versione, seleziona v1.
  5. Fai clic su Aggiungi.

Puoi utilizzare qualsiasi lingua supportata dalle nostre librerie client.

Passaggio 3: scrivi uno script che utilizzi l'account di servizio per l'autenticazione con l'API Chat

Il seguente codice autentica con API Chat utilizzando un account di servizio, quindi pubblica un messaggio in uno spazio di Chat:

Java

  1. Nella directory del progetto, apri il file src/main/java/com/google/chat/app/authsample/App.java.
  2. 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();
        }
    }
    
  3. Nel codice, sostituisci SPACE_NAME con uno spazio reperibile in spaces.list, nell'API Chat o dall'URL di uno spazio.

  4. Crea una nuova sottodirectory denominata resources all'interno della directory del progetto.

  5. Assicurati che il nome del file della chiave privata per il tuo account di servizio credentials.json e copialo nella sottodirectory resources.

  6. Per configurare Maven in modo da includere il file di chiave privata nel pacchetto del progetto, modifica il file pom.xml nella directory del progetto e aggiungi quanto segue configurazione alla sezione <build>:

    <build>
      <!-- ... existing configurations ... -->
      <resources>
        <resource>
          <directory>resources</directory>
        </resource>
      </resources>
    </build>
    
  7. Per configurare Maven in modo da includere le dipendenze nel pacchetto di progetto e per eseguire la classe principale della tua applicazione, modifica il file pom.xml nel del progetto e aggiungi la seguente configurazione 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

  1. Nella directory di lavoro, crea un file denominato chat_app_auth.py.
  2. 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)
    
  3. Nel codice, sostituisci SPACE_NAME con uno spazio reperibile in spaces.list, nell'API Chat o dall'URL di uno spazio. Assicurati che il file della chiave privata per il tuo account di servizio è denominato credentials.json.

Node.js

  1. Nella directory del progetto, crea un file denominato chat_app_auth.js.
  2. 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);
    
  3. Nel codice, sostituisci SPACE_NAME con uno spazio reperibile in spaces.list, nell'API Chat o dall'URL di uno spazio. Assicurati che il file della chiave privata per il tuo account di servizio è denominato credentials.json.

Apps Script

  1. Nell'editor di Apps Script, modifica il file appsscript.json e aggiungere l'ambito OAuth necessario per effettuare richieste esterne al fine di ottenere token OAuth per l'account di servizio:

      "oauthScopes": [
        "https://www.googleapis.com/auth/script.external_request"
      ]
    
  2. Salva il seguente codice in un file denominato ChatAppAuth.gs in 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());
    }
    
  3. Nel codice, sostituisci CREDENTIALS con il contenuti del file credentials.json.

  4. Nel codice, sostituisci SPACE_NAME con uno spazio reperibile in spaces.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.

Il tuo script invia una richiesta autenticata al L'API Chat, che risponde pubblicando un messaggio in uno spazio di Chat come app di Chat.

Risolvi l'esempio

Questa sezione descrive i problemi comuni che potresti riscontrare durante il tentativo per eseguire questo esempio.

Non hai l'autorizzazione per utilizzare questa app

Quando esegui lo script, potresti ricevere il seguente errore:

<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 di per creare messaggi di Chat nell'ambito Spazio di Chat.

Per risolvere l'errore, aggiungi l'app Chat allo spazio di Chat specificato nello script.

Scopri cos'altro può fare l'API Chat esaminando l'API Chat documentazione di riferimento.