Questa guida descrive come le app Google Chat possono raccogliere ed elaborare le informazioni degli utenti creando input dei moduli in interfacce basate su schede.
Le app di Chat richiedono informazioni agli utenti per eseguire azioni all'interno o all'esterno di Chat, anche nei seguenti modi:
- Configura le impostazioni. Ad esempio, per consentire agli utenti di personalizzare le impostazioni di notifica o di configurare e aggiungere l'app di Chat a uno o più spazi.
- Creare o aggiornare informazioni in altre applicazioni Google Workspace. Ad esempio, consenti agli utenti di creare un evento di Google Calendar.
- Consentire agli utenti di accedere alle risorse e aggiornarle in altre app o servizi web. Ad esempio, un'app di Chat può aiutare gli utenti ad aggiornare lo stato di un ticket di assistenza direttamente da uno spazio di Chat.
Prerequisiti
HTTP
Un'app Google Chat che riceve e risponde alle interazioni degli utenti. Per crearne uno, completa la guida rapida HTTP.
Apps Script
Un'app Google Chat che riceve e risponde alle interazioni degli utenti. Per crearne uno, completa la guida rapida di Apps Script.
Crea moduli utilizzando le schede
Per raccogliere informazioni, le app di Chat progettano moduli e i relativi input e li integrano nelle schede. Per mostrare le schede agli utenti, le app di Chat possono utilizzare le seguenti interfacce di Chat:
- Messaggi che contengono una o più schede.
- Home page, ovvero una scheda che viene visualizzata dalla scheda Home nei messaggi diretti con l'app di Chat.
- Finestre di dialogo, ovvero schede che si aprono in una nuova finestra da messaggi e home page.
Le app di Chat possono creare le schede utilizzando i seguenti widget:
Widget di input dei moduli che richiedono informazioni agli utenti. Se vuoi, puoi aggiungere la convalida ai widget di input dei moduli per assicurarti che gli utenti inseriscano e formattino le informazioni correttamente. Le app di Chat possono utilizzare i seguenti widget di input dei moduli:
- Input di testo
(
textInput) per testo in formato libero o suggerito. - Gli input di selezione
(
selectionInput) sono elementi UI selezionabili, come caselle di controllo, pulsanti di opzione e menu a discesa. I widget di input di selezione possono anche compilare e suggerire elementi dai dati di Google Workspace (ad esempio uno spazio di Chat) o da un'origine dati dinamica. Per maggiori dettagli, consulta le sezioni seguenti Aggiungi un menu a discesa e Aggiungi un menu a selezione multipla. - Selettori di data e ora
(
dateTimePicker) per le voci di data e ora.
- Input di testo
(
Un widget pulsante per consentire agli utenti di inviare i valori inseriti nella scheda. Dopo che un utente ha fatto clic sul pulsante, l'app Chat può elaborare le informazioni che riceve.
Nell'esempio seguente, una scheda raccoglie i dati di contatto utilizzando un input di testo, un selettore di data e ora e un input di selezione:
Per altri esempi di widget interattivi che puoi utilizzare per raccogliere informazioni, consulta Progetta una scheda o una finestra di dialogo interattiva.
Aggiungi un menu a discesa
Per personalizzare gli elementi di selezione o consentire agli utenti di selezionare un singolo elemento da un'origine dati dinamica, le app di Chat possono utilizzare i menu a discesa, che sono un tipo di widget SelectionInput. Ad esempio, la seguente scheda mostra un menu a discesa in cui gli utenti possono selezionare dinamicamente un contatto da un elenco:
Puoi compilare gli elementi di un menu a discesa dalle seguenti origini dati:
- Dati di Google Workspace, che includono utenti o spazi di Chat.
- Origini dati esterne, ad esempio un database relazionale.
Compila gli elementi da un'origine dati di Google Workspace
Per compilare gli elementi dalle origini dati di Google Workspace, ad esempio gli utenti di Google Workspace, specifica il campo platformDataSource all'interno di un oggetto DataSourceConfig. A differenza di altri tipi di input di selezione, ometti gli oggetti SelectionItem, perché questi elementi di selezione provengono dinamicamente da Google Workspace.
Il seguente codice mostra un menu a discesa degli utenti di Google Workspace:
JSON
{
"sections": [
{
"header": "Section Header",
"widgets": [
{
"selectionInput": {
"name": "contacts",
"type": "DROPDOWN",
"label": "Select contact from organization",
"dataSourceConfigs": [
{
"platformDataSource": {
"commonDataSource": "USER"
},
"minCharactersTrigger": 1
}
]
}
}
]
}
]
}
Compila gli elementi da un'origine dati esterna
I menu a discesa possono anche compilare elementi da un'origine dati di terze parti o esterna. Per utilizzare un'origine dati esterna, specifica il campo remoteDataSource all'interno di un oggetto DataSourceConfig che contiene la funzione che esegue query e restituisce elementi dall'origine dati.
Per ridurre le richieste a un'origine dati esterna, puoi includere
gli elementi suggeriti che vengono visualizzati nel menu a discesa prima che gli utenti digitino
nel menu. Per compilare gli elementi suggeriti da un'origine dati esterna, specifica oggetti SelectionItem statici.
Il seguente codice mostra un menu a discesa che esegue query e compila gli elementi da un'origine dati esterna:
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"
}
]
}
}
]
}
]
}
Per un esempio completo che mostra come restituire gli elementi suggeriti, consulta la sezione Suggerisci elementi di selezione.
Aggiungi un menu a selezione multipla
Per personalizzare gli elementi di selezione o consentire agli utenti di selezionare elementi da un'origine dati dinamica, le app di Chat possono utilizzare i menu a selezione multipla, che sono un tipo di widget SelectionInput. Ad esempio, la seguente scheda mostra un menu a selezione multipla in cui gli utenti possono selezionare dinamicamente da un elenco di contatti:
Puoi compilare gli elementi di un menu a selezione multipla dalle seguenti origini dati:
- Dati di Google Workspace, che includono gli utenti o gli spazi di Chat di cui l'utente è membro. Il menu viene compilato solo con elementi della stessa organizzazione Google Workspace.
- Origini dati esterne, ad esempio un database relazionale. Ad esempio, puoi utilizzare i menu a selezione multipla per aiutare un utente a selezionare da un elenco di potenziali acquirenti di un sistema di gestione dei rapporti con i clienti (CRM).
Compila gli elementi da un'origine dati di Google Workspace
Per utilizzare le origini dati di Google Workspace, specifica il campo platformDataSource nel widget SelectionInput. A differenza di altri tipi di input di selezione, ometti gli oggetti SelectionItem, perché questi elementi di selezione provengono dinamicamente da Google Workspace.
Il seguente codice mostra un menu a selezione multipla di utenti di Google Workspace.
Per compilare 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 di selezione multipla degli spazi di Chat. Per compilare gli spazi, l'input di selezione specifica il campo hostAppDataSource. Il menu di selezione multipla 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
}
}
}
}
}
}
Compila gli elementi da un'origine dati esterna
I menu a selezione multipla possono anche essere compilati con elementi provenienti da un'origine dati di terze parti o esterna. Per utilizzare un'origine dati esterna, specifica il campo externalDataSource nel widget SelectionInput che contiene la funzione che esegue query e restituisce elementi dall'origine dati.
Per ridurre le richieste a un'origine dati esterna, puoi includere elementi suggeriti che vengono visualizzati nel menu di selezione multipla prima che gli utenti digitino nel menu. Ad esempio, puoi compilare i contatti cercati di recente per l'utente. Per compilare gli elementi suggeriti da un'origine dati esterna, specifica oggetti SelectionItem statici.
Il seguente esempio di codice mostra un menu a selezione multipla che esegue query e compila gli elementi da un'origine dati esterna:
Node.js
Sostituisci FUNCTION_URL con l'endpoint HTTP che esegue query sull'origine dati esterna.
Python
Sostituisci FUNCTION_URL con l'endpoint HTTP che esegue query sull'origine dati esterna.
Java
Sostituisci FUNCTION_URL con l'endpoint HTTP che esegue query sull'origine dati esterna.
Apps Script
Questo esempio invia un messaggio con scheda restituendo il codice JSON della scheda. Puoi anche utilizzare il servizio di schede di Apps Script.
Per un esempio completo che mostra come restituire gli elementi suggeriti, consulta la sezione Suggerisci elementi di selezione.
Ricevere dati dai widget interattivi
Ogni volta che gli utenti fanno clic su un pulsante, viene attivata l'azione delle app Chat con informazioni sull'interazione. Nel
commonEventObject
del payload dell'evento, l'oggetto formInputs contiene tutti i valori inseriti dall'utente.
Puoi recuperare i valori dall'oggetto
event.commonEventObject.formInputs.WIDGET_NAME, dove
WIDGET_NAME è il campo name che hai specificato per il widget.
I valori vengono restituiti come un tipo di dati specifico per il widget.
Di seguito è riportata una parte di un oggetto evento in cui un utente ha inserito i valori per ogni widget:
{
"commonEventObject": { "formInputs": {
"contactName": { "stringInputs": {
"value": ["Kai 0"]
}},
"contactBirthdate": { "dateInput": {
"msSinceEpoch": 1000425600000
}},
"contactType": { "stringInputs": {
"value": ["Personal"]
}}
}}
}
Per ricevere i dati, l'app Chat gestisce l'oggetto evento per ottenere i valori inseriti dagli utenti nei widget. La tabella seguente mostra come ottenere il valore per un determinato widget di input del modulo. Per ogni widget, la tabella mostra il tipo di dati accettato dal widget, dove viene memorizzato il valore nell'oggetto evento e un valore di esempio.
| Widget di input del modulo | Tipo di dati di input | Valore di input dall'oggetto evento | Valore di esempio |
|---|---|---|---|
textInput |
stringInputs |
event.commonEventObject.formInputs.contactName.stringInputs.value[0] |
Kai O |
selectionInput |
stringInputs |
Per ottenere il primo o l'unico valore, event.commonEventObject.formInputs.contactType.stringInputs.value[0] |
Personal |
dateTimePicker che accetta solo date. |
dateInput |
event.commonEventObject.formInputs.contactBirthdate.dateInput.msSinceEpoch. |
1000425600000 |
Dopo aver ricevuto i dati, l'app di Chat può eseguire una delle seguenti operazioni:
- Per le schede che contengono un menu a selezione multipla, compila o suggerisci elementi in base a ciò che l'utente digita nel menu.
- Trasferisci i dati su un'altra scheda, in modo che l'utente possa rivedere le proprie informazioni o continuare con la sezione successiva del modulo.
- Rispondi all'utente per confermare che ha compilato correttamente il modulo.
Suggerisci elementi di selezione
Se una scheda contiene un menu a selezione multipla o un menu a discesa che compila gli elementi da un'origine dati esterna, l'app Chat può restituire elementi suggeriti in base a ciò che gli utenti digitano nel menu. Ad esempio, se un utente inizia a digitare Atl per un menu
che compila le città degli Stati Uniti, la tua
app di Chat può suggerire automaticamente Atlanta prima che l'utente
finisca di digitare. L'app di Chat può suggerire fino a 100 elementi.
Per suggerire e compilare dinamicamente gli elementi in un input di selezione, il widget SelectionInput nella scheda deve specificare una funzione che esegue query sull'origine dati esterna. Per i menu a selezione multipla, specifica il campo externalDataSource. Per i menu a discesa, specifica il campo remoteDataSource all'interno di un oggetto DataSourceConfig.
Puoi anche configurare il numero di caratteri che un utente digita prima che il menu restituisca i suggerimenti. Per i menu a selezione multipla, imposta il campo multiSelectMinQueryLength. Per i menu a discesa, imposta il campo min_characters_trigger all'interno di DataSourceConfig.
Per restituire gli elementi suggeriti, la funzione deve:
- Gestire un oggetto evento, che l'app Chat riceve quando gli utenti digitano nel menu.
- Dall'oggetto evento, recupera il valore digitato dall'utente, rappresentato nel campo
event.commonEventObject.parameters["autocomplete_widget_query"]. - Esegui una query sull'origine dati utilizzando il valore di input dell'utente per ottenere uno o più
SelectionItemsda suggerire all'utente. - Restituisci gli elementi suggeriti restituendo l'azione
RenderActionscon un oggettomodifyCard.
Il seguente esempio di codice mostra come un'app di Chat suggerisce dinamicamente gli elementi nel menu di selezione multipla di una scheda. Quando un utente digita nel menu, la funzione o l'endpoint fornito nel campo externalDataSource del widget esegue una query su un'origine dati esterna e suggerisce gli elementi che l'utente può selezionare.
Node.js
Sostituisci FUNCTION_URL con l'endpoint HTTP che esegue query sull'origine dati esterna.
Python
Sostituisci FUNCTION_URL con l'endpoint HTTP che esegue query sull'origine dati esterna.
Java
Sostituisci FUNCTION_URL con l'endpoint HTTP che esegue query sull'origine dati esterna.
Apps Script
Questo esempio invia un messaggio con scheda restituendo il codice JSON della scheda. Puoi anche utilizzare il servizio di schede di Apps Script.
Trasferisci i dati su un'altra scheda
Dopo che un utente ha inviato le informazioni da una scheda, potresti dover restituire schede aggiuntive per eseguire una delle seguenti operazioni:
- Aiuta gli utenti a compilare moduli più lunghi creando sezioni distinte.
- Consenti agli utenti di visualizzare l'anteprima e confermare le informazioni dalla scheda iniziale, in modo che possano rivedere le risposte prima di inviarle.
- Compila dinamicamente le parti rimanenti del modulo. Ad esempio, per chiedere agli utenti di creare un appuntamento, un'app di Chat potrebbe mostrare una scheda iniziale che richiede il motivo dell'appuntamento e poi compila un'altra scheda che fornisce gli orari disponibili in base al tipo di appuntamento.
Per trasferire l'input di dati dalla scheda iniziale, puoi creare il widget button con actionParameters che contengono il name del widget e il valore inserito dall'utente, come mostrato nell'esempio seguente:
Node.js
Sostituisci FUNCTION_URL con l'endpoint HTTP che gestisce i clic sui pulsanti.
Python
Sostituisci FUNCTION_URL con l'endpoint HTTP che gestisce i clic sui pulsanti.
Java
Sostituisci FUNCTION_URL con l'endpoint HTTP che gestisce i clic sui pulsanti.
Apps Script
Questo esempio invia un messaggio con scheda restituendo il codice JSON della scheda. Puoi anche utilizzare il servizio di schede di Apps Script.
Quando un utente fa clic sul pulsante, l'app Chat riceve un oggetto evento da cui puoi ricevere dati.
Rispondi all'invio di un modulo
Dopo aver ricevuto i dati da un messaggio con scheda o da una finestra di dialogo, l'app di Chat risponde confermando la ricezione o restituendo un errore.
Nell'esempio seguente, un'app di Chat invia un messaggio di testo per confermare di aver ricevuto correttamente un modulo inviato da un messaggio con scheda.
Node.js
Python
Java
Apps Script
Questo esempio invia un messaggio con scheda restituendo il codice JSON della scheda. Puoi anche utilizzare il servizio di schede di Apps Script.
Per elaborare e chiudere una finestra di dialogo, restituisci un oggetto RenderActions che specifica se vuoi inviare un messaggio di conferma, aggiornare il messaggio o la scheda originale o semplicemente chiudere la finestra di dialogo. Per i passaggi, vedi Chiudi una finestra di dialogo.
Risoluzione dei problemi
Questa sezione fornisce i passaggi per la risoluzione dei problemi relativi a codici di errore e comportamenti di runtime specifici durante l'interazione con le finestre di dialogo in Chat.
Le interazioni con la finestra di dialogo restituiscono l'errore "Errore non specificato durante il tentativo di richiamare il componente aggiuntivo"
Quando interagisci con una finestra di dialogo, se visualizzi i log degli errori con il messaggio "Errore non specificato durante la chiamata del componente aggiuntivo" e il codice 13, di solito indica un errore interno o che l'endpoint HTTP dell'app di Chat non è riuscito a elaborare la richiesta o a restituire una risposta valida.
Per risolvere questo errore:
- Controlla i log dell'endpoint HTTP per verificare la presenza di eccezioni o arresti anomali non gestiti.
- Verifica che l'endpoint risponda alle richieste entro 30 secondi. Se l'endpoint impiega più di 30 secondi per l'esecuzione, Chat non può elaborare la risposta e l'interazione non va a buon fine. Per maggiori dettagli, consulta Limiti di frequenza e best practice.
- Assicurati che l'endpoint restituisca una risposta valida. Per gli invii di finestre di dialogo, l'endpoint deve restituire un oggetto
RenderActionsnel formato JSON corretto. Se la risposta non è in un formato corretto o non contiene i campi obbligatori, l'interazione con la finestra di dialogo potrebbe non riuscire.
Quando un'app Google Chat o una scheda restituisce un errore, l'interfaccia di Chat mostra il messaggio "Si è verificato un problema". o "Impossibile elaborare la richiesta." A volte la UI di Chat non mostra alcun messaggio di errore, ma l'app di Chat o la scheda 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 il logging degli errori per le app di Chat è attivo. Per assistenza sulla visualizzazione, il debug e la correzione degli errori, consulta Risolvi i problemi e correggi gli errori di Google Chat.
Argomenti correlati
- Visualizza l'esempio di Gestione contatti, un'app di Chat che chiede agli utenti di compilare un modulo di contatto dai messaggi con schede e dalle finestre di dialogo.
- Apri le finestre di dialogo interattive
App di Chat che non sono componenti aggiuntivi: leggere i dati dei moduli inseriti dagli utenti nelle schede
La seguente documentazione si applica alle app di Chat che non sono componenti aggiuntivi di Google Workspace. Per eseguire la migrazione di un'app di Chat che non è un componente aggiuntivo, consulta Converti un'app Google Chat in un componente aggiuntivo di Google Workspace.
Crea moduli utilizzando le schede
Per un esempio di app di Chat che non è un componente aggiuntivo che utilizza un modulo di contatto con un input di testo, un selettore di data e ora e un input di selezione, consulta il seguente codice:
Node.js
Python
Java
Apps Script
Ricevere dati dai widget interattivi
Ogni volta che gli utenti fanno clic su un pulsante, le app Chat che non sono componenti aggiuntivi ricevono un evento di interazione che dipende dalla posizione del pulsante:
Se il pulsante si trova in un messaggio o in una finestra di dialogo, le app di Chat che non sono componenti aggiuntivi ricevono un evento di interazione
CARD_CLICKEDche contiene informazioni sull'interazione. Il payload degli eventi di interazioneCARD_CLICKEDcontiene un oggettocommon.formInputs(event.common.formInputs) con i valori inseriti dall'utente.Puoi recuperare i valori dall'oggetto
common.formInputs.WIDGET_NAME, dove WIDGET_NAME è il camponameche hai specificato per il widget. I valori vengono restituiti come tipo di dati specifico per il widget (rappresentato come oggettoInputs).Di seguito è riportata una parte di un evento di interazione
CARD_CLICKEDin cui un utente ha inserito i valori per ogni widget:HTTP
{ "type": "CARD_CLICKED", "common": { "formInputs": { "contactName": { "stringInputs": { "value": ["Kai 0"] }}, "contactBirthdate": { "dateInput": { "msSinceEpoch": 1000425600000 }}, "contactType": { "stringInputs": { "value": ["Personal"] }} }} }Apps Script
{ "type": "CARD_CLICKED", "common": { "formInputs": { "contactName": { "": { "stringInputs": { "value": ["Kai 0"] }}}, "contactBirthdate": { "": { "dateInput": { "msSinceEpoch": 1000425600000 }}}, "contactType": { "": { "stringInputs": { "value": ["Personal"] }}} }} }Se il pulsante si trova in una home page, le app di Chat che non sono componenti aggiuntivi ricevono un evento di interazione
SUBMIT_FORM. Il payload dell'evento di interazione contiene un oggettocommonEventObject.formInputs(event.commonEventObject.formInputs) con i valori inseriti dall'utente.Puoi recuperare i valori dall'oggetto
commonEventObject.formInputs.WIDGET_NAME, dove WIDGET_NAME è il camponameche hai specificato per il widget. I valori vengono restituiti come tipo di dati specifico per il widget (rappresentato come oggettoInputs).Di seguito è riportata una parte di un evento di interazione
SUBMIT_FORMin cui un utente ha inserito i valori per ogni widget:HTTP
{ "type": "SUBMIT_FORM", "commonEventObject": { "formInputs": { "contactName": { "stringInputs": { "value": ["Kai 0"] }}, "contactBirthdate": { "dateInput": { "msSinceEpoch": 1000425600000 }}, "contactType": { "stringInputs": { "value": ["Personal"] }} }} }Apps Script
{ "type": "SUBMIT_FORM", "commonEventObject": { "formInputs": { "contactName": { "": { "stringInputs": { "value": ["Kai 0"] }}}, "contactBirthdate": { "": { "dateInput": { "msSinceEpoch": 1000425600000 }}}, "contactType": { "": { "stringInputs": { "value": ["Personal"] }}} }} }
Per ricevere i dati, un'app di Chat che non è un componente aggiuntivo gestisce l'evento di interazione per ottenere i valori inseriti dagli utenti nei widget. La tabella seguente mostra come ottenere il valore per un determinato widget di input del modulo. Per ogni widget, la tabella mostra il tipo di dati accettato dal widget, dove viene archiviato il valore nell'evento di interazione e un valore di esempio.
| Widget di input del modulo | Tipo di dati di input | Valore di input dell'evento di interazione | Valore di esempio |
|---|---|---|---|
textInput |
stringInputs |
event.common.formInputs.contactName.stringInputs.value[0] |
Kai O |
selectionInput |
stringInputs |
Per ottenere il primo o l'unico valore, event.common.formInputs.contactType.stringInputs.value[0] |
Personal |
dateTimePicker che accetta solo date. |
dateInput |
event.common.formInputs.contactBirthdate.dateInput.msSinceEpoch. |
1000425600000 |
Trasferisci i dati su un'altra scheda
Per trasferire l'input dei dati dalla scheda iniziale in un'app di Chat che non è un componente aggiuntivo, crea il widget button con actionParameters che contengono il name del widget e il valore inserito dall'utente, come mostrato nell'esempio seguente:
Node.js
Python
Java
Apps Script
Quando un utente fa clic sul pulsante, l'app Chat che non è un componente aggiuntivo riceve un evento di interazione CARD_CLICKED da cui puoi ricevere dati.
Rispondi all'invio di un modulo
Nell'esempio seguente, un'app di Chat che non è un componente aggiuntivo invia un messaggio di testo per confermare di aver ricevuto correttamente un modulo inviato da una finestra di dialogo o da un messaggio con scheda:
Node.js
Python
Java
Apps Script
Per elaborare e chiudere una finestra di dialogo in un'app di Chat che non è un componente aggiuntivo, restituisci un oggetto ActionResponse che specifica se vuoi inviare un messaggio di conferma, aggiornare il messaggio o la scheda originale o semplicemente chiudere la finestra di dialogo. Per i passaggi, vedi Chiudi una finestra di dialogo.