In diesem Leitfaden wird erläutert, wie Sie ein Dienstkonto für den Zugriff auf das Google Chat API im Namen einer Chat-App an. Erstens: wird Schritt für Schritt erklärt, wie Sie ein Dienstkonto erstellen. Dann wird demonstriert, Sie schreiben ein Skript, das sich mit dem Dienstkonto beim Chat authentifiziert. API verwenden und eine Nachricht in einem Chatbereich posten.
Chat-Apps können beim asynchronen Aufruf mithilfe von Dienstkonten authentifizieren Google Chat API, damit sie Folgendes tun können:
- Nachrichten an Google Chat senden mit
spaces.messages.create
in: <ph type="x-smartling-placeholder">- </ph>
- Benachrichtigen Sie Nutzer, wenn ein Hintergrundjob mit langer Ausführungszeit abgeschlossen ist.
- Benachrichtigen Sie Nutzer, dass ein Server offline ist.
- Bitten Sie einen Kundendienstmitarbeiter, sich um eine neu eröffnete Kundenanfrage zu kümmern.
- Zuvor gesendete Nachrichten aktualisieren mit
spaces.messages.update
in: <ph type="x-smartling-placeholder">- </ph>
- Ändere den Status von "Im laufenden Vorgang".
- Aktualisieren Sie die zuständige Person oder das Fälligkeitsdatum einer Aufgabe.
- Nutzer in einem Gruppenbereich auflisten mit
spaces.members.list
in: <ph type="x-smartling-placeholder">- </ph>
- Sehen, wer sich in einem Gruppenbereich befindet
- Prüfen Sie, ob alle Teammitglieder in einem Gruppenbereich Mitglied sind.
Bei Authentifizierung mit einem Dienstkonto, um Daten zu erhalten oder Aktionen auszuführen in einem Chatbereich müssen Chat-Apps eine Mitgliedschaft im Gruppenbereich haben. Wenn Sie beispielsweise Mitglieder eines Gruppenbereichs auflisten oder eine Nachricht in einem Gruppenbereich erstellen möchten, muss die Chat App Mitglied des Gruppenbereichs sein.
Wenn die Chat-App auf Nutzerdaten zugreifen oder Aktionen für Nutzerdaten ausführen muss, als Nutzer authentifizieren.
Als Domainadministrator können Sie domainweite Delegierung von Befugnissen um das Dienstkonto einer Anwendung für den Zugriff auf die ohne Jeder Nutzer muss seine Einwilligung geben. Nachdem Sie die domainweite Delegierung konfiguriert haben, können Sie API-Aufrufe mit Ihrem Dienstkonto ausführen, um die Identität eines Nutzerkontos zu übernehmen Ein Dienstkonto wird zwar für gibt die domainweite Delegierung die Identität eines Nutzers an und ist daher Nutzerauthentifizierung. Alle Funktionen, die Nutzer können Sie die domainweite Delegierung verwenden.
Weitere Informationen dazu, wann Chat-Apps eine Authentifizierung erfordern und welche Art von Authentifizierung verwendet werden soll, Arten der erforderlichen Authentifizierung .
Vorbereitung
Java
- JDK 1.7 oder höher
- Das Maven-Paketverwaltungstool
-
Ein initialisiertes Maven-Projekt. Um ein neues Projekt zu initialisieren, führen Sie den folgenden Befehl in Ihrem
Befehlszeile:
mvn archetype:generate -DgroupId=com.google.chat.app.authsample -DartifactId=auth-sample-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
- Eine Google Chat App mit aktivierten interaktiven Funktionen. So erstellen Sie ein Chat-App mit einem HTTP-Dienst verwenden können, führen Sie diese Kurzanleitung aus.
- Fügen Sie die Chat App einem Gruppenbereich hinzu. So fügen Sie den Chat-App, siehe Interaktive Funktionen für Google Chat-Apps testen
Python
- Python 3.6 oder höher
- Paketverwaltungstool pip
- Eine Google Chat App mit aktivierten interaktiven Funktionen. So erstellen Sie ein Chat-App mit einem HTTP-Dienst verwenden können, führen Sie diese Kurzanleitung aus.
- Fügen Sie die Chat App einem Gruppenbereich hinzu. So fügen Sie den Chat-App, siehe Interaktive Funktionen für Google Chat-Apps testen
Node.js
- Node.js 14 oder höher
- Der Parameter npm Paketverwaltungstool
-
Ein initialisiertes Node.js-Projekt. Um ein neues Projekt zu initialisieren, erstellen Sie
wechseln Sie in einen neuen Ordner und führen Sie dann in der Befehlszeile den folgenden Befehl aus:
npm init
- Eine Google Chat App mit aktivierten interaktiven Funktionen. So erstellen Sie ein Chat-App mit einem HTTP-Dienst verwenden können, führen Sie diese Kurzanleitung aus.
- Fügen Sie die Chat App einem Gruppenbereich hinzu. So fügen Sie den Chat-App, siehe Interaktive Funktionen für Google Chat-Apps testen
Apps Script
- Eine Google Chat App mit aktivierten interaktiven Funktionen. So erstellen Sie ein interaktive Chat-App in Apps Script verwenden möchten, führen Sie diese Kurzanleitung aus.
- Fügen Sie die Chat App einem Gruppenbereich hinzu. So fügen Sie den Chat-App, siehe Interaktive Funktionen für Google Chat-Apps testen
Schritt 1: Dienstkonto in der Google Cloud Console erstellen
Dienstkonto für die Chat-App erstellen auf Google APIs zugreifen können.
Dienstkonto erstellen
So erstellen Sie ein Dienstkonto:
Google Cloud Console
- Öffnen Sie in der Google Cloud Console das Menü > IAM und Verwaltung > Dienstkonten. .
- Klicken Sie auf Dienstkonto erstellen.
- Geben Sie die Dienstkontodetails ein und klicken Sie dann auf Erstellen und fortfahren.
- Optional: Weisen Sie Ihrem Dienstkonto Rollen zu, um Zugriff auf die Ressourcen Ihres Google Cloud-Projekts zu gewähren. Weitere Informationen finden Sie unter Zugriff auf Ressourcen erteilen, ändern und entziehen.
- Klicken Sie auf Weiter.
- Optional: Geben Sie Nutzer oder Gruppen ein, die Aktionen mit diesem Dienstkonto verwalten und ausführen können. Weitere Informationen finden Sie unter Identitätswechsel für Dienstkonten verwalten.
- Klicken Sie auf Fertig. Notieren Sie sich die E-Mail-Adresse für das Dienstkonto.
gcloud-CLI
- Erstellen Sie das Dienstkonto:
gcloud iam service-accounts create
SERVICE_ACCOUNT_NAME
\ --display-name="SERVICE_ACCOUNT_NAME
" - Optional: Weisen Sie Ihrem Dienstkonto Rollen zu, um Zugriff auf die Ressourcen Ihres Google Cloud-Projekts zu gewähren. Weitere Informationen finden Sie unter Zugriff auf Ressourcen erteilen, ändern und entziehen.
Das Dienstkonto wird auf der Dienstkontoseite angezeigt. Erstellen Sie als Nächstes eine private Schlüssel für das Dienstkonto.
Privaten Schlüssel erstellen
So erstellen und laden Sie einen privaten Schlüssel für das Dienstkonto herunter:
- Öffnen Sie in der Google Cloud Console das Menü > IAM und Verwaltung > Dienstkonten. .
- Wählen Sie Ihr Dienstkonto aus.
- Klicken Sie auf Schlüssel > Schlüssel hinzufügen > Neuen Schlüssel erstellen.
- Wählen Sie JSON aus und klicken Sie dann auf Erstellen.
Ihr neues öffentliches/privates Schlüsselpaar wird generiert und auf Ihr als neue Datei gespeichert. Speichern Sie die heruntergeladene JSON-Datei als
credentials.json
in Ihrem Arbeitsverzeichnis. Diese Datei ist die einzige Kopie dieses Schlüssels. Informationen zum Speichern um Ihren Schlüssel sicher aufzubewahren, finden Sie unter Dienstkontoschlüssel verwalten - Klicken Sie auf Schließen.
Weitere Informationen zu Dienstkonten finden Sie unter Dienstkonten in der Google Cloud IAM-Dokumentation.
Schritt 2: Google-Clientbibliothek und andere Abhängigkeiten installieren
Installieren Sie die Google-Clientbibliothek und andere Abhängigkeiten, die für das Projekt erforderlich sind.
Java
So fügen Sie die Google-Clientbibliotheken und andere erforderliche Abhängigkeiten
Maven-Projekt zu erstellen, bearbeiten Sie die Datei pom.xml
im Verzeichnis Ihres Projekts und fügen Sie den
folgenden Abhängigkeiten:
<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
Wenn Sie die Google-Clientbibliotheken für Python noch nicht installiert haben, führen Sie den folgenden Befehl aus: den folgenden Befehl in der Befehlszeile ein:
pip3 install --upgrade google-api-python-client google-auth
Node.js
Um Ihrem Node.js-Projekt die Google-Clientbibliotheken hinzuzufügen, wechseln Sie zu Ihrem Projektverzeichnis und führen Sie den folgenden Befehl in der Befehlszeile aus:
npm install "@googleapis/chat"
Apps Script
In diesem Beispiel wird die Methode OAuth2 for Apps Script-Bibliothek um ein JWT-Token für die Dienstkontoauthentifizierung zu generieren. Bibliothek hinzufügen Ihrem Apps Script-Projekt hinzu:
- Klicken Sie links auf Editor .
- Klicken Sie links neben Bibliotheken auf Bibliothek hinzufügen.
- Geben Sie die Skript-ID
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
ein. - Klicken Sie auf Suchen und dann auf Hinzufügen.
In diesem Beispiel wird die Methode Erweiterter Chat-Dienst um die Google Chat API aufzurufen. So aktivieren Sie den Dienst für Ihr Apps Script-Projekt:
- Klicken Sie links auf Editor .
- Klicken Sie links neben Dienste auf Dienst hinzufügen.
- Wählen Sie Google Chat API aus.
- Wählen Sie unter Version die Option v1 aus.
- Klicken Sie auf Hinzufügen.
Sie können jede Sprache verwenden, die von unserem Clientbibliotheken.
Schritt 3: Skript schreiben, das das Dienstkonto zur Authentifizierung bei der Chat API verwendet
Mit dem folgenden Code wird die Authentifizierung beim Chat API mit einem Dienstkonto, dann eine Nachricht in einem Chatbereich postet:
Java
- Öffnen Sie die Datei im Verzeichnis Ihres Projekts.
src/main/java/com/google/chat/app/authsample/App.java
Ersetzen Sie den Inhalt in
App.java
durch den folgenden Code: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(); } }
Ersetzen Sie
SPACE_NAME
im Code durch ein Leerzeichen. Diesen Namen finden Sie in derspaces.list
. in der Chat API oder über die URL eines Gruppenbereichs.Erstellen Sie im Verzeichnis Ihres Projekts ein neues Unterverzeichnis mit dem Namen
resources
.Die Datei mit dem privaten Schlüssel für Ihr Dienstkonto muss den Namen
credentials.json
und kopieren Sie sie in das Unterverzeichnisresources
.So konfigurieren Sie Maven, damit die Datei mit dem privaten Schlüssel in das Projektpaket aufgenommen wird: Bearbeiten Sie die Datei
pom.xml
im Verzeichnis Ihres Projekts und fügen Sie Folgendes hinzu: Konfiguration im Abschnitt<build>
:<build> <!-- ... existing configurations ... --> <resources> <resource> <directory>resources</directory> </resource> </resources> </build>
Um Maven so zu konfigurieren, dass die Abhängigkeiten in das Projektpaket aufgenommen werden, und Um die Hauptklasse Ihrer Anwendung auszuführen, bearbeiten Sie die Datei
pom.xml
in Ihrem des Projekts und fügen Sie die folgende Konfiguration zum Abschnitt<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
- Erstellen Sie in Ihrem Arbeitsverzeichnis eine Datei mit dem Namen
chat_app_auth.py
. Fügen Sie den folgenden Code in
chat_app_auth.py
ein: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)
Ersetzen Sie
SPACE_NAME
im Code durch ein Leerzeichen. Diesen Namen finden Sie in derspaces.list
. in der Chat API oder über die URL eines Gruppenbereichs. Achten Sie darauf, dass der die private Schlüsseldatei für Ihr Dienstkonto hat den Namencredentials.json
.
Node.js
- Erstellen Sie im Verzeichnis Ihres Projekts eine Datei mit dem Namen
chat_app_auth.js
. Fügen Sie den folgenden Code in
chat_app_auth.js
ein: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);
Ersetzen Sie
SPACE_NAME
im Code durch ein Leerzeichen. Diesen Namen finden Sie in derspaces.list
. in der Chat API oder über die URL eines Gruppenbereichs. Achten Sie darauf, dass der die private Schlüsseldatei für Ihr Dienstkonto hat den Namencredentials.json
.
Apps Script
Bearbeiten Sie die Datei „
appsscript.json
“ im Apps Script-Editor und fügen Sie den OAuth-Bereich hinzu, der für externe Anfragen zum Abrufen des OAuth-Token des Dienstkontos:"oauthScopes": [ "https://www.googleapis.com/auth/script.external_request" ]
Speichern Sie den folgenden Code in einer Datei mit dem Namen
ChatAppAuth.gs
in Ihr Apps Script-Projekt:// 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()); }
Ersetzen Sie im Code
CREDENTIALS
durch den Inhalt der Dateicredentials.json
.Ersetzen Sie
SPACE_NAME
im Code durch ein Leerzeichen. Diesen Namen finden Sie in derspaces.list
. in der Chat API oder über die URL eines Gruppenbereichs.
Schritt 4: Vollständiges Beispiel ausführen
Erstellen Sie das Beispiel in Ihrem Arbeitsverzeichnis und führen Sie es aus:
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
Öffnen Sie die Datei ChatAppAuth.gs
im Apps Script-Editor und
Klicken Sie auf Ausführen.
Ihr Skript stellt eine authentifizierte Anfrage an den Chat API, die mit dem Posten einer Nachricht antwortet in einem Chatbereich als Chat-App.
Fehlerbehebung für das Beispiel
In diesem Abschnitt werden häufige Probleme beschrieben, die auftreten können, wenn Sie um dieses Beispiel auszuführen.
Du bist nicht berechtigt, diese App zu verwenden
Beim Ausführen des Skripts erhalten Sie möglicherweise folgende Fehlermeldung:
<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">
Diese Fehlermeldung bedeutet, dass die Chat-App Berechtigung zum Erstellen von Chatnachrichten in der angegebenen Chatbereich.
Fügen Sie die Chat App dem Chatbereich hinzu, um den Fehler zu beheben. das im Skript angegeben ist.
Weitere Informationen
Weitere Informationen zur Chat API finden Sie in der Chat API Referenzdokumentation nachlesen.