Actualizar un mensaje

En esta guía, se explica cómo usar el método patch en el recurso Message de la API de Google Chat para actualizar un mensaje de texto o de tarjeta en un espacio. Actualiza un mensaje para cambiar sus atributos, como lo que dice, o el contenido de una tarjeta. También puedes anteponer un mensaje de texto a un mensaje de tarjeta o agregar una tarjeta a un mensaje de texto.

La API de Chat también admite el método update, pero te recomendamos que llames al método patch porque usa una solicitud HTTP PATCH, mientras que update usa una solicitud HTTP PUT. Para obtener más información, consulta la sección PATCH y PUT de AIP-134.

El recurso Message representa un mensaje de texto o tarjeta en Google Chat. Puedes create, get, update o delete un mensaje en la API de Google Chat si llamas a los métodos correspondientes. Para obtener más información sobre los mensajes de texto y de tarjetas, consulta la descripción general de los mensajes de Google Chat.

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:

Actualizar un mensaje de texto o anteponer un mensaje de texto a un mensaje de tarjeta con la autenticación del usuario

Para actualizar un mensaje de texto con la autenticación de usuario, pasa lo siguiente en tu solicitud:

  • El alcance de la autorización de chat.messages.
  • 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 se antecede al mensaje de tarjeta (que continúa mostrándose).

A continuación, te indicamos cómo actualizar un mensaje de texto o anteponer un mensaje de texto a un mensaje de tarjeta con la autenticación del usuario:

Python

  1. En el directorio de trabajo, crea un archivo llamado chat_update_text_message_user.py.
  2. Incluye el siguiente código en chat_update_text_message_user.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
    
    # 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 updates 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)
    
        # Update a Chat message.
        result = chat.spaces().messages().patch(
    
          # 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()
    
        # Prints details about the created membership.
        print(result)
    
    if __name__ == '__main__':
        main()
    
  3. En el código, reemplaza lo siguiente:

    • SPACE: Es un nombre de espacio, que puedes obtener del método spaces.list en la API de Chat o desde la URL de un espacio.
    • MESSAGE: Es un nombre de 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 con el nombre personalizado asignado al mensaje en el momento de su creación.
  4. En el directorio de trabajo, compila y ejecuta la muestra:

    python3 chat_update_text_message_user.py
    

Usa la autenticación de la app para actualizar un mensaje de texto o anteponer un mensaje de texto a un mensaje de tarjeta

Para actualizar un mensaje de texto con autenticación de app, pasa lo siguiente en tu solicitud:

  • El alcance de la autorización de chat.bot.
  • 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 se antecede al mensaje de tarjeta (que continúa mostrándose).

A continuación, te indicamos cómo actualizar un mensaje de texto a un mensaje de texto o anteponer un mensaje de texto a un mensaje de tarjeta con la autenticación de la app:

Python

  1. En el directorio de trabajo, crea un archivo llamado chat_update_text_message_app.py.
  2. Incluye el siguiente código en chat_update_text_message_app.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(
      'credentials.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().patch(
    
      # 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)
    
  3. En el código, reemplaza lo siguiente:

    • SPACE: Es un nombre de espacio, que puedes obtener del método spaces.list en la API de Chat o desde la URL de un espacio.
    • MESSAGE: Es un nombre de 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 con el nombre personalizado asignado al mensaje en el momento de su creación.
  4. En el directorio de trabajo, compila y ejecuta la muestra:

    python3 chat_update_text_message_app.py
    

Cómo actualizar un mensaje de tarjeta o agregar un mensaje de tarjeta a un mensaje de texto

Para actualizar un mensaje de tarjeta, pasa lo siguiente en la solicitud:

  • El alcance de la autorización de chat.bot. La actualización de un mensaje de tarjeta requiere la autenticación de la app.
  • 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 continúa mostrándose). Si el mensaje actualizado es una tarjeta, se actualiza la tarjeta que se muestra.

A continuación, te indicamos cómo convertir un mensaje a un mensaje de tarjeta:

Python

  1. En el directorio de trabajo, crea un archivo llamado chat_update_card_message.py.
  2. 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(
      'credentials.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().patch(
    
      # 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)
    
  3. En el código, reemplaza lo siguiente:

    • SPACE: Es un nombre de espacio, que puedes obtener del método spaces.list en la API de Chat o desde la URL de un espacio.

    • MESSAGE: Es un nombre de 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 con el nombre personalizado asignado al mensaje en el momento de su creación.

  4. En el directorio de trabajo, compila y ejecuta la muestra:

    python3 chat_update_card_message.py
    

La API de Chat muestra una instancia de Message en la que se detalla el mensaje que se actualiza.

Actualiza un mensaje con varias rutas de campo de manera simultánea

Cuando se actualiza un mensaje, puedes actualizar varias rutas de campo de mensaje a la vez. Por ejemplo, en una solicitud de mensaje de actualización, puedes especificar al mismo tiempo un cambio en las rutas de acceso de los campos text y cardsv2, lo que actualizará tanto el texto como la tarjeta del mensaje. Si el mensaje solo incluye texto y no se agrega una tarjeta, se agregará una tarjeta al mensaje. Para obtener más información sobre las rutas de campo admitidas, consulta los parámetros updateMask.

Para actualizar el text y el card de un mensaje con la autenticación del usuario, pasa lo siguiente en la solicitud:

  • El alcance de la autorización de chat.messages.
  • El name del mensaje que se actualizará.
  • Un updateMask que especifica las rutas de los campos de mensaje que se actualizarán, separadas por comas: updateMask='text', 'cardsV2'.

  • Un body que especifique el mensaje actualizado, incluidas todas las rutas de campo actualizadas.

A continuación, te indicamos cómo actualizar las rutas de los campos text y cardsV2 en un mensaje con la autenticación de usuarios:

Python

  1. En el directorio de trabajo, crea un archivo llamado chat_update_text_message_user.py.
  2. Incluye el siguiente código en chat_update_text_message_user.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
    
    # 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 updates 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)
    
        # Update a Chat message.
        result = chat.spaces().messages().patch(
    
          # 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,cardsV2',
          body=
          {'text': 'Updated message!',
                '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()
    
        # Prints details about the created membership.
        print(result)
    
    if __name__ == '__main__':
        main()
    
  3. En el código, reemplaza lo siguiente:

    • SPACE: Es un nombre de espacio, que puedes obtener del método spaces.list en la API de Chat o desde la URL de un espacio.
    • MESSAGE: Es un nombre de 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 con el nombre personalizado asignado al mensaje en el momento de su creación.
  4. En el directorio de trabajo, compila y ejecuta la muestra:

    python3 chat_update_text_message_user.py