Neste guia, explicamos como usar o método
create()
no recurso Message da API Google Chat para fazer o seguinte:
- Envie mensagens que contenham texto, cards e widgets interativos.
- Envie mensagens particulares para um usuário específico do Chat.
- Iniciar ou responder a uma conversa.
- Nomeie uma mensagem para que ela possa ser especificada em outras solicitações da API Chat.
O tamanho máximo da mensagem (incluindo texto ou cards) é de 32.000 bytes. Para enviar uma mensagem que exceda esse tamanho, o app do Chat precisa enviar várias mensagens.
Além de chamar a API Chat para criar mensagens, os apps do Chat podem criar e enviar mensagens para responder às interações do usuário, como postar uma mensagem de boas-vindas depois que um usuário adiciona o app do Chat a um espaço. Ao responder a interações, os apps do Chat podem usar outros tipos de recursos de mensagens, incluindo caixas de diálogo interativas e interfaces de visualização de link. Para responder a um usuário, o app do Chat retorna a mensagem de forma síncrona, sem chamar a API Chat. Para saber como enviar mensagens para responder a interações, consulte Receber e responder a interações com seu app do Google Chat.
Como o Chat mostra e atribui mensagens criadas com a API Chat
É possível chamar o método create() usando a
autenticação do app
e a autenticação do usuário.
O Chat atribui o remetente da mensagem de maneira diferente,
dependendo do tipo de autenticação que você usa.
Quando você se autentica como o app do Chat, ele envia a mensagem.
App ao lado do nome.Quando você se autentica como usuário, o app do Chat envia a mensagem em nome do usuário. O Chat também atribui o app do Chat à mensagem exibindo o nome dele.
O tipo de autenticação também determina quais recursos e interfaces de mensagens podem ser incluídos na mensagem. Com a autenticação de apps, os apps do Chat podem enviar mensagens que contêm rich text, interfaces baseadas em cards e widgets interativos. Com a autenticação do usuário, é possível enviar mensagens de texto ou criar mensagens com cards, conforme documentado em Criar e atualizar cards interativos.
Para saber mais sobre os recursos de mensagens disponíveis para a API Chat, consulte a visão geral das mensagens do Google Chat.
Este guia explica como usar os dois tipos de autenticação para enviar uma mensagem com a API Chat.
Pré-requisitos
Node.js
- Uma conta Business ou Enterprise do Google Workspace com acesso ao Google Chat.
- Configure o ambiente:
- Crie um projeto do Google Cloud.
- Configure a tela de permissão OAuth.
- Ative e configure a API Google Chat com um nome, ícone e descrição para seu app do Chat.
- Instale a biblioteca de cliente do Cloud para Node.js.
- Crie credenciais de acesso com base em como você quer se autenticar na solicitação da API Google Chat:
- Para se autenticar como usuário do Chat,
crie credenciais de ID do cliente
OAuth e salve-as como um arquivo JSON chamado
credentials.jsonno diretório local. - Para autenticar como o app do Chat,
crie credenciais de conta de
serviço e salve-as como um arquivo JSON chamado
credentials.json.
- Para se autenticar como usuário do Chat,
crie credenciais de ID do cliente
OAuth e salve-as como um arquivo JSON chamado
- Escolha um escopo de autorização com base em como você quer se autenticar: como usuário ou como app do Chat.
- Um espaço do Google Chat em que o usuário autenticado ou o app do Chat que faz a chamada é membro. Para autenticar como o app do Chat, adicione o app ao espaço.
Python
- Uma conta Business ou Enterprise do Google Workspace com acesso ao Google Chat.
- Configure o ambiente:
- Crie um projeto do Google Cloud.
- Configure a tela de permissão OAuth.
- Ative e configure a API Google Chat com um nome, ícone e descrição para seu app do Chat.
- Instale a biblioteca de cliente do Cloud para Python.
- Crie credenciais de acesso com base em como você quer se autenticar na solicitação da API Google Chat:
- Para se autenticar como usuário do Chat,
crie credenciais de ID do cliente
OAuth e salve-as como um arquivo JSON chamado
credentials.jsonno diretório local. - Para autenticar como o app do Chat,
crie credenciais de conta de
serviço e salve-as como um arquivo JSON chamado
credentials.json.
- Para se autenticar como usuário do Chat,
crie credenciais de ID do cliente
OAuth e salve-as como um arquivo JSON chamado
- Escolha um escopo de autorização com base em como você quer se autenticar: como usuário ou como app do Chat.
- Um espaço do Google Chat em que o usuário autenticado ou o app do Chat que faz a chamada é membro. Para autenticar como o app do Chat, adicione o app ao espaço.
Java
- Uma conta Business ou Enterprise do Google Workspace com acesso ao Google Chat.
- Configure o ambiente:
- Crie um projeto do Google Cloud.
- Configure a tela de permissão OAuth.
- Ative e configure a API Google Chat com um nome, ícone e descrição para seu app do Chat.
- Instale a biblioteca de cliente do Cloud para Java.
- Crie credenciais de acesso com base em como você quer se autenticar na solicitação da API Google Chat:
- Para se autenticar como usuário do Chat,
crie credenciais de ID do cliente
OAuth e salve-as como um arquivo JSON chamado
credentials.jsonno diretório local. - Para autenticar como o app do Chat,
crie credenciais de conta de
serviço e salve-as como um arquivo JSON chamado
credentials.json.
- Para se autenticar como usuário do Chat,
crie credenciais de ID do cliente
OAuth e salve-as como um arquivo JSON chamado
- Escolha um escopo de autorização com base em como você quer se autenticar: como usuário ou como app do Chat.
- Um espaço do Google Chat em que o usuário autenticado ou o app do Chat que faz a chamada é membro. Para autenticar como o app do Chat, adicione o app ao espaço.
Apps Script
- Uma conta Business ou Enterprise do Google Workspace com acesso ao Google Chat.
- Configure o ambiente:
- Crie um projeto do Google Cloud.
- Configure a tela de permissão OAuth.
- Ative e configure a API Google Chat com um nome, ícone e descrição para seu app do Chat.
- Crie um projeto independente do Apps Script e ative o Serviço avançado de chat.
- Neste guia, use a autenticação de usuário ou de app. Para autenticar como o app do Chat, crie credenciais da conta de serviço. Para ver as etapas, consulte Autenticar e autorizar como um app do Google Chat.
- Escolha um escopo de autorização com base em como você quer se autenticar: como usuário ou como app do Chat.
- Um espaço do Google Chat em que o usuário autenticado ou o app do Chat que faz a chamada é membro. Para autenticar como o app do Chat, adicione o app ao espaço.
Enviar uma mensagem como o app do Chat
Nesta seção, explicamos como enviar mensagens que contêm texto, cards e widgets de acessórios interativos usando a autenticação de apps.
Para chamar o método CreateMessage()
usando a autenticação do app, especifique os seguintes campos na
solicitação:
- O escopo de autorização
chat.bot. - O recurso
Spaceem que você quer postar a mensagem. O app do Chat precisa ser um participante do espaço. - O recurso
Messagea ser criado. Para definir o conteúdo da mensagem, inclua rich text (text), uma ou mais interfaces de card (cardsV2) ou ambos.
Também é possível incluir o seguinte:
- O campo
elementspara adicionar citações à mensagem. - O campo
accessoryWidgetspara incluir botões interativos na parte de baixo da mensagem. - O campo
privateMessageViewerpara enviar a mensagem de forma particular para um usuário específico. - O campo
messageId, que permite nomear a mensagem para uso em outras solicitações de API. - Os campos
thread.threadKeyemessageReplyOptionpara iniciar ou responder a uma conversa. Se o espaço não usar conversas, esse campo será ignorado.
O código a seguir mostra um exemplo de como um app do Chat pode enviar uma mensagem postada como o app do Chat que contém texto, um card e um botão clicável na parte de baixo da mensagem:
Node.js
Python
Java
Apps Script
Para executar este exemplo, substitua SPACE_NAME pelo ID do campo name do espaço. Para conseguir o ID, chame o método
ListSpaces()
ou use o URL do espaço.
Adicionar widgets interativos na parte de baixo de uma mensagem
No primeiro exemplo de código deste guia, a mensagem do app do Chat mostra um botão clicável na parte de baixo da mensagem, conhecido como widget acessório. Os widgets de acessório aparecem depois de qualquer texto ou card em uma mensagem. É possível usar esses widgets para solicitar que os usuários interajam com sua mensagem de várias maneiras, incluindo as seguintes:
- Avalie a precisão ou a satisfação de uma mensagem.
- Denuncie um problema com a mensagem ou o app do Chat.
- Abra um link para conteúdo relacionado, como a documentação.
- Dispensar ou adiar mensagens semelhantes do app do Chat por um período específico.
Para adicionar widgets acessórios, inclua o campo
accessoryWidgets[]
no corpo da solicitação e especifique um ou mais widgets que você quer
incluir.
A imagem a seguir mostra um app do Chat que adiciona uma mensagem de texto com widgets acessórios para que os usuários possam avaliar a experiência com o app.
Veja a seguir o corpo da solicitação que cria uma mensagem de texto com
dois botões de acessório. Quando um usuário clica em um botão, a função correspondente (como doUpvote) processa a interação:
{
text: "Rate your experience with this Chat app.",
accessoryWidgets: [{ buttonList: { buttons: [{
icon: { material_icon: {
name: "thumb_up"
}},
color: { red: 0, blue: 255, green: 0 },
onClick: { action: {
function: "doUpvote"
}}
}, {
icon: { material_icon: {
name: "thumb_down"
}},
color: { red: 0, blue: 255, green: 0 },
onClick: { action: {
function: "doDownvote"
}}
}]}}]
}
Enviar uma mensagem particular
Os apps do Chat podem enviar mensagens particulares para que elas fiquem visíveis apenas para um usuário específico no espaço. Quando um app do Chat envia uma mensagem privada, ela mostra um marcador que notifica o usuário de que a mensagem só está visível para ele.
Para enviar uma mensagem de forma particular usando a API Chat, especifique o campo
privateMessageViewer
no corpo da solicitação. Para especificar o usuário, defina o valor como o recurso User que representa o usuário do Chat. Também é possível usar o campo
name
do recurso User, conforme mostrado no exemplo a seguir:
{
text: "Hello private world!",
privateMessageViewer: {
name: "users/USER_ID"
}
}
Para usar este exemplo, substitua USER_ID
por um ID exclusivo para o usuário, como 12345678987654321 ou
hao@cymbalgroup.com. Para mais informações sobre como especificar usuários, consulte
Identificar e especificar usuários do Google Chat.
Para enviar uma mensagem de forma particular, omita o seguinte na sua solicitação:
Enviar notificações forçadas ou mensagens silenciosas
Quando um app do Chat envia uma mensagem, ele pode usar uma destas opções para notificar os usuários:
- Forçar uma notificação: o Chat sempre envia uma notificação push aos destinatários, independentemente das configurações de notificação ou do status "Não perturbe" (DND, na sigla em inglês). No Chat, a mensagem aciona um comportamento de destaque e destaque na lista de destinatários ou na lista inicial e mostra um selo.
- Enviar uma mensagem silenciosa: o Chat suprime as notificações push para os destinatários. No Chat, a mensagem não aciona um comportamento de negrito ou destaque na lista de destinatários ou na lista inicial, nem mostra um selo. Se a mensagem silenciosa for a última de uma conversa, o conteúdo dela não vai aparecer no snippet da página inicial.
Sejam forçadas ou silenciosas, essas mensagens incluem um indicador visual que notifica os destinatários sobre o comportamento especial da notificação.
As notificações forçadas e as mensagens silenciosas estão disponíveis apenas para apps do Chat que usam a autenticação de apps.
As notificações forçadas e as mensagens silenciosas têm as seguintes limitações:
- Usuários externos: as notificações forçadas e as mensagens silenciosas não se aplicam a usuários externos (visitantes) em um espaço. Os usuários externos recebem notificações de acordo com as próprias configurações.
- Menções: as mensagens silenciosas não permitem mencionar usuários. Se você incluir uma menção em uma mensagem silenciosa, ela será tratada como texto simples.
- Conversas: não é possível iniciar ou responder a uma conversa com uma mensagem silenciosa.
- Tipo de espaço: as notificações forçadas e as mensagens silenciosas não são compatíveis com mensagens diretas (DMs) ou espaços de pessoas que não têm uma conta do Google Workspace.
- Notificações por e-mail: as mensagens silenciosas não acionam notificações por e-mail. As mensagens com notificação forçada só acionam notificações por e-mail se também incluírem uma menção a um usuário específico.
Para forçar uma notificação ou enviar uma mensagem silenciosa, inclua o campo
createMessageNotificationOptions
na solicitação e defina notificationType como uma das seguintes opções:
| Valor | Comportamento |
|---|---|
NOTIFICATION_TYPE_FORCE_NOTIFY |
Força uma notificação. |
NOTIFICATION_TYPE_SILENT |
Envia a mensagem sem som. |
O exemplo a seguir mostra o corpo JSON de uma solicitação para enviar uma mensagem com uma notificação forçada:
{
"text": "Critical update: the server is down!",
"createMessageNotificationOptions": {
"notificationType": "NOTIFICATION_TYPE_FORCE_NOTIFY"
}
}
Enviar uma mensagem de texto em nome de um usuário
Nesta seção, explicamos como enviar mensagens em nome de um usuário usando a autenticação de usuário. Com a autenticação de usuário, é possível enviar mensagens de texto ou criar mensagens com cards em nome de um usuário. Para saber como enviar cards em nome de um usuário, consulte Criar e atualizar cards interativos.
Para chamar o método CreateMessage() usando a autenticação do usuário, especifique
os seguintes campos na solicitação:
- Um escopo de autorização
que oferece suporte à autenticação de usuário para esse método. O exemplo a seguir usa
o escopo
chat.messages.create. - O recurso
Spaceem que você quer postar a mensagem. O usuário autenticado precisa ser um participante do espaço. - O recurso
Messagea ser criado. Para definir o conteúdo da mensagem, inclua o campotext.
Também é possível incluir o seguinte:
- O campo
createMessageNotificationOptionspara forçar uma notificação ou enviar a mensagem silenciosamente. - O campo
messageId, que permite nomear a mensagem para uso em outras solicitações de API. - Os campos
thread.threadKeyemessageReplyOptionpara iniciar ou responder a uma conversa. Se o espaço não usar conversas, esse campo será ignorado.
O código a seguir mostra um exemplo de como um app do Chat pode enviar uma mensagem de texto em um determinado espaço em nome de um usuário autenticado:
Node.js
Python
Java
Apps Script
Para executar este exemplo, substitua SPACE_NAME pelo ID do campo
name
do espaço. Para conseguir o ID, chame o método
ListSpaces()
ou use o URL do espaço.
Iniciar ou responder em uma conversa
Para espaços que usam conversas, você pode especificar se uma nova mensagem inicia uma conversa ou responde a uma conversa atual.
Por padrão, as mensagens criadas com a API Chat iniciam uma nova conversa. Para ajudar a identificar a conversa e responder a ela mais tarde, especifique uma chave de conversa na solicitação:
- No corpo da solicitação, especifique o campo
thread.threadKey. - Especifique o parâmetro de consulta
messageReplyOptionpara determinar o que acontece se a chave já existir.
Para criar uma mensagem que responda a uma conversa:
- No corpo da solicitação, inclua o campo
thread. Se definido, é possível especificar othreadKeyque você criou. Caso contrário, use onameda conversa. - Especifique o parâmetro de consulta
messageReplyOption.
O código a seguir mostra um exemplo de como um app do Chat pode enviar uma mensagem de texto que inicia ou responde a uma determinada conversa identificada pela chave de um determinado espaço em nome de um usuário autenticado:
Node.js
Python
Java
Apps Script
Para executar este exemplo, substitua o seguinte:
THREAD_KEY: uma chave de conversa atual no espaço ou, para criar uma nova conversa, um nome exclusivo para ela.SPACE_NAME: o ID do camponamedo espaço. Para conseguir o ID, chame o métodoListSpaces()ou use o URL do espaço.
Nomear uma mensagem
Para recuperar ou especificar uma mensagem em chamadas de API futuras, defina o campo messageId na solicitação para nomear uma mensagem.
Ao nomear a mensagem, você pode especificá-la sem precisar armazenar o
ID atribuído pelo sistema do nome do recurso da mensagem (representado no
campo
name).
Por exemplo, para recuperar uma mensagem usando o método get(), use o
nome do recurso para especificar qual mensagem recuperar. O nome do recurso é
formatado como spaces/{space}/messages/{message}, em que {message} representa
o ID atribuído pelo sistema ou o nome personalizado que você definiu ao criar a
mensagem.
Para nomear uma mensagem, especifique um código personalizado no campo
messageId
ao criar a mensagem. O campo messageId define o valor do campo
clientAssignedMessageId
do recurso Message.
Só é possível nomear uma mensagem ao criá-la. Não é possível nomear ou modificar um código personalizado para mensagens atuais. O código personalizado precisa atender aos seguintes requisitos:
- Começa com
client-. Por exemplo,client-custom-nameé um ID personalizado válido, mascustom-namenão é. - Contém até 63 caracteres e apenas letras minúsculas, números e hifens.
- É exclusivo em um espaço. Um app do Chat não pode usar o mesmo código personalizado para mensagens diferentes.
O código a seguir mostra um exemplo de como um app do Chat pode enviar uma mensagem de texto com um ID para um determinado espaço em nome de um usuário autenticado:
Node.js
Python
Java
Apps Script
Para executar este exemplo, substitua o seguinte:
SPACE_NAME: o ID do camponamedo espaço. Para conseguir o ID, chame o métodoListSpaces()ou use o URL do espaço.MESSAGE-ID: um nome para a mensagem que começa comcustom-. Precisa ser diferente de qualquer outro nome de mensagem criado pelo app do Chat no espaço especificado.
Citar uma mensagem
É possível citar outra mensagem chamando
CreateMessage()
(rpc,
rest)
e definindo quotedMessageMetadata
(rpc,
rest)
na solicitação.
Você pode citar mensagens em uma conversa ou no chat principal, mas não pode citar uma mensagem de outra conversa.
O código a seguir mostra como criar uma mensagem que cita outra:
Node.js
import {createClientWithUserCredentials} from './authentication-utils.js';
const USER_AUTH_OAUTH_SCOPES = ['https://www.googleapis.com/auth/chat.messages.create'];
// This sample shows how to create a message that quotes another message.
async function main() {
// Create a client
const chatClient = await createClientWithUserCredentials(USER_AUTH_OAUTH_SCOPES);
// Initialize request argument(s)
const request = {
// TODO(developer): Replace SPACE_NAME .
parent: 'spaces/SPACE_NAME',
message: {
text: 'I am responding to a quoted message!',
// quotedMessageMetadata lets Chat apps respond to a message by quoting it.
quotedMessageMetadata: {
// TODO(developer): Replace QUOTED_MESSAGE_NAME
// and QUOTED_MESSAGE_LAST_UPDATE_TIME.
name: 'QUOTED_MESSAGE_NAME',
lastUpdateTime: 'QUOTED_MESSAGE_LAST_UPDATE_TIME'
}
}
};
// Make the request
const response = await chatClient.createMessage(request);
// Handle the response
console.log(response);
}
main().catch(console.error);
Python
from authentication_utils import create_client_with_user_credentials
from google.apps import chat_v1 as google_chat
from google.protobuf.timestamp_pb2 import Timestamp
SCOPES = ['https://www.googleapis.com/auth/chat.messages.create']
# This sample shows how to create a message that quotes another message.
def create_message_quote_message():
'''Creates a message that quotes another message.'''
# Create a client
client = create_client_with_user_credentials(SCOPES)
# Create a timestamp from the RFC-3339 string.
# TODO(developer): Replace QUOTED_MESSAGE_LAST_UPDATE_TIME.
last_update_time = Timestamp()
last_update_time.FromJsonString('QUOTED_MESSAGE_LAST_UPDATE_TIME')
# Initialize request argument(s)
request = google_chat.CreateMessageRequest(
# TODO(developer): Replace SPACE_NAME.
parent='spaces/SPACE_NAME',
# Create the message.
message = google_chat.Message(
text='I am responding to a quoted message!',
# quotedMessageMetadata lets Chat apps respond to a message by quoting it.
quoted_message_metadata=google_chat.QuotedMessageMetadata(
name='QUOTED_MESSAGE_NAME',
last_update_time=last_update_time
)
)
)
# Make the request
response = client.create_message(request)
# Handle the response
print(response)
create_message_quote_message()
Java
import com.google.chat.v1.ChatServiceClient;
import com.google.chat.v1.CreateMessageRequest;
import com.google.chat.v1.Message;
import com.google.chat.v1.QuotedMessageMetadata;
import com.google.protobuf.util.Timestamps;
import com.google.workspace.api.chat.samples.utils.AuthenticationUtils;
import java.text.ParseException;
// This sample shows how to create a message that quotes another message.
public class CreateMessageQuoteMessage {
public static void main(String[] args) throws Exception, ParseException {
// Create a client.
ChatServiceClient chatClient = AuthenticationUtils.createClientWithUserCredentials();
// Initialize request argument(s).
// TODO(developer): Replace SPACE_NAME, QUOTED_MESSAGE_NAME,
// and QUOTED_MESSAGE_LAST_UPDATE_TIME here.
String parent = "spaces/SPACE_NAME";
String quotedMessageName = "QUOTED_MESSAGE_NAME";
String lastUpdateTime = "QUOTED_MESSAGE_LAST_UPDATE_TIME";
QuotedMessageMetadata quotedMessageMetadata =
QuotedMessageMetadata.newBuilder()
.setName(quotedMessageName)
.setLastUpdateTime(Timestamps.parse(lastUpdateTime))
.build();
Message message = Message.newBuilder()
.setText("I am responding to a quoted message!")
.setQuotedMessageMetadata(quotedMessageMetadata)
.build();
CreateMessageRequest request =
CreateMessageRequest.newBuilder()
.setParent(parent)
.setMessage(message)
.build();
// Make the request.
Message response = chatClient.createMessage(request);
// Handle the response.
System.out.println(response);
}
}
Apps Script
/**
* Creates a message that quotes another message.
*
* Relies on the OAuth2 scope 'https://www.googleapis.com/auth/chat.messages.create'
* referenced in the manifest file (appsscript.json).
*/
function createMessageQuoteMessage() {
// Initialize request argument(s)
// TODO(developer): Replace SPACE_NAME here.
const parent = 'spaces/SPACE_NAME';
const message = {
// The text content of the message.
text: 'I am responding to a quoted message!',
// quotedMessageMetadata lets Chat apps respond to a message by quoting it.
//
// TODO(developer): Replace QUOTED_MESSAGE_NAME
// and QUOTED_MESSAGE_LAST_UPDATE_TIME .
quotedMessageMetadata: {
name: 'QUOTED_MESSAGE_NAME',
lastUpdateTime: 'QUOTED_MESSAGE_LAST_UPDATE_TIME',
}
};
// Make the request
const response = Chat.Spaces.Messages.create(message, parent);
// Handle the response
console.log(response);
}
Para executar este exemplo, substitua o seguinte:
SPACE_NAME: o ID do camponamedo espaço. Para conseguir o ID, chame o métodoListSpaces()(rpc,rest) ou use o URL do espaço.QUOTED_MESSAGE_NAME: o recurso de mensagemname(rpc,rest) da mensagem a ser citada no formatospaces/{space}/messages/{message}.QUOTED_MESSAGE_LAST_UPDATE_TIME: o horário da última atualização da mensagem que você quer citar. Se a mensagem nunca foi editada, corresponde acreateTime(rpc,rest). Se a mensagem foi editada, corresponde alastUpdateTime(rpc,rest).
Resolver problemas
Quando um app do Google Chat ou card retorna um erro, a interface do Chat mostra a mensagem "Algo deu errado". ou "Não foi possível processar sua solicitação". Às vezes, a interface do Chat não mostra nenhuma mensagem de erro, mas o app do Chat ou card produz um resultado inesperado. Por exemplo, uma mensagem de card pode não aparecer.
Embora uma mensagem de erro possa não aparecer na interface do Chat, mensagens de erro descritivas e dados de registro estão disponíveis para ajudar você a corrigir erros quando o registro de erros para apps do Chat está ativado. Para receber ajuda para visualizar, depurar e corrigir erros, consulte Resolver problemas e corrigir erros do Google Chat.
Temas relacionados
- Use o Criador de Cards para criar e visualizar mensagens de card JSON para apps do Chat.
- Formatar mensagens.
- Receber detalhes sobre uma mensagem.
- Listar mensagens em um espaço.
- Atualizar uma mensagem.
- Excluir uma mensagem.
- Identificar usuários em mensagens de chat do Google Chat.
- Enviar mensagens para o Google Chat com webhooks de entrada.