Melakukan autentikasi sebagai aplikasi Google Chat

Panduan ini menjelaskan cara menyiapkan dan menggunakan akun layanan untuk mengakses Google Chat API atas nama aplikasi Chat. Pertama, panduan ini akan memandu Anda membuat akun layanan. Kemudian, contoh ini menunjukkan cara menulis skrip yang menggunakan akun layanan untuk melakukan autentikasi dengan Chat API dan memposting pesan di ruang Chat.

Saat diautentikasi dengan akun layanan, untuk mendapatkan data tentang atau melakukan tindakan di ruang Chat, aplikasi Chat harus memiliki keanggotaan di ruang tersebut. Misalnya, untuk mencantumkan anggota ruang, atau membuat pesan di ruang, aplikasi Chat harus menjadi anggota ruang itu sendiri. Satu-satunya pengecualian adalah saat aplikasi Chat membuat ruang dengan autentikasi aplikasi. Dalam hal ini, aplikasi akan membuat ruang, lalu otomatis menjadi anggota.

Metode Google Chat API yang mendukung otorisasi aplikasi dengan cakupan otorisasi yang memiliki nama yang diawali https://www.googleapis.com/auth/chat.app.* memerlukan persetujuan administrator satu kali. Metode Google Chat API yang mendukung otorisasi aplikasi dengan cakupan otorisasi https://www.googleapis.com/auth/chat.bot tidak memerlukan persetujuan tambahan. Cakupan otorisasi https://www.googleapis.com/auth/chat.app.* tersedia di Pratinjau Developer.

Jika aplikasi Chat Anda perlu mengakses data pengguna atau melakukan tindakan atas nama pengguna, autentikasi sebagai pengguna. Jika Anda adalah administrator domain, Anda dapat memberikan delegasi tingkat domain untuk memberikan otorisasi kepada akun layanan aplikasi Chat untuk mengakses data pengguna tanpa mewajibkan setiap pengguna memberikan izin. Untuk informasi selengkapnya, lihat Mengautentikasi dan memberikan otorisasi menggunakan delegasi tingkat domain.

Untuk mempelajari lebih lanjut kapan aplikasi Chat memerlukan autentikasi dan jenis autentikasi yang akan digunakan, lihat Jenis autentikasi yang diperlukan dalam ringkasan autentikasi dan otorisasi Chat API.

Prasyarat

Java

  • JDK 1.7 atau yang lebih baru
  • Alat pengelolaan paket Maven
  • Project Maven yang diinisialisasi. Untuk melakukan inisialisasi project baru, jalankan perintah berikut di antarmuka command line Anda:
    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

Node.js

  • Node.js 14 atau yang lebih baru
  • Alat pengelolaan paket npm
  • Project Node.js yang diinisialisasi. Untuk menginisialisasi project baru, buat dan beralih ke folder baru, lalu jalankan perintah berikut di antarmuka command line:
    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

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

  1. Di konsol Google Cloud, buka Menu > IAM & Admin > Service Accounts.

    Buka Akun Layanan

  2. Klik Create service account.
  3. Isi detail akun layanan, lalu klik Buat dan lanjutkan.
  4. Opsional: Tetapkan peran ke akun layanan untuk memberikan akses ke resource project Google Cloud Anda. Untuk detail selengkapnya, lihat Memberikan, mengubah, dan mencabut akses ke resource.
  5. Klik Lanjutkan.
  6. Opsional: Masukkan pengguna atau grup yang dapat mengelola dan melakukan tindakan dengan akun layanan ini. Untuk mengetahui detail selengkapnya, lihat Mengelola peniruan identitas akun layanan.
  7. Klik Selesai. Catat alamat email untuk akun layanan.

gcloud CLI

  1. Buat akun layanan:
    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
      --display-name="SERVICE_ACCOUNT_NAME"
  2. Opsional: Tetapkan peran ke akun layanan Anda untuk memberikan akses ke resource project Google Cloud Anda. Untuk mengetahui detail selengkapnya, lihat Memberikan, mengubah, dan mencabut akses ke resource.

Akun layanan akan muncul di halaman akun layanan. Selanjutnya, buat kunci pribadi untuk akun layanan.

Membuat kunci pribadi

