Este tutorial demonstra a utilização de funções do Cloud Run para implementar um comando de barra do Slack que pesquisa a API Google Knowledge Graph.
Visualizar o fluxo de dados
O fluxo de dados na aplicação do tutorial de comando com barra do Slack envolve vários passos:
- O utilizador executa o comando com barra
/kg <search_query>
num canal do Slack. - O Slack envia a carga útil do comando para o ponto final do acionador da função.
- A função envia um pedido com a consulta de pesquisa do utilizador para a API Knowledge Graph.
- A API Knowledge Graph responde com todos os resultados correspondentes.
- A função formata a resposta numa mensagem do Slack.
- A função envia a mensagem de volta para o Slack.
- O utilizador vê a resposta formatada no canal do Slack.
Pode ser útil visualizar os passos:
Criar a chave da API Knowledge Graph
Na Google Cloud página de credenciais da consola, clique no botão Criar credenciais e selecione Chave de API. Guarde esta chave, pois vai usá-la para aceder à API Knowledge Graph na secção seguinte.
Preparar a função
Clone o repositório da app de exemplo para a sua máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Ir
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Altere para o diretório que contém o código de exemplo das funções do Cloud Run:
Node.js
cd nodejs-docs-samples/functions/slack/
Python
cd python-docs-samples/functions/slack/
Ir
cd golang-samples/functions/slack/
Java
cd java-docs-samples/functions/slack/
Ruby
cd ruby-docs-samples/functions/slack/
Implementar a função
Para implementar a função que é executada quando faz (ou o Slack faz) um pedido HTTP POST para o ponto final da função, execute o seguinte comando no diretório que contém o código de exemplo (ou o ficheiro pom.xml
para Java):
Substitua YOUR_SLACK_SIGNING_SECRET
pelo segredo de assinatura fornecido pelo Slack na página Informações básicas da configuração da sua app e YOUR_KG_API_KEY
pela chave da API Knowledge Graph que criou anteriormente.
Node.js
gcloud functions deploy kgSearch \ --runtime nodejs22 \
--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 de tempo de execução de uma
versão suportada do Node.js para executar
a sua função.
Python
gcloud functions deploy kg_search \ --runtime python312 \
--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 de tempo de execução de uma
versão do Python suportada para executar
a sua função.
Ir
gcloud functions deploy KGSearch \ --runtime go121 \
--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 de tempo de execução de uma
versão do Go suportada para executar
a sua função.
Java
gcloud functions deploy java-slack-function \ --entry-point functions.SlackSlashCommand \ --runtime java17 \ --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 de tempo de execução de uma
versão Java suportada para executar
a sua função.
Ruby
gcloud functions deploy kg_search --runtime ruby33 \
--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 de tempo de execução de uma
versão do Ruby suportada para executar
a sua função.
Configurar a aplicação
Depois de implementar a função, tem de criar um comando de barra do Slack que envia a consulta para a sua função sempre que o comando é acionado:
Crie uma app Slack para alojar o seu comando com barra do Slack. Associá-lo a uma equipa do Slack na qual tenha autorizações para instalar integrações.
Aceda a Comandos com barra e clique no botão Criar novo comando.
Introduza
/kg
como o nome do comando.Introduza o URL do comando:
Node.js
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/kgSearch
Python
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/kg_search
Ir
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/KGSearch
Java
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/java-slack-function
Ruby
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/kg_search
onde
YOUR_REGION
é a região onde a sua função está implementada eYOUR_PROJECT_ID
é o ID do projeto do Cloud.Ambos os valores ficam visíveis no terminal quando a implementação da função estiver concluída.
Clique em Guardar.
Aceda a Informações básicas.
Clique em Instalar a app no seu espaço de trabalho e siga as instruções no ecrã para ativar a aplicação para o seu espaço de trabalho.
O seu comando com barra do Slack deve ficar online em breve.
Compreender o código
Importar dependências
A aplicação tem de importar várias dependências para comunicar com os serviços da Google Cloud Platform:
Node.js
Python
Ir
Java
Ruby
Receber o webhook
A seguinte função é executada quando faz (ou o Slack faz) um pedido HTTP POST para o ponto final da função:
Node.js
Python
Ir
Java
Ruby
A função seguinte autentica o pedido recebido validando o cabeçalho X-Slack-Signature
fornecido pelo Slack:
Node.js
Python
Ir
Java
Ruby
Consultar a API Knowledge Graph
A função seguinte envia um pedido com a consulta de pesquisa do utilizador para a API Knowledge Graph:
Node.js
Python
Ir
Java
Ruby
Formatar a mensagem do Slack
Por último, a função seguinte formata o resultado do gráfico de conhecimentos numa mensagem do Slack com formatação avançada que é apresentada ao utilizador:
Node.js
Python
Ir
Java
Ruby
Tempos limite da API Slack
A API Slack espera que a sua função responda no prazo de 3 segundos após receber um pedido de webhook.
Normalmente, os comandos neste tutorial demoram menos de 3 segundos a responder. Para comandos de execução mais longa, recomendamos que configure uma função para enviar pedidos
(incluindo o respetivo response_url
)
para um tópico do Pub/Sub que atue como uma fila de tarefas.
Em seguida, pode criar uma segunda função acionada pelo Pub/Sub
que processa essas tarefas e envia os resultados de volta para o response_url
do Slack.
Usar o comando com barra
Escreva o comando no seu canal do Slack:
/kg giraffe
Monitorize os registos para se certificar de que as execuções foram concluídas:
gcloud functions logs read --limit 100