En esta guía, se explica cómo usar el método upload
en el recurso Media
de la API de Google Chat para subir contenido multimedia (un archivo) a Google Chat y, luego, adjuntarlo a un mensaje.
Cuando el usuario envía un mensaje a tu app, Google Chat envía un
evento de interacción MESSAGE
.
El evento de interacción que recibe la app incluye un cuerpo de solicitud, que es la carga útil JSON que representa el evento de interacción, incluidos los archivos adjuntos. Los datos del archivo adjunto difieren en función de si el archivo adjunto es contenido subido (un archivo local) o si es un archivo almacenado en Drive. El recurso Media
representa un archivo subido a Google Chat, como imágenes, videos y documentos.
El recurso Attachment
representa una instancia de contenido multimedia (un archivo) adjunto a un mensaje. El recurso Attachment
incluye los metadatos sobre el adjunto, como dónde se guarda.
Requisitos previos
Python
- Python 3.6 o superior
- La herramienta de administración de paquetes pip
Las bibliotecas cliente de Google más recientes para Python. Para instalarlos o actualizarlos, 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. Para crear y publicar una app de Chat, consulta Cómo compilar una app de Google Chat.
Autorización configurada para la app de Chat. La carga de contenido multimedia como un archivo adjunto requiere la autenticación del usuario con el permiso de autorización
chat.messages.create
ochat.messages
.
Subir como archivo adjunto
Para subir medios y adjuntarlos a un mensaje, pasa lo siguiente en tu solicitud:
- Especifica el alcance de autorización de
chat.messages.create
ochat.messages
. - Llama a los siguientes métodos de Google Chat:
- Para subir el archivo, llama al método
upload
en el recursoMedia
.- Establece
parent
en el nombre del espacio que aloja el archivo. - En
body
(el cuerpo de la solicitud), configurafilename
como el nombre del archivo adjunto subido. - Establece
media_body
como una instancia del archivo que se subirá.
- Establece
- Para crear un mensaje con el archivo subido adjunto, llama al método
create
en el recursoMessages
.- Configura
attachment
como la respuesta de una llamada al métodoupload
en el recursoMedia
. El campoattachment
acepta una lista.
- Configura
- Para subir el archivo, llama al método
En el siguiente ejemplo, se sube un archivo de imagen PNG y se adjunta a un mensaje.
Python
- En el directorio de trabajo, crea un archivo llamado
chat_media_and_attachment_upload.py
. Incluye el siguiente código en
chat_media_and_attachment_upload.py
:import os.path from google.auth.transport.requests import Request from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build from googleapiclient.errors import HttpError from googleapiclient.http import MediaFileUpload # Define your app's authorization scopes. # When modifying these scopes, delete the file token.json, if it exists. SCOPES = ["https://www.googleapis.com/auth/chat.messages.create"] def main(): ''' Authenticates with Chat API via user credentials, then uploads a file as media, creates a message, and attaches the file to the message. ''' # Authenticate with Google Workspace # and get user authorization. flow = InstalledAppFlow.from_client_secrets_file( 'client_secrets.json', SCOPES) creds = flow.run_local_server() # Build a service endpoint for Chat API. service = build('chat', 'v1', credentials=creds) # Upload a file to Google Chat. media = MediaFileUpload('test_image.png', mimetype='image/png') # Create a message and attach the uploaded file to it. attachment_uploaded = service.media().upload( # The space to upload the attachment 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 filename of the attachment, including the file extension. body={'filename': 'test_image.png'}, # Media resource of the attachment. media_body=media ).execute() print(attachment_uploaded) # Create a Chat message with attachment. result = service.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. # # Must match the space name that the attachment is uploaded to. parent='spaces/SPACE', # The message to create. body={ 'text': 'Hello, world!', 'attachment': [attachment_uploaded] } ).execute() print(result) if __name__ == '__main__': main()
En el código, reemplaza
SPACE
por el nombre del espacio en el que se subirá el archivo adjunto, que puedes obtener del métodospaces.list
en la API de Chat, o bien desde la URL de un espacio.En el directorio de trabajo, compila y ejecuta la muestra:
python3 chat_media_and_attachment_upload.py
La API de Chat muestra un cuerpo de respuesta que contiene attachmentDataRef
con detalles sobre el archivo subido.
Límites y consideraciones
Mientras te preparas para subir archivos y adjuntarlos a los mensajes, ten en cuenta estos límites y consideraciones:
- Puedes subir archivos de hasta 200 MB.
- Algunos tipos de archivos no son compatibles y no se pueden subir. Para obtener más información, consulta Tipos de archivo bloqueados en Google Chat.
Temas relacionados
- Cómo descargar contenido multimedia como un archivo adjunto
- Cómo obtener metadatos sobre un archivo adjunto de un mensaje