Wysyłanie wiadomości do Google Chat za pomocą przychodzących webhooków

Przychodzące webhooki pozwalają wysyłać do Google Chat wiadomości asynchroniczne z aplikacji innych niż Google Chat. Możesz na przykład skonfigurować aplikację do monitorowania, aby powiadamiać personel dyżurny w Google Chat o awarii serwera.

Aby dowiedzieć się, jak asynchronicznie wysyłać, aktualizować i usuwać wiadomość w pokoju czatu za pomocą aplikacji Google Chat, przeczytaj artykuł Tworzenie, odczytywanie, aktualizowanie i usuwanie wiadomości.

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

Wymagania wstępne

Aby uruchomić przykład z tego przewodnika, potrzebujesz:

Python

  • Python w wersji 3.10.7 lub nowszej.
  • Dostęp do internetu i przeglądarki.
  • konto Google Workspace z dostępem do Google Chat.
  • Istniejący pokój Google Chat.
  • Biblioteka httplib2. W razie potrzeby uruchom to polecenie interfejsu wiersza poleceń, aby zainstalować bibliotekę za pomocą pip:

    pip install httplib2
    

Node.js

Google Apps Script

Java

Tworzenie webhooka

Aby utworzyć webhooka, zarejestruj go w pokoju Google Chat, w którym chcesz odbierać wiadomości, a następnie napisz skrypt wysyłający wiadomości.

Krok 1. Zarejestruj przychodzącego webhooka

  1. Otwórz Google Chat.
  2. Otwórz pokój, do którego chcesz dodać webhooka.
  3. Obok nazwy pokoju kliknij strzałkę rozwijania „Więcej” , a następnie kliknij Aplikacje i integracje.
  4. Kliknij Dodaj webhooki.
  5. W polu Nazwa wpisz Quickstart Webhook.
  6. W polu Awatar URL 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 Kopiuj link.

Krok 2. Napisanie skryptu webhooka

Przykładowy skrypt webhooka publikuje wiadomość w miejscu, w którym jest zarejestrowany webhook, wysyłając żądanie create message (utwórz wiadomość) na adres URL webhooka. Interfejs Google Chat API odpowiada z wystąpieniem Message.

Wybierz język poniżej, aby uzyskać szczegółowe instrukcje tworzenia skryptu webhooka:

Python

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

  2. W aplikacji quickstart.py skopiuj i wklej ten kod:

    python/webhook/quickstart.py
    from json import dumps
    
    from httplib2 import Http
    
    WEBHOOK_URL = "[URL FROM WEBHOOK]"
    
    def main():
        """Google Chat incoming webhook quickstart."""
        url = WEBHOOK_URL
        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 skopiowanym w kroku 1. Zarejestruj przychodzącego webhooka.

Node.js

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

  2. W aplikacji index.js skopiuj i wklej ten kod:

    węzeł/webhook/index.js
    /**
     * Sends asynchronous message into Google Chat
     * @return{obj} response
     */
    function webhook() {
      const fetch = require('node-fetch');
      const webhookURL = 'https://chat.googleapis.com/v1/spaces/AAAAGCYeSRY/messages?key=AIzaSyDdI0hCZtE6vySjMm-WEfRq3CPzqKqqsHI&token=u9IG_MuTBXw-tnqupPrPNinY2spKFcRBDp6dSldGUAw%3D';
    
      const data = JSON.stringify({
        'text': 'Hello from a Node script!',
      });
      let resp;
      fetch(webhookURL, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json; charset=UTF-8',
        },
        body: data,
      }).then((response) => {
        resp = response;
        console.log(response);
      });
      return resp;
    }
    
  3. Zastąp wartość zmiennej webhookURL adresem URL webhooka skopiowanym w kroku 1. Zarejestruj przychodzącego webhooka.

Google Apps Script

  1. Otwórz stronę Apps Script.

  2. Kliknij Nowy projekt.

  3. Skopiuj i wklej ten kod:

    apps-script/webhook/webhook.gs
    function webhook() {
      const url = "https://chat.googleapis.com/v1/spaces/AAAAGCYeSRY/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);
      Logger.log(response);
    }
  4. Zastąp wartość zmiennej url adresem URL webhooka skopiowanym w kroku 1. Zarejestruj przychodzącego webhooka.

Java

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

  2. W aplikacji pom.xml skopiuj i wklej te informacje:

    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 taką strukturę katalogów: src/main/java.

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

  5. W aplikacji App.java skopiuj i 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 skopiowanym w kroku 1. Zarejestruj przychodzącego webhooka.

Krok 3. Uruchom skrypt webhooka

Uruchom przykład, uruchamiając to polecenie z katalogu roboczego w interfejsie wiersza poleceń:

Python

  python3 quickstart.py

Node.js

  node index.js

Google Apps Script

  • Kliknij Wykonaj.

Java

  mvn compile exec:java -Dexec.mainClass=App

Gdy uruchomisz przykładowy kod, webhook wyśle wiadomość do pokoju, w którym go zarejestrowano.

Rozpoczynanie wątku wiadomości lub odpowiadanie na nie

Możesz rozpocząć wątek wiadomości lub odpowiedzieć na niego, dodając parametr threadKey do adresu URL webhooka. Każdy element threadKey jest unikalny dla aplikacji, w której go ustawiono. Jeśli 2 różne aplikacje do obsługi czatu lub webhooki ustawią ten sam element threadKey, zaczną się 2 różne wątki.

Rozpocznij wątek wiadomości

Aby opublikować pierwszą wiadomość w wątku z webhookiem, dołącz do adresu URL webhooka parametry threadKey i messageReplyOption. Ustaw threadKey jako dowolny ciąg (przypominaj, co to jest). Aby opublikować odpowiedź w wątku, musisz podać go ponownie.

  https://chat.googleapis.com/v1/spaces/SPACE_ID/messages?threadKey=ARBITRARY_STRING&messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD

Odpowiadanie w wątku wiadomości

Aby wysłać wiadomość w istniejącym wątku, dołącz parametry threadKey i messageReplyOption do adresu URL webhooka ustawionego do rozpoczęcia wątku. Na przykład wysłanie wiadomości pod następujący adres URL spowoduje opublikowanie odpowiedzi w wątku, w której threadKey to MY-THREAD, a messageReplyOption to REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD:

  https://chat.googleapis.com/v1/spaces/SPACE_ID/messages?threadKey=MY-THREAD&messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD

Ograniczenia i kwestie

Podczas konfigurowania webhooków weź pod uwagę te ograniczenia i ważne kwestie:

  • Każdy webhook działa tylko w pokoju czatu, w którym został zarejestrowany.

  • Nie można publikować webhooków w Google Workspace Marketplace.

  • Webhooki nie służą do konwersacji. Nie mogą odpowiadać na wiadomości użytkowników ani zdarzenia interakcji z aplikacją Google Chat ani ich odbierać.

  • Jeśli tylko wybrane jednostki organizacyjne w domenie mają włączone aplikacje do obsługi czatu, przychodzące webhooki zwrócą ten błąd:

    {
      "error": {
        "code": 403,
        "message": "The caller does not have permission",
        "status": "PERMISSION_DENIED"
      }
    }
    
  • Przychodzące webhooki działają na czacie, ale tylko wtedy, gdy wszyscy użytkownicy mają włączone aplikacje do obsługi czatu.

  • Funkcja Ikona zarządzania webhookamiZarządzaj webhookami jest dostępna tylko w przeglądarce, dlatego webhooki trzeba skonfigurować w aplikacji internetowej Google Chat. Webhooki nie można konfigurować w aplikacji mobilnej Google Chat.