En este tutorial se describe cómo utilizar funciones de Cloud Run para implementar un comando de barra diagonal de Slack que haga búsquedas en la API Knowledge Graph de Google.
Visualizar el flujo de datos
El flujo de datos de la aplicación del tutorial de comandos de barra inclinada de Slack consta de varios pasos:
- El usuario ejecuta el comando de barra
/kg <search_query>
en un canal de Slack. - Slack envía la carga útil del comando al endpoint del activador de la función.
- La función envía una solicitud con la consulta de búsqueda del usuario a la API Knowledge Graph.
- La API Knowledge Graph responde con los resultados coincidentes.
- La función da formato a la respuesta como un mensaje de Slack.
- La función envía el mensaje de vuelta a Slack.
- El usuario ve la respuesta formateada en el canal de Slack.
Puede ser útil visualizar los pasos:
Crear la clave de API Knowledge Graph
En la Google Cloud página Credenciales de la consola, haz clic en el botón Crear credenciales y selecciona Clave de API. Recuerda esta clave, ya que la usarás para acceder a la API Knowledge Graph en la siguiente sección.
Preparando la función
Clona el repositorio de aplicaciones de muestra en la máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Cambia al directorio que contiene el código de ejemplo de Cloud Run Functions:
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/
Ruby
cd ruby-docs-samples/functions/slack/
Desplegar la función
Para desplegar la función que se ejecuta cuando tú (o Slack) haces una solicitud HTTP POST al endpoint de la función, ejecuta el siguiente comando en el directorio que contiene el código de ejemplo (o el archivo pom.xml
en el caso de Java):
Sustituye 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 aplicación y YOUR_KG_API_KEY
por la clave de la API Knowledge Graph que creaste 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
Usa la marca --runtime
para especificar el ID del entorno de ejecución de una
versión compatible de Node.js para ejecutar
tu 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 tiempo de ejecución de una
versión de Python compatible para ejecutar
tu 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 tiempo 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 de tiempo de ejecución de una
versión de Java compatible para ejecutar
tu función.
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
Usa la marca --runtime
para especificar el ID de tiempo de ejecución de una
versión de Ruby compatible para ejecutar
tu función.
Configurar la aplicación
Una vez que se haya implementado la función, debes crear un comando de barra diagonal de Slack que envíe la consulta a tu función cada vez que se active el comando:
Crea una aplicación de Slack para alojar tu comando de barra diagonal de Slack. Asóciala a 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.
Introduce
/kg
como nombre del comando.Introduce la URL del comando:
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
Ruby
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/kg_search
donde
YOUR_REGION
es la región en la que se ha implementado tu función yYOUR_PROJECT_ID
es el ID de tu proyecto de Cloud.Ambos valores se mostrarán en tu terminal cuando termine de implementarse la función.
Haz clic en Guardar.
Ve a Información básica.
Haz clic en Instalar la aplicación en tu espacio de trabajo y sigue las instrucciones que aparecen en pantalla para habilitar la aplicación en tu espacio de trabajo.
Tu comando de barra diagonal de Slack debería estar disponible en breve.
Información sobre el código
Importar dependencias
La aplicación debe importar varias dependencias para comunicarse con los servicios de Google Cloud Platform:
Node.js
Python
Go
Java
Ruby
Recibir el webhook
La siguiente función se ejecuta cuando tú (o Slack) haces una solicitud HTTP POST al endpoint de la función:
Node.js
Python
Go
Java
Ruby
La siguiente función autentica la solicitud entrante verificando el encabezado X-Slack-Signature
proporcionado por Slack:
Node.js
Python
Go
Java
Ruby
Consultar la API Knowledge Graph
La siguiente función envía una solicitud con la consulta de búsqueda del usuario a la API Knowledge Graph:
Node.js
Python
Go
Java
Ruby
Dar formato al mensaje de Slack
Por último, la siguiente función da formato al resultado de Knowledge Graph para convertirlo en un mensaje de Slack con formato enriquecido que se mostrará al usuario:
Node.js
Python
Go
Java
Ruby
Tiempos de espera de la API de Slack
La API de Slack espera que tu función responda en un plazo de 3 segundos tras recibir una solicitud de webhook.
Los comandos de este tutorial suelen tardar menos de 3 segundos en responder. En el caso de los comandos de larga duración, te recomendamos que configures una función para enviar solicitudes (incluidas sus response_url
) a un tema de Pub/Sub que actúe como cola de tareas.
A continuación, puedes crear una segunda función activada por Pub/Sub que procese esas tareas y envíe los resultados a la response_url
de Slack.
Usar el comando de barra inclinada
Escribe el comando en tu canal de Slack:
/kg giraffe
Consulta los registros para asegurarte de que las ejecuciones se han completado:
gcloud functions logs read --limit 100