Gelen webhook'larla Google Chat'e mesaj gönderme

Gelen webhook'lar, Chat uygulaması olmayan uygulamalardan Google Chat'e eşzamansız mesajlar göndermenizi sağlar. Örneğin, bir sunucu kapandığında Google Chat'te nöbetçi personeli bilgilendirecek bir izleme uygulaması yapılandırabilirsiniz.

Chat uygulamasıyla bir Chat alanındaki mesajları eşzamansız olarak göndermek, güncellemek veya silmek için Mesaj oluşturma, okuma, güncelleme ve silme başlıklı makaleyi inceleyin.

Gelen webhook'ların Google Chat'e eşzamansız mesajlar göndermeye yönelik mimarisi.

Ön koşullar

Bu kılavuzdaki örneği çalıştırmak için şunlara ihtiyacınız vardır:

Python

  • Python 3.10.7 veya sonraki sürümler.
  • İnternete ve web tarayıcısına erişim.
  • Google Chat'e erişimi olan bir Google Workspace hesabı
  • Mevcut bir Google Chat alanı.
  • httplib2 kitaplığı. Gerekirse kitaplığı pip kullanarak yüklemek için aşağıdaki komut satırı arayüzü (CLI) komutunu çalıştırın:

    pip install httplib2
    

Node.js

Apps Komut Dosyası

Java

Webhook oluşturma

Webhook oluşturmak için, mesaj almak istediğiniz Google Chat alanına webhook'u kaydedin, ardından mesaj gönderen bir komut dosyası yazın.

1. Adım: Gelen webhook'u kaydedin

  1. Google Chat'i açın.
  2. Webhook eklemek istediğiniz alanı açın.
  3. Alan başlığının yanındaki daha fazla genişlet okunu, ardından Uygulamalar ve entegrasyonlar'ı tıklayın.
  4. Webhook ekle'yi tıklayın.
  5. Name (Ad) alanına Quickstart Webhook yazın.
  6. Avatar URL (Avatar URL'si) alanına https://developers.google.com/chat/images/chat-product-icon.png yazın.
  7. Kaydet'i tıklayın.
  8. Webhook URL'sini kopyalamak için Diğer'i ve ardından Bağlantıyı kopyala'yı tıklayın.

2. Adım: Webhook komut dosyasını yazın

Örnek webhook komut dosyası, webhook URL'sine bir create message isteği YAYINlayarak webhook'un kayıtlı olduğu alana bir mesaj yayınlar. Google Chat API, Message örneğiyle yanıt verir.

Webhook komut dosyasının nasıl oluşturulacağına ilişkin özel talimatlar için aşağıdan bir dil seçin:

Python

  1. Çalışma dizininizde quickstart.py adında bir dosya oluşturun.

  2. quickstart.py uygulamasında aşağıdaki kodu kopyalayıp yapıştırın:

    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. url değişkeninin değerini, 1. Adım: Gelen webhook'u kaydetme bölümünde kopyaladığınız webhook URL'si ile değiştirin.

Node.js

  1. Çalışma dizininizde index.js adında bir dosya oluşturun.

  2. index.js uygulamasında aşağıdaki kodu kopyalayıp yapıştırın:

    düğüm/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. webhookURL değişkeninin değerini, 1. Adım: Gelen webhook'u kaydetme bölümünde kopyaladığınız webhook URL'si ile değiştirin.

Apps Komut Dosyası

  1. Apps Komut Dosyası sayfasına gidin.

  2. Yeni Proje'yi tıklayın.

  3. Aşağıdaki kodu kopyalayıp yapıştırın:

    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. url değişkeninin değerini, 1. Adım: Gelen webhook'u kaydetme bölümünde kopyaladığınız webhook URL'si ile değiştirin.

Java

  1. Çalışma dizininizde pom.xml adında bir dosya oluşturun.

  2. pom.xml web sitesinde aşağıdakileri kopyalayıp yapıştırın:

    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. Çalışma dizininizde şu dizin yapısını oluşturun: src/main/java.

  4. src/main/java dizininde App.java adında bir dosya oluşturun.

  5. App.java uygulamasında aşağıdaki kodu kopyalayıp yapıştırın:

    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. URL değişkeninin değerini, 1. Adım: Gelen webhook'u kaydetme bölümünde kopyaladığınız webhook URL'si ile değiştirin.

3. Adım: Webhook komut dosyasını çalıştırın

KSA'nızdaki çalışma dizininden aşağıdaki komutu çalıştırarak örneği çalıştırın:

Python

  python3 quickstart.py

Node.js

  node index.js

Apps Komut Dosyası

  • Çalıştır'ı tıklayın.

Java

  mvn compile exec:java -Dexec.mainClass=App

Örnek kodu çalıştırdığınızda webhook, kodu kaydettiğiniz alana bir mesaj gönderir.

Bir mesaj dizisi başlatma veya bir mesaj dizisini yanıtlama

Webhook URL'sine threadKey parametresini ekleyerek bir mesaj dizisi başlatabilir veya bir mesaj dizisini yanıtlayabilirsiniz. Her threadKey, kendisini ayarlayan uygulamaya özgüdür. İki farklı Chat uygulaması veya webhook'u aynı threadKey değerini ayarlarsa iki farklı mesaj dizisi başlar.

Mesaj dizisi başlat

Webhook içeren bir ileti dizisinin ilk mesajını yayınlamak için threadKey ve messageReplyOption parametrelerini webhook URL'sine ekleyin. threadKey öğesini rastgele bir dizeye ayarlayın ancak bunun ne olduğunu unutmayın. İleti dizisine bir yanıt yayınlamak için bu dizeyi tekrar belirtmeniz gerekir.

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

Bir mesaj dizisini yanıtlama

Mevcut bir mesaj dizisine mesaj göndermek için threadKey ve messageReplyOption parametrelerini, ileti dizisini başlatmak için kullanılan değere ayarlanmış olan webhook URL'sine ekleyin. Örneğin, aşağıdaki URL'ye bir mesaj gönderdiğinizde threadKey MY-THREAD, messageReplyOption ise REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD olan ileti dizisine bir yanıt yayınlar:

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

Sınırlar ve dikkat edilmesi gereken noktalar

Webhook'ları yapılandırırken aşağıdaki sınırlamaları ve dikkate alınması gereken noktaları göz önünde bulundurun:

  • Her webhook yalnızca kayıtlı olduğu Chat alanında çalışır.

  • Google Workspace Marketplace'te webhook yayınlayamazsınız.

  • Webhook'lar konuşma odaklı değildir. Kullanıcılara veya Chat uygulaması etkileşim etkinliklerine yanıt veremez ya da mesaj alamazlar.

  • Alanınızdaki yalnızca belirli kuruluş birimlerinde Chat uygulamaları etkinse gelen web kancaları aşağıdaki hatayı döndürür:

    {
      "error": {
        "code": 403,
        "message": "The caller does not have permission",
        "status": "PERMISSION_DENIED"
      }
    }
    
  • Gelen webhook'lar yalnızca tüm kullanıcılar Chat uygulamaları etkin olduğunda doğrudan mesajlarda çalışır.

  • Webhook yönetme simgesiWebhook'ları yönet yalnızca web tarayıcısında kullanılabildiğinden, webhook'lar Chat web uygulamasından ayarlanmalıdır. Webhook'lar Chat mobil uygulamasından yapılandırılamaz.