Menerima dan merespons interaksi dengan aplikasi Google Chat Anda

Halaman ini menjelaskan cara aplikasi Google Chat Anda dapat menerima dan merespons interaksi pengguna, yang juga dikenal sebagai peristiwa interaksi aplikasi Google Chat.

Peristiwa interaksi aplikasi Google Chat mewakili tindakan apa pun yang dilakukan pengguna untuk memanggil atau berinteraksi dengan aplikasi Chat, seperti @menyebut aplikasi Chat atau menambahkannya ke ruang. Saat pengguna berinteraksi dengan aplikasi Chat, Google Chat akan mengirimkan peristiwa interaksi ke aplikasi Chat. Aplikasi Chat dapat menggunakan peristiwa untuk memproses interaksi dan membuat respons.

Misalnya, aplikasi Chat menggunakan peristiwa interaksi untuk melakukan salah satu hal berikut:

Contoh peristiwa interaksi Respons umum dari aplikasi Chat
Pengguna memanggil aplikasi Chat dengan @menyebutnya atau menggunakan perintah garis miring. Aplikasi Chat memproses ucapan pesan untuk membuat pesan. Misalnya, aplikasi Chat membalas perintah /about dengan pesan yang menjelaskan tugas yang dapat dilakukan aplikasi Chat.
Pengguna menambahkan aplikasi Chat ke ruang. Aplikasi Chat mengirim pesan orientasi yang menjelaskan tindakannya dan cara pengguna dalam ruang dapat berinteraksi dengannya.
Pengguna menghapus aplikasi Chat dari ruang. Aplikasi Chat menghapus semua notifikasi masuk yang dikonfigurasi untuk ruang (seperti menghapus webhook) dan mengosongkan semua penyimpanan internal.
Pengguna mengklik tombol pada kartu atau dialog yang dikirim oleh aplikasi Chat. Aplikasi Chat memproses dan menyimpan data apa pun yang dikirimkan pengguna, atau menampilkan kartu atau dialog lain.

Untuk setiap jenis interaksi pengguna, Google Chat mengirimkan jenis peristiwa interaksi yang berbeda. Misalnya, Google Chat menggunakan jenis peristiwa MESSAGE untuk interaksi apa pun ketika pengguna memanggil aplikasi Chat dalam pesan. Untuk mengetahui detailnya, lihat Jenis peristiwa interaksi aplikasi Google Chat.

Halaman ini menjelaskan cara melakukan hal berikut:

  • Konfigurasi aplikasi Chat Anda untuk menerima peristiwa.
  • Proses peristiwa interaksi di infrastruktur Anda.
  • Jika memungkinkan, respons peristiwa interaksi.

Menerima peristiwa interaksi aplikasi Chat

Bagian ini menjelaskan cara menerima dan memproses peristiwa interaksi untuk aplikasi Chat Anda.

Mengonfigurasi aplikasi Chat Anda untuk menerima peristiwa interaksi

Tidak semua aplikasi Chat bersifat interaktif. Misalnya, Webhook masuk hanya dapat mengirim pesan keluar dan tidak dapat merespons pengguna. Jika mem-build aplikasi Chat interaktif, Anda harus memilih endpoint yang memungkinkan aplikasi Chat menerima, memproses, dan merespons peristiwa interaksi. Untuk mempelajari cara mendesain aplikasi Chat lebih lanjut, lihat Arsitektur implementasi aplikasi Chat.

Jika telah membuat aplikasi Chat interaktif, Anda harus mengonfigurasi Google Chat API agar Google Chat dapat mengirimkan peristiwa interaksi kepada Anda:

  1. Di konsol Google Cloud, buka halaman Google Chat API:

    Buka halaman Google Chat API

  2. Klik tab Configuration.
  3. Di bagian Interactive features, klik tombol Aktifkan fitur interaktif ke posisi aktif.
  4. Di Functionality, pilih salah satu atau kedua kotak centang berikut:
    1. Menerima pesan 1:1: Memungkinkan pengguna berinteraksi dengan aplikasi Chat Anda di ruang pesan langsung (DM). Aplikasi Chat Anda menerima peristiwa interaksi setiap kali pengguna mengirim pesan di ruang DM.
    2. Bergabung ke ruang dan percakapan grup: Memungkinkan pengguna menambahkan dan menghapus aplikasi Chat Anda ke ruang dengan lebih dari satu orang. Aplikasi Chat Anda menerima peristiwa interaksi setiap kali ditambahkan atau dihapus dari ruang, dan setiap kali pengguna @menyebut atau menggunakan perintah garis miring dalam ruang.
  5. Di Setelan koneksi, tentukan tempat Google Chat mengirimkan peristiwa interaksi aplikasi Chat.
  6. Opsional: Di Perintah garis miring, tambahkan dan konfigurasi satu atau beberapa perintah garis miring. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan perintah garis miring.
  7. Opsional: Di Pratinjau link, tambahkan dan konfigurasi satu atau beberapa pola URL yang dipratinjau aplikasi Chat Anda. Untuk informasi lebih lanjut, lihat Pratinjau link.
  8. Klik Save.

