Questa pagina spiega come aggiungere widget ed elementi dell'interfaccia utente alle schede in modo che gli utenti possano interagire con la tua app Google Chat, ad esempio facendo clic su un pulsante o inviando informazioni.
Le app di Chat possono utilizzare le seguenti interfacce di Chat per creare schede interattive:
- Messaggi che contengono una o più schede.
- Home page, ovvero una scheda che viene visualizzata dalla scheda Home nei messaggi diretti con l'app Chat.
- Finestre di dialogo, ovvero schede che si aprono in una nuova finestra da messaggi e home page.
Quando gli utenti interagiscono con le schede, le app di Chat possono utilizzare i dati che ricevono per elaborarli e rispondere di conseguenza. Per maggiori dettagli, consulta Raccogliere ed elaborare le informazioni degli utenti di Google Chat.
Utilizza il generatore di schede per progettare e visualizzare in anteprima i messaggi e le interfacce utente per le app di Chat:
Apri il generatore di schedePrerequisiti
Un'app Google Chat configurata per ricevere e rispondere agli eventi di interazione. Per creare un' app di Chat interattiva, completa una delle seguenti guide rapide in base all'architettura dell'app che vuoi utilizzare:
- Servizio HTTP con Cloud Functions
- Google Apps Script
- Google Cloud Dialogflow CX
- Google Cloud Pub/Sub
Aggiungere un pulsante
Il
ButtonList widget
mostra un insieme di pulsanti. I pulsanti possono mostrare testo, un'icona o entrambi. Ogni
Button
supporta un'azione
OnClick
che si verifica quando gli utenti fanno clic sul pulsante. Ad esempio:
- Apri un link ipertestuale con
OpenLink, per fornire agli utenti informazioni aggiuntive. - Esegui un
actionche esegue una funzione personalizzata, ad esempio chiamando un'API.
Per l'accessibilità, i pulsanti supportano il testo alternativo.
Aggiungere un pulsante che esegue una funzione personalizzata
Di seguito è riportata una scheda composta da un widget ButtonList con due pulsanti.
Un pulsante apre la documentazione per gli sviluppatori di Google Chat in una nuova scheda. L'
altro pulsante esegue una funzione personalizzata chiamata goToView() e passa il
viewType="BIRD EYE VIEW" parametro.
Aggiungere un pulsante con lo stile Material Design
Di seguito viene visualizzato un insieme di pulsanti in diversi stili di pulsanti Material Design.
Per applicare lo stile Material Design, non includere l'attributo "color".
Aggiungere un pulsante con colore personalizzato e un pulsante disattivato
Puoi impedire agli utenti di fare clic su un pulsante impostando "disabled": "true".
Di seguito viene visualizzata una scheda composta da un widget ButtonList con due pulsanti. Un pulsante utilizza il
Color campo
per personalizzare il colore di sfondo del pulsante. L'altro pulsante è disattivato con il campo Disabled, che impedisce all'utente di fare clic sul pulsante ed eseguire la funzione.
Aggiungere un pulsante con un'icona
Di seguito viene visualizzata una scheda composta da un ButtonList widget con due widget icona
Button. Un pulsante utilizza il
knownIcon
campo per visualizzare l'icona email integrata di Google Chat. L'altro pulsante utilizza il
iconUrl campo per visualizzare un
widget icona personalizzato.
Aggiungere un pulsante con un'icona e del testo
Di seguito viene visualizzata una scheda composta da un widget ButtonList che chiede all'utente di inviare un'email. Il primo pulsante mostra un'icona email e il secondo pulsante mostra del testo. L'utente può fare clic sul pulsante dell'icona o del testo per eseguire la funzione sendEmail.
Personalizzare il pulsante per una sezione comprimibile
Personalizza il pulsante di controllo che comprime ed espande le sezioni all'interno di una scheda. Scegli tra una serie di icone o immagini per rappresentare visivamente i contenuti della sezione, in modo che gli utenti possano comprendere e interagire più facilmente con le informazioni.
Aggiungere un menu extra
Il
Overflow menu
può essere utilizzato nelle schede di Chat per offrire opzioni e azioni aggiuntive. Ti consente di includere più opzioni senza ingombrare l'interfaccia della scheda, garantendo un design pulito e organizzato.
Aggiungere un elenco di chip
Il ChipList
widget offre un modo versatile e visivamente accattivante per visualizzare le informazioni.
Utilizza gli elenchi di chip per rappresentare tag, categorie o altri dati pertinenti, in modo che gli utenti possano navigare e interagire più facilmente con i tuoi contenuti.
Raccogliere informazioni dagli utenti
Questa sezione spiega come aggiungere widget che raccolgono informazioni, come testo o selezioni.
Per scoprire come elaborare ciò che gli utenti inseriscono, consulta Raccogliere ed elaborare le informazioni degli utenti di Google Chat.
Raccogliere testo
Il widget TextInput
fornisce un campo in cui gli utenti possono inserire testo. Il
widget supporta i suggerimenti, che aiutano gli utenti a inserire dati uniformi, e le azioni on-change, ovvero
Actions
che vengono eseguite quando si verifica una modifica nel campo di immissione di testo, ad esempio quando un utente aggiunge o
elimina testo.
Quando devi raccogliere dati astratti o sconosciuti dagli utenti, utilizza questo widget TextInput. Per raccogliere dati definiti dagli utenti, utilizza invece il
SelectionInput
widget.
Di seguito è riportata una scheda composta da un widget TextInput:
Raccogliere date o orari
Il widget
DateTimePicker
consente agli utenti di inserire una data, un'ora o entrambi. In alternativa, gli utenti possono utilizzare il selettore per selezionare date e orari. Se gli utenti inseriscono una data o un'ora non valida, il selettore mostra un errore che li invita a inserire le informazioni correttamente.
Di seguito viene visualizzata una scheda composta da tre diversi tipi di widget DateTimePicker:
Consentire agli utenti di selezionare gli elementi
Il widget SelectionInput
fornisce un insieme di elementi selezionabili, come caselle di controllo, pulsanti di opzione, interruttori,
o un menu a discesa. Puoi utilizzare questo widget per raccogliere dati definiti e standardizzati dagli utenti. Per raccogliere dati non definiti
dagli utenti, utilizza invece il TextInput widget.
Il widget SelectionInput supporta i suggerimenti, che aiutano gli utenti a inserire dati uniformi, e le azioni on-change, ovvero
Actions
che vengono eseguite quando si verifica una modifica in un campo di immissione di selezione, ad esempio quando un utente
seleziona o deseleziona un elemento.
Le app di Chat possono ricevere ed elaborare il valore degli elementi selezionati. Per maggiori dettagli sull'utilizzo degli input dei moduli, consulta Elaborare le informazioni inserite dagli utenti.
Questa sezione fornisce esempi di schede che utilizzano il widget SelectionInput.
Gli esempi utilizzano diversi tipi di input di sezione:
Aggiungere una casella di controllo
Di seguito viene visualizzata una scheda che chiede all'utente di specificare se un contatto è professionale, personale o entrambi, con un widget SelectionInput che utilizza le caselle di controllo:
Aggiungere un pulsante di opzione
Di seguito viene visualizzata una scheda che chiede all'utente di specificare se un contatto è professionale o personale con un widget SelectionInput che utilizza i pulsanti di opzione:
Aggiungere un interruttore
Di seguito viene visualizzata una scheda che chiede all'utente di specificare se un contatto è professionale, personale o entrambi con un widget SelectionInput che utilizza gli interruttori:
Aggiungere un menu a discesa
Di seguito viene visualizzata una scheda che chiede all'utente di specificare se un contatto è professionale o personale con un widget SelectionInput che utilizza un menu a discesa:
Popolare dinamicamente i menu a discesa
Disponibile per le app Google Chat.
Puoi popolare dinamicamente gli elementi di un menu a discesa dalle origini dati in Google Workspace o da un'origine dati esterna. Per utilizzare le origini dati dinamiche, devi specificare il data_source_configs campo, che è un array di DataSourceConfig oggetti. Ogni DataSourceConfig può contenere un platformDataSource o un remoteDataSource. Al momento è supportato un solo DataSourceConfig.
Popolare gli elementi da Google Workspace
Per popolare gli elementi dalle origini dati di Google Workspace, ad esempio gli utenti di Google Workspace, devi specificare il platformDataSource campo all'interno di un DataSourceConfig. A differenza dell'utilizzo di items statici, devi omettere gli oggetti SelectionItem, perché questi elementi di selezione provengono dinamicamente da Google Workspace.
Il seguente codice mostra un menu a discesa che popola gli utenti di Google Workspace:
JSON
{
"sections": [
{
"header": "Section Header",
"widgets": [
{
"selectionInput": {
"name": "contacts",
"type": "DROPDOWN",
"label": "Select contact from organization",
"data_source_configs": [
{
"platformDataSource": {
"commonDataSource": "USER"
},
"min_characters_trigger": 1
}
]
}
}
]
}
]
}
Popolare gli elementi da un'origine dati esterna
Per popolare gli elementi da un'origine dati di terze parti o esterna, ad esempio un sistema di gestione dei rapporti con i clienti (CRM), devi utilizzare il campo remoteDataSource all'interno di un DataSourceConfig per specificare una funzione che restituisce gli elementi dall'origine dati.
Il seguente codice mostra un menu a discesa che popola gli elementi da un insieme esterno di contatti eseguendo la funzione getCrmLeads:
JSON
{
"sections": [
{
"header": "Section Header",
"widgets": [
{
"selectionInput": {
"name": "crm_leads",
"type": "DROPDOWN",
"label": "Select CRM Lead",
"data_source_configs": [
{
"remoteDataSource": {
"function": "getCrmLeads"
},
"min_characters_trigger": 2
}
],
"items": [
{
"text": "Suggested Lead 1",
"value": "lead-1"
}
]
}
}
]
}
]
}
Per ridurre le richieste a un'origine dati dinamica, puoi includere gli elementi suggeriti che vengono visualizzati nel menu a discesa prima che gli utenti digitino. Puoi anche configurare il menu a discesa per completare automaticamente gli elementi in base a ciò che gli utenti digitano impostando min_characters_trigger all'interno di DataSourceConfig. Quando un utente digita almeno il numero di caratteri specificato in min_characters_trigger, viene attivata la funzione specificata in remoteDataSource. L'oggetto evento passato alla funzione include l'input dell'utente nella chiave autocomplete_widget_query.
Aggiungere un menu multiselezione
Di seguito viene visualizzata una scheda che chiede all'utente di selezionare i contatti da un menu multiselezione:
Puoi popolare gli elementi di un menu multiselezione dalle seguenti origini dati in Google Workspace:
- Utenti di Google Workspace: puoi popolare solo gli utenti all'interno della stessa organizzazione Google Workspace.
- Spazi di Chat: l'utente che inserisce gli elementi nel menu multiselezione può visualizzare e selezionare solo gli spazi a cui appartiene all'interno della sua organizzazione Google Workspace.
Per utilizzare le origini dati di Google Workspace, devi specificare il
platformDataSource
campo. A differenza di altri tipi di input di selezione, devi omettere
SelectionItem
oggetti, perché questi elementi di selezione provengono dinamicamente da
Google Workspace.
Il seguente codice mostra un menu multiselezione degli utenti di Google Workspace.
Per popolare gli utenti, l'input di selezione imposta commonDataSource su USER:
JSON
{
"selectionInput": {
"name": "contacts",
"type": "MULTI_SELECT",
"label": "Selected contacts",
"multiSelectMaxSelectedItems": 5,
"multiSelectMinQueryLength": 1,
"platformDataSource": {
"commonDataSource": "USER"
}
}
}
Il seguente codice mostra un menu multiselezione degli spazi di Chat. Per popolare gli spazi, l'input di selezione specifica il campo hostAppDataSource. Il menu multiselezione imposta anche defaultToCurrentSpace su true, il che rende lo spazio corrente la selezione predefinita nel menu:
JSON
{
"selectionInput": {
"name": "spaces",
"type": "MULTI_SELECT",
"label": "Selected contacts",
"multiSelectMaxSelectedItems": 3,
"multiSelectMinQueryLength": 1,
"platformDataSource": {
"hostAppDataSource": {
"chatDataSource": {
"spaceDataSource": {
"defaultToCurrentSpace": true
}
}
}
}
}
}
I menu multiselezione possono anche popolare gli elementi da un'origine dati di terze parti o esterna. Ad esempio, puoi utilizzare i menu multiselezione per aiutare un utente a selezionare da un elenco di lead di vendita da un sistema di gestione dei rapporti con i clienti (CRM).
Per utilizzare un'origine dati esterna, devi utilizzare il campo externalDataSource per specificare una funzione che restituisce gli elementi dall'origine dati.
Per ridurre le richieste a un'origine dati esterna, puoi includere gli elementi suggeriti che vengono visualizzati nel menu multiselezione prima che gli utenti digitino nel menu. Ad esempio, puoi popolare i contatti cercati di recente per l'utente. Per popolare gli elementi suggeriti da un'origine dati esterna, devi specificare
SelectionItem
oggetti.
Il seguente codice mostra un menu multiselezione di elementi da un insieme esterno di contatti per l'utente. Il menu mostra un contatto per impostazione predefinita ed esegue la funzione getContacts per recuperare e popolare gli elementi dall'origine dati esterna:
Node.js
Python
Java
Apps Script
Per le origini dati esterne, puoi anche completare automaticamente gli elementi che gli utenti iniziano a digitare nel menu multiselezione. Ad esempio, se un utente inizia a digitare Atl per un
menu che popola le città degli Stati Uniti, la tua
app di Chat può suggerire automaticamente Atlanta prima che l'utente
finisca di digitare. Puoi completare automaticamente fino a 100 elementi.
Per completare automaticamente gli elementi, devi creare una funzione che esegue una query sull'origine dati esterna e restituisce gli elementi ogni volta che un utente digita nel menu multiselezione. La funzione deve:
- Passare un oggetto evento che rappresenta l'interazione dell'utente con il menu.
- Identificare che il valore dell'evento di interazione
invokedFunctioncorrisponde alla funzione del campoexternalDataSource. - Quando le funzioni corrispondono, restituisci gli elementi suggeriti dall'origine dati esterna. Per suggerire gli elementi in base a ciò che l'utente digita, recupera il valore della chiave
autocomplete_widget_query. Questo valore rappresenta ciò che l'utente digita nel menu.
Il seguente codice completa automaticamente gli elementi da una risorsa dati esterna. Utilizzando l'esempio precedente, l'app di Chat suggerisce gli elementi in base all'attivazione della funzione getContacts:
Node.js
Python
Java
Apps Script
Convalidare i dati inseriti nelle schede
Questa pagina spiega come convalidare i dati inseriti nell' action
e nei widget di una scheda.
Ad esempio, puoi verificare che in un campo di immissione di testo sia stato inserito del testo dall'utente o che contenga un determinato numero di caratteri.
Impostare i widget obbligatori per le azioni
Nell'ambito della action della scheda,
aggiungi i nomi dei widget necessari a un'azione all'el requiredWidgetsenco.
Se uno dei widget elencati qui non ha un valore quando viene richiamata questa azione, l'invio dell'azione del modulo viene annullato.
Quando "all_widgets_are_required": "true" è impostato per un'azione, tutti i widget
della scheda sono obbligatori per questa azione.
Impostare un'azione all_widgets_are_required in multiselezione
JSON
{
"sections": [
{
"header": "Select contacts",
"widgets": [
{
"selectionInput": {
"type": "MULTI_SELECT",
"label": "Selected contacts",
"name": "contacts",
"multiSelectMaxSelectedItems": 3,
"multiSelectMinQueryLength": 1,
"onChangeAction": {
"all_widgets_are_required": 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
}
]
}
}
]
}
]
}
Impostare un'azione all_widgets_are_required in 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":{
"all_widgets_are_required": 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"
}
}
]
}
]
}
Impostare un'azione all_widgets_are_required nel menu a discesa
JSON
{
"sections": [
{
"header": "Section Header",
"collapsible": true,
"uncollapsibleWidgetsCount": 1,
"widgets": [
{
"selectionInput": {
"name": "location",
"label": "Select Color",
"type": "DROPDOWN",
"onChangeAction": {
"all_widgets_are_required": 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
}
]
}
}
]
}
]
}
Impostare la convalida per un widget di input di testo
Nel campo di convalida del widget textInput, puoi specificare il limite di caratteri e il tipo di input per
questo widget di input di testo.
Impostare un limite di caratteri per un widget di input di testo
JSON
{
"sections": [
{
"header": "Tell us about yourself",
"collapsible": true,
"uncollapsibleWidgetsCount": 2,
"widgets": [
{
"textInput": {
"name": "favoriteColor",
"label": "Favorite color",
"type": "SINGLE_LINE",
"validation": {"character_limit":15},
"onChangeAction":{
"all_widgets_are_required": true
}
}
}
]
}
]
}
Impostare il tipo di input per un widget di input di testo
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": {
"input_type": "EMAIL"
},
"onChangeAction": {
"all_widgets_are_required": true
}
}
},
{
"textInput": {
"name": "validate_integer",
"label": "Please enter a number",
"type": "SINGLE_LINE",
"validation": {
"input_type": "INTEGER"
}
}
},
{
"textInput": {
"name": "validate_float",
"label": "Please enter a number with a decimal",
"type": "SINGLE_LINE",
"validation": {
"input_type": "FLOAT"
}
}
}
]
}
]
}
Risoluzione dei problemi
Quando un'app o una scheda di Google Chat restituisce un errore, l' interfaccia di Chat mostra un messaggio che indica "Si è verificato un problema". o "Impossibile elaborare la richiesta". A volte l'interfaccia utente di Chat non mostra alcun messaggio di errore, ma l'app o la scheda di Chat produce un risultato imprevisto; ad esempio, un messaggio della scheda potrebbe non essere visualizzato.
Anche se nell'interfaccia utente di Chat potrebbe non essere visualizzato un messaggio di errore, sono disponibili messaggi di errore descrittivi e dati di log per aiutarti a correggere gli errori quando la registrazione degli errori per le app di Chat è attiva. Per assistenza nella visualizzazione, nel debug e nella correzione degli errori, consulta Risolvere e correggere gli errori di Google Chat.