Procesar la información ingresada por los usuarios

En esta guía, se describe cómo recibir y leer la información que ingresan los usuarios. mensajes de tarjetas y diálogos. Los usuarios pueden ingresar datos que las apps de Chat reciben, leen y responden a los que tiene acceso una cuenta. Entre los widgets que permiten a los usuarios ingresar información, se incluyen los siguientes:

  • TextInput para la entrada de texto de formato libre que también admite sugerencias.
  • SelectionInput para los elementos de lista y menús, como casillas de verificación, botones de selección y menús desplegables.
  • DateTimePicker para entradas de fecha y hora.


Usa Card Builder para diseñar mensajes de tarjetas JSON y obtener una vista previa de ellos para apps de Chat:

Abre el Creador de tarjetas

Recibir entradas de datos de los usuarios permite que las apps de Chat realicen acciones como las siguientes: lo siguiente:

  • Actualizar los casos de atención al cliente
  • Crear órdenes de trabajo
  • Autenticar con servicios web

Requisitos previos

Node.js

Una app de Google Chat habilitada para funciones interactivas. Para crear un app de Chat interactiva con un servicio HTTP, completa esta guía de inicio rápido.

Apps Script

Una app de Google Chat habilitada para funciones interactivas. Para crear un app de Chat interactiva en Apps Script, completa esta guía de inicio rápido.

Python

Una app de Google Chat habilitada para funciones interactivas. Para crear un app de Chat interactiva con un servicio HTTP, completa esta guía de inicio rápido.

Cómo funciona la recepción de datos

Una app de Chat presenta información al usuario como una un cuadro de diálogo o un mensaje de tarjeta. En este ejemplo, un diálogo le pide al usuario que ingrese información sobre un contacto mediante el TextInput y SelectionInput widgets:

Un diálogo que muestra una variedad de widgets diferentes.

Cuando finaliza, la app de Chat recibe los datos usuarios ingresados en el diálogo en formato JSON y una evento de interacción, en el que:

Para obtener datos sobre lo que ingresaron los usuarios, utiliza el Event.common.formInputs en la carga útil del evento. El campo formInputs es un mapa en el que se almacenan las claves los IDs de cadena asignados a cada widget y los valores representan la entrada del usuario para cada widget. Los diferentes objetos representan distintos tipos de datos de entrada. Para ejemplo, Event.common.formInputs.stringInputs representan entradas de cadena.

La aplicación puede acceder al primer valor ingresado por el usuario con un valor de event.common.formInputs.NAME.stringInputs.value[0], donde NAME es el campo name de un TextInput widget.

Cómo recibir datos de las tarjetas

Cuando un usuario ingresa datos en un mensaje de tarjeta, tus La app de Chat recibe una app de Chat de interacción, como en el siguiente ejemplo:

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
  }
}

Cómo recibir datos de los diálogos

Cuando un usuario envía datos en un diálogo, tu app de Chat recibe otro evento de interacción con la app de Chat, como el siguiente ejemplo:

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
  }
}

Responde a los datos recopilados de un mensaje o diálogo de tarjeta

Después de recibir los datos de un mensaje o diálogo de tarjeta, el La app de Chat responde con un acuse de recibo o muestran un error, ambos se hacen con la devolución de un ActionResponse:

  • Para confirmar la recepción exitosa, responde con un ActionResponse parámetro que tiene "actionStatus": "OK".
  • Para devolver un error, responde con un ActionResponse parámetro que tiene "actionStatus": "ERROR MESSAGE".

Ejemplo

En el siguiente ejemplo, se verifica la presencia de un valor name. Si no se incluye, el la app muestra un error. Si los hay, la app confirma la recepción de los datos del formulario y cierra el diálogo.

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

En este ejemplo, se envía un mensaje de tarjeta mostrando JSON de la tarjeta. También puedes usar Servicio de tarjetas de 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!'
                }
              }
            }

Solucionar problemas

Cuando una app de Google Chat o card muestra un error, el En la interfaz de Chat, aparece un mensaje que dice “Se produjo un error”. o "No se pudo procesar la solicitud". A veces, la IU de Chat no muestra ningún mensaje de error, pero la app de Chat la tarjeta produce un resultado inesperado; Por ejemplo, es posible que un mensaje de tarjeta no para que aparezca la opción.

Aunque es posible que no aparezca un mensaje de error en la IU de Chat, Hay mensajes de error descriptivos y datos de registro disponibles para ayudarte a corregir errores. Cuando se activa el registro de errores de las apps de Chat. Para obtener ayuda sobre la visualización, la depuración y la corrección de errores, consulta Soluciona problemas y corrige errores de Google Chat.