Google Chat-App als Webhook erstellen

Auf dieser Seite wird beschrieben, wie Sie einen Webhook einrichten, um asynchrone Nachrichten an einen Chatbereich mit externen Triggern. So können Sie zum Beispiel eine Überwachungsanwendung konfigurieren, die Bereitschaftspersonal über Chatten, wenn ein Server ausfällt So senden Sie eine synchrone Nachricht: mit einer Chat-App finden Sie unter Nachricht senden

Bei dieser Art von Architektur können Nutzer nicht mit dem Webhook oder dem verbundenen externen Netzwerk interagieren, da die Kommunikation in eine Richtung erfolgt. Webhooks sind keine dialogorientierten Webhooks. Sie können keine Nachrichten von Nutzern oder Chat-App-Interaktionsereignisse: So antwortest du auf Nachrichten: Chat-App erstellen statt eines Webhooks.

Ein Webhook ist technisch gesehen nicht eine Chat-App: Webhooks verbinden Anwendungen über die HTTP-Anfragen – auf dieser Seite wird sie als Chat-App für Vereinfachung. Jeder Webhook funktioniert nur im Chatbereich in der es registriert ist. Eingehende Webhooks funktionieren in Direktnachrichten, aber nur, wenn haben alle Nutzenden Chat-Apps aktiviert: Sie können im Google Workspace Marketplace keine Webhooks veröffentlichen.

Das folgende Diagramm zeigt die Architektur eines Webhooks, der mit Chat:

Architektur für eingehende Webhooks zum Senden von asynchronen Nachrichten an Google Chat.

Im obigen Diagramm hat eine Chat-App Folgendes: Informationsfluss:

  1. Die Chat-App-Logik empfängt Informationen von externe Dienste von Drittanbietern, wie z. B. ein Projektmanagementsystem oder Ticketing-Tool.
  2. Die Chat-App-Logik wird entweder in einer Cloud oder lokales System, das Nachrichten über eine Webhook-URL an eine einem bestimmten Chatbereich.
  3. Nutzer können Nachrichten aus der Chat App empfangen in Chatbereich, können aber nicht mit dem Chat-App.

Vorbereitung

Python

Node.js

Java

Apps Script

Webhook erstellen

Um einen Webhook zu erstellen, registrieren Sie ihn im gewünschten Chatbereich. um Nachrichten zu empfangen, und schreiben dann ein Skript, das Nachrichten sendet.

Eingehenden Webhook registrieren

  1. Öffnen Sie in einem Browser Chatten: Webhooks können in der mobilen Google Chat App nicht konfiguriert werden.
  2. Rufen Sie den Gruppenbereich auf, dem Sie einen Webhook hinzufügen möchten.
  3. Klicken Sie neben dem Titel des Gruppenbereichs auf das Maximieren Sie den Pfeil zum Maximieren und klicken Sie dann auf Apps und Integrationen.
  4. Klicken Sie auf Webhooks hinzufügen.

  5. Geben Sie im Feld Name Quickstart Webhook ein.

  6. Geben Sie im Feld Avatar URL (Avatar-URL) Folgendes ein: https://developers.google.com/chat/images/chat-product-icon.png

  7. Klicken Sie auf Speichern.

  8. Klicken Sie zum Kopieren der Webhook-URL auf Mehr und klicken Sie dann auf Link kopieren.

Webhook-Skript schreiben

Mit dem Beispiel-Webhook-Skript wird eine Nachricht an den Gruppenbereich gesendet, in dem sich der Webhook befindet registriert, indem eine POST-Anfrage an die Webhook-URL gesendet wird. Die Die Chat API antwortet mit einer Instanz von Message

Wählen Sie eine Sprache aus, um zu erfahren, wie Sie ein Webhook-Skript erstellen:

Python

  1. Erstellen Sie in Ihrem Arbeitsverzeichnis eine Datei mit dem Namen quickstart.py.

  2. Fügen Sie in quickstart.py den folgenden Code ein:

    python/webhook/quickstart.py
    from json import dumps
    from httplib2 import Http
    
    # Copy the webhook URL from the Chat space where the webhook is registered.
    # The values for SPACE_ID, KEY, and TOKEN are set by Chat, and are included
    # when you copy the webhook URL.
    
    def main():
        """Google Chat incoming webhook quickstart."""
        url = "https://chat.googleapis.com/v1/spaces/SPACE_ID/messages?key=KEY&token=TOKEN"
        app_message = {"text": "Hello from a Python script!"}
        message_headers = {"Content-Type": "application/json; charset=UTF-8"}
        http_obj = Http()
        response = http_obj.request(
            uri=url,
            method="POST",
            headers=message_headers,
            body=dumps(app_message),
        )
        print(response)
    
    
    if __name__ == "__main__":
        main()
  3. Ersetzen Sie den Wert für die Variable url durch die Webhook-URL, die Sie bei der Registrierung des Webhooks kopiert haben.

