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:
- Crie uma mensagem com
spaces.messages.create
. - Leia uma mensagem com
spaces.messages.get
. - Atualize uma mensagem com
spaces.messages.update
. - Excluir uma mensagem com
spaces.messages.delete
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
- Python 3.6 ou superior
- A ferramenta de gerenciamento de pacotes PIP
As bibliotecas de cliente do Google para Python. Para instalá-los, execute o seguinte comando na interface de linha de comando:
pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib oauth2client
Um app de chat publicado com associação em um espaço do Chat:
- Para criar e publicar um app de chat, consulte Criar um app do Google Chat com o Cloud Functions.
- Veja como adicionar um app do Chat a um espaço do Chat em Adicionar apps a espaços ou conversas no Google Chat.
Autorização configurada para o app de chat:
- A autenticação da conta de serviço é totalmente suportada. Para configurar uma conta de serviço, consulte Autenticar e autorizar como uma conta de serviço.
- Programa de prévia para desenvolvedores do Google Workspace, que dá acesso antecipado a determinados recursos. Para configurar a autenticação do usuário, consulte Autenticar e autorizar usuários (prévia para desenvolvedores). O método
spaces.messages.update
ainda não é compatível com a autenticação do usuário.
Prévia para desenvolvedores:a autenticação do usuário está disponível no
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
- No diretório de trabalho, crie um arquivo chamado
chat_create_text_message.py
. 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)
No código, substitua
SPACE
por um nome de espaço, que pode ser acessado no métodospaces.list()
na API Chat ou no URL de um espaço.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:

Python
- No diretório de trabalho, crie um arquivo chamado
chat_create_card_message.py
. 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)
No código, substitua
SPACE
por um nome de espaço, que pode ser acessado no métodospaces.list()
na API Chat ou no URL de um espaço.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
- No diretório de trabalho, crie um arquivo chamado
chat_create_message_thread.py
. 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)
No código, substitua
SPACE
por um nome de espaço, que pode ser acessado no métodospaces.list()
na API Chat ou no URL de um espaço.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, mascustom-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
- No diretório de trabalho, crie um arquivo chamado
chat_create_named_message.py
. 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)
No código, substitua
SPACE
por um nome de espaço, que pode ser acessado no métodospaces.list()
na API Chat ou no URL de um espaço.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
- No diretório de trabalho, crie um arquivo chamado
chat_read_message.py
. 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)
No código, substitua
SPACE
por um nome de espaço, que pode ser acessado no métodospaces.list()
na API Chat ou no URL de um espaço.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.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
- No diretório de trabalho, crie um arquivo chamado
chat_update_text_message.py
. 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)
No código, substitua
SPACE
por um nome de espaço, que pode ser acessado no métodospaces.list()
na API Chat ou no URL de um espaço.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.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
- No diretório de trabalho, crie um arquivo chamado
chat_update_card_message.py
. 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)
No código, substitua
SPACE
por um nome de espaço, que pode ser acessado no métodospaces.list()
na API Chat ou no URL de um espaço.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.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
- No diretório de trabalho, crie um arquivo chamado
chat_delete_message.py
. 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)
No código, substitua
SPACE
por um nome de espaço, que pode ser acessado no métodospaces.list()
na API Chat ou no URL de um espaço.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.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 oname
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.
- 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. Prévia para desenvolvedores:quando um app realiza uma ação com a