Panduan ini menjelaskan cara menyiapkan dan menggunakan akun layanan untuk mengakses API Google Chat atas nama aplikasi Chat. Pertama, akan memandu Anda membuat akun layanan. Kemudian, ini menunjukkan bagaimana menulis skrip yang menggunakan akun layanan untuk melakukan autentikasi dengan Chat API dan memposting pesan di ruang Chat.
Aplikasi Chat dapat menggunakan akun layanan untuk mengautentikasi saat melakukan panggilan secara asinkron Google Chat API sehingga mereka dapat:
- Kirim pesan ke Google Chat dengan
spaces.messages.create
menjadi:- Memberi tahu pengguna saat tugas latar belakang yang berjalan lama selesai berjalan.
- Beri tahu pengguna bahwa server telah offline.
- Minta staf dukungan pelanggan untuk cenderung menangani kasus pelanggan yang baru dibuka.
- Perbarui pesan yang dikirim sebelumnya dengan
spaces.messages.update
menjadi:- Mengubah status operasi yang sedang berlangsung.
- Perbarui penerima tugas atau batas waktu tugas.
- Mencantumkan pengguna dalam ruang dengan
spaces.members.list
menjadi:- Melihat siapa saja yang ada dalam ruang.
- Memastikan keanggotaan ruang mencakup semua orang dalam tim.
Saat diautentikasi dengan akun layanan, untuk mendapatkan data atau melakukan tindakan di ruang Chat, aplikasi Chat harus memiliki keanggotaan di ruang tersebut. Misalnya, untuk membuat daftar anggota ruang, atau membuat pesan dalam ruang, aplikasi Chat harus menjadi anggota ruang itu sendiri.
Jika aplikasi Chat Anda perlu mengakses data pengguna atau melakukan tindakan pada , autentikasi sebagai pengguna.
Jika Anda administrator domain, Anda dapat memberikan delegasi tingkat domain untuk mengizinkan akun layanan aplikasi mengakses data tanpa mengharuskan setiap pengguna untuk memberikan persetujuan. Setelah Anda mengkonfigurasi delegasi tingkat domain, Anda dapat melakukan panggilan API menggunakan akun layanan untuk meniru identitas akun pengguna. Meskipun akun layanan digunakan untuk otentikasi, delegasi tingkat domain menyamar sebagai pengguna dan karenanya dianggap sebagai autentikasi pengguna. Fungsi apa pun yang memerlukan pengguna otentikasi, Anda dapat menggunakan delegasi tingkat domain.
Untuk mempelajari lebih lanjut kapan aplikasi Chat memerlukan autentikasi dan jenis otentikasi apa yang digunakan, lihat Jenis autentikasi yang diperlukan di ringkasan autentikasi dan otorisasi Chat API.
Prasyarat
Java
- JDK 1.7 atau yang lebih baru
- Alat pengelolaan paket Maven
-
Project Maven yang diinisialisasi. Untuk menginisialisasi project baru, jalankan perintah berikut di
antarmuka command line:
mvn archetype:generate -DgroupId=com.google.chat.app.authsample -DartifactId=auth-sample-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
- Aplikasi Google Chat yang diaktifkan untuk fitur interaktif. Untuk membuat aplikasi Chat interaktif menggunakan layanan HTTP, selesaikan panduan memulai ini.
- Tambahkan aplikasi Chat ke ruang. Untuk menambahkan Aplikasi Chat, lihat Menguji fitur interaktif untuk aplikasi Google Chat.
Python
- Python 3.6 atau yang lebih baru
- Alat pengelolaan paket pip
- Aplikasi Google Chat yang diaktifkan untuk fitur interaktif. Untuk membuat aplikasi Chat interaktif menggunakan layanan HTTP, selesaikan panduan memulai ini.
- Tambahkan aplikasi Chat ke ruang. Untuk menambahkan Aplikasi Chat, lihat Menguji fitur interaktif untuk aplikasi Google Chat.
Node.js
- Node.js 14 atau yang lebih baru
- npm alat pengelolaan paket
-
Project Node.js yang diinisialisasi. Untuk menginisialisasi proyek baru, buat dan
beralih ke folder baru, lalu jalankan perintah berikut di antarmuka command line Anda:
npm init
- Aplikasi Google Chat yang diaktifkan untuk fitur interaktif. Untuk membuat aplikasi Chat interaktif menggunakan layanan HTTP, selesaikan panduan memulai ini.
- Tambahkan aplikasi Chat ke ruang. Untuk menambahkan Aplikasi Chat, lihat Menguji fitur interaktif untuk aplikasi Google Chat.
Apps Script
- Aplikasi Google Chat yang diaktifkan untuk fitur interaktif. Untuk membuat aplikasi Chat interaktif di Apps Script, selesaikan panduan memulai ini.
- Tambahkan aplikasi Chat ke ruang. Untuk menambahkan Aplikasi Chat, lihat Menguji fitur interaktif untuk aplikasi Google Chat.
Langkah 1: Buat akun layanan di Konsol Google Cloud
Buat akun layanan yang dapat digunakan aplikasi Chat Anda untuk mengakses Google API.
Membuat akun layanan
Untuk membuat akun layanan, ikuti langkah-langkah berikut:
Konsol Google Cloud
- Di konsol Google Cloud, buka Menu > IAM & Admin > Akun Layanan.
- Klik Create service account.
- Isi detail akun layanan, lalu klik Buat dan lanjutkan.
- Opsional: Tetapkan peran ke akun layanan Anda untuk memberikan akses ke resource project Google Cloud Anda. Untuk detail selengkapnya, lihat Memberikan, mengubah, dan mencabut akses ke resource.
- Klik Lanjutkan.
- Opsional: Masukkan pengguna atau grup yang dapat mengelola dan melakukan tindakan dengan akun layanan ini. Untuk mengetahui detail selengkapnya, lihat Mengelola peniruan akun layanan.
- Klik Selesai. Catat alamat email untuk akun layanan.
gcloud CLI
- Buat akun layanan:
gcloud iam service-accounts create
SERVICE_ACCOUNT_NAME
\ --display-name="SERVICE_ACCOUNT_NAME
" - Opsional: Tetapkan peran ke akun layanan Anda untuk memberikan akses ke resource project Google Cloud Anda. Untuk detail selengkapnya, lihat Memberikan, mengubah, dan mencabut akses ke resource.
Akun layanan akan muncul di halaman akun layanan. Selanjutnya, buat kunci untuk akun layanan.
Membuat kunci pribadi
Untuk membuat dan mendownload kunci pribadi untuk akun layanan, ikuti langkah-langkah berikut:
- Di konsol Google Cloud, buka Menu > IAM & Admin > Akun Layanan.
- Pilih akun layanan Anda.
- Klik Kunci > Tambahkan kunci > Buat kunci baru.
- Pilih JSON, lalu klik Buat.
Pasangan kunci publik/pribadi baru Anda dibuat dan diunduh ke komputer sebagai file baru. Simpan file JSON yang didownload sebagai
credentials.json
di direktori kerja. File ini adalah satu-satunya salinan kunci ini. Untuk informasi tentang cara menyimpan kunci Anda dengan aman, lihat Mengelola kunci akun layanan. - Klik Tutup.
Untuk informasi selengkapnya tentang akun layanan, lihat akun layanan dalam dokumentasi Google Cloud IAM.
Langkah 2: Instal library klien Google dan dependensi lainnya
Instal library klien Google dan dependensi lain yang diperlukan untuk project.
Java
Untuk menambahkan library klien Google dan dependensi lain yang diperlukan ke
pada project Maven, edit file pom.xml
di direktori project Anda lalu tambahkan
dependensi berikut:
<dependencies>
<!-- ... existing dependencies ... -->
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-chat</artifactId>
<version>v1-rev20230905-2.0.0</version>
</dependency>
<dependency>
<groupId>com.google.auth</groupId>
<artifactId>google-auth-library-oauth2-http</artifactId>
<version>1.19.0</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
</dependencies>
Python
Jika Anda belum menginstal library klien Google untuk Python, jalankan perintah berikut di antarmuka command line Anda:
pip3 install --upgrade google-api-python-client google-auth
Node.js
Untuk menambahkan library klien Google ke project Node.js Anda, beralihlah ke direktori project dan jalankan perintah berikut di antarmuka command line Anda:
npm install "@googleapis/chat"
Apps Script
Contoh ini menggunakan OAuth2 untuk library Apps Script guna menghasilkan token JWT untuk otentikasi akun layanan. Untuk menambahkan library ke project Apps Script Anda:
- Di sebelah kiri, klik Editor .
- Di sebelah kiri, di samping Koleksi, klik Tambahkan koleksi .
- Masukkan ID skrip
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
. - Klik Cari, lalu klik Tambahkan.
Contoh ini menggunakan Layanan Chat lanjutan untuk memanggil Google Chat API. Untuk mengaktifkan layanan bagi Project Apps Script:
- Di sebelah kiri, klik Editor .
- Di sebelah kiri, di samping Layanan, klik Tambahkan layanan .
- Pilih Google Chat API.
- Di Version, pilih v1.
- Klik Tambahkan.
Anda dapat menggunakan bahasa apa pun yang didukung oleh library klien.
Langkah 3: Tulis skrip yang menggunakan akun layanan untuk melakukan autentikasi dengan Chat API
Kode berikut melakukan autentikasi dengan Chat API menggunakan akun layanan, lalu memposting pesan ke ruang Chat:
Java
- Di direktori project, buka file tersebut
src/main/java/com/google/chat/app/authsample/App.java
. Ganti konten di
App.java
dengan kode berikut:package com.google.chat.app.authsample; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpRequestInitializer; import com.google.api.client.json.gson.GsonFactory; import com.google.api.services.chat.v1.HangoutsChat; import com.google.api.services.chat.v1.model.Message; import com.google.auth.http.HttpCredentialsAdapter; import com.google.auth.oauth2.GoogleCredentials; /** * Authenticates with Chat API via service account credentials, * then creates a Chat message. */ public class App { // Specify required scopes. private static final String CHAT_SCOPE = "https://www.googleapis.com/auth/chat.bot"; // Specify service account details. private static final String PRIVATE_KEY_RESOURCE_URI = "/credentials.json"; public static void main( String[] args ) { try { // Run app. Message response = App.createChatMessage(); // Print details about the created message. System.out.println(response); } catch (Exception e) { e.printStackTrace(); } } private static Message createChatMessage() throws Exception { // Build the Chat API client and authenticate with the service account. GoogleCredentials credentials = GoogleCredentials.fromStream( App.class.getResourceAsStream(PRIVATE_KEY_RESOURCE_URI)) .createScoped(CHAT_SCOPE); HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(credentials); HangoutsChat chatService = new HangoutsChat.Builder( GoogleNetHttpTransport.newTrustedTransport(), GsonFactory.getDefaultInstance(), requestInitializer) .setApplicationName("auth-sample-app") .build(); // The space to create the message in. // // Replace SPACE_NAME with a space name. // Obtain the space name from the spaces resource of Chat API, // or from a space's URL. String spaceName = "spaces/SPACE_NAME"; // Create a Chat message. Message message = new Message().setText("Hello, world!"); return chatService.spaces().messages().create(spaceName, message).execute(); } }
Dalam kode, ganti
SPACE_NAME
dengan spasi Anda, yang dapat diperoleh darispaces.list
di Chat API, atau dari URL ruang.Buat subdirektori baru bernama
resources
dalam direktori project Anda.Pastikan file kunci pribadi untuk akun layanan Anda diberi nama
credentials.json
, lalu salin ke subdirektoriresources
.Untuk mengonfigurasi Maven agar menyertakan file kunci pribadi dalam paket project, edit file
pom.xml
di direktori project Anda dan tambahkan berikut ini konfigurasi ke bagian<build>
:<build> <!-- ... existing configurations ... --> <resources> <resource> <directory>resources</directory> </resource> </resources> </build>
Untuk mengonfigurasi Maven agar menyertakan dependensi dalam paket project dan untuk mengeksekusi class utama aplikasi Anda, edit file
pom.xml
di pada direktori project dan tambahkan konfigurasi berikut ke Bagian<plugins>
:<plugins> <!-- ... existing configurations ... --> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.google.chat.app.authsample.App</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin> </plugins>
Python
- Di direktori kerja, buat file bernama
chat_app_auth.py
. Sertakan kode berikut di
chat_app_auth.py
:from apiclient.discovery import build from google.oauth2 import service_account # Specify required scopes. SCOPES = ['https://www.googleapis.com/auth/chat.bot'] # Specify service account details. CREDENTIALS = service_account.Credentials.from_service_account_file( 'credentials.json', scopes=SCOPES) # Build the URI and authenticate with the service account. chat = build('chat', 'v1', credentials=CREDENTIALS) # Create a Chat message. result = chat.spaces().messages().create( # The space to create the message in. # # Replace SPACE_NAME with a space name. # Obtain the space name from the spaces resource of Chat API, # or from a space's URL. parent='spaces/SPACE_NAME', # The message to create. body={'text': 'Hello, world!'} ).execute() # Prints details about the created message. print(result)
Dalam kode, ganti
SPACE_NAME
dengan spasi Anda, yang dapat diperoleh darispaces.list
di Chat API, atau dari URL ruang. Pastikan bahwa file kunci pribadi untuk akun layanan Anda diberi namacredentials.json
.
Node.js
- Di direktori project Anda, buat file bernama
chat_app_auth.js
. Sertakan kode berikut di
chat_app_auth.js
:const chat = require('@googleapis/chat'); async function createMessage() { const auth = new chat.auth.GoogleAuth({ // Specify service account details. keyFilename: 'credentials.json', // Specify required scopes. scopes: ['https://www.googleapis.com/auth/chat.bot'] }); const authClient = await auth.getClient(); // Create the Chat API client and authenticate with the service account. const chatClient = await chat.chat({ version: 'v1', auth: authClient }); // Create a Chat message. const result = await chatClient.spaces.messages.create({ // The space to create the message in. // // Replace SPACE_NAME with a space name. // Obtain the space name from the spaces resource of Chat API, // or from a space's URL. parent: 'spaces/SPACE_NAME', // The message to create. requestBody: { 'text': 'Hello, world!' } }); return result; } // Execute function then print details about the created message. createMessage().then(console.log);
Dalam kode, ganti
SPACE_NAME
dengan spasi Anda, yang dapat diperoleh darispaces.list
di Chat API, atau dari URL ruang. Pastikan bahwa file kunci pribadi untuk akun layanan Anda diberi namacredentials.json
.
Apps Script
Di editor Apps Script, edit file
appsscript.json
dan tambahkan cakupan OAuth yang diperlukan untuk membuat permintaan eksternal guna mendapatkan token OAuth akun layanan:"oauthScopes": [ "https://www.googleapis.com/auth/script.external_request" ]
Simpan kode berikut dalam file bernama
ChatAppAuth.gs
di project Apps Script Anda:// Specify the contents of the file credentials.json. const CREDENTIALS = CREDENTIALS; const SCOPE = 'https://www.googleapis.com/auth/chat.bot'; // The space to create the message in. // // Replace SPACE_NAME with a space name. // Obtain the space name from the spaces resource of Chat API, // or from a space's URL. const PARENT = 'spaces/SPACE_NAME' /** * Authenticates with Chat API via app credentials, then posts a message. */ function createMessageWithAppCredentials() { try { const service = getService_(); if (!service.hasAccess()) { console.error(service.getLastError()); return; } // Specify the message to create. const message = {'text': 'Hello world!'}; // Call Chat API with a service account to create a message. const result = Chat.Spaces.Messages.create( message, PARENT, {}, // Authenticate with the service account token. {'Authorization': 'Bearer ' + service.getAccessToken()}); // Log details about the created message. console.log(result); } catch (err) { // TODO (developer) - Handle exception. console.log('Failed to create message with error %s', err.message); } } /** * Configures the OAuth library to authenticate with the service account. */ function getService_() { return OAuth2.createService(CREDENTIALS.client_email) .setTokenUrl('https://oauth2.googleapis.com/token') .setPrivateKey(CREDENTIALS.private_key) .setIssuer(CREDENTIALS.client_email) .setSubject(CREDENTIALS.client_email) .setScope(SCOPE) .setPropertyStore(PropertiesService.getScriptProperties()); }
Dalam kode, ganti
CREDENTIALS
dengan isi filecredentials.json
.Dalam kode, ganti
SPACE_NAME
dengan spasi Anda, yang dapat diperoleh darispaces.list
di Chat API, atau dari URL ruang.
Langkah 4: Jalankan contoh lengkap
Dalam direktori kerja, build dan jalankan contoh:
Java
mvn compile assembly:single
java -jar target/auth-sample-app-1.0-SNAPSHOT-jar-with-dependencies.jar
Python
python3 chat_app_auth.py
Node.js
node chat_app_auth.js
Apps Script
Buka file ChatAppAuth.gs
di Editor Apps Script dan
klik Run.
Skrip Anda membuat permintaan yang diautentikasi ke Chat API, yang merespons dengan memposting pesan di ruang Chat sebagai aplikasi Chat.
Memecahkan masalah contoh
Bagian ini menjelaskan masalah umum yang mungkin Anda temui saat mencoba untuk menjalankan contoh ini.
Anda tidak diizinkan menggunakan aplikasi ini
Saat menjalankan skrip, Anda mungkin menerima error yang bertuliskan:
<HttpError 403 when requesting https://chat.googleapis.com/v1/spaces/{space}/messages?alt=json returned "You are not permitted to use this app". Details: "You are not permitted to use this app">
Pesan error ini berarti bahwa aplikasi Chat tidak memiliki izin untuk membuat pesan Chat di kolom yang ditentukan Ruang Chat.
Untuk mengatasi error, tambahkan aplikasi Chat ke ruang Chat yang ditentukan dalam skrip.
Topik terkait
Pelajari apa lagi yang dapat dilakukan Chat API dengan meninjau Chat API dokumentasi referensi.