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