En esta guía, se explica cómo usar el método download
en el recurso Media
de la API de Google Chat para descargar contenido multimedia (un archivo) desde un mensaje en Google Chat.
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 tu 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 se subió contenido (un archivo local) o si es un archivo almacenado en Drive. El recurso Media
representa un archivo que se sube 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 tu interfaz de línea de comandos:
pip3 install --upgrade google-api-python-client google-auth-oauthlib
- Un proyecto de Google Cloud con la API de Google Chat habilitada y configurada Para conocer los pasos, consulta Compila una app de Google Chat.
La autorización configurada para la app de Chat. La descarga de contenido multimedia admite lo siguiente:
- Autenticación de usuarios con el alcance de autorización
chat.messages.readonly
ochat.messages
. - Autenticación de la app con el alcance de autorización
chat.bot
.
- Autenticación de usuarios con el alcance de autorización
Descargar desde un archivo adjunto
Para descargar medios desde un archivo adjunto, pasa lo siguiente en tu solicitud:
- Con la autenticación de usuario, especifica el alcance de la autorización
chat.messages.readonly
ochat.messages
. Con la autenticación de la app, especifica el alcance de la autorizaciónchat.bot
. - Llama a los siguientes métodos de Google Chat:
- Para obtener
attachmentDataRef
, llama a uno de los siguientes métodos:- El método
get
en el recursoAttachment
- El método
get
o el métodolist
en el recursoMessage
- El método
- Llama al método
download
en el recursoMedia
y especifica elattachmentDataRef.resourceName
recuperado anteriormente comomedia.download.resourceName
.
- Para obtener
En el siguiente ejemplo, se descarga un archivo adjunto a un mensaje:
Python
- En el directorio de trabajo, crea un archivo llamado
chat_media_and_attachment_download.py
. Incluye el siguiente código en
chat_media_and_attachment_download.py
:import io from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build from googleapiclient.http import MediaIoBaseDownload # 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"] def main(): ''' Authenticates with Chat API via user credentials, then downloads a file attached to a 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. chat = build('chat', 'v1', credentials=creds) # Download media resource. request = chat.media().download_media( resourceName=RESOURCE_NAME, ) file = io.BytesIO() downloader = MediaIoBaseDownload(file, request) done = False while done is False: status, done = downloader.next_chunk() if status.total_size: print(f'Total size: {status.total_size}') print(f'Download {int(status.progress() * 100)}') if __name__ == '__main__': main()
En el código, reemplaza
RESOURCE_NAME
porattachmentDataRef.resourceName
, que puedes recuperar de una de las siguientes maneras:- El método
get
en el recursoAttachment
- El método
get
en el recursoMessage
- El método
list
en el recursoMessage
- El método
En el directorio de trabajo, compila y ejecuta la muestra:
python3 chat_media_and_attachment_download.py
Si se ejecuta correctamente, este método muestra el contenido del archivo en bytes.
Para descargar el contenido del archivo, elige uno de los siguientes enfoques:
Recomendamos usar la clase
MediaIoBaseDownload
en Python, que contiene métodos para descargar el archivo en secciones y guardar el contenido en una transmisión de salida.Si debes realizar la solicitud HTTP de forma manual, llama al método
download
y especifica la parte del archivo que deseas descargar mediante un rango de bytes con el encabezadoRange
, por ejemplo:Range: bytes=500-999
.
Temas relacionados
- Si es un archivo de Drive, usa la API de Drive para obtener acceso al archivo.
- Cómo subir contenido multimedia como un archivo adjunto
- Cómo descargar contenido multimedia como un archivo adjunto
- Cómo obtener metadatos sobre un archivo adjunto de un mensaje