Halaman ini menjelaskan cara menyiapkan webhook untuk mengirim pesan asinkron ke ruang Chat menggunakan pemicu eksternal. Misalnya, Anda dapat mengonfigurasi aplikasi pemantauan untuk memberi tahu staf siaga di Chat saat server mengalami gangguan. Untuk mengirim pesan sinkron dengan aplikasi Chat, lihat Mengirim pesan.
Dengan jenis desain arsitektur ini, pengguna tidak dapat berinteraksi dengan webhook atau aplikasi eksternal yang terhubung karena komunikasi bersifat satu arah. Webhook tidak bersifat seperti percakapan. Mereka tidak dapat merespons atau menerima pesan dari pengguna atau peristiwa interaksi aplikasi Chat. Untuk merespons pesan, bangun aplikasi Chat, bukan webhook.
Meskipun secara teknis webhook bukanlah aplikasi Chat—webhook menghubungkan aplikasi menggunakan permintaan HTTP standar—halaman ini menyebutnya sebagai aplikasi Chat agar mudah. Setiap webhook hanya berfungsi di ruang Chat tempat webhook tersebut terdaftar. Webhook masuk berfungsi di pesan langsung, tetapi hanya jika semua pengguna telah mengaktifkan aplikasi Chat. Anda tidak dapat memublikasikan webhook ke Google Workspace Marketplace.
Diagram berikut menunjukkan arsitektur webhook yang terhubung ke Chat:
Dalam diagram sebelumnya, aplikasi Chat memiliki alur informasi berikut:
- Logika aplikasi Chat menerima informasi dari layanan pihak ketiga eksternal, seperti sistem pengelolaan project atau alat pembuatan tiket.
- Logika aplikasi Chat dihosting di sistem cloud atau lokal yang dapat mengirim pesan dengan menggunakan URL webhook ke ruang Chat tertentu.
- Pengguna dapat menerima pesan dari aplikasi Chat di ruang Chat tertentu, tetapi tidak dapat berinteraksi dengan aplikasi Chat.
Prasyarat
Python
- Akun Google Workspace Business atau Enterprise dengan akses ke Google Chat. Organisasi Google Workspace Anda harus mengizinkan pengguna menambahkan dan menggunakan webhook masuk.
- Python 3.6 atau yang lebih tinggi
- Alat pengelolaan paket pip
Library
httplib2
. Untuk menginstal library, jalankan perintah berikut di antarmuka command line Anda:pip install httplib2
Ruang Google Chat. Untuk membuatnya menggunakan Google Chat API, lihat Membuat ruang. Untuk membuatnya di Chat, buka dokumentasi Pusat Bantuan.
Node.js
- Akun Google Workspace Business atau Enterprise dengan akses ke Google Chat. Organisasi Google Workspace Anda harus mengizinkan pengguna menambahkan dan menggunakan webhook masuk.
- Node.js 14 atau yang lebih baru
- Alat pengelolaan paket npm
- Ruang Google Chat. Untuk membuatnya menggunakan Google Chat API, lihat Membuat ruang. Untuk membuatnya di Chat, buka dokumentasi Pusat Bantuan.
Java
- Akun Google Workspace Business atau Enterprise dengan akses ke Google Chat. Organisasi Google Workspace Anda harus mengizinkan pengguna menambahkan dan menggunakan webhook masuk.
- Java 11 atau yang lebih baru
- Alat pengelolaan paket Maven
- Ruang Google Chat. Untuk membuatnya menggunakan Google Chat API, lihat Membuat ruang. Untuk membuatnya di Chat, buka dokumentasi Pusat Bantuan.
Apps Script
- Akun Google Workspace Business atau Enterprise dengan akses ke Google Chat. Organisasi Google Workspace Anda harus mengizinkan pengguna menambahkan dan menggunakan webhook masuk.
- Buat project Apps Script mandiri, lalu aktifkan Layanan Chat Lanjutan.
- Ruang Google Chat. Untuk membuatnya menggunakan Google Chat API, lihat Membuat ruang. Untuk membuatnya di Chat, buka dokumentasi Pusat Bantuan.
Membuat webhook
Untuk membuat webhook, daftarkan webhook di ruang Chat tempat Anda ingin menerima pesan, lalu tulis skrip yang mengirim pesan.
Mendaftarkan webhook masuk
- Di browser, buka Chat. Webhook tidak dapat dikonfigurasi dari aplikasi seluler Chat.
- Buka ruang tempat Anda ingin menambahkan webhook.
- Di samping judul ruang, klik luaskan panah lainnya, lalu klik Apps &integration.
Klik
Tambahkan webhook.Di kolom Name, masukkan
Quickstart Webhook
.Di kolom Avatar URL, masukkan
https://developers.google.com/chat/images/chat-product-icon.png
.Klik Simpan.
Untuk menyalin URL webhook, klik
Lainnya, lalu klik Salin link.
Tulis skrip webhook
Contoh skrip webhook mengirim pesan ke ruang tempat webhook
terdaftar dengan mengirimkan permintaan POST
ke URL webhook. Chat
API merespons dengan instance
Message
.
Pilih bahasa untuk mempelajari cara membuat skrip webhook:
Python
Di direktori kerja, buat file bernama
quickstart.py
.Di
quickstart.py
, tempelkan kode berikut:Ganti nilai untuk variabel
url
dengan URL webhook yang Anda salin saat mendaftarkan webhook.
Node.js
Di direktori kerja, buat file bernama
index.js
.Di
index.js
, tempelkan kode berikut:Ganti nilai untuk variabel
url
dengan URL webhook yang Anda salin saat mendaftarkan webhook.
Java
Di direktori kerja, buat file bernama
pom.xml
.Di
pom.xml
, salin dan tempel kode berikut:Pada direktori kerja Anda, buat struktur direktori berikut
src/main/java
.Di direktori
src/main/java
, buat file bernamaApp.java
.Di
App.java
, tempel kode berikut:Ganti nilai untuk variabel
URL
dengan URL webhook yang Anda salin saat mendaftarkan webhook.
Apps Script
Di browser, buka Apps Script.
Klik New Project
Tempelkan kode berikut:
Ganti nilai untuk variabel
url
dengan URL webhook yang Anda salin saat mendaftarkan webhook.
Menjalankan skrip webhook
Di CLI, jalankan skrip:
Python
python3 quickstart.py
Node.js
node index.js
Java
mvn compile exec:java -Dexec.mainClass=App
Apps Script
- Klik Run.
Saat Anda menjalankan kode, webhook akan mengirim pesan ke ruang tempat Anda mendaftarkannya.
Memulai atau membalas rangkaian pesan
Tentukan
spaces.messages.thread.threadKey
sebagai bagian dari isi permintaan pesan. Bergantung pada apakah Anda memulai atau membalas rangkaian pesan, gunakan nilai berikut untukthreadKey
:Jika memulai rangkaian pesan, tetapkan
threadKey
ke string arbitrer, tetapi catat nilai ini untuk memposting balasan ke rangkaian pesan.Jika membalas thread, tentukan
threadKey
yang disetel saat thread dimulai. Misalnya, untuk memposting balasan ke rangkaian pesan tempat pesan awal menggunakanMY-THREAD
, tetapkanMY-THREAD
.
Tentukan perilaku thread jika
threadKey
yang ditentukan tidak ditemukan:Membalas rangkaian pesan atau memulai rangkaian pesan baru. Tambahkan parameter
messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD
ke URL webhook. Meneruskan parameter URL ini akan menyebabkan Chat mencari rangkaian pesan yang ada menggunakanthreadKey
yang ditentukan. Jika ditemukan, pesan akan diposting sebagai balasan untuk rangkaian pesan tersebut. Jika tidak ada yang ditemukan, pesan akan memulai rangkaian pesan baru yang sesuai denganthreadKey
tersebut.Membalas rangkaian pesan atau tidak melakukan apa pun. Tambahkan parameter
messageReplyOption=REPLY_MESSAGE_OR_FAIL
ke URL webhook. Meneruskan parameter URL ini akan menyebabkan Chat mencari thread yang ada menggunakanthreadKey
yang ditentukan. Jika ditemukan, pesan akan diposting sebagai balasan untuk rangkaian pesan tersebut. Jika tidak ada yang ditemukan, pesan tidak akan dikirim.
Untuk mempelajari lebih lanjut, lihat
messageReplyOption
.
Contoh kode berikut memulai atau membalas rangkaian pesan:
Python
Node.js
Apps Script
Menangani error
Permintaan webhook dapat gagal karena berbagai alasan, termasuk:
- Permintaan tidak valid.
- Webhook atau ruang yang menghosting webhook akan dihapus.
- Masalah yang terjadi sesekali seperti konektivitas jaringan atau batas kuota.
Saat membuat webhook, Anda harus menangani error dengan tepat dengan:
- Membuat log kegagalan.
- Untuk error konektivitas jaringan, kuota, atau waktu, coba lagi permintaan dengan backoff eksponensial.
- Tidak melakukan apa pun, yang sesuai jika mengirim pesan webhook tidak penting.
Google Chat API menampilkan error sebagai google.rpc.Status
, yang mencakup code
error HTTP yang menunjukkan jenis error yang dialami: error klien (seri 400) atau error server (seri 500). Untuk
meninjau semua pemetaan HTTP, lihat
google.rpc.Code
.
{
"code": 503,
"message": "The service is currently unavailable.",
"status": "UNAVAILABLE"
}
Untuk mempelajari cara menafsirkan kode status HTTP dan menangani error, lihat Error.
Batasan dan pertimbangan
- Saat membuat pesan
dengan webhook di Google Chat API, respons tidak berisi pesan lengkap.
Respons hanya mengisi kolom
name
danthread.name
.