Node.js

  1. Erstellen Sie in Ihrem Arbeitsverzeichnis eine Datei mit dem Namen index.js.

  2. Fügen Sie in index.js den folgenden Code ein:

    node/webhook/index.js
    /**
     * Sends asynchronous message to Google Chat
     * @return {Object} response
     */
    async function webhook() {
      const url = "https://chat.googleapis.com/v1/spaces/SPACE_ID/messages"
      const res = await fetch(url, {
        method: "POST",
        headers: {"Content-Type": "application/json; charset=UTF-8"},
        body: JSON.stringify({text: "Hello from a Node script!"})
      });
      return await res.json();
    }
    
    webhook().then(res => console.log(res));
  3. Ersetzen Sie den Wert für die Variable url durch die Webhook-URL, die Sie bei der Registrierung des Webhooks kopiert haben.

Java

  1. Erstellen Sie in Ihrem Arbeitsverzeichnis eine Datei mit dem Namen pom.xml.

  2. Kopieren Sie den folgenden Code und fügen Sie ihn in pom.xml ein:

    java/webhook/pom.xml
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.google.chat.webhook</groupId>
      <artifactId>java-webhook-app</artifactId>
      <version>0.1.0</version>
    
      <name>java-webhook-app</name>
      <url>https://github.com/googleworkspace/google-chat-samples/tree/main/java/webhook</url>
    
      <properties>
        <maven.compiler.target>11</maven.compiler.target>
        <maven.compiler.source>11</maven.compiler.source>
      </properties>
    
      <dependencies>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.9.1</version>
        </dependency>
      </dependencies>
    
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.8.0</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </project>
  3. Erstellen Sie in Ihrem Arbeitsverzeichnis die folgende Verzeichnisstruktur: src/main/java

  4. Erstellen Sie im Verzeichnis src/main/java eine Datei mit dem Namen App.java.

  5. Fügen Sie in App.java den folgenden Code ein:

    java/webhook/src/main/java/com/google/chat/webhook/App.java
    import com.google.gson.Gson;
    import java.net.http.HttpClient;
    import java.net.http.HttpRequest;
    import java.net.http.HttpResponse;
    import java.util.Map;
    import java.net.URI;
    
    public class App {
      private static final String URL = "https://chat.googleapis.com/v1/spaces/AAAAGCYeSRY/messages";
      private static final Gson gson = new Gson();
      private static final HttpClient client = HttpClient.newHttpClient();
    
      public static void main(String[] args) throws Exception {
        String message = gson.toJson(Map.of("text", "Hello from Java!"));
    
        HttpRequest request = HttpRequest.newBuilder(
            URI.create(URL))
            .header("accept", "application/json; charset=UTF-8")
            .POST(HttpRequest.BodyPublishers.ofString(message))
            .build();
    
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    
        System.out.println(response.body());
      }
    }
  6. Ersetzen Sie den Wert für die Variable URL durch die Webhook-URL, wurde bei der Registrierung des Webhooks kopiert.

Apps Script

  1. Rufen Sie in einem Browser Apps Script

  2. Klicken Sie auf New Project (Neues Projekt).

  3. Fügen Sie den folgenden Code ein:

    apps-script/webhook/webhook.gs
    function webhook() {
      const url = "https://chat.googleapis.com/v1/spaces/SPACE_ID/messages"
      const options = {
        "method": "post",
        "headers": {"Content-Type": "application/json; charset=UTF-8"},
        "payload": JSON.stringify({"text": "Hello from Apps Script!"})
      };
      const response = UrlFetchApp.fetch(url, options);
      console.log(response);
    }
  4. Ersetzen Sie den Wert für die Variable url durch die Webhook-URL, wurde bei der Registrierung des Webhooks kopiert.

Webhook-Skript ausführen

Führen Sie das Skript in einer Befehlszeile aus:

Python

  python3 quickstart.py

Node.js

  node index.js

Java

  mvn compile exec:java -Dexec.mainClass=App

Apps Script

  • Klicken Sie auf Ausführen.

