Fazer upload de mídia como um arquivo anexo

Este guia explica como usar o método upload no recurso Media da API Google Chat para fazer upload de mídia (um arquivo) para o Google Chat e anexá-la a uma mensagem.

Quando o usuário envia uma mensagem para seu app, o Google Chat envia um evento de interação MESSAGE. O evento de interação recebido pelo app inclui um corpo da solicitação, que é o payload JSON que representa o evento de interação, incluindo todos os anexos. Os dados no anexo serão diferentes se for conteúdo enviado por upload (um arquivo local) ou armazenado no Drive. O recurso Media representa um arquivo enviado para o Google Chat, como imagens, vídeos e documentos. O recurso Attachment representa uma instância de mídia (um arquivo) anexada a uma mensagem. O recurso Attachment inclui os metadados sobre o anexo, como o local em que ele é salvo.

Pré-requisitos

Python

  • Python 3.6 ou superior
  • A ferramenta de gerenciamento de pacotes pip
  • As bibliotecas de cliente mais recentes do Google para Python. Para instalar ou atualizar, execute o seguinte na interface de linha de comando:

    pip3 install --upgrade google-api-python-client google-auth-oauthlib
    
  • Um projeto do Google Cloud com a API Google Chat ativada e configurada. Veja as etapas em Criar um app do Google Chat.
  • Autorização configurada para o app do Chat. Para fazer o upload de mídia como um anexo, é preciso usar a autenticação do usuário com o escopo de autorização chat.messages.create ou chat.messages.

Fazer upload como um arquivo anexado

Para fazer upload de mídia e anexá-la a uma mensagem, transmita o seguinte na solicitação:

  • Especifique o escopo de autorização chat.messages.create ou chat.messages.
  • Chame os seguintes métodos do Google Chat:
    1. Para fazer upload do arquivo, chame o método upload no recurso Media.
      • Defina parent como o nome do espaço que hospeda o arquivo.
      • Em body (o corpo da solicitação), defina filename como o nome do anexo do arquivo enviado.
      • Defina media_body como uma instância do arquivo que será enviado.
    2. Para criar uma mensagem com o arquivo enviado anexado, chame o método create no recurso Messages.

O exemplo a seguir faz upload de um arquivo de imagem PNG e o anexa a uma mensagem.

Python

  1. No diretório de trabalho, crie um arquivo chamado chat_media_and_attachment_upload.py.
  2. Inclua o seguinte código em chat_media_and_attachment_upload.py:

    from google_auth_oauthlib.flow import InstalledAppFlow
    from googleapiclient.discovery import build
    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()
    
  3. No código, substitua SPACE pelo nome do espaço para fazer upload do anexo, que você pode acessar no método spaces.list na API Chat ou no URL de um espaço.

  4. No diretório de trabalho, crie e execute a amostra:

    python3 chat_media_and_attachment_upload.py
    

A API Chat retorna um corpo de resposta contendo attachmentDataRef com detalhes sobre o arquivo enviado.

Limites e considerações

Ao se preparar para fazer upload de arquivos e anexá-los às mensagens, observe estes limites e considerações: