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
- Google Knowledge Graph API mit dem Slash-Befehl durchsuchen
Kosten
In dieser Anleitung werden kostenpflichtige Komponenten der Cloud Platform verwendet, darunter:
- Google Cloud Functions
Sie können mithilfe des Preisrechners eine Kostenschätzung für Ihre voraussichtliche Nutzung erstellen.
Hinweis
-
Melden Sie sich bei Ihrem Google-Konto an.
Wenn Sie noch kein Konto haben, melden Sie sich hier für ein neues Konto an.
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.
- Cloud Functions, Cloud Build, and Google Knowledge Graph Search APIs aktivieren.
- Installieren und initialisieren Sie das Cloud SDK.
- Bereiten Sie die Entwicklungsumgebung vor.
Wenn Sie das Cloud SDK bereits installiert haben, aktualisieren Sie es 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:
Knowledge Graph API-Schlüssel erstellen
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 im nächsten Abschnitt für den Zugriff auf die Knowledge Graph API verwenden werden.
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.
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.
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/
Go
cd golang-samples/functions/slack/
Java
cd java-docs-samples/functions/slack/
C#
cd dotnet-docs-samples/functions/slack/
Ruby
cd ruby-docs-samples/functions/slack/
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 kgSearch \ --runtime nodejs10 \Mit den folgenden Werten für das Flag
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
--runtime
können Sie Ihre bevorzugte Version von Node.js festlegen:nodejs10
nodejs12
nodejs14
(öffentliche Vorschau)
Python
gcloud functions deploy kg_search \ --runtime python38 \Mit den folgenden Werten für das Flag
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
--runtime
können Sie Ihre bevorzugte Version von Python festlegen:python37
python38
python39
(öffentliche Vorschau)
Go
gcloud functions deploy KGSearch \ --runtime go113 \Mit diesen Werten für das Flag
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
--runtime
können Sie Ihre bevorzugte Version von Go festlegen:
go111
(veraltet)go113
Java
gcloud functions deploy java-slack-function \ --entry-point functions.SlackSlashCommand \ --runtime java11 \ --memory 512MB \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
C#
gcloud functions deploy csharp-slack-function \ --entry-point SlackKnowledgeGraphSearch.Function \ --runtime dotnet3 \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
Ruby
gcloud functions deploy kg_search --runtime ruby26 \Mit den folgenden Werten für das Flag
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
--runtime
können Sie Ihre bevorzugte Version von Ruby festlegen:
ruby26
ruby27
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:
Erstellen Sie eine Slack-Anwendung als Host Ihres Slack-Slash-Befehls. Ordnen Sie sie einem Slack-Team zu, für das Sie Berechtigungen zum Installieren von Integrationen haben.
Wechseln Sie zu Slash-Befehle und klicken Sie auf die Schaltfläche Neuen Befehl erstellen.
Geben Sie
/kg
als Namen des Befehls ein.Geben Sie die URL für den Befehl ein:
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
Dabei ist
YOUR_REGION
die Region, in der Ihre Cloud Functions-Funktion bereitgestellt wird, undYOUR_PROJECT_ID
die ID Ihres Cloud-Projekts.Beide Werte sind in Ihrem Terminal sichtbar, wenn die Bereitstellung der Funktion abgeschlossen ist.
Klicken Sie auf Speichern.
Rufen Sie Allgemeine Informationen auf.
Klicken Sie auf Anwendung in Ihrem 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
Go
Java
C#
Ruby
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
Go
Java
C#
Ruby
Die folgende Funktion authentifiziert die eingehende Anfrage, da die durch Slack bereitgestellte Kopfzeile X-Slack-Signature
geprüft wird:
Node.js
Python
Go
Java
C#
Ruby
Knowledge Graph API abfragen
Die folgende Funktion sendet eine Anfrage mit der Suchanfrage des Nutzers an die Knowledge Graph API:
Node.js
Python
Go
Java
C#
Ruby
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
Go
Java
C#
Ruby
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:
/kg giraffe
Prüfen Sie in den Logs, ob die Ausführungen abgeschlossen wurden:
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 behalten Sie das Projekt und löschen Sie 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:
- Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
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 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
Sie können Cloud Functions-Funktionen auch über die Google Cloud Console löschen.