Aplikasi Chat Anda kini dikonfigurasi untuk menerima peristiwa interaksi dari Google Chat.

Melakukan autentikasi permintaan dari Google Chat

Untuk aplikasi yang dibangun di endpoint HTTP, bagian ini menjelaskan cara memverifikasi bahwa permintaan ke endpoint Anda berasal dari Google Chat.

Untuk mengirim peristiwa interaksi ke endpoint aplikasi Chat Anda, Google membuat permintaan ke layanan Anda. Untuk memverifikasi bahwa permintaan berasal dari Google, Google Chat menyertakan token pemilik di header Authorization dari setiap permintaan HTTPS ke endpoint Anda. Contoh:

POST
Host: yourappurl.com
Authorization: Bearer AbCdEf123456
Content-Type: application/json
User-Agent: Google-Dynamite

String AbCdEf123456 dalam contoh di atas adalah token otorisasi pembawa. Ini adalah token kriptografi yang dibuat oleh Google. Anda dapat memverifikasi token pemilik menggunakan library klien Google API open source:

Untuk token pemilik yang dikirim dalam permintaan Google Chat, penerbitnya adalah chat@system.gserviceaccount.com dan kolom audience ditetapkan ke nomor project Google Cloud yang Anda gunakan untuk mem-build aplikasi Chat. Misalnya, jika nomor project Cloud aplikasi Chat Anda adalah 1234567890, maka kolom audience di token pemilik adalah 1234567890.

Jika token tidak memverifikasi aplikasi Chat, layanan Anda harus merespons permintaan dengan kode respons HTTPS 401 (Unauthorized).

Java

import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;

import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;
import com.google.api.client.googleapis.auth.oauth2.GooglePublicKeysManager;
import com.google.api.client.http.apache.ApacheHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson.JacksonFactory;

/** Tool for verifying JWT Tokens for Apps in Google Chat. */
public class JWTVerify {
  // Bearer Tokens received by apps will always specify this issuer.
  static String CHAT_ISSUER = "chat@system.gserviceaccount.com";

  // Url to obtain the public certificate for the issuer.
  static String PUBLIC_CERT_URL_PREFIX =
      "https://www.googleapis.com/service_accounts/v1/metadata/x509/";

  // Intended audience of the token, which is the project number of the app.
  static String AUDIENCE = "1234567890";

  // Get this value from the request's Authorization HTTPS header.
  // For example, for "Authorization: Bearer AbCdEf123456" use "AbCdEf123456"
  static String BEARER_TOKEN = "AbCdEf123456";

  public static void main(String[] args) throws GeneralSecurityException, IOException {
    JsonFactory factory = new JacksonFactory();

    GooglePublicKeysManager.Builder keyManagerBuilder =
        new GooglePublicKeysManager.Builder(new ApacheHttpTransport(), factory);

    String certUrl = PUBLIC_CERT_URL_PREFIX + CHAT_ISSUER;
    keyManagerBuilder.setPublicCertsEncodedUrl(certUrl);

    GoogleIdTokenVerifier.Builder verifierBuilder =
        new GoogleIdTokenVerifier.Builder(keyManagerBuilder.build());
    verifierBuilder.setIssuer(CHAT_ISSUER);
    GoogleIdTokenVerifier verifier = verifierBuilder.build();

    GoogleIdToken idToken = GoogleIdToken.parse(factory, BEARER_TOKEN);
    if (idToken == null) {
      System.out.println("Token cannot be parsed");
      System.exit(-1);
    }

    // Verify valid token, signed by CHAT_ISSUER.
    if (!verifier.verify(idToken)
        || !idToken.verifyAudience(Collections.singletonList(AUDIENCE))
        || !idToken.verifyIssuer(CHAT_ISSUER)) {
      System.out.println("Invalid token");
      System.exit(-1);
    }

    // Token originates from Google and is targeted to a specific client.
    System.out.println("The token is valid");
  }
}

