Informazioni sul processo inserite dagli utenti

Questa guida descrive come ricevere e leggere le informazioni inserite dagli utenti messaggi nella scheda e finestre di dialogo. Gli utenti possono inserire i dati che le app di chat ricevono, leggono e rispondono a. I widget che consentono agli utenti di inserire informazioni includono quanto segue:

  • TextInput per l'inserimento di testo in formato libero che supporta anche i suggerimenti.
  • SelectionInput per voci di elenco e menu, come caselle di controllo, pulsanti di opzione e menu a discesa.
  • DateTimePicker per le voci di data e ora.


Utilizza Card Builder per progettare e visualizzare l'anteprima di messaggi delle schede JSON per le app di chat:

Apri il generatore di schede

La ricezione di dati inseriti dagli utenti consente alle app di Chat, ad esempio le seguenti:

  • Aggiorna le richieste di assistenza clienti.
  • Creare ordini di lavoro.
  • Esegui l'autenticazione con i servizi web.

Prerequisiti

Node.js

Un'app di Google Chat abilitata per le funzionalità interattive. Per creare un un'app di chat interattiva utilizzando un servizio HTTP, completa questa guida rapida.

Apps Script

Un'app di Google Chat abilitata per le funzionalità interattive. Per creare un app di Chat interattiva in Apps Script, completa questa guida rapida.

Python

Un'app di Google Chat abilitata per le funzionalità interattive. Per creare un un'app di chat interattiva utilizzando un servizio HTTP, completa questa guida rapida.

Come funziona la ricezione dei dati

Un'app di Chat presenta informazioni all'utente sotto forma di una finestra di dialogo o un messaggio della scheda. In questo esempio, una finestra di dialogo chiede all'utente di inserire informazioni su un contatto utilizzando TextInput e SelectionInput widget:

Una finestra di dialogo con una serie di widget diversi.

Al termine, l'app Chat riceve i dati utenti inseriti nella finestra di dialogo in formato JSON e un evento di interazione in cui:

Per ottenere dati su ciò che gli utenti hanno inserito, utilizza la Event.common.formInputs nel payload dell'evento. Il campo formInputs è una mappa in cui si trovano le chiavi gli ID stringa assegnati a ogni widget e i relativi valori rappresentano l'input dell'utente per per ciascun widget. Oggetti diversi rappresentano tipi di dati di input diversi. Per un esempio, Event.common.formInputs.stringInputs rappresentano gli input di stringa.

La tua app può accedere al primo valore inserito dall'utente all'indirizzo event.common.formInputs.NAME.stringInputs.value[0], dove NAME è il campo name di un Widget TextInput.

Ricevi dati dalle schede

Quando un utente inserisce dati in un messaggio di una scheda, L'app Chat riceve un'app Chat come nell'esempio seguente:

JSON

{
  "type": enum (EventType),
  "eventTime": string,
  "threadKey": string,
  "message": {
    object (Message)
  },
  "user": {
    object (User)
  },
  "space": {
    object (Space)
  },
  "action": {
    object (FormAction)
  },
  "configCompleteRedirectUrl": string,
  "common": {

    // Represents user data entered in a card.
    "formInputs": {

      // Represents user data entered for a specific field in a card.
      "NAME": {

        // Represents string data entered in a card, like text input fields
        // and check boxes.
        "stringInputs": {

          // An array of strings entered by the user in a card.
          "value": [
            string
          ]
        }
      }
    },
    "parameters": {
      string: string,
      ...
    },
    "invokedFunction": string
  }
}

Ricevi dati dalle finestre di dialogo

Quando un utente invia dati in una finestra di dialogo, l'app Chat riceve un altro evento di interazione con l'app di Chat, come nell'esempio seguente:

JSON

{
  "type": enum (EventType),
  "eventTime": string,
  "threadKey": string,
  "message": {
    object (Message)
  },
  "user": {
    object (User)
  },
  "space": {
    object (Space)
  },
  "action": {
    object (FormAction)
  },
  "configCompleteRedirectUrl": string,

  // Indicates that this event is dialog-related.
  "isDialogEvent": true,

  // Indicates that a user clicked a button, and all data
  // they entered in the dialog is included in Event.common.formInputs.
  "dialogEventType": "SUBMIT_DIALOG",
  "common": {
    "userLocale": string,
    "hostApp": enum (HostApp),
    "platform": enum (Platform),
    "timeZone": {
      object (TimeZone)
    },

    // Represents user data entered in a dialog.
    "formInputs": {

      // Represents user data entered for a specific field in a dialog.
      "NAME": {

        // Represents string data entered in a dialog, like text input fields
        // and check boxes.
        "stringInputs": {

          // An array of strings entered by the user in a dialog.
          "value": [
            string
          ]
        }
      }
    },
    "parameters": {
      string: string,
      ...
    },
    "invokedFunction": string
  }
}

