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 tarjetasRecibir 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:
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:
EventType
esCARD_CLICKED
.DialogEventType
esSUBMIT_DIALOG
(solo para diálogos).
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.
Temas relacionados
- Consulta muestras de la app de Chat que procesan información de los usuarios.
- Cómo abrir diálogos interactivos