Python

import sys

from oauth2client import client

# Bearer Tokens received by apps will always specify this issuer.
CHAT_ISSUER = 'chat@system.gserviceaccount.com'

# Url to obtain the public certificate for the issuer.
PUBLIC_CERT_URL_PREFIX = 'https://www.googleapis.com/service_accounts/v1/metadata/x509/'

# Intended audience of the token, which will be the project number of the app.
AUDIENCE = '1234567890'

# Get this value from the request's Authorization HTTPS header.
# For example, for 'Authorization: Bearer AbCdEf123456' use 'AbCdEf123456'.
BEARER_TOKEN = 'AbCdEf123456'

try:
  # Verify valid token, signed by CHAT_ISSUER, intended for a third party.
  token = client.verify_id_token(
      BEARER_TOKEN, AUDIENCE, cert_uri=PUBLIC_CERT_URL_PREFIX + CHAT_ISSUER)

  if token['iss'] != CHAT_ISSUER:
    sys.exit('Invalid issuee')
except:
  sys.exit('Invalid token')

# Token originates from Google and is targeted to a specific client.
print 'The token is valid'

Menangani percobaan ulang panggilan HTTP ke layanan Anda

Jika permintaan HTTPS ke layanan Anda gagal (seperti waktu tunggu habis, kegagalan jaringan sementara, atau kode status HTTPS non-2xx), Google Chat mungkin akan mencoba mengirimkan lagi beberapa kali dalam beberapa menit (tetapi hal ini tidak dijamin). Akibatnya, aplikasi Chat mungkin menerima pesan yang sama beberapa kali dalam situasi tertentu. Jika permintaan berhasil diselesaikan, tetapi menampilkan payload pesan yang tidak valid, Google Chat tidak akan mencoba lagi permintaan tersebut.

Memproses atau merespons peristiwa interaksi

Bagian ini menjelaskan cara aplikasi Google Chat memproses dan merespons peristiwa interaksi.

Setelah aplikasi Chat Anda menerima peristiwa interaksi dari Google Chat, aplikasi tersebut dapat merespons dengan berbagai cara. Dalam banyak kasus, aplikasi Chat interaktif akan membalas pengguna dengan pesan. Aplikasi Google Chat juga dapat mencari beberapa informasi dari sumber data, merekam informasi peristiwa interaksi, atau apa saja. Perilaku pemrosesan ini pada dasarnya menjelaskan aplikasi Google Chat.

Untuk setiap peristiwa interaksi, aplikasi Chat menerima isi permintaan, yang merupakan payload JSON yang mewakili peristiwa tersebut. Anda dapat menggunakan informasi tersebut untuk memproses respons. Untuk contoh payload peristiwa, lihat Jenis peristiwa interaksi aplikasi Chat.

Diagram berikut menunjukkan cara aplikasi Google Chat biasanya memproses atau merespons berbagai jenis peristiwa interaksi:

Arsitektur cara aplikasi Google Chat memproses peristiwa interaksi.

Tampilkan respons secara real time

Peristiwa interaksi memungkinkan aplikasi Chat merespons secara real time, atau secara sinkron. Respons sinkron tidak memerlukan autentikasi.

Untuk membuat respons sinkron terhadap peristiwa interaksi, lihat panduan berikut:

Untuk merespons secara sinkron, aplikasi Chat harus merespons dalam waktu 30 detik, dan respons harus diposting di ruang tempat interaksi terjadi. Jika tidak, aplikasi Chat dapat merespons secara asinkron.

Merespons secara asinkron

Terkadang, aplikasi Chat harus merespons peristiwa interaksi setelah 30 detik atau menjalankan tugas di luar ruang tempat peristiwa interaksi dibuat. Misalnya, aplikasi Chat mungkin perlu merespons pengguna setelah menyelesaikan tugas yang berjalan lama. Dalam hal ini, aplikasi Chat dapat merespons secara asinkron dengan memanggil Google Chat API.

Untuk membuat pesan menggunakan Chat API, lihat Membuat pesan. Untuk panduan penggunaan metode Chat API tambahan, lihat Ringkasan Chat API.