Crea, lee, actualiza y borra mensajes

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

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:

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

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

  1. En tu directorio de trabajo, crea un archivo llamado chat_create_text_message.py.
  2. 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)
    
  3. En el código, reemplaza SPACE por un nombre de espacio que puedes obtener del método spaces.list() en la API de Chat o de la URL de un espacio.

  4. 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:

Un mensaje de tarjeta creado con la API de REST de Chat.
Figura 1: Un mensaje de tarjeta creado con la API de Chat.

Python

  1. En tu directorio de trabajo, crea un archivo llamado chat_create_card_message.py.
  2. 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)
    
  3. En el código, reemplaza SPACE por un nombre de espacio que puedes obtener del método spaces.list() en la API de Chat o de la URL de un espacio.

  4. 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

  1. En tu directorio de trabajo, crea un archivo llamado chat_create_message_thread.py.
  2. 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)
    
  3. En el código, reemplaza SPACE por un nombre de espacio que puedes obtener del método spaces.list() en la API de Chat o de la URL de un espacio.

  4. 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, pero custom-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

  1. En tu directorio de trabajo, crea un archivo llamado chat_create_named_message.py.
  2. 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)
    
  3. En el código, reemplaza SPACE por un nombre de espacio que puedes obtener del método spaces.list() en la API de Chat o de la URL de un espacio.

  4. 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

  1. En tu directorio de trabajo, crea un archivo llamado chat_read_message.py.
  2. 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)
    
  3. En el código, reemplaza SPACE por un nombre de espacio que puedes obtener del método spaces.list() en la API de Chat o de la URL de un espacio.

  4. 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.

  5. 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

  1. En tu directorio de trabajo, crea un archivo llamado chat_update_text_message.py.
  2. 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)
    
  3. En el código, reemplaza SPACE por un nombre de espacio que puedes obtener del método spaces.list() en la API de Chat o de la URL de un espacio.

  4. 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.

  5. 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

  1. En tu 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(
      '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)
    
  3. En el código, reemplaza SPACE por un nombre de espacio que puedes obtener del método spaces.list() en la API de Chat o de la URL de un espacio.

  4. 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.

  5. 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

  1. En tu directorio de trabajo, crea un archivo llamado chat_delete_message.py.
  2. 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)
    
  3. En el código, reemplaza SPACE por un nombre de espacio que puedes obtener del método spaces.list() en la API de Chat o de la URL de un espacio.

  4. 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.

  5. 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 el 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.
  • 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.
  • Vista previa para desarrolladores: Cuando una app realiza una acción con la 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ó.