Con la API de Google Chat, puedes crear, leer, actualizar o borrar un mensaje en Google Chat de manera asíncrona llamando a los métodos correspondientes. En esta guía, se explica cómo llamar a los siguientes métodos:
- Crea un mensaje con
spaces.messages.create
. - Lee un mensaje con
spaces.messages.get
. - Actualiza un mensaje con
spaces.messages.update
. - Borra un mensaje con
spaces.messages.delete
.
Las apps de chat pueden responder a los eventos de Chat, como los mensajes, y que se los agregue a un espacio, sin llamar a la API de Chat de manera asíncrona. Para compilar una app de Chat que responda a eventos de Chat de manera síncrona, consulta Cómo compilar una app de Chat. Una app de Chat puede funcionar con la API de Chat de manera síncrona y asíncrona.
Para crear un mensaje de forma asíncrona en un espacio de Chat sin una app de Chat, configura un webhook.
Requisitos previos
Para ejecutar los ejemplos en esta guía, necesitas los siguientes requisitos previos:
Python
- Python 3.6 o superior
- La herramienta de administración de paquetes pip
Las bibliotecas cliente de Google para Python. Para instalarlos, ejecuta el siguiente comando en la interfaz de línea de comandos:
pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib oauth2client
Una app de Chat publicada con membresía en un espacio de Chat:
- Para crear y publicar una app de Chat, consulta Cómo compilar una app de Google Chat con Cloud Functions.
- Para agregar una app de Chat a un espacio de Chat, consulta Cómo agregar apps a espacios o conversaciones en Google Chat.
Autorización configurada para la aplicación de chat:
- La autenticación de la cuenta de servicio es totalmente compatible. Para configurar una cuenta de servicio, consulta Autentica y autoriza como una cuenta de servicio.
- Programa de Vista previa para desarrolladores de Google Workspace, que otorga acceso anticipado a ciertas funciones. Para configurar la autenticación de usuarios, consulta Autentica y autoriza usuarios (Vista previa para desarrolladores). El método
spaces.messages.update
aún no admite la autenticación de usuarios.
Vista previa para desarrolladores: La autenticación de usuarios se admite como parte del
Crear un mensaje
Para crear un mensaje de forma asíncrona en Google Chat, llama al método create
en el recurso Message
. Puedes crear un mensaje de texto o de tarjeta. Para iniciar o responder una conversación, especifica una threadKey
o thread.name
.
Toma nota del name
de un mensaje que crees para poder consultarlo más adelante si necesitas leerlo, actualizarlo o borrarlo. También puedes asignar nombres a los mensajes.
Crear un mensaje de texto
A continuación, se indica cómo crear un mensaje text:
Python
- En tu directorio de trabajo, crea un archivo llamado
chat_create_text_message.py
. Incluye el siguiente código en
chat_create_text_message.py
:from httplib2 import Http from oauth2client.service_account import ServiceAccountCredentials from apiclient.discovery import build # Specify required scopes. SCOPES = ['https://www.googleapis.com/auth/chat.bot'] # Specify service account details. CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name( 'service_account.json', SCOPES) # Build the URI and authenticate with the service account. chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http())) # Create a Chat message. result = chat.spaces().messages().create( # The space to create the message in. # # Replace SPACE with a space name. # Obtain the space name from the spaces resource of Chat API, # or from a space's URL. parent='spaces/SPACE', # The message to create. body={'text': 'Hello, world!'} ).execute() print(result)
En el código, reemplaza
SPACE
por un nombre de espacio que puedes obtener del métodospaces.list()
en la API de Chat o de la URL de un espacio.En tu directorio de trabajo, compila y ejecuta la muestra:
python3 chat_create_text_message.py
Crear un mensaje de tarjeta
A continuación, le mostramos cómo crear un mensaje card, como el que se muestra a continuación:

