Einführung
Slack ist eine Kommunikationsplattform für Teams. Slack verfügt über zahlreiche Add-Ons, mit denen Teams Slack erweitern und in andere Programme integrieren können. Slackslash commands sind eine schnelle und einfache Möglichkeit, Aktionen im Nachrichteneingabefeld auszuführen. Wenn Sie beispielsweise/who
eingeben, werden alle Benutzer im aktuellen Kanal aufgelistet. Eine vollständige Liste der integrierten Schrägstrichbefehle finden Sie unterhttps://get.slack.help/hc/en-us/articles/201259356-Slash-commands.
Sie können eigene Slash-Befehle erstellen, die für Mitglieder Ihres Slack-Arbeitsbereichs nützlich sind. Wenn Sie den Befehl in Ihrem Arbeitsbereich installieren und aufrufen, können Sie Slack anweisen, eine Anforderung an ein von Ihnen geschriebenes Programm zu senden. Dieses Programm empfängt die Informationen von Slack und gibt eine Antwort zurück, die in Slack angezeigt wird. Sie können mehr über Slack-Slash-Befehle erfahren, indem SieAPI documentation lesen.
In diesem Tutorial erstellen Sie einen Slack-Schrägstrich-Befehl namens/slash
, der von einerFlask-App auf einem Ubuntu 16.04-Server unterstützt wird, und installieren diesen Befehl in Ihrem Slack-Arbeitsbereich. Wenn Sie fertig sind, werden durch Eingabe von/slash
in das Nachrichteneingabefeld Informationen an die Flask-App gesendet, die die Anforderung verarbeitet und eine kurze Nachricht an Slack zurücksendet, in der Sie darüber informiert werden, dass sie funktioniert hat.
Voraussetzungen
Um dieses Tutorial abzuschließen, benötigen Sie:
-
Ein Ubuntu 16.04-Server, der von folgendenthe Ubuntu 16.04 initial server setup guide eingerichtet wurde, einschließlich eines Sudo-Nicht-Root-Benutzers und einer Firewall.
-
Eine vorhandene Flask-Anwendung lief mit uWSGI hinter Nginx. Schließen Sie das TutorialHow To Serve Flask Applications with uWSGI and Nginx on Ubuntu 16.04 ab, um dies auf Ihrem Server zu konfigurieren.
-
Ein Entwicklungs-Slack-Arbeitsbereich mit der Berechtigung zum Installieren von Apps. Wenn Sie keinen haben, erstellen Sie einen beihttps://slack.com/create.
[[Schritt-1 - Erstellen und Installieren der Slack-App]] == Schritt 1 - Erstellen und Installieren der Slack-App
Bevor wir unseren Code schreiben, erstellen wir zunächst einSlack app, das Slack zusätzliche Funktionen bietet, und installieren es in einem Entwicklungs-Slack-Arbeitsbereich. Anschließend definieren wir den Befehl und geben die URL an, die der Befehl beim Aufrufen des Befehls anfordern soll.
Um eine Slack-App zu erstellen, besuchen Siehttps://api.slack.com/apps und klicken Sie auf die grüne SchaltflächeCreate New App. Geben Sie im angezeigten Formular die folgenden Details ein:
-
Geben Sie fürApp Name
DigitalOcean Slack slash command
ein. -
Wählen Sie fürDevelopment Slack Workspace Ihren Entwicklungsarbeitsbereich aus.
Klicken Sie dann auf die grüne SchaltflächeCreate App.
Klicken Sie nach dem Erstellen der App aufSlash Commands und dann auf die SchaltflächeCreate New Command. Sie sehen die folgende Seite:
In diesem Lernprogramm erstellen Sie einen Befehl mit dem Namen/slash
, mit dem Daten über HTTP-POST an eine Anforderungs-URL gesendet werden, diehttp://server_domain_or_IP/slash
lautet. Tragen Sie dazu folgende Informationen ein:
-
Füllen Sie das FeldCommand mit
/slash
aus. -
Geben Sie fürRequest URL
http://your_server_ip_or_domain/slash
ein. -
Geben Sie fürShort Description
DigitalOcean Slack slash command
ein.
Klicken Sie dann auf die grüne SchaltflächeSave, um die Erstellung des Schrägstrichbefehls abzuschließen.
Installieren Sie nun die App in Ihrem Arbeitsbereich, indem Sie auf den LinkInstall Appklicken. Drücken Sie die grüne TasteInstall App to Workspace. Drücken Sie dann die grüne TasteAuthorize.
Wir haben jetzt eine Slack-App im Slack-Entwicklungsarbeitsbereich erstellt und installiert. Der Befehl funktioniert jedoch erst, wenn wir eine Web-App erstellen, die den Schrägstrichbefehl verarbeitet. Bevor wir die App erstellen können, müssen wir Ihre Python-Umgebung konfigurieren.
[[Schritt-2 - Konfigurieren der Python-Umgebung]] == Schritt 2 - Konfigurieren der Python-Umgebung
Nach Abschluss des Lernprogramms fürHow To Serve Flask Applications with uWSGI and Nginx on Ubuntu 16.04befindet sich eine Flask-App in~/myproject/
. Dieses Verzeichnis enthält die folgenden Dateien und Verzeichnisse:
-
myproject.ini
-
myproject.py
-
wsgi.py
-
myprojectenv/
Wir ändern die Flask-App inmyproject.py
, um auf die vom Slack-Slash-Befehl gesendeten Daten zu reagieren und eine JSON-Antwort an Slack zurückzugeben.
DasAPI documentation for commands besagt, dass wir den Schrägstrichbefehl mit dem von Slack bereitgestellten Verifikationstoken validieren sollten, das dem Befehl zugeordnet ist.
Dieses Bestätigungstoken sollte geheim gehalten werden, daher speichern wir es in einer neuen Datei namens.env
Datei, die nicht unter Versionskontrolle steht. Wir werden das Paketpython-dotenv
verwenden, um die Schlüssel-Wert-Paare in.env
als Umgebungsvariablen zu exportieren, und wir werden inmyproject.py
auf diese Umgebungsvariablen zugreifen.
Aktivieren Sie zunächst die virtuelle Python-Umgebung, indem Sie Folgendes ausführen:
source myprojectenv/bin/activate
Um zu bestätigen, dass die virtuelle Umgebung aktiviert ist, sollte(myprojectenv)
auf der linken Seite der Bash-Eingabeaufforderung angezeigt werden. Geheimnisse wie das Verifikationstoken sollten nicht unter Versionskontrolle gespeichert werden. Um dies zu erreichen, verwenden wir das Paketpython-dotenv
, das die Geheimnisse als Umgebungsvariablen exportiert. Mitpip
installieren wir das Paketpython-dotenv
:
pip install python-dotenv
Erstellen Sie mit nano oder Ihrem bevorzugten Texteditor die Datei.env
:
nano .env
Holen Sie sich das Bestätigungstoken, indem Siehttps://api.slack.com/apps besuchen. Klicken Sie auf die AppDigitalOcean Slack slash command und dann aufBasic Information. Dann findeVerification Token.
Kopieren Sie den Wert für das Token und platzieren Sie ihn in der Datei.env
. Weisen Sie den Wert einer Umgebungsvariablen mit dem NamenVERIFICATION_TOKEN
zu:
~/myproject/.env
VERIFICATION_TOKEN=your_verification_token
Speichern Sie die Datei und beenden Sie den Editor.
Wenn Sie eine Flask-App entwickeln, soll der uWSGI-Server automatisch neu geladen werden, wenn Sie Änderungen an der App vornehmen. Öffnen Sie dazu zuerstmyproject.ini
in Ihrem Editor:
nano myproject.ini
Fügen Sie diese Zeile am Ende der Datei hinzu, um sicherzustellen, dass uWSGI automatisch neu geladen wird, wenn Sietouch
oder die Flask-App inmyproject.py
ändern
~/myproject/myproject.ini
...
touch-reload = myproject.py
Speichern Sie die Datei und beenden Sie den Editor.
Jetzt erstellen wir die Flask-App, die die vom Befehl slash gesendeten Informationen empfängt und verarbeitet und eine entsprechende Antwort an Slack zurückgibt.
[[Schritt-3 -–- Erstellen der Kolben-App]] == Schritt 3 - Erstellen der Kolben-App
Wenn wir den Befehl/slash
in Slack aufrufen, sendet Slack eine Anfrage an unseren Server. Wir haben den Befehl so konfiguriert, dass er die URL/slash
trifft. Daher ändern wir die von uns erstellte Flask-App, um auf diesen Endpunkt zu reagieren.
Öffnen Siemyproject.py
in Ihrem Editor:
nano myproject.py
Entfernen Sie den Inhalt der Datei. Wir erstellen eine neue App von Grund auf.
Fügen Sie diesen Code hinzu, der Flask importiert und zusätzliche Module zum Verarbeiten von JSON-Daten und zum Erstellen von Webanforderungen lädt:
~/myproject/myproject.py
#!/usr/bin/env python
from flask import Flask, jsonify, request
Fügen Sie dann diesen Code hinzu, der das Moduldotenv
lädt. liest den Inhalt der von Ihnen erstellten.env
-Datei. Lädt seinen Inhalt in Umgebungsvariablen und ruft dann das Verifikationstoken aus der Umgebung ab und speichert es in der Variablenverification_token
:
~/myproject/myproject.py
...
import os
import dotenv
dotenv_path = os.path.join(os.path.dirname(__file__), '.env')
dotenv.load_dotenv(dotenv_path)
verification_token = os.environ['VERIFICATION_TOKEN']
Fügen Sie nun diesen Code hinzu, um die Flask-App so zu konfigurieren, dass sie auf den Schrägstrichbefehl reagiert, indem Sie eine Textantwort senden, die besagt, dass der Schrägstrichbefehl von DigitalOcean erfolgreich ist.
~/myproject/myproject.py
...
app = Flask(__name__)
@app.route('/slash', methods=['POST'])
def slash():
if request.form['token'] == verification_token:
payload = {'text': 'DigitalOcean Slack slash command is successful!'}
return jsonify(payload)
if __name__ == '__main__':
app.run()
Speichern Sie die Datei und beenden Sie den Editor.
Starten Sie den systemd-Dienst vonmyproject
neu, um sicherzustellen, dass die neueste Version Ihres Codes ausgeführt wird:
sudo systemctl restart myproject
Ändern wir nun die Nginx-Konfiguration, um unseren Schrägstrich-Befehl zu unterstützen.
[[Schritt-4 -–- Konfigurieren von Nginx, um den Befehl zu bedienen]] == Schritt 4 - Konfigurieren von Nginx für die Ausführung des Befehls
Da unsere Anforderungs-URLhttp://server_domain_or_IP/slash
lautet, müssen wir den Wert vonlocation
in unserem Nginx-Serverblock von/
in/slash
ändern.
Öffnen Sie die Datei/etc/nginx/sites-available/myproject
in Ihrem Editor:
sudo nano /etc/nginx/sites-available/myproject
Ändern Sie den Wert fürlocation
von/
in/slash
:
/etc/nginx/sites-available/myproject
...
location /slash {
include uwsgi_params;
uwsgi_pass unix:/home/sammy/myproject/myproject.sock;
}
}
Speichern Sie die Datei und beenden Sie den Editor.
Überprüfen Sie anschließend die Nginx-Konfigurationsdatei auf Syntaxfehler:
sudo nginx -t
Wenn die Nginx-Konfigurationsdatei keine Syntaxfehler enthält, starten Sie den Nginx-Dienst neu:
sudo systemctl restart nginx
Besuchen Sie Ihren Entwicklungs-Slack-Arbeitsbereich und geben Sie/slash
in einen beliebigen Kanal ein. Sie sollten die folgende Antwort sehen:
Wenn Sie eine Meldung erhalten, dass der Befehl fehlgeschlagen ist, überprüfen Sie den Code inmyproject.py
auf Syntaxfehler oder -probleme. Dann versuche es nochmal.
Deaktivieren Sie die virtuelle Python-Umgebung, sobald Sie mit der Entwicklung Ihres Befehls fertig sind, damit zukünftige Python-Befehle den System-Python-Interpreter verwenden:
deactivate
Sie haben jetzt erfolgreich eine Flask-App erstellt, die Informationen vom Schrägstrichbefehl/slash
empfängt und eine Antwort an Slack zurückgibt.
[.note] #Um sicherzustellen, dass die Kommunikation zwischen Ihrem Server und Slack sicher ist, verschlüsseln Sie die Verbindung für den Befehl slash mit HTTPS für die Anforderungs-URL. Sie können dies mitinstalling a free SSL certificate issued by Let’s Encrypt on the Nginx server tun. Wenn Sie fertig sind, müssen Sie die URL für Ihre Slack-App ändern undhttp://
inhttps://
ändern.
#
Fazit
In diesem Tutorial haben Sie einen Slack-Slash-Befehl implementiert, indem Sie eine Flask-App eingerichtet haben, die von einem uWSGI-Anwendungsserver und einem Nginx-Reverse-Proxy-Server bereitgestellt wird.
Nachdem Sie die Grundlagen zum Erstellen von Schrägstrichen kennen, können Sie jeden Schrägstrichbefehl implementieren, den Ihr Team benötigt. Sie können Befehle erstellen, die Daten aus Datenbanken abrufen, mit anderen APIs interagieren oder sogar Befehle zum Bereitstellen von Code erstellen.