En este instructivo, se muestra cómo usar Cloud Run Functions para implementar un comando de barra de Slack que realiza búsquedas en la API de Gráfico de conocimiento de Google.
Objetivos
- Crear un comando de barra en Slack
- Escribir e implementar una Cloud Run Function HTTP
- Buscar en la API de Gráfico de conocimiento de Google con el comando de barra
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
- Cloud Run functions
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Antes de comenzar
- 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, and Google Knowledge Graph Search 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, and Google Knowledge Graph Search APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Prepara tu entorno de desarrollo.
Si ya tienes instalado gcloud CLI, ejecuta el siguiente comando para actualizarla:
gcloud components update
Visualiza el flujo de datos
El flujo de datos en la aplicación del instructivo del comando de barra de Slack incluye varios pasos, como se muestra a continuación:
- El usuario ejecuta el comando de barra
/kg <search_query>
en un canal de Slack. - Slack envía la carga útil del comando al extremo activador de la función.
- La función envía una solicitud con la búsqueda del usuario a la API de Gráfico de conocimiento.
- La API de Gráfico de conocimiento responde con todos los resultados coincidentes.
- La función da formato a la respuesta y la transforma en un mensaje de Slack.
- La función envía el mensaje de vuelta a Slack.
- El usuario ve la respuesta con formato en el canal de Slack.
El siguiente gráfico puede ayudarte a visualizar los pasos:
Crea una clave de API de Gráfico de conocimiento
En la página Credenciales de la consola de Google Cloud, haz clic en el botón Crear credenciales y selecciona Clave de API. Recuerda esta clave, puesto que la usarás para acceder a la API de Gráfico de conocimiento en la siguiente sección.
Prepara la función
Clona el repositorio de la app de muestra en tu máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
De manera opcional, puedes descargar la muestra como un archivo ZIP y extraerla.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo ZIP y extraerla.
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo ZIP y extraerla.
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo ZIP y extraerla.
PHP
git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.
Ve al directorio que contiene el código de muestra de funciones de Cloud Run:
Node.js
cd nodejs-docs-samples/functions/slack/
Python
cd python-docs-samples/functions/slack/
Go
cd golang-samples/functions/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/
Implementa la función
Para implementar la función que se activa cuando tú o Slack hacen una solicitud HTTP POST al extremo de la función, ejecuta el siguiente comando en el directorio que contiene el código de muestra (o el archivo pom.xml
en el caso de Java):
Reemplaza YOUR_SLACK_SIGNING_SECRET
por el secreto de firma que proporciona Slack en la página Información básica de la configuración de tu app y YOUR_KG_API_KEY
por la clave de la API de Gráfico de conocimiento que creaste antes.
Node.js
gcloud functions deploy kgSearch \ --runtime nodejs20 \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
Usa la marca --runtime
para especificar el ID del entorno de ejecución de una versión compatible de Node.js para ejecutar la función.
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
Usa la marca --runtime
para especificar el ID de entorno de ejecución de una versión de Python compatible para ejecutar la función.
Go
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
Usa la marca --runtime
para especificar el ID de entorno de ejecución de una versión de Go compatible para ejecutar tu función.
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
Usa la marca --runtime
para especificar el ID del entorno de ejecución de una versión de Java compatible para ejecutar tu función.
C#
gcloud functions deploy csharp-slack-function \ --entry-point SlackKnowledgeGraphSearch.Function \ --runtime dotnet6 \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
Usa la marca --runtime
para especificar el ID del entorno de ejecución de una versión .NET compatible para ejecutar tu función.
Ruby
gcloud functions deploy kg_search --runtime ruby32 \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
Usa la marca --runtime
para especificar el ID de entorno de ejecución de una versión de Ruby compatible para ejecutar tu función.
PHP
gcloud functions deploy searchKnowledgeGraph --runtime php82 \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
Usa la marca --runtime
para especificar el ID del entorno de ejecución de una versión de PHP compatible a fin de ejecutar la función.
Configura la aplicación
Después de implementar la función, debes crear un comando de barra en Slack que envíe la consulta a tu función cada vez que se active el comando.
Crea una app de Slack para alojar el comando de barra de Slack. Asóciala con un equipo de Slack en el que tengas permisos para instalar integraciones.
Ve a Comandos de barra y haz clic en el botón Crear comando nuevo.
Ingresa
/kg
como el nombre del comando.Ingresa la URL del comando, como en el ejemplo:
Node.js
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/kgSearch
Python
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/kg_search
Go
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/KGSearch
Java
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/java-slack-function
C#
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/csharp-slack-function
Ruby
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/kg_search
PHP
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/searchKnowledgeGraph
donde
YOUR_REGION
es la región en la cual se implementa tu función yYOUR_PROJECT_ID
es el ID del proyecto de Cloud.Ambos valores pueden verse en la terminal cuando la función termina de implementarse.
Haz clic en Guardar.
Ve a Información básica.
Haz clic en Instala la app en tu lugar de trabajo y sigue las instrucciones en pantalla para habilitar la aplicación en tu lugar de trabajo.
Tu comando de barra de Slack debería estar en línea en breve.
Comprende el código
Importa dependencias
La aplicación debe importar varias dependencias con el fin de comunicarse con los servicios de Google Cloud Platform:
Node.js
Python
Go
Java
C#
Ruby
PHP
Recibe el webhook
La siguiente función se ejecuta cuando tú (o Slack) haces una solicitud HTTP POST al extremo de la función:
Node.js
Python
Go
Java
C#
Ruby
PHP
Con la siguiente función, se verifica el encabezado X-Slack-Signature
que proporcionó Slack para autenticar la solicitud:
Node.js
Python
Go
Java
C#
Ruby
PHP
Consulta a la API de Gráfico de conocimiento
La siguiente función envía una solicitud con la búsqueda del usuario a la API de Gráfico de conocimiento.
Node.js
Python
Go
Java
C#
Ruby
PHP
Formato de mensaje de Slack
Finalmente, la siguiente función da formato al resultado de Gráfico de conocimiento y lo transforma en un mensaje de Slack con formato enriquecido que se le mostrará al usuario.
Node.js
Python
Go
Java
C#
Ruby
PHP
Tiempo de espera de la API de Slack
La API de Slack espera que tu función responda dentro de 3 segundos después de recibir una solicitud de webhook.
A los comandos que aparecen en este instructivo, por lo general, les toma menos de 3 segundos responder. En el caso de los comandos con tiempos de ejecución más largos, se recomienda configurar una función para enviar solicitudes (incluida la response_url
) a un tema de Pub/Sub que actúe como una lista de tareas en cola.
Después, puedes crear una segunda función activada por Pub/Sub que procese esas tareas y envíe resultados de vuelta a la response_url
de Slack.
Usa el comando de barra
Escribe el comando en el canal de Slack:
/kg giraffe
Revisa los registros para asegurarte de que las ejecuciones se completaron:
gcloud functions logs read --limit 100
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra el proyecto
La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.
Para borrar el proyecto, sigue estos pasos:
- 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.
Borra la función
Para borrar la función que implementaste en este instructivo, ejecuta el siguiente comando:
Node.js
gcloud functions delete kgSearch
Python
gcloud functions delete kg_search
Go
gcloud functions delete KGSearch
Java
gcloud functions delete java-slack-function
C#
gcloud functions delete csharp-slack-function
Ruby
gcloud functions delete kg_search
PHP
gcloud functions delete searchKnowledgeGraph
También puedes borrar funciones de Cloud Run en la consola de Google Cloud.