Nesta página, descrevemos como conectar um app do Google Chat a um serviço ou ferramenta fora do Google Chat. Embora os apps de chat sejam poderosos por si só, eles geralmente funcionam em conjunto com outros sistemas e exigem aplicativos complementares para conectar contas, autorizar o acesso a dados, mostrar informações adicionais ou configurar preferências do usuário.
Para autenticar usuários com um serviço de terceiros ou fluxo OAuth, seu app do Chat realiza as seguintes etapas:
- Detectar quando a autorização ou configuração é necessária.
- Retorne um card de autorização básica que solicite ao usuário fazer login ou configurar o serviço.
- Redirecione para o URI de conclusão para que o Google Chat tente novamente a interação original automaticamente depois que o usuário concluir a autorização.
Pré-requisitos
HTTP
Um app do Google Chat que recebe e responde a interações do usuário. Para criar um, conclua o guia de início rápido do HTTP.
Apps Script
Um app do Google Chat que recebe e responde a interações do usuário. Para criar um, conclua o guia de início rápido do Apps Script.
Detectar que a autorização é necessária
Ao interagir com seu app do Chat, os usuários podem não ter autorização para acessar um recurso protegido por vários motivos, como os seguintes:
- Um token de acesso para se conectar ao serviço de terceiros ainda não foi gerado ou expirou.
- O token de acesso não abrange o recurso solicitado.
- O token de acesso não abrange os escopos necessários da solicitação.
Seu app do Chat precisa detectar esses casos para que os usuários possam fazer login e autorizar o acesso ao seu serviço.
Se você estiver criando no Google Apps Script, use a
biblioteca OAuth2 para Google Apps Script
(ou a versão OAuth1),
em que a função hasAccess verifica se o usuário autorizou o acesso a
um serviço. Como alternativa, ao usar solicitações
UrlFetchApp.fetch, é possível definir o parâmetro muteHttpExceptions como true para inspecionar
o código de resposta e o conteúdo no objeto
HttpResponse retornado.
Solicitar aos usuários um card de autorização básica
Quando o app do Chat detectar que é necessária autorização ou
configuração, retorne uma resposta AuthorizationError para mostrar um
card de autorização básica particular ao usuário.
A imagem a seguir mostra um exemplo do cartão de autorização básica do Google:
Para mostrar aos usuários um card de autorização básica, retorne um objeto
AuthorizationError:
HTTP
Retorne a seguinte resposta JSON:
{
"basic_authorization_prompt": {
"authorization_url": "<var>AUTHORIZATION_URL</var>",
"resource": "<var>RESOURCE_DISPLAY_NAME</var>"
}
}
Apps Script
CardService.newAuthorizationException()
.setAuthorizationUrl('<var>AUTHORIZATION_URL</var>')
.setResourceDisplayName('<var>RESOURCE_DISPLAY_NAME</var>')
.throwException();
Substitua:
AUTHORIZATION_URL: o URL HTTPS do web app que processa autenticação, autorização ou configuração.RESOURCE_DISPLAY_NAME: o nome de exibição do recurso ou serviço protegido. Esse nome é mostrado ao usuário na solicitação de autorização. Por exemplo, se oRESOURCE_DISPLAY_NAMEforExample Account, a solicitação vai dizer que o app precisa de aprovação para acessar seuExample Account.
Concluir a solicitação de configuração
No Chat, o usuário pode concluir o processo de autorização e fazer com que o Chat tente novamente a interação original automaticamente sem uma atualização manual. O Chat oferece suporte à nova tentativa automática se o gatilho for Mensagem, Adicionado ao espaço ou Comando do app.
Para esses gatilhos, seu app do Chat recebe um
URI de redirecionamento de conclusão (configCompleteRedirectUri / completeRedirectUri) no
payload do evento:
- Mensagem:
chat.messagePayload.configCompleteRedirectUri - Adicionado ao espaço:
chat.addedToSpacePayload.configCompleteRedirectUri - Comando do app:
chat.appCommandPayload.configCompleteRedirectUri
Você precisa codificar esse URI de redirecionamento no seu <var>AUTHORIZATION_URL</var> e
redirecionar o navegador do usuário para ele após a conclusão do fluxo de autorização.
O redirecionamento para esse URL indica ao Google Chat que a solicitação de autorização ou
configuração foi atendida.
Quando um usuário é redirecionado para o URI de redirecionamento de conclusão fornecido no payload do evento original, o Google Chat realiza as seguintes etapas:
- Apaga a solicitação de autorização particular mostrada ao usuário que iniciou a ação.
- Converte a mensagem original em pública, tornando-a visível para outros membros do espaço.
- Envia o objeto de evento original para seu app do Chat uma segunda vez.
Se você não redirecionar para o URI de redirecionamento de conclusão, o usuário ainda poderá concluir o fluxo de autorização, mas o Google Chat não vai tentar novamente a execução anterior de forma automática, e o usuário precisará invocar seu app do Chat manualmente outra vez.
Visitar um URI de redirecionamento de conclusão afeta apenas uma interação do usuário. Se um usuário tiver enviado mensagens para um app de chat várias vezes e recebido várias solicitações, concluir o processo de autenticação e configuração para uma solicitação vai repetir apenas essa interação específica.
Autenticar o usuário do Chat fora do Chat
Ao vincular a um URL fora do Chat (como um callback da Web OAuth), geralmente é necessário correlacionar a sessão da Web externa com a identidade do usuário no Chat. Recomendamos que você proteja o web app de destino com o Login do Google.
Use o token de identidade emitido durante o login para receber o ID do usuário. A declaração sub contém o ID exclusivo do Google do usuário e pode ser correlacionada com o nome do recurso do usuário (chat.user.name) do Google Chat.
Para correlacionar a declaração sub com um nome de recurso users/{user} do Google Chat,
adicione o prefixo users/ ao valor da declaração sub. Por exemplo, um valor de declaração sub de 123 corresponde a users/123 em objetos de evento enviados ao seu app de chat.
Amostras de código
Os exemplos de código a seguir demonstram como um app de chat pode solicitar credenciais OAuth2 off-line usando um card de autorização básico, armazenar em um banco de dados, redirecionar para o URI de conclusão e fazer chamadas de API com autenticação do usuário:
Node.js
Python
Java
Apps Script
Temas relacionados
- Receber e responder a interações do usuário
- Autenticar e autorizar apps do Google Chat e solicitações de API do Google Chat
- Conectar o complemento do Google Workspace a um serviço de terceiros
Apps de chat que não são complementos: conecte um app de chat a outros serviços e ferramentas
Se você mantiver um app do Chat que não seja um
complemento do Google Workspace, ele vai solicitar
configuração usando um actionResponse do tipo REQUEST_CONFIG e ler
configCompleteRedirectUrl do objeto
Event de nível superior.
Para fazer upgrade de um app do Chat que não é um complemento para a estrutura de complementos do Google Workspace, consulte Converter um app do Google Chat em um complemento do Google Workspace.
Solicitar configuração de um usuário em um app do Chat que não é um complemento
Em um app do Chat que não é um complemento, retorne um URL de configuração ao usuário no seguinte formato:
{
"actionResponse": {
"type": "REQUEST_CONFIG",
"url": "CONFIGURATION_URL"
}
}
Isso instrui o Google Chat a apresentar ao usuário uma solicitação particular, em que
CONFIGURATION_URL é um link para o usuário acessar e fazer autenticação, autorização ou configuração
adicional. Uma resposta REQUEST_CONFIG é mutuamente exclusiva com uma mensagem de resposta regular. Qualquer texto, cards ou outros atributos são ignorados.
Concluir a solicitação de configuração em um app do Chat que não seja um complemento
Toda interação MESSAGE, ADDED_TO_SPACE e APP_COMMAND
Event que um
app de chat que não é um complemento
recebe inclui o campo de nível superior configCompleteRedirectUrl. Codifique esse
URL no URL de configuração e redirecione o usuário para ele após a conclusão para
que o Google Chat apague o comando, converta a mensagem original em pública
e reenvie o evento de interação original para seu
app Chat.
Para exemplos de implementações, consulte o exemplo de app de conectividade Node.js e o exemplo de app de autenticação Python MyProfile no GitHub.