Python
- En tu directorio de trabajo, crea un archivo llamado
chat_create_card_message.py
. Incluye el siguiente código en
chat_create_card_message.py
:from httplib2 import Http from oauth2client.service_account import ServiceAccountCredentials from apiclient.discovery import build # Specify required scopes. SCOPES = ['https://www.googleapis.com/auth/chat.bot'] # Specify service account details. CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name( 'service_account.json', SCOPES) # Build the URI and authenticate with the service account. chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http())) # Create a Chat message. result = chat.spaces().messages().create( # The space to create the message in. # # Replace SPACE with a space name. # Obtain the space name from the spaces resource of Chat API, # or from a space's URL. parent='spaces/SPACE', # The message to create. body= { 'cardsV2': [{ 'cardId': 'createCardMessage', 'card': { 'header': { 'title': 'A Card Message!', 'subtitle': 'Created with Chat REST API', 'imageUrl': 'https://developers.google.com/chat/images/chat-product-icon.png', 'imageType': 'CIRCLE' }, 'sections': [ { 'widgets': [ { 'buttonList': { 'buttons': [ { 'text': 'Read the docs!', 'onClick': { 'openLink': { 'url': 'https://developers.google.com/chat' } } } ] } } ] } ] } }] } ).execute() print(result)
En el código, reemplaza
SPACE
por un nombre de espacio que puedes obtener del métodospaces.list()
en la API de Chat o de la URL de un espacio.En tu directorio de trabajo, compila y ejecuta la muestra:
python3 chat_create_card_message.py
Cómo iniciar o responder una conversación de mensajes
Para iniciar una conversación de mensajes, crea un mensaje y deja thread.name
vacío; Google Chat lo propagará cuando crees la conversación. De manera opcional, para personalizar el nombre del subproceso, especifica thread.threadKey
como su nombre.
Para responder una conversación de mensajes, especifica thread.threadKey
o thread.name
como el nombre de la conversación. Los mensajes posteriores con el mismo thread.threadKey
o thread.name
se publicarán en la misma conversación que las respuestas.
Cada thread.threadKey
es único para la app de Chat o el webhook que lo configura. Si dos apps o webhooks diferentes configuran el mismo thread.threadKey
, los mensajes no se agrupan. En cambio, comienzan dos subprocesos diferentes. Dos apps o webhooks diferentes pueden publicar respuestas en la misma conversación si, en su lugar, se especifica thread.name
.
A continuación, se indica cómo iniciar o responder una conversación con el thread.threadKey
"nameOfThread":
Python
- En tu directorio de trabajo, crea un archivo llamado
chat_create_message_thread.py
. Incluye el siguiente código en
chat_create_message_thread.py
:from httplib2 import Http from oauth2client.service_account import ServiceAccountCredentials from apiclient.discovery import build # Specify required scopes. SCOPES = ['https://www.googleapis.com/auth/chat.bot'] # Specify service account details. CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name( 'service_account.json', SCOPES) # Build the URI and authenticate with the service account. chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http())) # Create a Chat message. result = chat.spaces().messages().create( # The space to create the message in. # # REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD replies to an existing thread # if one exists, otherwise it starts a new one. # # Replace SPACE with a space name. # Obtain the space name from the spaces resource of Chat API, # or from a space's URL. parent='spaces/SPACE', # Whether to start a thread or reply to an existing one. # # Required when threading is enabled in a space unless starting a # thread. Ignored in other space types. Threading is enabled when # space.spaceThreadingState is THREADED_MESSAGES. messageReplyOption='REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD', # The message body. body={ # The message to create. 'text': 'Start or reply to another message in a thread!', # The thread to start or reply to. 'thread': { 'threadKey': 'nameOfThread' } } ).execute() print(result)
En el código, reemplaza
SPACE
por un nombre de espacio que puedes obtener del métodospaces.list()
en la API de Chat o de la URL de un espacio.En tu directorio de trabajo, compila y ejecuta la muestra:
python3 chat_create_message_thread.py
Crear un mensaje y asignarle un nombre
Para facilitar las operaciones posteriores en un mensaje creado, asígnale un name
personalizado. La asignación de un nombre personalizado permite que una app de Chat recupere el mensaje rápidamente sin guardar el mensaje name
del cuerpo de la respuesta que se muestra cuando se crea el mensaje.
La asignación de un nombre personalizado permite que una app de chat recuerde el mensaje sin guardar el mensaje name
del cuerpo de la respuesta que se muestra cuando se crea el mensaje.
La asignación de un nombre personalizado no reemplaza el campo name
generado, el nombre del recurso del mensaje. En su lugar, establece el nombre personalizado como el campo clientAssignedMessageId
, al que se puede hacer referencia mientras se procesan las operaciones posteriores, como actualizar o borrar el mensaje.
Si especificas un nombre personalizado que usaste durante la creación de un mensaje, se mostrará un error, pero otros métodos como update
y delete
funcionarán como se espera.
Requisitos para los nombres personalizados:
- Comienza con
client-
. Por ejemplo,client-custom-name
es un nombre personalizado válido, perocustom-name
no lo es. - Contener solo letras minúsculas, números y guiones
- No debe tener más de 63 caracteres.
A continuación, le mostramos cómo crear un mensaje y asignarle un nombre:
Python
- En tu directorio de trabajo, crea un archivo llamado
chat_create_named_message.py
. Incluye el siguiente código en
chat_create_named_message.py
:from httplib2 import Http from oauth2client.service_account import ServiceAccountCredentials from apiclient.discovery import build # Specify required scopes. SCOPES = ['https://www.googleapis.com/auth/chat.bot'] # Specify service account details. CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name( 'service_account.json', SCOPES) # Build the URI and authenticate with the service account. chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http())) # Create a Chat message with a custom name. result = chat.spaces().messages().create( # The space to create the message in. # # Replace SPACE with a space name. # Obtain the space name from the spaces resource of Chat API, # or from a space's URL. parent='spaces/SPACE', # Custom name for the message used to facilitate later operations. messageId='client-custom-name', # The message to create. body={'text': 'Hello, world!'} ).execute() print(result)
En el código, reemplaza
SPACE
por un nombre de espacio que puedes obtener del métodospaces.list()
en la API de Chat o de la URL de un espacio.En tu directorio de trabajo, compila y ejecuta la muestra:
python3 chat_create_named_message.py
Leíste un mensaje
Para leer un mensaje de forma asíncrona en Google Chat, llama al método get
en el recurso Message
y pasa el name
del mensaje para leerlo.
Para leer un mensaje, sigue estos pasos:
Python
- En tu directorio de trabajo, crea un archivo llamado
chat_read_message.py
. Incluye el siguiente código en
chat_read_message.py
:from httplib2 import Http from oauth2client.service_account import ServiceAccountCredentials from apiclient.discovery import build # Specify required scopes. SCOPES = ['https://www.googleapis.com/auth/chat.bot'] # Specify service account details. CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name( 'service_account.json', SCOPES) # Build the URI and authenticate with the service account. chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http())) # Get a Chat message. result = chat.spaces().messages().get( # The message to read. # # Replace SPACE with a space name. # Obtain the space name from the spaces resource of Chat API, # or from a space's URL. # # Replace MESSAGE with a message name. # Obtain the message name from the response body returned # after creating a message asynchronously with Chat REST API. name='spaces/SPACE/messages/MESSAGE' ).execute() # Print Chat API's response in your command line interface. print(result)
En el código, reemplaza
SPACE
por un nombre de espacio que puedes obtener del métodospaces.list()
en la API de Chat o de la URL de un espacio.En el código, reemplaza
MESSAGE
por el nombre del mensaje, que puedes obtener del cuerpo de la respuesta que se muestra después de crear un mensaje de forma asíncrona con la API de Chat, o bien mediante el nombre personalizado asignado al mensaje en el momento de su creación.En tu directorio de trabajo, compila y ejecuta la muestra:
python3 chat_read_message.py
Actualizar un mensaje
Para actualizar un mensaje existente de forma asíncrona en Google Chat, llama al método update
en el recurso Message
y pasa el name
del mensaje que deseas actualizar, así como un updateMask
y un body
que especifiquen el mensaje actualizado.
Cómo actualizar un mensaje de texto o anteponer un mensaje de texto a un mensaje de la tarjeta
Para actualizar un mensaje de texto, pasa lo siguiente:
- El
name
del mensaje que se actualizará. updateMask='text'
- Un
body
que especifique el mensaje actualizado.
Si el mensaje actualizado es un mensaje de tarjeta, el mensaje de texto aparece antes que el mensaje de tarjeta (que continúa apareciendo).
A continuación, te mostramos cómo actualizar un mensaje de texto a un mensaje de texto o anteponer un mensaje de tarjeta:
Python
- En tu directorio de trabajo, crea un archivo llamado
chat_update_text_message.py
. Incluye el siguiente código en
chat_update_text_message.py
:from httplib2 import Http from oauth2client.service_account import ServiceAccountCredentials from apiclient.discovery import build # Specify required scopes. SCOPES = ['https://www.googleapis.com/auth/chat.bot'] # Specify service account details. CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name( 'service_account.json', SCOPES) # Build the URI and authenticate with the service account. chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http())) # Update a Chat message. result = chat.spaces().messages().update( # The message to update, and the updated message. # # Replace SPACE with a space name. # Obtain the space name from the spaces resource of Chat API, # or from a space's URL. # # Replace MESSAGE with a message name. # Obtain the message name from the response body returned # after creating a message asynchronously with Chat REST API. name='spaces/SPACE/messages/MESSAGE', updateMask='text', body={'text': 'Updated message!'} ).execute() # Print Chat API's response in your command line interface. print(result)
En el código, reemplaza
SPACE
por un nombre de espacio que puedes obtener del métodospaces.list()
en la API de Chat o de la URL de un espacio.En el código, reemplaza
MESSAGE
por el nombre del mensaje, que puedes obtener del cuerpo de la respuesta que se muestra después de crear un mensaje de forma asíncrona con la API de Chat, o bien mediante el nombre personalizado asignado al mensaje en el momento de su creación.En tu directorio de trabajo, compila y ejecuta la muestra:
python3 chat_update_text_message.py
Cómo actualizar el mensaje de una tarjeta o agregar un mensaje de tarjeta a un mensaje de texto
Para actualizar un mensaje de tarjeta, pasa lo siguiente:
- El
name
del mensaje que se actualizará updateMask='cardsV2'
- Un
body
que especifique el mensaje actualizado.
Si el mensaje actualizado es un mensaje de texto, se adjunta una tarjeta al mensaje de texto (que todavía aparece). Si el mensaje actualizado es una tarjeta en sí, entonces la tarjeta que se muestra se actualiza.
A continuación, le mostramos cómo actualizar un mensaje a un mensaje de tarjeta:
Python
- En tu directorio de trabajo, crea un archivo llamado
chat_update_card_message.py
. Incluye el siguiente código en
chat_update_card_message.py
:from httplib2 import Http from oauth2client.service_account import ServiceAccountCredentials from apiclient.discovery import build # Specify required scopes. SCOPES = ['https://www.googleapis.com/auth/chat.bot'] # Specify service account details. CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name( 'service_account.json', SCOPES) # Build the URI and authenticate with the service account. chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http())) # Update a Chat message. result = chat.spaces().messages().update( # The message to update, and the updated message. # # Replace SPACE with a space name. # Obtain the space name from the spaces resource of Chat API, # or from a space's URL. # # Replace MESSAGE with a message name. # Obtain the message name from the response body returned # after creating a message asynchronously with Chat REST API. name='spaces/SPACE/messages/MESSAGE', updateMask='cardsV2', body= { 'cardsV2': [{ 'cardId': 'updateCardMessage', 'card': { 'header': { 'title': 'An Updated Card Message!', 'subtitle': 'Updated with Chat REST API', 'imageUrl': 'https://developers.google.com/chat/images/chat-product-icon.png', 'imageType': 'CIRCLE' }, 'sections': [ { 'widgets': [ { 'buttonList': { 'buttons': [ { 'text': 'Read the docs!', 'onClick': { 'openLink': { 'url': 'https://developers.google.com/chat' } } } ] } } ] } ] } }] } ).execute() # Print Chat API's response in your command line interface. print(result)
En el código, reemplaza
SPACE
por un nombre de espacio que puedes obtener del métodospaces.list()
en la API de Chat o de la URL de un espacio.En el código, reemplaza
MESSAGE
por el nombre del mensaje, que puedes obtener del cuerpo de la respuesta que se muestra después de crear un mensaje de forma asíncrona con la API de Chat, o bien mediante el nombre personalizado asignado al mensaje en el momento de su creación.En tu directorio de trabajo, compila y ejecuta la muestra:
python3 chat_update_card_message.py
Suprime un mensaje
Para borrar un mensaje existente de Google Chat de forma asíncrona, llama al método delete
en el recurso Message
y pasa el name
del mensaje que deseas borrar.
Para eliminar un mensaje, sigue estos pasos:
Python
- En tu directorio de trabajo, crea un archivo llamado
chat_delete_message.py
. Incluye el siguiente código en
chat_delete_message.py
:from httplib2 import Http from oauth2client.service_account import ServiceAccountCredentials from apiclient.discovery import build # Specify required scopes. SCOPES = ['https://www.googleapis.com/auth/chat.bot'] # Specify service account details. CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name( 'service_account.json', SCOPES) # Build the URI and authenticate with the service account. chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http())) # Delete a Chat message. result = chat.spaces().messages().delete( # The message to delete. # # Replace SPACE with a space name. # Obtain the space name from the spaces resource of Chat API, # or from a space's URL. # # Replace MESSAGE with a message name. # Obtain the message name from the response body returned # after creating a message asynchronously with Chat REST API. name='spaces/SPACE/messages/MESSAGE' ).execute() # Print Chat API's response in your command line interface. # When deleting a message, the response body is empty. print(result)
En el código, reemplaza
SPACE
por un nombre de espacio que puedes obtener del métodospaces.list()
en la API de Chat o de la URL de un espacio.En el código, reemplaza
MESSAGE
por el nombre del mensaje, que puedes obtener del cuerpo de la respuesta que se muestra después de crear un mensaje de forma asíncrona con la API de Chat, o bien mediante el nombre personalizado asignado al mensaje en el momento de su creación.En tu directorio de trabajo, compila y ejecuta la muestra:
python3 chat_delete_message.py
Límites y consideraciones
- La única forma de obtener el
name
de un mensaje de Google Chat es desde el cuerpo de la respuesta que se muestra cuando se crea el mensaje. Asegúrate de anotar elname
de un mensaje que crees para poder consultarlo más adelante si necesitas leerlo, actualizarlo o borrarlo. También puedes asignar nombres a los mensajes. - Cuando realizas la autenticación como una app con una cuenta de servicio, las apps de Chat solo pueden leer, actualizar y borrar sus propios mensajes.
- autenticación de usuarios, Google Chat podría mostrar un mensaje de atribución que indique el nombre de la app que realizó la acción en nombre del usuario que la autorizó. Vista previa para desarrolladores: Cuando una app realiza una acción con la