Untuk membuat dan mendownload kunci pribadi untuk akun layanan, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud, buka Menu > IAM & Admin > Service Accounts.

    Buka Akun Layanan

  2. Pilih akun layanan Anda.
  3. Klik Keys > Add key > Create new key.
  4. Pilih JSON, lalu klik Buat.

    Pasangan kunci publik/pribadi baru Anda akan dibuat dan didownload ke komputer Anda sebagai file baru. Simpan file JSON yang didownload sebagai credentials.json di direktori kerja Anda. File ini adalah satu-satunya salinan kunci ini. Untuk informasi tentang cara menyimpan kunci Anda dengan aman, lihat Mengelola kunci akun layanan.

  5. Klik Tutup.

Untuk mengetahui informasi selengkapnya tentang akun layanan, lihat akun layanan dalam dokumentasi IAM Google Cloud.

Selanjutnya, buat klien OAuth yang kompatibel dengan Google Workspace Marketplace untuk akun layanan ini.

Menerima persetujuan administrator

Untuk menggunakan cakupan otorisasi yang dimulai dengan https://www.googleapis.com/auth/chat.app.*, yang tersedia sebagai bagian dari Pratinjau Developer, aplikasi Chat Anda harus mendapatkan persetujuan administrator satu kali.

Untuk menggunakan cakupan otorisasi https://www.googleapis.com/auth/chat.bot, Anda tidak memerlukan persetujuan administrator.

Untuk menerima persetujuan administrator, Anda harus menyiapkan akun layanan aplikasi Chat dengan informasi berikut:

  • Klien OAuth yang kompatibel dengan Google Workspace Marketplace.
  • Konfigurasi aplikasi di Google Workspace Marketplace SDK.

Membuat klien OAuth yang kompatibel dengan Google Workspace Marketplace

Untuk membuat klien OAuth yang kompatibel dengan Google Workspace Marketplace, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud, buka Menu > IAM & Admin > Service Accounts.

    Buka Akun Layanan

  2. Klik akun layanan yang Anda buat untuk aplikasi Chat.

  3. Klik Setelan lanjutan.

  4. Klik Buat klien OAuth yang kompatibel dengan Google Workspace Marketplace.

  5. Klik Lanjutkan.

Pesan konfirmasi akan muncul yang menyatakan bahwa klien OAuth yang kompatibel dengan Google Workspace Marketplace telah dibuat.

Mengonfigurasi aplikasi Chat di Google Workspace Marketplace SDK

Untuk mengonfigurasi aplikasi Chat di Google Workspace Marketplace SDK, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud, aktifkan Google Workspace Marketplace SDK.

    Mengaktifkan Google Workspace Marketplace SDK

  2. Di konsol Google Cloud, buka Menu > API & Layanan > API & layanan yang diaktifkan > SDK Google Workspace Marketplace > Konfigurasi Aplikasi.

    Buka Konfigurasi Aplikasi

  3. Selesaikan halaman Konfigurasi Aplikasi. Cara mengonfigurasi aplikasi Chat bergantung pada siapa audiens yang Anda tuju dan faktor lainnya. Untuk mendapatkan bantuan dalam menyelesaikan halaman konfigurasi aplikasi, lihat Mengonfigurasi aplikasi Anda di Google Workspace Marketplace SDK. Untuk tujuan panduan ini, masukkan informasi berikut:

    1. Di bagian Visibilitas aplikasi, pilih Pribadi.
    2. Di bagian Setelan penginstalan, pilih Penginstalan individu + admin.
    3. Di bagian App integration, pilih Chat app.
    4. Di bagian Cakupan OAuth, masukkan semua cakupan autentikasi yang digunakan aplikasi Chat Anda.

    5. Di bagian Informasi developer, masukkan Nama developer, URL situs developer, dan Email developer.

    6. Klik Simpan draf.

Mendapatkan persetujuan administrator

Setelah akun layanan Anda dikonfigurasi untuk menerima persetujuan administrator, dapatkan persetujuan dari administrator Google Workspace yang dapat memberikan persetujuan dengan mengikuti langkah-langkah di Menyiapkan otorisasi untuk aplikasi Chat.

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 project Maven, edit file pom.xml di direktori project dan 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, beralihlah ke direktori project dan jalankan perintah berikut di antarmuka command line:

npm install "@googleapis/chat"

Apps Script

Contoh ini menggunakan library OAuth2 untuk Apps Script untuk membuat token JWT untuk autentikasi akun layanan. Untuk menambahkan library ke project Apps Script Anda:

  1. Di sebelah kiri, klik Editor .
  2. Di sebelah kiri, di samping Library, klik Add a library .
  3. Masukkan ID skrip 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF.
  4. Klik Cari, lalu klik Tambahkan.

