Neste tutorial, você aprenderá a usar o Cloud Run functions para implementar um comando Slash do Slack que pesquisa a API Knowledge Graph do Google.
Objetivos
- Criar um Slash Command no Slack.
- Escrever e implantar um Cloud Run functions HTTP.
- Pesquisar a API Google Knowledge Graph usando o Slash Command.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
- Cloud Run functions
- Cloud Build
- Artifact Registry
- Cloud Logging
For details, see Cloud Run functions pricing.
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Artifact Registry, and Logging APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Artifact Registry, and Logging APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Prepare seu ambiente de desenvolvimento.
Node.js
Python
Go
Java
C#
Ruby
PHP
Se a gcloud CLI já estiver instalada, atualize-a executando o seguinte comando:
gcloud components update
Como visualizar o fluxo de dados
O fluxo de dados no aplicativo de tutorial do Slack Slash Command envolve vários passos:
- O usuário executa o Slash Command
/kg <search_query>
em um canal Slack. - O Slack envia o payload do comando ao endpoint do gatilho do Cloud Run functions.
- O Cloud Run functions envia uma solicitação com a consulta de pesquisa do usuário para a API Knowledge Graph.
- A API Knowledge Graph responde com todos os resultados encontrados.
- O Cloud Run function formata a resposta em uma mensagem do Slack.
- O Cloud Run function envia a mensagem de volta ao Slack.
- O usuário vê a resposta formatada no canal do Slack.
Isto pode ajudar a visualizar os passos:
Receber credenciais
Para implantar a função, você precisa de uma chave de API fornecida pelo Console do Google Cloud e de uma chave secreta de assinatura do Slack.
Onde encontrar a chave de API do Mapa de informações
Na página Credenciais do Console do Google Cloud, clique no botão Criar credenciais e selecione Chave de API. Lembre-se dessa
chave, porque ela será incluída como parte do comando deploy
. Essa chave é o que possibilita
sua função a acessar a API Knowledge Graph.
Receber a chave secreta de assinatura do Slack
A chave secreta de assinatura do Slack também é necessária para implantar a função. Para receber a chave secreta de assinatura do Slack, crie o app Slack que hospedará o comando Slash do Slack. Esse aplicativo precisa estar associado a uma equipe do Slack em que você tenha permissões para instalar integrações.
Acesse a página Seus aplicativos do Slack e clique em Criar novo aplicativo.
Selecione Do zero.
Forneça um nome para seu app e selecione um espaço de trabalho do Slack em que você tenha permissões para instalar integrações.
Clique em Create App.
O app é criado, e a tela muda para a página Informações básicas.
Na página Informações básicas, copie e salve a chave secreta de assinatura do Slack.
Salve as alterações.
Em seguida, você precisa receber o código-fonte e implantar a função. Depois de implantar a função, é preciso configurar o app Slack para integrá-la à função implantada, conforme descrito em Como configurar o aplicativo.
Como preparar a função
Clone o repositório do app de amostra na máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
PHP
git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Mude para o diretório que contém o código de amostra das funções do Cloud Run:
Node.js
cd nodejs-docs-samples/functions/slack/
Python
cd python-docs-samples/functions/slack/
Go
cd golang-samples/functions/functionsv2/slack/
Java
cd java-docs-samples/functions/slack/
C#
cd dotnet-docs-samples/functions/slack/SlackKnowledgeGraphSearch/
Ruby
cd ruby-docs-samples/functions/slack/
PHP
cd php-docs-samples/functions/slack_slash_command/
Como implantar a função
Para implantar a função executada quando você (ou o Slack) faz uma solicitação HTTP POST para o endpoint da função, execute o comando a seguir no diretório que contém o código da amostra (ou o arquivo pom.xml
para Java):
Substitua YOUR_SLACK_SIGNING_SECRET
pelo secret de assinatura fornecido pelo Slack na página Informações básicas da configuração do aplicativo e YOUR_KG_API_KEY
pela chave da API Knowledge Graph criada anteriormente.
Node.js
gcloud functions deploy nodejs-slack-function \ --gen2 \ --runtime=nodejs20 \ --region=REGION
\ --source=. \ --entry-point=kgSearch \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
Use a flag --runtime
para especificar o ID do ambiente de execução de uma versão do Node.js compatível a fim de executar a função.
Python
gcloud functions deploy python-slack-function \ --gen2 \ --runtime=python312 \ --region=REGION
\ --source=. \ --entry-point=kg_search \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
Use a flag --runtime
para especificar o ID do ambiente de execução de uma versão compatível do Python a fim de executar a função.
Go
gcloud functions deploy go-slack-function \ --gen2 \ --runtime=go121 \ --region=REGION
\ --source=. \ --entry-point=KGSearch \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
Use a flag --runtime
para especificar o ID do ambiente de execução de uma versão do Go compatível a fim de executar a função.
Java
gcloud functions deploy java-slack-function \ --gen2 \ --runtime=java17 \ --region=REGION
\ --source=. \ --entry-point=functions.SlackSlashCommand \ --memory=512MB \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
Use a flag --runtime
para especificar o ID do ambiente de execução de uma versão compatível do Java a fim de executar a função.
C#
gcloud functions deploy csharp-slack-function \ --gen2 \ --runtime=dotnet6 \ --region=REGION
\ --source=. \ --entry-point=SlackKnowledgeGraphSearch.Function \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
Use a flag --runtime
para especificar o ID do ambiente de execução de uma versão do .NET compatível a fim de executar a função.
Ruby
gcloud functions deploy ruby-slack-function \ --gen2 \ --runtime=ruby32 \ --region=REGION
\ --source=. \ --entry-point=kg_search \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
Use a flag --runtime
para especificar o ID do ambiente de execução de uma versão compatível do Ruby a fim de executar a função.
PHP
gcloud functions deploy php-slack-function \ --gen2 \ --runtime=php82 \ --region=REGION
\ --source=. \ --entry-point=receiveRequest \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
Use a flag --runtime
para especificar o ID do ambiente de execução de uma versão do PHP compatível a fim de executar a função.
Configurar o aplicativo
Depois que a função é implementada, você precisa criar um Slack Slash Command que envia a consulta para a função toda vez que o comando for acionado:
Selecione o app, acesse Comandos de barra e clique no botão Criar novo comando.
Insira
/kg
como o nome do comando.No campo URL de solicitação, insira o URL da sua função.
É possível copiar o URL na saída do comando
deploy
ou acessar a página Visão geral do Cloud Run functions no console do Google Cloud. Clique na função para abra a página Detalhes da função e copie o URL dela.Digite uma breve descrição e clique em Salvar.
Vá para Informações básicas.
Clique em Instalar no espaço de trabalho e siga as instruções na tela para ativar o aplicativo no seu espaço de trabalho.
Seu Slack Slash Command ficará on-line em breve.
Como entender o código
Como importar dependências
O aplicativo importa várias dependências para se comunicar com os serviços do Google Cloud Platform:
Node.js
Python
Go
Java
C#
Ruby
PHP
Como receber o webhook
A função a seguir é executada quando você ou o Slack fazem uma solicitação HTTP POST para o ponto de extremidade da função.
Node.js
Python
Go
Java
C#
Ruby
PHP
A função a seguir autentica a solicitação recebida verificando o
cabeçalho X-Slack-Signature
fornecido pelo Slack:
Node.js
Python
Go
Java
C#
Ruby
PHP
Como consultar a API Knowledge Graph
A função a seguir envia uma solicitação com a consulta de pesquisa do usuário para a API Knowledge Graph:
Node.js
Python
Go
Java
C#
Ruby
PHP
Como formatar a mensagem do Slack
Por fim, a seguinte função exibe para o usuário o resultado do Knowledge Graph em uma mensagem do Slack ricamente formatada:
Node.js
Python
Go
Java
C#
Ruby
PHP
Tempos limite da API Slack
A API do Slack espera que sua função responda dentro de 3 segundos após receber uma solicitação de webhook.
Os comandos deste tutorial, no geral, levam menos de 3 segundos para responder. Para
comando de execução mais longa, recomendamos configurar uma função para pedidos push
(incluindo seu response_url
)
para um tópico do Pub/Sub que atua como uma fila de tarefas.
Em seguida, crie uma segunda função acionada por Pub/Sub
que processa essas tarefas e envia os resultados de volta para o response_url
do Slack.
Como usar o comando Slash
Quando a implantação da função for concluída, digite este comando no canal do Slack:
/kg giraffe
Você verá a entrada do Mapa de informações de "giraffe".
Verifique os registros para ver a saída da execução da função:
gcloud functions logs read --limit 100
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Excluir o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Como excluir a função
Para excluir a função do Cloud Run criada neste tutorial, execute o seguinte comando:
Node.js
gcloud functions delete nodejs-slack-function --gen2 --region REGION
Python
gcloud functions delete python-slack-function --gen2 --region REGION
Go
gcloud functions delete go-slack-function --gen2 --region REGION
Java
gcloud functions delete java-slack-function --gen2 --region REGION
C#
gcloud functions delete csharp-slack-function --gen2 --region REGION
Ruby
gcloud functions delete ruby-slack-function --gen2 --region REGION
PHP
gcloud functions delete php-slack-function --gen2 --region REGION
Também é possível excluir funções do Cloud Run pelo Console do Google Cloud.