Ce tutoriel décrit l'utilisation des fonctions Cloud Run pour implémenter une commande à barre oblique dans Slack qui effectue une recherche dans l'API Google Knowledge Graph.
Visualiser le flux de données
Le flux de données dans l'application du tutoriel sur la commande Slack Slash comporte plusieurs étapes :
- L'utilisateur exécute la commande Slash
/kg <search_query>
dans une chaîne Slack. - Slack envoie la commande payload au point de terminaison déclencheur de la fonction cloud.
- La fonction envoie une requête avec la requête de recherche de l'utilisateur à l'API Knowledge Graph.
- L'API Knowledge Graph répond avec les résultats correspondants.
- La fonction met en forme la réponse dans un message Slack.
- La fonction renvoie le message à Slack.
- L'utilisateur visualise la réponse mise en forme dans la chaîne Slack.
Observez le schéma ci-dessous pour visualiser les étapes :
Créer la clé API Knowledge Graph
Sur la page Identifiants de la consoleGoogle Cloud , cliquez sur le bouton Créer des identifiants, puis sélectionnez Clé API. Notez cette clé, car vous l'utiliserez pour accéder à l'API Knowledge Graph dans la section suivante.
Préparer la fonction
Clonez le dépôt de l'exemple d'application sur votre ordinateur local :
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Accédez au répertoire contenant l'exemple de code 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/
Déployer la fonction
Pour déployer la fonction qui est exécutée lorsque vous (ou Slack) effectuez une requête HTTP POST sur le point de terminaison de la fonction, exécutez la commande suivante dans le répertoire contenant l'exemple de code (ou, dans le cas de Java, le fichier pom.xml
) :
Remplacez YOUR_SLACK_SIGNING_SECRET
par le secret de signature fourni par Slack sur la page Informations générales de la configuration de votre application, et YOUR_KG_API_KEY
par la clé API Knowledge Graph créée précédemment.
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
Utilisez le flag --runtime
pour spécifier l'ID d'environnement d'exécution d'une version Node.js compatible afin d'exécuter votre fonction.
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
Utilisez le flag --runtime
pour spécifier l'ID d'environnement d'exécution d'une version Python compatible afin d'exécuter votre fonction.
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
Utilisez le flag --runtime
pour spécifier l'ID d'environnement d'exécution d'une version Go compatible afin d'exécuter votre fonction.
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
Utilisez le flag --runtime
pour spécifier l'ID d'environnement d'exécution d'une version Java compatible afin d'exécuter votre fonction.
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
Utilisez le flag --runtime
pour spécifier l'ID d'environnement d'exécution d'une version Ruby compatible afin d'exécuter votre fonction.
Configurer l'application
Une fois la fonction déployée, vous devez créer une commande Slack Slash qui envoie la requête à votre fonction à chaque déclenchement de la commande :
Créez une application Slack pour héberger votre commande Slack Slash. Associez-la à une équipe Slack dans laquelle vous disposez des autorisations pour installer des intégrations.
Accédez aux commandes Slash et cliquez sur le bouton Create new command (Créer une commande).
Saisissez
/kg
comme nom de la commande.Entrez l'URL de la commande :
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
où
YOUR_REGION
est la région dans laquelle votre fonction est déployée etYOUR_PROJECT_ID
est votre ID de projet Cloud.Les deux valeurs sont visibles dans votre terminal lorsque le déploiement de votre fonction est terminé.
Cliquez sur Enregistrer.
Allez à Informations de base.
Cliquez sur Install your app to your workspace (Installer votre application dans votre espace de travail) et suivez les instructions à l'écran pour activer l'application pour votre espace de travail.
Votre commande Slash Slack devrait être bientôt disponible.
Comprendre le code
Importer des dépendances
L'application doit importer plusieurs dépendances afin de pouvoir communiquer avec les services Google Cloud Platform :
Node.js
Python
Go
Java
Ruby
Recevoir le webhook
La fonction suivante est exécutée lorsque vous (ou Slack) effectuez une requête HTTP POST sur le point de terminaison de la fonction :
Node.js
Python
Go
Java
Ruby
La fonction suivante authentifie la requête entrante en vérifiant l'en-tête X-Slack-Signature
fourni par Slack :
Node.js
Python
Go
Java
Ruby
Interroger l'API Knowledge Graph
La fonction cloud envoie une demande avec la requête de recherche de l'utilisateur à l'API Knowledge Graph.
Node.js
Python
Go
Java
Ruby
Mettre en forme le message Slack
Enfin, la fonction suivante met en forme le résultat Knowledge Graph en message Slack enrichi qui sera visible par l'utilisateur :
Node.js
Python
Go
Java
Ruby
Délais avant expiration de l'API Slack
L'API Slack s'attend à ce que votre fonction réponde dans un délai de trois secondes suivant la réception d'une requête webhook.
Les commandes utilisées dans ce tutoriel prennent généralement moins de trois secondes pour répondre. Pour les commandes à exécution plus longue, nous recommandons de configurer une fonction pour les requêtes push (y compris leur response_url
) envoyées à un sujet Pub/Sub qui agit en tant que file d'attente de tâches.
Ensuite, vous pouvez créer une deuxième fonction déclenchée par Pub/Sub qui traite ces tâches et renvoie les résultats à l'adresse response_url
de Slack.
Utiliser la commande Slash
Tapez la commande dans votre chaîne Slack :
/kg giraffe
Consultez les journaux pour vous assurer que les exécutions sont terminées :
gcloud functions logs read --limit 100