Wenn Sie den Code ausführen, sendet der Webhook eine Nachricht an den Gruppenbereich, in dem Sie haben sie es registriert.

Nachrichten-Thread starten oder beantworten

  1. Definieren spaces.messages.thread.threadKey als Teil des Nachrichtenanfragetexts ein. Je nachdem, ob Sie Wenn Sie auf einen Thread antworten, verwenden Sie für threadKey die folgenden Werte:

    • Wenn Sie einen Thread starten, legen Sie threadKey auf einen beliebigen String fest, aber Notieren Sie sich diesen Wert, um eine Antwort auf den Thread zu posten.

    • Wenn Sie auf einen Thread antworten, geben Sie die threadKey an, die beim Diskussion wurde gestartet. Um beispielsweise eine Antwort auf einen Thread zu posten, in dem der erste Nachricht verwendet MY-THREAD, MY-THREAD festgelegt.

  2. Definieren Sie das Threadverhalten, wenn die angegebene threadKey nicht gefunden wird:

    • Antworten Sie auf eine Unterhaltung oder starten Sie eine neue Unterhaltung. Fügen Sie den Parameter messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD für die Webhook-URL. Die Übergabe dieses URL-Parameters führt dazu, um mit dem angegebenen threadKey nach einem vorhandenen Thread zu suchen. Wenn eine gefunden wird, wird die Nachricht als Antwort auf diesen Thread gepostet. Wenn keiner der folgenden Werte ist: gefunden wird, startet die Nachricht einen neuen Thread für threadKey

    • Auf eine Konversation antworten oder nichts unternehmen. Fügen Sie den messageReplyOption=REPLY_MESSAGE_OR_FAIL-Parameter an die Webhook-URL. Die Übergabe dieses URL-Parameters führt dazu, um mit dem angegebenen threadKey nach einem vorhandenen Thread zu suchen. Wenn eine gefunden wird, wird die Nachricht als Antwort auf diesen Thread gepostet. Wenn keiner der folgenden Werte ist: gefunden wird, wird die Nachricht nicht gesendet.

    Weitere Informationen finden Sie unter messageReplyOption.

Mit dem folgenden Codebeispiel wird ein Nachrichten-Thread gestartet oder darauf geantwortet:

Python

python/webhook/thread-reply.py
from json import dumps
from httplib2 import Http

# Copy the webhook URL from the Chat space where the webhook is registered.
# The values for SPACE_ID, KEY, and TOKEN are set by Chat, and are included
# when you copy the webhook URL.
#
# Then, append messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD to the
# webhook URL.


def main():
    """Google Chat incoming webhook that starts or replies to a message thread."""
    url = "https://chat.googleapis.com/v1/spaces/SPACE_ID/messages?key=KEY&token=TOKEN&messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD"
    app_message = {
        "text": "Hello from a Python script!",
        # To start a thread, set threadKey to an arbitratry string.
        # To reply to a thread, specify that thread's threadKey value.
        "thread": {"threadKey": "THREAD_KEY_VALUE"},
    }
    message_headers = {"Content-Type": "application/json; charset=UTF-8"}
    http_obj = Http()
    response = http_obj.request(
        uri=url,
        method="POST",
        headers=message_headers,
        body=dumps(app_message),
    )
    print(response)


if __name__ == "__main__":
    main()

Node.js

node/webhook/thread-reply.js
/**
 * Sends asynchronous message to Google Chat
 * @return {Object} response
 */
async function webhook() {
  const url = "https://chat.googleapis.com/v1/spaces/SPACE_ID/messages?key=KEY&token=TOKEN&messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD"
  const res = await fetch(url, {
    method: "POST",
    headers: {"Content-Type": "application/json; charset=UTF-8"},
    body: JSON.stringify({
      text: "Hello from a Node script!",
      thread: {threadKey: "THREAD_KEY_VALUE"}
    })
  });
  return await res.json();
}

webhook().then(res => console.log(res));

Apps Script

apps-script/webhook/thread-reply.gs
function webhook() {
  const url = "https://chat.googleapis.com/v1/spaces/SPACE_ID/messages?key=KEY&token=TOKEN&messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD"
  const options = {
    "method": "post",
    "headers": {"Content-Type": "application/json; charset=UTF-8"},
    "payload": JSON.stringify({
      "text": "Hello from Apps Script!",
      "thread": {"threadKey": "THREAD_KEY_VALUE"}
    })
  };
  const response = UrlFetchApp.fetch(url, options);
  console.log(response);
}