So schreiben Sie einen Slash-Befehl mit Flask und Python 3 unter Ubuntu 16.04

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.

Sie werden diese Flask-App mit einemuWSGI-Anwendungsserver bereitstellen undNginx als Reverse-Proxy verwenden.

Voraussetzungen

Um dieses Tutorial abzuschließen, benötigen Sie:

[[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 NameDigitalOcean 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:

Page for creating new command.

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 URLhttp://your_server_ip_or_domain/slash ein.

  • Geben Sie fürShort DescriptionDigitalOcean 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.

The verification 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 Moduldotenvlä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 vonmyprojectneu, 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:

Slack slash command is successful!

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/slashempfä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.