Webhook olarak Google Chat uygulaması oluşturma

Bu sayfada, bir webhook'u kullanarak eşzamansız mesajları bir Harici tetikleyiciler kullanan Chat alanı. Örneğin, şunları yapabilirsiniz: Nöbetçi personeli bilgilendirecek bir izleme uygulaması Sunucu kapandığında sohbet edin. Eşzamanlı mesaj göndermek için daha fazla bilgi için Mesaj gönderin.

Bu tür bir mimariyle webhook ile veya bağlı harici çünkü iletişim tek yönlüdür. Webhook'lar konuşmaya dayalı değildir. Kullanıcılardan gelen mesajlara yanıt veremez, Chat uygulama etkileşimi etkinlikleri. Mesajları yanıtlamak için: Chat uygulaması geliştirin kullanabilirsiniz.

Webhook, teknik olarak Chat uygulaması: Webhook'lar, uygulamaları standart HTTP istekleri. Bu sayfa, HTTP istekleri için daha basittir. Her webhook yalnızca kayıtlı olduğu anlamına gelir. Gelen webhook'lar doğrudan mesajlarda çalışır ancak tüm kullanıcılar Etkin Chat uygulamaları. Google Workspace Marketplace'te webhook'u yayınlayamazsınız.

Aşağıdaki şemada Sohbet:

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

Önceki şemada, Chat uygulamasında şunlar bulunur: bilgi akışı:

  1. Chat uygulaması mantığı, harici üçüncü taraf hizmetlerini (örneğin, bir proje yönetimi sistemi veya bilet işlemleri aracıdır.
  2. Chat uygulamasının mantığı bir bulutta veya kullanarak bir sunucuya webhook URL'si kullanarak mesaj gönderebilen şirket içi belirli bir Chat alanını kullanın.
  3. Kullanıcılar Chat uygulamasından mesaj alabilir. olduğunu ancak Chat uygulaması.

Ön koşullar

Python

  • İşletme veya Kuruluş Şuna erişimi olan Google Workspace hesabı: Google Chat. Google Workspace kuruluşunuz, kullanıcılara gelen webhook'ları ekleyin ve kullanın.
  • Python 3.6 veya sonraki sürümler
  • pip paket yönetim aracı
  • httplib2 kitaplığı. Kitaplığı yüklemek için komut satırı arayüzünüzde aşağıdaki komutu çalıştırın:

    pip install httplib2
    
  • Google Chat alanı Google Chat API'yi kullanarak bir tane oluşturmak için Alan oluşturun. Chat'te hesap oluşturmak için: şurayı ziyaret edin: Yardım Merkezi belgeleri.

Node.js

Java

Apps Komut Dosyası

Webhook oluşturma

Webhook oluşturmak için onu istediğiniz yerde Chat alanında kaydedin kullanabilir ve ardından mesaj gönderen bir komut dosyası yazabilirsiniz.

Gelen webhook'u kaydedin

  1. Tarayıcıda şu dosyayı açın: Sohbet. Webhook'lar, Chat mobil uygulamasından yapılandırılamaz.
  2. Webhook eklemek istediğiniz alana gidin.
  3. Alan başlığının yanındaki . diğer okunu genişletin ve ardından Uygulamalar ve entegrasyonları başlıklı makaleyi inceleyin.
  4. Webhook ekle'yi tıklayın.

  5. Name (Ad) alanına Quickstart Webhook girin.

  6. Avatar URL'si alanına şunu girin: https://developers.google.com/chat/images/chat-product-icon.png.

  7. Kaydet'i tıklayın.

  8. Webhook URL'sini kopyalamak için Diğer'i tıklayın, ardından şunu tıklayın: Bağlantıyı kopyala.

Webhook komut dosyasını yazma

Örnek webhook komut dosyası, webhook'un bulunduğu alana Webhook URL'sine bir POST isteği göndererek kaydedilir. İlgili içeriği oluşturmak için kullanılan Chat API, Message.

Webhook komut dosyası oluşturmayı öğrenmek için bir dil seçin:

Python

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

  2. quickstart.py alanına aşağıdaki kodu yapıştırın:

    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. url değişkeninin değerini, şu web kancasının URL'siyle değiştirin: Webhook'u kaydettirirken kopyaladığınızda bu işlemi yapabilirsiniz.

Node.js

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

  2. index.js alanına aşağıdaki kodu yapıştırın:

    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. url değişkeninin değerini, şu web kancasının URL'siyle değiştirin: Webhook'u kaydettirirken kopyaladığınızda bu işlemi yapabilirsiniz.

Java

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

  2. pom.xml alanına 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 aşağıdaki dizin yapısını oluşturun src/main/java

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

  5. App.java alanına aşağıdaki kodu 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, eklediğiniz webhook URL'siyle değiştirin , webhook'u kaydettiğinizde kopyalanacak.

Apps Komut Dosyası

  1. Tarayıcıda şu adrese gidin: Apps Komut Dosyası.

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

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

    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. url değişkeninin değerini, eklediğiniz webhook URL'siyle değiştirin , webhook'u kaydettiğinizde kopyalanacak.

Webhook komut dosyasını çalıştırma

Bir KSA'da şu komut dosyasını çalıştırın:

Python

  python3 quickstart.py

Node.js

  node index.js

Java

  mvn compile exec:java -Dexec.mainClass=App

Apps Komut Dosyası

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

Kodu çalıştırdığınızda webhook, kullandığınız alana bir mesaj gönderir. tarafından kaydedilmiştir.

Bir mesaj dizisi başlatma veya yanıtlama

  1. Belirtin: spaces.messages.thread.threadKey parçası olarak görüntüleyebilirsiniz. Bu işe başlıyorsanız bir ileti dizisini yanıtlamak istiyorsanız threadKey için aşağıdaki değerleri kullanın:

    • İleti dizisi başlatıyorsanız threadKey değerini rastgele bir dizeye ayarlayın ancak ileti dizisine yanıt yayınlamak için bu değeri not edin.

    • Bir ileti dizisini yanıtlıyorsanızthreadKey ileti dizisi başlatıldı. Örneğin, ilk mesaj MY-THREAD kullanıldı, MY-THREAD olarak ayarlandı.

  2. Belirtilen threadKey bulunamazsa ileti dizisi davranışını tanımlayın:

    • Bir mesaj dizisini yanıtlayın veya yeni bir mesaj dizisi başlatın. URL'yi messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD parametresini webhook URL'sini ekleyin. Bu URL parametresinin iletilmesi Chat'e neden olur kullanarak mevcut bir ileti dizisini arayın.threadKey Eğer bulunursa ileti, bu ileti dizisine yanıt olarak yayınlanır. Hiçbiri ileti dizisine karşılık gelen yeni bir ileti dizisi threadKey

    • İleti dizisini yanıtlama veya hiçbir işlem yapma. URL'yi Webhook URL'sine messageReplyOption=REPLY_MESSAGE_OR_FAIL parametresini ekler. Bu URL parametresinin iletilmesi Chat'e neden olur kullanarak mevcut bir ileti dizisini arayın.threadKey Eğer bulunursa ileti, bu ileti dizisine yanıt olarak yayınlanır. Hiçbiri ileti gönderilmez.

    Daha fazla bilgi için messageReplyOption sayfasını inceleyin.

Aşağıdaki kod örneği bir ileti dizisini başlatır veya yanıt verir:

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 Komut Dosyası

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