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
- Cloud Build
- Artifact Registry
- Cloud Logging
For details, see Cloud Run functions pricing.
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, 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
- 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 Cloud Run Functions.
- La función de Cloud Run Functions 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 de Cloud Run Functions da formato a la respuesta y la transforma en un mensaje de Slack.
- La función de Cloud Run Functions 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:
Obtén credenciales
Para implementar tu función, necesitas una clave de API proporcionada por la consola de Google Cloud y un secreto de firma de Slack.
Obtén la 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 incluirás como parte de tu comando deploy
. Esta clave es lo que permite que tu función acceda a la API de Gráfico de conocimiento.
Obtén el secreto de firma de Slack
También necesitas el secreto de firma de Slack para implementar tu función. Para obtener el secreto de firma de Slack, crea la App de Slack que alojará el comando de barra de Slack. Esta app debe estar asociada con un equipo de Slack en el que tengas permisos para instalar integraciones.
Ve a la página Tus apps de Slack y haz clic en Crear una app nueva.
Elige Desde cero.
Proporciona un nombre para tu app y selecciona un lugar de trabajo de Slack en el que tengas permisos para instalar integraciones.
Haz clic en Crear aplicación (Create App).
Se crea la app y la pantalla cambia a la página Información básica.
En la página Información básica, copia el secreto de firma de Slack y guárdalo.
Guarde los cambios.
A continuación, debes obtener el código fuente e implementar tu función. Después de implementar la función, configurarás tu app de Slack para que se integre a la función implementada, como se describe en Configura la aplicació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/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/
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 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
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 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
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 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
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 \ --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
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 \ --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
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 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
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 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
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.
Regresa a la app de Slack que creaste arriba.
Selecciona la app, ve a Comandos de barra y haz clic en el botón Crear comando nuevo.
Ingresa
/kg
como el nombre del comando.En el campo URL de solicitud, ingresa la URL de tu función.
Puedes copiar la URL del resultado del comando
deploy
o ir a la página Descripción general de Cloud Run Functions en la consola de Google Cloud, hacer clic en la función para abrir la página Detalles de la función y copiar la URL desde allí.Ingresa una descripción breve y haz clic en Guardar.
Ve a Información básica.
Haz clic en Instalar en el 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 (incluido su campo 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
Una vez que finalice la implementación de la función, escribe este comando en el canal de Slack:
/kg giraffe
Deberías ver la entrada de Gráfico de conocimiento para "giraffe".
Verifica los registros para ver el resultado de la ejecución de la función:
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 de Cloud Run que creaste en este instructivo, ejecuta el siguiente 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
También puedes borrar funciones de Cloud Run en la consola de Google Cloud.