Mengirim pesan ke Google Chat dengan webhook masuk

Webhook masuk memungkinkan Anda mengirim pesan asinkron ke Google Chat dari aplikasi yang bukan aplikasi Chat. Misalnya, Anda dapat mengonfigurasi aplikasi pemantauan untuk memberi tahu staf yang sedang menelepon di Google Chat saat server mengalami gangguan.

Untuk mengirim, memperbarui, atau menghapus pesan secara asinkron di ruang Chat dengan aplikasi Chat, lihat Membuat, membaca, memperbarui, menghapus pesan.

Arsitektur bagi webhook masuk untuk mengirim pesan asinkron ke Google Chat.

Prasyarat

Untuk menjalankan contoh dalam panduan ini, Anda memerlukan:

Python

  • Python 3.10.7 atau yang lebih baru.
  • Akses ke internet dan browser web.
  • Akun Google Workspace dengan akses ke Google Chat.
  • Ruang Google Chat yang sudah ada.
  • Library httplib2. Jika perlu, jalankan perintah antarmuka command line (CLI) berikut untuk menginstal library menggunakan pip:

    pip install httplib2
    

Node.js

Apps Script

Java

Membuat webhook

Untuk membuat webhook, daftarkan di ruang Google Chat tempat Anda ingin menerima pesan, lalu tulis skrip yang mengirim pesan.

Langkah 1: Daftarkan webhook masuk

  1. Di browser web, buka Google Chat.
  2. Buka ruang tempat Anda ingin menambahkan webhook.
  3. Pada bagian atas, di samping judul ruang, klik Panah Bawah > Aplikasi & integrasi.
  4. Klik Kelola webhook.
  5. Jika ruang ini sudah memiliki webhook lainnya, klik Tambahkan lainnya. Jika tidak, lewati langkah ini.
  6. Untuk Name, masukkan "Quickstart Webhook".
  7. Untuk Avatar URL, masukkan https://developers.google.com/chat/images/chat-product-icon.png.
  8. Klik SIMPAN.
  9. Untuk menyalin URL webhook lengkap, klik Salin.
  10. Klik di luar kotak untuk menutup dialog webhook Masuk.

Langkah 2: Tulis skrip webhook

Contoh skrip webhook memposting pesan ke ruang tempat webhook didaftarkan dengan MEMPOSTING permintaan buat pesan ke URL webhook. Google Chat API merespons dengan instance Message.

Pilih bahasa di bawah untuk petunjuk spesifik tentang cara membuat skrip webhook:

Python

  1. Di direktori kerja, buat file dengan nama quickstart.py.

  2. Di quickstart.py, salin dan tempel kode berikut:

    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
        bot_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(bot_message),
        )
        print(response)
    
    
    if __name__ == '__main__':
        main()
  3. Ganti nilai untuk variabel url dengan URL webhook yang Anda salin di Langkah 1: Daftarkan webhook masuk.

Node.js

  1. Di direktori kerja, buat file dengan nama index.js.

  2. Di index.js, salin dan tempel kode berikut:

    node/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. Ganti nilai untuk variabel webhookURL dengan URL webhook yang Anda salin di Langkah 1: Daftarkan webhook masuk.

Apps Script

  1. Buka halaman Apps Script.

  2. Klik Project Baru

  3. Salin dan tempel kode berikut:

    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. Ganti nilai untuk variabel url dengan URL webhook yang Anda salin di Langkah 1: Daftarkan webhook masuk.

Java

  1. Di direktori kerja, buat file dengan nama pom.xml.

  2. Di pom.xml, salin dan tempel yang berikut:

    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.hangouts.chat.webhook</groupId>
      <artifactId>java-webhook-app</artifactId>
      <version>0.1.0</version>
    
      <name>java-webhook-app</name>
      <url>https://github.com/googleworkspace/hangouts-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. Dalam direktori kerja Anda, buat struktur direktori berikut src/main/java.

  4. Dalam direktori src/main/java, buat file bernama App.java.

  5. Di App.java, salin dan tempel kode berikut:

    java/webhook/src/main/java/com/google/hangouts/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. Ganti nilai untuk variabel URL dengan URL webhook yang Anda salin di Langkah 1: Daftarkan webhook masuk.

Langkah 3: Jalankan skrip webhook

Jalankan contoh dengan menjalankan perintah berikut dari direktori kerja Anda di CLI:

Python

  python3 quickstart.py

Node.js

  node index.js

Apps Script

  • Klik Run

Java

  mvn compile exec:java -Dexec.mainClass=App

Saat Anda menjalankan kode contoh, webhook akan mengirimkan pesan ke ruang tempat Anda mendaftarkannya.

Memulai atau membalas rangkaian pesan

Anda dapat memulai rangkaian pesan atau membalasnya dengan menambahkan parameter threadKey ke URL webhook. Setiap threadKey bersifat unik untuk aplikasi yang menetapkannya. Jika dua aplikasi Chat atau webhook yang berbeda menetapkan threadKey yang sama, dua thread yang berbeda akan dimulai.

Memulai rangkaian pesan

Untuk memposting pesan pertama dari thread dengan webhook, tambahkan parameter threadKey dan messageReplyOption ke URL webhook. Tetapkan threadKey ke string arbitrer, tetapi ingat apa itu; Anda harus menentukannya lagi untuk memposting balasan ke thread.

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

Membalas rangkaian pesan

Untuk mengirim pesan ke rangkaian pesan yang sudah ada, tambahkan parameter threadKey dan messageReplyOption ke URL webhook yang ditetapkan ke nilai yang digunakan untuk memulai thread. Misalnya, mengirim pesan ke URL berikut akan memposting balasan ke rangkaian pesan dengan threadKey yang berupa MY-THREAD dan messageReplyOption adalah 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

Batas dan pertimbangan

Saat Anda mengonfigurasi webhook, perhatikan batasan dan pertimbangan berikut:

  • Setiap webhook hanya berfungsi di ruang Chat tempatnya terdaftar.

  • Anda tidak dapat memublikasikan webhook di Google Workspace Marketplace.

  • Webhook tidak bersifat percakapan. Mereka tidak dapat merespons atau menerima pesan dari pengguna atau acara dari Google Chat.

  • Jika hanya unit organisasi (OU) tertentu di domain Anda yang mengaktifkan aplikasi Chat, webhook masuk akan menampilkan error berikut:

    {
      "error": {
        "code": 403,
        "message": "The caller does not have permission",
        "status": "PERMISSION_DENIED"
      }
    }
    
  • Webhook masuk berfungsi dalam pesan langsung, tetapi hanya jika semua pengguna telah mengaktifkan aplikasi Chat.

  • Karena Ikon untuk mengelola webhook Kelola webhook hanya tersedia dari browser web, webhook harus disiapkan dari aplikasi web Chat. Webhook tidak dapat dikonfigurasi dari aplikasi seluler Chat.