Contoh ini menggunakan layanan Chat Lanjutan untuk memanggil Google Chat API. Untuk mengaktifkan layanan untuk project Apps Script Anda:

  1. Di sebelah kiri, klik Editor .
  2. Di sebelah kiri, di samping Layanan, klik Tambahkan layanan .
  3. Pilih Google Chat API.
  4. Di Version, pilih v1.
  5. Klik Tambahkan.

Anda dapat menggunakan bahasa apa pun yang didukung oleh library klien kami.

Langkah 3: Tulis skrip yang menggunakan akun layanan untuk mengautentikasi dengan Chat API

Kode berikut melakukan autentikasi dengan Chat API menggunakan akun layanan, lalu memposting pesan ke ruang Chat:

Java

  1. Di direktori project, buka file src/main/java/com/google/chat/app/authsample/App.java.
  2. 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 using 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();
        }
    }
    
  3. Dalam kode, ganti SPACE_NAME dengan nama ruang, yang dapat Anda peroleh dari metode spaces.list di Chat API, atau dari URL ruang.

  4. Buat subdirektori baru bernama resources dalam direktori project Anda.

  5. Pastikan file kunci pribadi untuk akun layanan Anda bernama credentials.json dan salin ke subdirektori resources.

  6. Untuk mengonfigurasi Maven agar menyertakan file kunci pribadi dalam paket project, edit file pom.xml di direktori project Anda dan tambahkan konfigurasi berikut ke bagian <build>:

    <build>
      <!-- ... existing configurations ... -->
      <resources>
        <resource>
          <directory>resources</directory>
        </resource>
      </resources>
    </build>
    
  7. Untuk mengonfigurasi Maven agar menyertakan dependensi dalam paket project dan untuk menjalankan class utama aplikasi, edit file pom.xml dalam direktori project Anda 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

  1. Di direktori kerja, buat file bernama chat_app_auth.py.
  2. 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.
    creds = 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=creds)
    
    # 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)
    
  3. Dalam kode, ganti SPACE_NAME dengan nama ruang, yang dapat Anda peroleh dari metode spaces.list di Chat API, atau dari URL ruang. Pastikan file kunci pribadi untuk akun layanan Anda bernama credentials.json.

Node.js

  1. Di direktori project, buat file bernama chat_app_auth.js.
  2. 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);
    
  3. Dalam kode, ganti SPACE_NAME dengan nama ruang, yang dapat Anda peroleh dari metode spaces.list di Chat API, atau dari URL ruang. Pastikan file kunci pribadi untuk akun layanan Anda diberi nama credentials.json.

Apps Script

  1. 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"
      ]
    
  2. 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 using 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());
    }
    
  3. Dalam kode, ganti CREDENTIALS dengan konten file credentials.json.

  4. Dalam kode, ganti SPACE_NAME dengan nama ruang, yang dapat Anda peroleh dari metode spaces.list di Chat API, atau dari URL ruang.

Langkah 4: Jalankan contoh lengkap

Di 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 alami saat mencoba 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 aplikasi Chat tidak memiliki izin untuk membuat pesan Chat di ruang Chat yang ditentukan.

Untuk mengatasi error, tambahkan aplikasi Chat ke ruang Chat yang ditentukan dalam skrip.

Administrator harus memberikan cakupan otorisasi OAuth yang diperlukan untuk tindakan ini kepada aplikasi

Saat menjalankan skrip, Anda mungkin menerima error yang bertuliskan:

<HttpError 403 when requesting https://chat.googleapis.com/v1/spaces/{space}?alt=json returned "The administrator must grant the app the required OAuth authorization scope for this action.". Details: "The administrator must grant the app the required OAuth authorization scope for this action.">

Pesan error ini berarti administrator Google Workspace belum memberikan persetujuan satu kali ke aplikasi Chat untuk menggunakan cakupan otorisasi yang dimulai dengan nama https://www.googleapis.com/auth/chat.app.*.

Untuk mengatasi error:

  • Minta administrator Google Workspace untuk memberikan persetujuan ke aplikasi Chat Anda. Saat menangani error ini dalam logika aplikasi Chat, pertimbangkan untuk mengirim pesan yang mengumumkan bahwa aplikasi Chat memerlukan persetujuan administrator untuk melakukan tindakan yang diminta, misalnya: To perform this action, I need approval. <https://support.google.com/a?p=chat-app-auth|Learn more>.
  • Jika metode Google Chat API mendukung cakupan otorisasi https://www.googleapis.com/auth/chat.bot, yang tidak memerlukan persetujuan administrator, sebaiknya gunakan metode tersebut. Untuk memeriksa cakupan otorisasi yang didukung metode, lihat dokumentasi referensi Google Chat API.