Tworzenie aplikacji Google Chat jako webhooka

Na tej stronie dowiesz się, jak skonfigurować webhooka do wysyłania asynchronicznego wiadomości do Pokój czatu korzystający z zewnętrznych reguł. Możesz na przykład: skonfigurować aplikację do monitorowania tak, aby powiadamiała personel dyżurny Rozmawiaj, gdy serwer ulegnie awarii. Wysyłanie wiadomości synchronicznej z aplikacją Google Chat, zobacz Wyślij wiadomość.

Przy tego rodzaju architekturze użytkownicy nie mogą wchodzić w interakcję z webhookiem ani z podłączonym ponieważ komunikacja jest jednokierunkowa. Webhooki nie są konwersacyjne. Nie może odpowiadać na wiadomości użytkowników ani odbierać od nich wiadomości, Zdarzenia interakcji z aplikacją do obsługi czatu Aby odpowiedzieć na wiadomości: stworzenie aplikacji Google Chat zamiast webhooka.

Choć z technicznego punktu widzenia aplikacji Google Chat – webhooki łączą aplikacje za pomocą żądań HTTP – na tej stronie jest nazywana aplikacją do obsługi czatu, do uproszczenia. Każdy webhook działa tylko w pokoju czatu w jest zarejestrowane. Przychodzące webhooki działają na czacie, ale tylko wtedy, wszyscy użytkownicy mają Włączone aplikacje do obsługi czatu. Nie możesz publikować webhooków w Google Workspace Marketplace.

Poniższy diagram przedstawia architekturę webhooka połączonego z Czat:

Architektura przychodzących webhooków do wysyłania asynchronicznego wiadomości do Google Chat.

Na poprzednim diagramie aplikacja Google Chat ma te elementy przepływ informacji:

  1. Logika aplikacji Google Chat otrzymuje informacje z zewnętrznych usług, takich jak system zarządzania projektami lub w narzędziu do sprzedaży biletów.
  2. Logika aplikacji Google Chat jest hostowana w chmurze lub lokalny system umożliwiający wysyłanie wiadomości przy użyciu adresu URL webhooka w określonym pokoju czatu.
  3. Użytkownicy mogą odbierać wiadomości z aplikacji Google Chat w w tym konkretnym pokoju czatu, ale nie masz możliwości interakcji aplikacja Google Chat.

Wymagania wstępne

Python

Node.js

Java

Google Apps Script

Utwórz webhooka

Aby utworzyć webhooka, zarejestruj go w wybranym przez siebie pokoju czatu do odbierania wiadomości, a potem napisać skrypt do wysyłania wiadomości.

Zarejestruj przychodzącego webhooka

  1. Otwórz w przeglądarce Google Chat Webhooków nie można konfigurować w aplikacji mobilnej Google Chat.
  2. Otwórz pokój, do którego chcesz dodać webhooka.
  3. Obok tytułu pokoju kliknij kliknij strzałkę w inne miejsce, a następnie kliknij Aplikacje i
  4. Kliknij Dodaj webhooki.

  5. W polu Nazwa wpisz Quickstart Webhook.

  6. W polu URL awatara wpisz https://developers.google.com/chat/images/chat-product-icon.png

  7. Kliknij Zapisz.

  8. Aby skopiować adres URL webhooka, kliknij Więcej, a następnie kliknij Skopiuj link.

Pisanie skryptu webhooka

Przykładowy skrypt webhooka wysyła wiadomość do pokoju, w którym znajduje się webhook rejestrowane przez wysłanie żądania POST na adres URL webhooka. Interfejs Chat API odpowiada wystąpieniem Message

Wybierz język, aby dowiedzieć się, jak utworzyć skrypt webhooka:

Python

  1. W katalogu roboczym utwórz plik o nazwie quickstart.py.

  2. W aplikacji quickstart.py wklej ten kod:

    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. Zastąp wartość zmiennej url adresem URL webhooka, skopiowany podczas rejestracji webhooka.

Node.js

  1. W katalogu roboczym utwórz plik o nazwie index.js.

  2. W aplikacji index.js wklej ten kod:

    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. Zastąp wartość zmiennej url adresem URL webhooka, skopiowany podczas rejestracji webhooka.

Java

  1. W katalogu roboczym utwórz plik o nazwie pom.xml.

  2. W narzędziu pom.xml skopiuj i wklej ten kod:

    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. W katalogu roboczym utwórz następującą strukturę katalogów: src/main/java

  4. W katalogu src/main/java utwórz plik o nazwie App.java.

  5. W aplikacji App.java wklej ten kod:

    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. Zastąp wartość zmiennej URL adresem URL webhooka, skopiowano podczas rejestracji webhooka.

Google Apps Script

  1. W przeglądarce otwórz stronę Apps Script.

  2. Kliknij New Project (Nowy projekt).

  3. Wklej ten kod:

    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. Zastąp wartość zmiennej url adresem URL webhooka, skopiowano podczas rejestracji webhooka.

Uruchamianie skryptu webhooka

W interfejsie wiersza poleceń uruchom skrypt:

Python

  python3 quickstart.py

Node.js

  node index.js

Java

  mvn compile exec:java -Dexec.mainClass=App

Google Apps Script

  • Kliknij Wykonaj.

Gdy uruchomisz kod, webhook wyśle wiadomość do pokoju, w którym masz w domenie.

Rozpoczynanie wątku wiadomości lub odpowiadanie na niego

  1. Określ spaces.messages.thread.threadKey w treści żądania wiadomości. W zależności od tego, czy zaczynasz odpowiadając na wątek, użyj następujących wartości w polu threadKey:

    • Jeśli chcesz utworzyć wątek, w polu threadKey ustaw dowolny ciąg, ale zanotuj tę wartość, aby opublikować odpowiedź w wątku.

    • W przypadku odpowiadania w wątku podaj właściwość threadKey, która została ustawiona, gdy rozpoczęty wątek. Aby na przykład opublikować odpowiedź w wątku, w którym pierwsza wiadomość została użyta do użycia: MY-THREAD, ustaw MY-THREAD.

  2. Zdefiniuj zachowanie wątku, jeśli określony element threadKey nie zostanie znaleziony:

    • Odpowiedz w wątku lub rozpocznij nowy wątek. Dodaj parametr messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD parametr do lub adres URL webhooka. Przekazywanie tego parametru adresu URL powoduje, że Google Chat wyszukać istniejący wątek przy użyciu określonego atrybutu threadKey. Jeśli jeden wiadomość zostanie opublikowany jako odpowiedź w tym wątku. Jeśli żadna zostanie znaleziony, wiadomość rozpocznie nowy wątek odpowiadający temu threadKey

    • Odpowiedz w wątku lub nie rób nic. Dodaj parametr messageReplyOption=REPLY_MESSAGE_OR_FAIL do adresu URL webhooka. Przekazywanie tego parametru adresu URL powoduje, że Google Chat aby wyszukać istniejący wątek, korzystając z podanego elementu threadKey. Jeśli jeden wiadomość zostanie opublikowany jako odpowiedź w tym wątku. Jeśli żadna wiadomość nie zostanie wysłana.

    Więcej informacji: messageReplyOption.

Ten przykładowy kod rozpoczyna się w wątku wiadomości lub odpowiada na nie:

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));

Google 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);
}