Rispondere ai dati raccolti da un messaggio o da una finestra di dialogo della scheda

Dopo aver ricevuto i dati da un messaggio o da una finestra di dialogo, la L'app Chat risponde confermando la ricezione o entro e restituire un errore, entrambi effettuati restituendo un ActionResponse:

  • Per confermare l'avvenuta ricezione, rispondi con un ActionResponse con "actionStatus": "OK".
  • Per restituire un errore, rispondi con un ActionResponse con "actionStatus": "ERROR MESSAGE".

Esempio

L'esempio seguente verifica la presenza di un valore name. Se non è presente, restituisce un errore. Se presente, l'app conferma la ricezione dei dati del modulo e chiude la finestra di dialogo.

Node.js

/**
 * Checks for a form input error, the absence of
 * a "name" value, and returns an error if absent.
 * Otherwise, confirms successful receipt of a dialog.
 *
 * Confirms successful receipt of a dialog.
 *
 * @param {Object} event the event object from Chat API.
 *
 * @return {object} open a Dialog in Google Chat.
 */
function receiveDialog(event) {

  // Checks to make sure the user entered a name
  // in a dialog. If no name value detected, returns
  // an error message.
  if (event.common.formInputs.WIDGET_NAME.stringInputs.value[0] == "") {
    res.json({
      "actionResponse": {
        "type": "DIALOG",
        "dialogAction": {
          "actionStatus": "Don't forget to name your new contact!"
        }
      }
    });

  // Otherwise the app indicates that it received
  // form data from the dialog. Any value other than "OK"
  // gets returned as an error. "OK" is interpreted as
  // code 200, and the dialog closes.
  } else {
    res.json({
      "actionResponse": {
        "type": "DIALOG",
        "dialogAction": {
          "actionStatus": "OK"
        }
      }
    });
  }
}

Apps Script

Questo esempio invia un messaggio di una scheda restituendo JSON card. Puoi utilizzare anche Servizio di schede Apps Script.

/**
 * Checks for a form input error, the absence of
 * a "name" value, and returns an error if absent.
 * Otherwise, confirms successful receipt of a dialog.
 *
 * Confirms successful receipt of a dialog.
 *
 * @param {Object} event the event object from Chat API.
 *
 * @return {object} open a Dialog in Google Chat.
 */
function receiveDialog(event) {

  // Checks to make sure the user entered a name
  // in a dialog. If no name value detected, returns
  // an error message.
  if (event.common.formInputs.WIDGET_NAME[""].stringInputs.value[0] == "") {
    return {
      "actionResponse": {
        "type": "DIALOG",
        "dialogAction": {
          "actionStatus": "Don't forget to name your new contact!"
        }
      }
    };

  // Otherwise the app indicates that it received
  // form data from the dialog. Any value other than "OK"
  // gets returned as an error. "OK" is interpreted as
  // code 200, and the dialog closes.
  } else {
    return {
      "actionResponse": {
        "type": "DIALOG",
        "dialogAction": {
          "actionStatus": "OK"
        }
      }
    };
  }
}

Python

def receive_dialog(event: Mapping[str, Any]) -> Mapping[str, Any]:
  """Checks for a form input error, the absence of a "name" value, and returns
     an error if absent. Otherwise, confirms successful receipt of a dialog.

  Args:
      event (Mapping[str, Any]): the event object from Chat API.

  Returns:
      Mapping[str, Any]: the response.
  """

  if common := event.get('common'):
    if form_inputs := common.get('formInputs'):
      if contact_name := form_inputs.get('WIDGET_NAME'):
        if string_inputs := contact_name.get('stringInputs'):
          if name := string_inputs.get('value')[0]:
            return {
              'actionResponse': {
                'type': 'DIALOG',
                'dialogAction': {
                  'actionStatus': 'OK'
                }
              }
            }
          else:
            return {
              'actionResponse': {
                'type': 'DIALOG',
                'dialogAction': {
                  'actionStatus': 'Don\'t forget to name your new contact!'
                }
              }
            }

Risoluzione dei problemi

Quando un'app Google Chat o card restituisce un errore, L'interfaccia di Chat mostra il messaggio "Si è verificato un problema". o "Impossibile elaborare la richiesta". A volte, l'UI di Chat non mostra alcun messaggio di errore, ma l'app Chat o la scheda restituisce un risultato inaspettato; Ad esempio, il messaggio di una scheda potrebbe non vengono visualizzate.

Anche se un messaggio di errore potrebbe non essere visualizzato nella UI di Chat, messaggi di errore descrittivi e dati di log che ti aiuteranno a correggere gli errori quando il logging degli errori per le app di chat è attivo. Per assistenza con la visualizzazione, il debug e la correzione degli errori, consulta Risolvere i problemi e correggere gli errori di Google Chat.