Criar, ler, atualizar e excluir mensagens

Com a API Google Chat, você pode criar, ler, atualizar ou excluir uma mensagem de forma assíncrona no Google Chat chamando os métodos correspondentes. Veja neste guia como chamar os seguintes métodos:

Os apps de chat podem responder a eventos do Chat, como mensagens e adição de espaços, sem precisar chamar a API Chat de forma assíncrona. Para criar um app do Chat que responda de forma síncrona aos eventos do Chat, consulte Criar um app do Chat. Ele pode funcionar com a API Chat de forma síncrona e assíncrona.

Para criar uma mensagem de maneira assíncrona em um espaço do Chat sem um app Chat, configure um webhook.

Pré-requisitos

Para executar os exemplos deste guia, você precisa dos seguintes pré-requisitos:

Python

Criar uma mensagem

Para criar uma mensagem de forma assíncrona no Google Chat, chame o método create no recurso Message. Você pode criar uma mensagem de texto ou card. Para iniciar ou responder a uma conversa, especifique um threadKey ou thread.name.

Anote o name de uma mensagem que você criar para poder consultar depois, se precisar ler, atualizar ou excluir. Se preferir, nomeie as mensagens.

Criar uma mensagem de texto

Veja como criar uma mensagem text:

Python

  1. No diretório de trabalho, crie um arquivo chamado chat_create_text_message.py.
  2. Inclua o seguinte código em 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. No código, substitua SPACE por um nome de espaço, que pode ser acessado no método spaces.list() na API Chat ou no URL de um espaço.

  4. No diretório de trabalho, crie e execute o exemplo:

    python3 chat_create_text_message.py
    

Criar uma mensagem de card

Veja como criar uma mensagem card, como a mostrada abaixo:

Uma mensagem de cartão criada com a API REST do Chat.
Figura 1: uma mensagem do card criada com a API Chat.

Python

  1. No diretório de trabalho, crie um arquivo chamado chat_create_card_message.py.
  2. Inclua o seguinte código em 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. No código, substitua SPACE por um nome de espaço, que pode ser acessado no método spaces.list() na API Chat ou no URL de um espaço.

  4. No diretório de trabalho, crie e execute o exemplo:

    python3 chat_create_card_message.py
    

Iniciar ou responder a uma conversa

Para iniciar uma conversa, crie uma mensagem e deixe thread.name em branco. O Google Chat preencherá a mensagem ao criar a conversa. Você também pode especificar thread.threadKey como o nome da linha de execução.

Para responder a uma conversa, especifique thread.threadKey ou thread.name como o nome da conversa. As mensagens subsequentes com o mesmo thread.threadKey ou thread.name serão postadas na mesma conversa como respostas.

Cada thread.threadKey é exclusivo do app Chat ou webhook que o define. Se dois apps ou webhooks diferentes definirem o mesmo thread.threadKey, as mensagens não serão agrupadas. Em vez disso, duas linhas de execução diferentes serão iniciadas. Dois apps ou webhooks diferentes podem postar respostas na mesma conversa especificando thread.name.

Veja como iniciar ou responder a uma conversa com o "nameOfThread" thread.threadKey:

Python

  1. No diretório de trabalho, crie um arquivo chamado chat_create_message_thread.py.
  2. Inclua o seguinte código em 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. No código, substitua SPACE por um nome de espaço, que pode ser acessado no método spaces.list() na API Chat ou no URL de um espaço.

  4. No diretório de trabalho, crie e execute o exemplo:

    python3 chat_create_message_thread.py
    

Criar e nomear uma mensagem

Para facilitar as operações posteriores em uma mensagem criada, atribua a ela uma name personalizada. A atribuição de um nome personalizado permite que um app de chat se lembre rapidamente da mensagem sem salvar a mensagem name do corpo da resposta retornada ao criar a mensagem.

A atribuição de um nome personalizado permite que um app de chat recupere a mensagem sem salvar a mensagem name no corpo da resposta retornada ao criar a mensagem.

A atribuição de um nome personalizado não substitui o campo name gerado, o nome do recurso da mensagem. Em vez disso, ele define o nome personalizado como o campo clientAssignedMessageId, que pode ser referenciado durante o processamento de operações posteriores, como a atualização ou exclusão da mensagem.

A especificação de um nome personalizado usado ao criar uma mensagem retorna um erro, mas outros métodos, como update e delete, funcionam conforme o esperado.

Requisitos de nome personalizado:

  • Comece com client-. Por exemplo, client-custom-name é um nome personalizado válido, mas custom-name não é.
  • conter apenas letras minúsculas, números e hifens.
  • não pode ter mais de 63 caracteres;

Veja como criar e nomear uma mensagem:

Python

  1. No diretório de trabalho, crie um arquivo chamado chat_create_named_message.py.
  2. Inclua o seguinte código em 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. No código, substitua SPACE por um nome de espaço, que pode ser acessado no método spaces.list() na API Chat ou no URL de um espaço.

  4. No diretório de trabalho, crie e execute o exemplo:

    python3 chat_create_named_message.py
    

Leu uma mensagem

Para ler uma mensagem no Google Chat de forma assíncrona, chame o método get no recurso Message e transmita o name da mensagem.

Veja como ler uma mensagem:

Python

  1. No diretório de trabalho, crie um arquivo chamado chat_read_message.py.
  2. Inclua o seguinte código em 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. No código, substitua SPACE por um nome de espaço, que pode ser acessado no método spaces.list() na API Chat ou no URL de um espaço.

  4. No código, substitua MESSAGE por um nome de mensagem, que você pode buscar no corpo da resposta retornado após criar uma mensagem de forma assíncrona com a API Chat, ou pelo nome personalizado atribuído à mensagem na criação.

  5. No diretório de trabalho, crie e execute o exemplo:

    python3 chat_read_message.py
    

Atualizar uma mensagem

Para atualizar de forma assíncrona uma mensagem no Google Chat, chame o método update no recurso Message e transmita o name da mensagem a ser atualizada, além de um updateMask e um body que especificam a mensagem atualizada.

Atualizar ou anexar uma mensagem de texto a uma mensagem de card

Para atualizar uma mensagem text, transmita:

  • O name da mensagem a ser atualizada.
  • updateMask='text'
  • Um body que especifica a mensagem atualizada.

Se a mensagem atualizada for uma mensagem de cartão, a mensagem de texto será precedida pela mensagem do cartão (que continua sendo exibida).

Veja como atualizar uma mensagem de texto para uma mensagem de texto ou incluir uma mensagem de texto no início de uma mensagem card.

Python

  1. No diretório de trabalho, crie um arquivo chamado chat_update_text_message.py.
  2. Inclua o seguinte código em 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. No código, substitua SPACE por um nome de espaço, que pode ser acessado no método spaces.list() na API Chat ou no URL de um espaço.

  4. No código, substitua MESSAGE por um nome de mensagem, que você pode buscar no corpo da resposta retornado após criar uma mensagem de forma assíncrona com a API Chat, ou pelo nome personalizado atribuído à mensagem na criação.

  5. No diretório de trabalho, crie e execute o exemplo:

    python3 chat_update_text_message.py
    

Atualizar ou anexar uma mensagem de cartão a uma mensagem de texto

Para atualizar uma mensagem card, transmita:

  • O name da mensagem a ser atualizada.
  • updateMask='cardsV2'
  • Um body que especifica a mensagem atualizada.

Se a mensagem atualizada for de texto, um card será anexado à mensagem de texto (que continua sendo exibida). Se a mensagem atualizada for um card, o card em exibição será atualizado.

Veja como atualizar uma mensagem para uma mensagem card:

Python

  1. No diretório de trabalho, crie um arquivo chamado chat_update_card_message.py.
  2. Inclua o seguinte código em 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. No código, substitua SPACE por um nome de espaço, que pode ser acessado no método spaces.list() na API Chat ou no URL de um espaço.

  4. No código, substitua MESSAGE por um nome de mensagem, que você pode buscar no corpo da resposta retornado após criar uma mensagem de forma assíncrona com a API Chat, ou pelo nome personalizado atribuído à mensagem na criação.

  5. No diretório de trabalho, crie e execute o exemplo:

    python3 chat_update_card_message.py
    

Excluir uma mensagem

Para excluir de forma assíncrona uma mensagem no Google Chat, chame o método delete no recurso Message e transmita o name da mensagem a ser excluída.

Veja como excluir uma mensagem:

Python

  1. No diretório de trabalho, crie um arquivo chamado chat_delete_message.py.
  2. Inclua o seguinte código em 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. No código, substitua SPACE por um nome de espaço, que pode ser acessado no método spaces.list() na API Chat ou no URL de um espaço.

  4. No código, substitua MESSAGE por um nome de mensagem, que você pode buscar no corpo da resposta retornado após criar uma mensagem de forma assíncrona com a API Chat, ou pelo nome personalizado atribuído à mensagem na criação.

  5. No diretório de trabalho, crie e execute o exemplo:

    python3 chat_delete_message.py
    

Limites e considerações

  • A única forma de receber a name de uma mensagem no Google Chat é pelo corpo da resposta retornado ao criar a mensagem. Anote o name da mensagem criada para referência posterior caso precise ler, atualizar ou excluir a mensagem. Se preferir, nomeie as mensagens.
  • Ao autenticar como um app usando uma conta de serviço, os apps de chat só poderão ler, atualizar e excluir a própria mensagem.
  • Prévia para desenvolvedores:quando um app realiza uma ação com a autenticação do usuário, o Google Chat pode mostrar uma mensagem de atribuição informando o nome do app que realizou a ação em nome do usuário que o autorizou.