In dieser Anleitung wird gezeigt, wie mit Cloud Functions ein Slack-Slash-Befehl implementiert wird, der die Google Knowledge Graph API durchsucht.
Ziele
- Slash-Befehl in Slack erstellen
- Cloud Functions-HTTP-Funktion schreiben und bereitstellen
- In Google Knowledge Graph API mit dem Slash-Befehl suchen
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
- Cloud Functions
- Cloud Build
- Artifact Registry
- Cloud Logging
Weitere Informationen finden Sie unter Cloud Functions-Preise.
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Vorbereitung
- 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
- Bereiten Sie die Entwicklungsumgebung vor.
Node.js
Python
Go
Java
C#
Ruby
PHP
Wenn Sie die gcloud CLI bereits installiert haben, aktualisieren Sie sie mit dem folgenden Befehl:
gcloud components update
Datenfluss visualisieren
Der Datenfluss der Anwendung in der Anleitung für Slack-Slash-Befehle umfasst mehrere Schritte:
- Der Nutzer führt den Slash-Befehl
/kg <search_query>
in einem Slack-Kanal aus. - Slack sendet die Befehlsnutzlast an den Trigger-Endpunkt der Cloud Functions-Funktion.
- Die Cloud Functions-Funktion sendet eine Anfrage mit der Suchanfrage des Nutzers an die Knowledge Graph API.
- Die Knowledge Graph API antwortet mit übereinstimmenden Ergebnissen.
- Die Cloud Functions-Funktion formatiert die Antwort in eine Slack-Nachricht.
- Die Cloud Functions-Funktion sendet die Nachricht an Slack zurück.
- Der Nutzer sieht die formatierte Antwort im Slack-Kanal.
Eine grafische Darstellung des Ablaufs:
Anmeldedaten abrufen
Zum Bereitstellen Ihrer Funktion benötigen Sie einen API-Schlüssel, der von der Google Cloud Console bereitgestellt wird, sowie ein Slack-Signatur-Secret.
Knowledge Graph API-Schlüssel abrufen
Klicken Sie auf der Seite Google Cloud Console-Anmeldedaten auf Anmeldedaten erstellen und wählen Sie die Option API-Schlüssel aus. Merken Sie sich diesen Schlüssel, da Sie ihn in Ihren deploy
-Befehl aufnehmen müssen. Mit diesem Schlüssel kann Ihre Funktion auf die Knowledge Graph API zugreifen.
Slack-Signatur-Secret abrufen
Sie benötigen außerdem das Slack-Signatur-Secret, um Ihre Funktion bereitzustellen. Erstellen Sie zum Abrufen des Slack-Signatur-Secrets die Slack-Anwendung, die Ihren Slack-Slash-Befehl hostet. Diese Anwendung muss mit einem Slack-Team verknüpft sein, für das Sie Berechtigungen zum Installieren von Integrationen haben.
Rufen Sie die Seite Meine Apps in Slack auf und klicken Sie auf Create New App (Neue App erstellen).
Wählen Sie From Scratch aus.
Geben Sie einen Namen für die Anwendung an und wählen Sie einen Slack-Arbeitsbereich aus, in dem Sie Berechtigungen zum Installieren von Integrationen haben.
Klicken Sie auf Create App (App erstellen).
Die App wird erstellt und die Anzeige ändert sich auf die Seite Allgemeine Informationen.
Kopieren Sie auf der Seite Allgemeine Informationen Ihr Slack-Signatur-Secret und speichern Sie es.
Speichern Sie die Änderungen.
Als Nächstes müssen Sie den Quellcode abrufen und die Funktion bereitstellen. Nachdem Sie die Funktion bereitgestellt haben, konfigurieren Sie Ihre Slack-Anwendung für die Integration in die bereitgestellte Funktion, wie unter Anwendung konfigurieren beschrieben.
Funktion vorbereiten
Klonen Sie das Repository der Beispiel-App auf Ihren lokalen Computer:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Einfach loslegen (Go)
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
PHP
git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Wechseln Sie in das Verzeichnis, das den Cloud Functions-Beispielcode enthält:
Node.js
cd nodejs-docs-samples/functions/slack/
Python
cd python-docs-samples/functions/slack/
Einfach loslegen (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/
Funktion bereitstellen
Führen Sie den folgenden Befehl in dem Verzeichnis aus, das den Beispielcode (oder die Datei pom.xml
für Java) enthält. Dadurch stellen Sie diejenige Funktion bereit, die ausgeführt wird, wenn Sie (oder Slack) eine HTTP POST-Anfrage an den Endpunkt der Funktion stellen.
Ersetzen Sie YOUR_SLACK_SIGNING_SECRET
durch das Signatur-Secret, das Slack auf der Seite Allgemeine Informationen Ihrer Anwendungskonfiguration bereitstellt, und YOUR_KG_API_KEY
durch den soeben erstellten Knowledge Graph API-Schlüssel.
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
Verwenden Sie das Flag --runtime
, um die Laufzeit-ID einer unterstützten Node.js-Version anzugeben und die Funktion auszuführen.
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
Verwenden Sie das Flag --runtime
, um die Laufzeit-ID einer unterstützten Python-Version anzugeben und die Funktion auszuführen.
Einfach loslegen (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
Verwenden Sie das Flag --runtime
, um die Laufzeit-ID einer unterstützten Go-Version anzugeben und die Funktion auszuführen.
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
Verwenden Sie das Flag --runtime
, um die Laufzeit-ID einer unterstützten Java-Version anzugeben und die Funktion auszuführen.
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
Verwenden Sie das Flag --runtime
, um die Laufzeit-ID einer unterstützten .NET-Version anzugeben, um Ihre Funktion auszuführen.
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
Verwenden Sie das Flag --runtime
, um die Laufzeit-ID einer unterstützten Ruby-Version anzugeben, um die Funktion auszuführen.
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
Verwenden Sie das Flag --runtime
, um die Laufzeit-ID einer unterstützten PHP-Version anzugeben, um die Funktion auszuführen.
Anwendung konfigurieren
Nachdem die Funktion bereitgestellt wurde, müssen Sie einen Slack-Slash-Befehl erstellen, der die Abfrage bei jeder Auslösung des Befehls an Ihre Cloud Functions-Funktion sendet:
Kehren Sie zur Slack-Anwendung zurück, die Sie oben erstellt haben.
Wählen Sie die Anwendung aus, rufen Sie Slash-Befehle auf und klicken Sie auf die Schaltfläche Neuen Befehl erstellen.
Geben Sie
/kg
als Namen des Befehls ein.Geben Sie im Feld Anfrage-URL die URL Ihrer Funktion ein.
Sie können entweder die URL aus der Befehlsausgabe
deploy
kopieren oder zur Seite Cloud Functions – Übersicht in der Google Cloud Console wechseln und auf die Funktion klicken, um die Seite Funktionsdetails zu öffnen und die URL von dort zu kopieren.Geben Sie eine kurze Beschreibung ein und klicken Sie auf Speichern.
Rufen Sie Allgemeine Informationen auf.
Klicken Sie auf In Arbeitsbereich installieren und folgen Sie der Anleitung auf dem Bildschirm, um die Anwendung für Ihren Arbeitsbereich zu aktivieren.
Ihr Slack-Slash-Befehl sollte bald online gehen.
Den Code verstehen
Abhängigkeiten importieren
Die Anwendung muss mehrere Abhängigkeiten importieren, um mit den Google Cloud Platform-Diensten zu kommunizieren:
Node.js
Python
Einfach loslegen (Go)
Java
C#
Ruby
PHP
Webhook erhalten
Die folgende Funktion wird ausgeführt, wenn Sie (oder Slack) eine HTTP POST-Anfrage an den Endpunkt der Funktion stellen:
Node.js
Python
Einfach loslegen (Go)
Java
C#
Ruby
PHP
Die folgende Funktion authentifiziert die eingehende Anfrage, da die durch Slack bereitgestellte Kopfzeile X-Slack-Signature
geprüft wird:
Node.js
Python
Einfach loslegen (Go)
Java
C#
Ruby
PHP
Knowledge Graph API abfragen
Die folgende Funktion sendet eine Anfrage mit der Suchanfrage des Nutzers an die Knowledge Graph API:
Node.js
Python
Einfach loslegen (Go)
Java
C#
Ruby
PHP
Slack-Nachricht formatieren
Mit der folgenden Funktion wird das Knowledge Graph-Ergebnis schließlich in eine umfangreich formatierte Slack-Nachricht verwandelt, die dem Nutzer angezeigt wird:
Node.js
Python
Einfach loslegen (Go)
Java
C#
Ruby
PHP
Zeitlimits in der Slack API
Die Slack API erwartet, dass Ihre Funktion innerhalb von 3 Sekunden nach dem Erhalt einer Webhook-Anfrage reagiert.
Die Ausführung der Befehle in dieser Anleitung dauert in der Regel weniger als 3 Sekunden. Bei Befehlen, deren Ausführung länger dauert, empfiehlt es sich, eine Funktion zu konfigurieren, die Anfragen per Push an ein Pub/Sub-Thema sendet, das als Aufgabenwarteschlange fungiert, und zwar, einschließlich der response_url
der Anfragen.
Anschließend können Sie eine zweite Funktion erstellen, die von Pub/Sub ausgelöst wird, diese Aufgaben verarbeitet und die Ergebnisse an die response_url
von Slack zurücksendet.
Slash-Befehl verwenden
Geben Sie diesen Befehl in Ihren Slack-Kanal ein, wenn die Bereitstellung der Funktion abgeschlossen ist:
/kg giraffe
Sie sollten den Knowledge Graph-Eintrag für "Giraffe" sehen.
Prüfen Sie die Logs, um die Ausgabe der Funktionsausführung zu sehen:
gcloud functions logs read --limit 100
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Projekt löschen
Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das zum Ausführen der Anleitung erstellte Projekt löschen.
So löschen Sie das Projekt:
- 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.
Cloud Functions-Funktion löschen
Führen Sie den folgenden Befehl aus, um die in dieser Anleitung bereitgestellte Cloud Functions-Funktion zu löschen:
Node.js
gcloud functions delete nodejs-slack-function --gen2 --region REGION
Python
gcloud functions delete python-slack-function --gen2 --region REGION
Einfach loslegen (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
Sie können Cloud Functions-Funktionen auch über die Google Cloud Console löschen.