Halaman ini menjelaskan cara menambahkan widget dan elemen UI ke kartu agar pengguna dapat berinteraksi dengan aplikasi Google Chat Anda, misalnya dengan mengklik tombol atau mengirimkan informasi.
Aplikasi Chat dapat menggunakan antarmuka Chat berikut untuk membuat kartu interaktif:
- Pesan yang berisi satu atau beberapa kartu.
- Halaman beranda, yang merupakan kartu yang muncul dari tab Beranda dalam pesan langsung dengan aplikasi Chat.
- Dialog, yang merupakan kartu yang terbuka di jendela baru dari pesan dan halaman beranda.
Saat pengguna berinteraksi dengan kartu, aplikasi Chat dapat menggunakan data yang diterima untuk memproses dan meresponsnya. Untuk mengetahui detailnya, lihat Mengumpulkan dan memproses informasi dari pengguna Google Chat.
Gunakan Card Builder untuk mendesain dan melihat pratinjau pesan serta antarmuka pengguna untuk aplikasi Chat:
Buka Card BuilderPrasyarat
Aplikasi Google Chat yang dikonfigurasi untuk menerima dan merespons interaksi pengguna. Untuk membuat aplikasi Chat interaktif, selesaikan salah satu panduan memulai berikut berdasarkan arsitektur aplikasi yang ingin Anda gunakan:
- Layanan HTTP dengan Google Cloud Functions
- Google Apps Script
- Google Cloud Dialogflow CX
- Google Cloud Pub/Sub
Menambahkan tombol
Widget ButtonList
menampilkan sekumpulan tombol. Tombol dapat menampilkan teks, ikon, atau teks dan ikon. Setiap
Button
mendukung
tindakan OnClick
yang terjadi saat pengguna mengklik tombol. Contoh:
- Buka hyperlink dengan
OpenLink, untuk memberikan informasi tambahan kepada pengguna. - Jalankan
actionyang menjalankan fungsi kustom, seperti memanggil API.
Untuk aksesibilitas, tombol mendukung teks alternatif.
Menambahkan tombol yang menjalankan fungsi kustom
Berikut adalah kartu yang terdiri dari widget ButtonList dengan dua tombol.
Satu tombol membuka dokumentasi developer Google Chat di tab baru. Tombol
lainnya menjalankan fungsi kustom yang disebut goToView() dan meneruskan
parameter viewType="BIRD EYE VIEW".
Menambahkan tombol dengan gaya Desain Material
Berikut ini menampilkan kumpulan tombol dalam berbagai gaya tombol Desain Material.
Untuk menerapkan gaya Desain Material, jangan sertakan atribut 'color'.
Menambahkan tombol dengan warna kustom dan tombol yang dinonaktifkan
Anda dapat mencegah pengguna mengklik tombol dengan menyetel "disabled": "true".
Berikut ini menampilkan kartu yang terdiri dari widget ButtonList dengan dua
tombol. Satu tombol menggunakan
kolom Color
untuk menyesuaikan warna latar belakang
tombol. Tombol lainnya dinonaktifkan dengan kolom Disabled, yang
mencegah pengguna mengklik tombol dan menjalankan fungsi.
Menambahkan tombol dengan ikon
Berikut ini menampilkan kartu yang terdiri dari widget ButtonList dengan dua widget ikon
Button. Satu tombol menggunakan kolom
knownIcon
untuk menampilkan ikon email bawaan Google Chat. Tombol lainnya menggunakan kolom
iconUrl untuk menampilkan
widget ikon kustom.
Menambahkan tombol dengan ikon dan teks
Berikut ini menampilkan kartu yang terdiri dari widget ButtonList yang meminta
pengguna untuk mengirim email. Tombol pertama menampilkan ikon email dan
tombol kedua menampilkan teks. Pengguna dapat mengklik tombol ikon atau teks
untuk menjalankan fungsi sendEmail.
Menyesuaikan tombol untuk bagian yang dapat diciutkan
Sesuaikan tombol kontrol yang menciutkan dan meluaskan bagian dalam kartu. Pilih dari berbagai ikon atau gambar untuk merepresentasikan konten bagian secara visual, sehingga memudahkan pengguna untuk memahami dan berinteraksi dengan informasi.
Menambahkan Menu Tambahan
Overflow menu
dapat digunakan di kartu Chat untuk menawarkan opsi dan tindakan tambahan. Dengan begitu,
Anda dapat menyertakan lebih banyak opsi tanpa mengacaukan antarmuka kartu, sehingga memastikan
desain yang rapi dan teratur.
Menambahkan daftar Chip
Widget ChipList
menyediakan cara yang serbaguna dan menarik secara visual untuk menampilkan informasi.
Gunakan daftar chip untuk merepresentasikan tag, kategori, atau data relevan lainnya, sehingga
memudahkan pengguna untuk menavigasi dan berinteraksi dengan konten Anda.
Mengumpulkan informasi dari pengguna
Bagian ini menjelaskan cara menambahkan widget yang mengumpulkan informasi, seperti teks atau pilihan.
Untuk mempelajari cara memproses input pengguna, lihat Mengumpulkan dan memproses informasi dari pengguna Google Chat.
Mengumpulkan teks
Widget TextInput
menyediakan kolom tempat pengguna dapat memasukkan teks. Widget
ini mendukung saran, yang membantu pengguna memasukkan data yang seragam, dan tindakan
saat terjadi perubahan, yang merupakan
Actions
yang berjalan saat terjadi perubahan di kolom input teks, seperti pengguna menambahkan atau
menghapus teks.
Jika Anda perlu mengumpulkan data abstrak atau tidak diketahui dari pengguna, gunakan widget
TextInput ini. Untuk mengumpulkan data yang ditentukan dari pengguna, gunakan widget
SelectionInput.
Berikut adalah kartu yang terdiri dari widget TextInput:
Mengumpulkan tanggal atau waktu
Widget DateTimePicker
memungkinkan pengguna memasukkan tanggal, waktu, atau tanggal dan
waktu. Atau, pengguna dapat menggunakan alat pilih untuk memilih tanggal dan waktu. Jika pengguna memasukkan
tanggal atau waktu yang tidak valid, pemilih akan menampilkan error yang meminta pengguna untuk memasukkan
informasi dengan benar.
Berikut ini menampilkan kartu yang terdiri dari tiga jenis widget DateTimePicker yang berbeda:
Mengizinkan pengguna memilih item
Widget SelectionInput
menyediakan serangkaian item yang dapat dipilih, seperti kotak centang, tombol pilihan, tombol akses,
atau menu drop-down. Anda dapat menggunakan widget ini
untuk mengumpulkan data yang ditentukan dan distandardisasi dari pengguna. Untuk mengumpulkan data yang tidak ditentukan
dari pengguna, gunakan widget TextInput.
Widget SelectionInput mendukung saran, yang membantu pengguna memasukkan data yang seragam, dan tindakan saat perubahan, yang merupakan Actions yang berjalan saat terjadi perubahan di kolom input pilihan, seperti pengguna memilih atau membatalkan pilihan item.
Aplikasi Chat dapat menerima dan memproses nilai item yang dipilih. Untuk mengetahui detail tentang cara menggunakan input formulir, lihat Memproses informasi yang diinput oleh pengguna.
Bagian ini memberikan contoh kartu yang menggunakan widget SelectionInput.
Contoh ini menggunakan berbagai jenis input bagian:
Menambahkan kotak centang
Berikut ini menampilkan kartu yang meminta pengguna untuk menentukan apakah
kontak bersifat profesional, pribadi, atau keduanya, dengan widget SelectionInput yang
menggunakan kotak centang:
Menambahkan tombol pilihan
Berikut ini menampilkan kartu yang meminta pengguna untuk menentukan apakah
kontak bersifat profesional atau pribadi dengan widget SelectionInput yang menggunakan
tombol pilihan:
Menambahkan tombol
Berikut ini menampilkan kartu yang meminta pengguna untuk menentukan apakah
kontak bersifat profesional, pribadi, atau keduanya dengan widget SelectionInput yang
menggunakan tombol:
Menambahkan menu drop-down
Berikut ini menampilkan kartu yang meminta pengguna untuk menentukan apakah
kontak bersifat profesional atau pribadi dengan widget SelectionInput yang menggunakan
menu drop-down:
Mengisi menu drop-down secara dinamis
Tersedia untuk aplikasi Google Chat.
Anda dapat mengisi item secara dinamis untuk menu drop-down dari sumber data di
Google Workspace atau dari sumber data eksternal. Untuk menggunakan sumber data dinamis, tentukan kolom dataSourceConfigs, yang merupakan array objek DataSourceConfig. Setiap DataSourceConfig dapat berisi platformDataSource atau
remoteDataSource. Saat ini, hanya satu DataSourceConfig yang didukung.
Mengisi item dari Google Workspace
Untuk mengisi item dari sumber data Google Workspace, seperti pengguna Google Workspace, Anda menentukan kolom platformDataSource dalam DataSourceConfig. Tidak seperti penggunaan items statis, Anda menghilangkan objek SelectionItem, karena item pilihan ini bersumber secara dinamis dari Google Workspace.
Kode berikut menampilkan menu drop-down yang mengisi pengguna Google Workspace:
JSON
{
"sections": [
{
"header": "Section Header",
"widgets": [
{
"selectionInput": {
"name": "contacts",
"type": "DROPDOWN",
"label": "Select contact from organization",
"dataSourceConfigs": [
{
"platformDataSource": {
"commonDataSource": "USER"
},
"minCharactersTrigger": 1
}
]
}
}
]
}
]
}
Mengisi item dari sumber data eksternal
Untuk mengisi item dari sumber data pihak ketiga atau eksternal, seperti sistem pengelolaan hubungan pelanggan (CRM), Anda menggunakan kolom remoteDataSource dalam DataSourceConfig untuk menentukan fungsi yang menampilkan item dari sumber data.
Kode berikut menampilkan menu drop-down yang mengisi item dari kumpulan kontak eksternal dengan menjalankan fungsi getCrmLeads:
JSON
{
"sections": [
{
"header": "Section Header",
"widgets": [
{
"selectionInput": {
"name": "crm_leads",
"type": "DROPDOWN",
"label": "Select CRM Lead",
"dataSourceConfigs": [
{
"remoteDataSource": {
"function": "getCrmLeads"
},
"minCharactersTrigger": 2
}
],
"items": [
{
"text": "Suggested Lead 1",
"value": "lead-1"
}
]
}
}
]
}
]
}
Untuk mengurangi permintaan ke sumber data dinamis, Anda dapat menyertakan item yang disarankan
yang muncul di menu drop-down sebelum pengguna mengetik. Anda juga dapat mengonfigurasi
drop-down untuk melengkapi item secara otomatis berdasarkan apa yang diketik pengguna dengan menetapkan
minCharactersTrigger dalam DataSourceConfig. Saat pengguna mengetik setidaknya jumlah karakter yang ditentukan dalam minCharactersTrigger, fungsi yang ditentukan dalam remoteDataSource akan dipicu. Objek peristiwa yang diteruskan
ke fungsi Anda menyertakan input pengguna dalam kunci
autocomplete_widget_query.
Menambahkan menu pilihan ganda
Berikut ini menampilkan kartu yang meminta pengguna memilih kontak dari menu pilihan ganda:
Anda dapat mengisi item untuk menu pilihan ganda dari sumber data berikut di Google Workspace:
- Pengguna Google Workspace: Anda hanya dapat mengisi pengguna dalam organisasi Google Workspace yang sama.
- Ruang Chat: Pengguna yang memasukkan item di menu pilihan ganda hanya dapat melihat dan memilih ruang yang mereka ikuti dalam organisasi Google Workspace mereka.
Untuk menggunakan sumber data Google Workspace, tentukan kolom
platformDataSource. Tidak seperti jenis input pilihan lainnya, Anda menghilangkan objek SelectionItem, karena item pilihan ini bersumber secara dinamis dari Google Workspace.
Kode berikut menampilkan menu multi-pilihan pengguna Google Workspace.
Untuk mengisi pengguna, input pilihan menetapkan commonDataSource ke USER:
JSON
{
"selectionInput": {
"name": "contacts",
"type": "MULTI_SELECT",
"label": "Selected contacts",
"multiSelectMaxSelectedItems": 5,
"multiSelectMinQueryLength": 1,
"platformDataSource": {
"commonDataSource": "USER"
}
}
}
Kode berikut menampilkan menu multipilih ruang Chat. Untuk mengisi ruang, input pilihan menentukan kolom hostAppDataSource. Menu pilihan ganda juga menetapkan
defaultToCurrentSpace ke true, yang menjadikan ruang saat ini sebagai pilihan
default dalam menu:
JSON
{
"selectionInput": {
"name": "spaces",
"type": "MULTI_SELECT",
"label": "Selected contacts",
"multiSelectMaxSelectedItems": 3,
"multiSelectMinQueryLength": 1,
"platformDataSource": {
"hostAppDataSource": {
"chatDataSource": {
"spaceDataSource": {
"defaultToCurrentSpace": true
}
}
}
}
}
}
Menu multi-pilih juga dapat mengisi item dari sumber data pihak ketiga atau eksternal. Misalnya, Anda dapat menggunakan menu multi-pilihan untuk membantu pengguna memilih dari daftar lead penjualan dari sistem pengelolaan hubungan pelanggan (CRM).
Untuk menggunakan sumber data eksternal, gunakan kolom externalDataSource untuk
menentukan fungsi yang menampilkan item dari sumber data.
Untuk mengurangi permintaan ke sumber data eksternal, Anda dapat menyertakan
item yang disarankan yang muncul di menu pilihan ganda sebelum pengguna mengetik di
menu. Misalnya, Anda dapat mengisi kontak yang baru-baru ini ditelusuri untuk
pengguna. Untuk mengisi item yang disarankan dari sumber data eksternal, tentukan objek
SelectionItem.
Contoh kode berikut menunjukkan menu multi-pilihan yang mengkueri dan mengisi item dari sumber data eksternal:
Node.js
Ganti FUNCTION_URL dengan endpoint HTTP yang mengkueri
sumber data eksternal.
Python
Ganti FUNCTION_URL dengan endpoint HTTP yang mengkueri
sumber data eksternal.
Java
Ganti FUNCTION_URL dengan endpoint HTTP yang mengkueri
sumber data eksternal.
Apps Script
Contoh ini mengirimkan pesan kartu dengan menampilkan JSON kartu. Anda juga dapat menggunakan layanan kartu Apps Script.
Mengisi item yang disarankan dari sumber data dinamis
Untuk sumber data eksternal, Anda juga dapat melengkapi otomatis dan menyarankan item yang
mulai diketik pengguna di menu pilihan ganda atau menu drop-down. Misalnya, jika
pengguna mulai mengetik Atl untuk menu yang menampilkan kota di Amerika Serikat,
aplikasi Chat Anda dapat otomatis menyarankan Atlanta sebelum pengguna
selesai mengetik. Anda dapat menyarankan hingga 100 item.
Untuk menampilkan item yang disarankan, fungsi yang mengkueri sumber data eksternal harus melakukan hal berikut:
- Menangani objek peristiwa, yang diterima aplikasi Chat saat pengguna mengetik di menu.
- Dari objek peristiwa, dapatkan nilai yang diketik pengguna, yang direpresentasikan dalam kolom
event.commonEventObject.parameters["autocomplete_widget_query"]. - Buat kueri sumber data menggunakan nilai input pengguna untuk mendapatkan satu atau beberapa
SelectionItemsyang akan disarankan kepada pengguna. - Tampilkan item yang disarankan dengan menampilkan tindakan
RenderActionsdengan objekmodifyCard.
Contoh kode berikut menunjukkan cara aplikasi Chat
menyarankan item secara dinamis di menu pilihan ganda pada kartu. Saat pengguna mengetik
ke dalam menu, fungsi atau endpoint yang disediakan di kolom
externalDataSource widget akan mengkueri sumber data eksternal, dan menyarankan item
yang dapat dipilih pengguna:
Node.js
Ganti FUNCTION_URL dengan endpoint HTTP yang mengkueri
sumber data eksternal.
Python
Ganti FUNCTION_URL dengan endpoint HTTP yang mengkueri
sumber data eksternal.
Java
Ganti FUNCTION_URL dengan endpoint HTTP yang mengkueri
sumber data eksternal.
Apps Script
Contoh ini mengirimkan pesan kartu dengan menampilkan JSON kartu. Anda juga dapat menggunakan layanan kartu Apps Script.
Memvalidasi data yang dimasukkan ke kartu
Halaman ini menjelaskan cara memvalidasi data yang dimasukkan ke action
dan widget kartu.
Misalnya, Anda dapat memvalidasi bahwa kolom input teks memiliki teks yang dimasukkan oleh
pengguna, atau berisi jumlah karakter tertentu.
Menetapkan widget yang diperlukan untuk tindakan
Sebagai bagian dari action kartu,
tambahkan nama widget yang diperlukan tindakan ke daftar requiredWidgets-nya.
Jika widget yang tercantum di sini tidak memiliki nilai saat tindakan ini dipanggil, pengiriman tindakan formulir akan dibatalkan.
Jika "allWidgetsAreRequired": true ditetapkan untuk suatu tindakan, semua widget
dalam kartu akan diperlukan oleh tindakan ini.
Menetapkan tindakan allWidgetsAreRequired dalam multiseleksi
JSON
{
"sections": [
{
"header": "Select contacts",
"widgets": [
{
"selectionInput": {
"type": "MULTI_SELECT",
"label": "Selected contacts",
"name": "contacts",
"multiSelectMaxSelectedItems": 3,
"multiSelectMinQueryLength": 1,
"onChangeAction": {
"allWidgetsAreRequired": true
},
"items": [
{
"value": "contact-1",
"startIconUri": "https://www.gstatic.com/images/branding/product/2x/contacts_48dp.png",
"text": "Contact 1",
"bottomText": "Contact one description",
"selected": false
},
{
"value": "contact-2",
"startIconUri": "https://www.gstatic.com/images/branding/product/2x/contacts_48dp.png",
"text": "Contact 2",
"bottomText": "Contact two description",
"selected": false
},
{
"value": "contact-3",
"startIconUri": "https://www.gstatic.com/images/branding/product/2x/contacts_48dp.png",
"text": "Contact 3",
"bottomText": "Contact three description",
"selected": false
},
{
"value": "contact-4",
"startIconUri": "https://www.gstatic.com/images/branding/product/2x/contacts_48dp.png",
"text": "Contact 4",
"bottomText": "Contact four description",
"selected": false
},
{
"value": "contact-5",
"startIconUri": "https://www.gstatic.com/images/branding/product/2x/contacts_48dp.png",
"text": "Contact 5",
"bottomText": "Contact five description",
"selected": false
}
]
}
}
]
}
]
}
Menetapkan tindakan allWidgetsAreRequired di dateTimePicker
JSON
{
"sections": [
{
"widgets": [
{
"textParagraph": {
"text": "A datetime picker widget with both date and time:"
}
},
{
"divider": {}
},
{
"dateTimePicker": {
"name": "date_time_picker_date_and_time",
"label": "meeting",
"type": "DATE_AND_TIME"
}
},
{
"textParagraph": {
"text": "A datetime picker widget with just date:"
}
},
{
"divider": {}
},
{
"dateTimePicker": {
"name": "date_time_picker_date_only",
"label": "Choose a date",
"type": "DATE_ONLY",
"onChangeAction":{
"allWidgetsAreRequired": true
}
}
},
{
"textParagraph": {
"text": "A datetime picker widget with just time:"
}
},
{
"divider": {}
},
{
"dateTimePicker": {
"name": "date_time_picker_time_only",
"label": "Select a time",
"type": "TIME_ONLY"
}
}
]
}
]
}
Tetapkan tindakan allWidgetsAreRequired di menu drop-down
JSON
{
"sections": [
{
"header": "Section Header",
"collapsible": true,
"uncollapsibleWidgetsCount": 1,
"widgets": [
{
"selectionInput": {
"name": "location",
"label": "Select Color",
"type": "DROPDOWN",
"onChangeAction": {
"allWidgetsAreRequired": true
},
"items": [
{
"text": "Red",
"value": "red",
"selected": false
},
{
"text": "Green",
"value": "green",
"selected": false
},
{
"text": "White",
"value": "white",
"selected": false
},
{
"text": "Blue",
"value": "blue",
"selected": false
},
{
"text": "Black",
"value": "black",
"selected": false
}
]
}
}
]
}
]
}
Menetapkan validasi untuk widget input teks
Di kolom validasi widget textInput,
Anda dapat menentukan batas karakter dan jenis input untuk
widget input teks ini.
Menetapkan batas karakter untuk widget input teks
JSON
{
"sections": [
{
"header": "Tell us about yourself",
"collapsible": true,
"uncollapsibleWidgetsCount": 2,
"widgets": [
{
"textInput": {
"name": "favoriteColor",
"label": "Favorite color",
"type": "SINGLE_LINE",
"validation": {"characterLimit": 15},
"onChangeAction":{
"allWidgetsAreRequired": true
}
}
}
]
}
]
}
Menetapkan jenis input untuk widget input teks
JSON
{
"sections": [
{
"header": "Validate text inputs by input types",
"collapsible": true,
"uncollapsibleWidgetsCount": 2,
"widgets": [
{
"textInput": {
"name": "mailing_address",
"label": "Please enter a valid email address",
"type": "SINGLE_LINE",
"validation": {
"inputType": "EMAIL"
},
"onChangeAction": {
"allWidgetsAreRequired": true
}
}
},
{
"textInput": {
"name": "validate_integer",
"label": "Please enter a number",
"type": "SINGLE_LINE",
"validation": {
"inputType": "INTEGER"
}
}
},
{
"textInput": {
"name": "validate_float",
"label": "Please enter a number with a decimal",
"type": "SINGLE_LINE",
"validation": {
"inputType": "FLOAT"
}
}
}
]
}
]
}
Memecahkan masalah
Saat aplikasi atau kartu Google Chat menampilkan error, antarmuka Chat akan menampilkan pesan yang bertuliskan "Terjadi error". atau "Tidak dapat memproses permintaan Anda". Terkadang UI Chat tidak menampilkan pesan error apa pun, tetapi aplikasi atau kartu Chat memberikan hasil yang tidak terduga; misalnya, pesan kartu mungkin tidak muncul.
Meskipun pesan error mungkin tidak ditampilkan di UI Chat, pesan error deskriptif dan data log tersedia untuk membantu Anda memperbaiki error saat logging error untuk aplikasi Chat diaktifkan. Untuk mendapatkan bantuan dalam melihat, men-debug, dan memperbaiki error, lihat Memecahkan masalah dan memperbaiki error Google Chat.
Topik terkait
Aplikasi Chat yang bukan add-on: Mendesain kartu dan dialog interaktif
Dokumentasi berikut berlaku untuk aplikasi Chat yang bukan add-on Google Workspace. Untuk memigrasikan aplikasi Chat yang bukan add-on, lihat Mengonversi aplikasi Google Chat menjadi add-on Google Workspace.
Kode berikut menampilkan menu pilihan ganda item dari
kumpulan kontak eksternal untuk pengguna di
aplikasi Chat yang bukan add-on.
Menu ini menampilkan satu kontak secara default
dan menjalankan fungsi getContacts untuk mengambil dan mengisi item dari
sumber data eksternal:
Node.js
Python
Java
Apps Script
Untuk melengkapi item secara otomatis di aplikasi Chat yang bukan add-on, buat fungsi yang mengkueri sumber data eksternal dan menampilkan item setiap kali pengguna mengetik di menu multipilih. Fungsi ini harus melakukan hal berikut:
- Teruskan objek peristiwa yang mewakili interaksi pengguna dengan menu.
- Identifikasi bahwa nilai
invokedFunctionperistiwa interaksi cocok dengan fungsi dari kolomexternalDataSource. - Jika fungsi cocok, tampilkan item yang disarankan dari sumber data eksternal. Untuk menyarankan item berdasarkan apa yang diketik pengguna, dapatkan nilai untuk
kunci
autocomplete_widget_query. Nilai ini mewakili apa yang diketik pengguna di menu.
Kode berikut melengkapi item secara otomatis dari resource data eksternal. Dengan menggunakan
contoh sebelumnya, aplikasi Chat yang bukan
add-on akan menyarankan item
berdasarkan kapan fungsi getContacts dipicu: