So erstellen Sie einen einfachen Slackbot: eine Anleitung für Anfänger

Update: Code und Tutorial wurden am 28. Juni aktualisiert, um Änderungen an der Slack-API widerzuspiegeln .

Slackbots: Warum sie benutzen?

Bevor wir uns dem Tutorial-Teil dieses Beitrags zuwenden, werfen wir einen Blick darauf, warum dies ein würdiges Projekt und Werkzeug sein kann.

Slack ist ein zunehmend beliebtes Tool für die teamweite Kommunikation. Es wurde um Plugins für andere weit verbreitete Projektmanagement-Tools wie JIRA, Google Drive und ähnliche erweitert. Jeder schlaffe Benutzer weiß - je mehr Sie aus dem Gespräch heraus tun können, desto besser.

Häufige Verwendungszwecke für einen Slackbot reichen von einem einfachen Benachrichtiger, wenn eine Aufgabe abgeschlossen ist (z. B. ein Testbuild oder wenn Ihr Mittagessen fertig ist) bis zu interaktiven, knopfbasierten Bots, die Befehle nach Belieben des Benutzers ausführen. Sie können Abfragemechanismen, Konversations-Bots und mehr erstellen.

Einrichten einer Python-Programmierumgebung

Wenn Sie ein Windows-Benutzer sind und Python noch nicht verwendet haben, müssen Sie es installieren. Linux / Mac Benutzer: Unix kommt mit Python!

Starten Sie nach der Installation Ihr Terminal und geben Sie pythonoder python3(wenn Sie mehrere Installationen haben) ein, um sicherzustellen, dass es funktioniert und vorhanden ist.

Überprüfen Sie auch, ob Sie einen guten Texteditor für Code haben: Erhaben und Atom sind eine gute Wahl.

Optional: Es kann auch nützlich sein, in einer virtuellen Umgebung zu arbeiten. Dies ist eine gute Vorgehensweise, wenn Sie viele Abhängigkeiten haben.

pip install virtualenv virtualenv tutorial source tutorial/bin/activate

Sie sollten auch das GitHub-Repo-Tutorial aufteilen und auf Ihren lokalen Computer klonen, da wir diesen Code als Framework für dieses Tutorial verwenden.

Gehen Sie dazu zum Repo und klicken Sie Forkoben rechts. Das gegabelte Repo sollte / slackbot-tutorial sein . Klicken Sie auf den grünen Clone or downloadKnopf rechts unter der Statistikleiste und kopieren Sie die URL. Kehren Sie zum Terminal zurück, um das Repository zu klonen:

cd Desktop/ git clone //github.com/yourusername/slackbot-tutorial.git cd slackbot-tutorial/ sublime . (or open your text editor and open this directory)

Slack Apps

Es gibt zwei Möglichkeiten, um Ihren Slackbot zu erstellen: Standalone-Bots oder Slack-Apps. Apps ermöglichen in Zukunft einen größeren Funktionsumfang und sind Slacks empfohlene Route zum Erstellen eines Bot-Benutzers.

Gehen Sie zu //api.slack.com/apps und klicken Sie Create New Appoben rechts. Geben Sie ihm einen Namen und wählen Sie einen Arbeitsbereich aus, in dem Sie einen Kanal zum Testen Ihres Bots erstellen können. Sie können Ihren Bot später jederzeit für einen anderen Arbeitsbereich neu konfigurieren oder ihn sogar im Slack App-Verzeichnis veröffentlichen.

Ich empfehle, einen # Test-Kanal in einem Arbeitsbereich zu erstellen, den Sie nur für Entwicklungszwecke erstellen, oder einen Kanal mit relativ wenigen Benutzern, denen es nichts ausmacht, wenn Sie etwas da draußen testen.

Das erste, was Sie tun möchten, ist das Bot-Token zu erhalten. Wenn Sie zur obigen Seite gelangen, klicken Sie auf Bots. Fügen Sie einige Bereiche hinzu. Diese bestimmen, welche Berechtigungen der Bot-Benutzer Ihrer App haben wird. Um zu beginnen, chatten: schreibenundim: schreibesind wahrscheinlich genug.

Um Ihre Token tatsächlich zu erhalten, gehen Sie zur OAuth & Permissionslinken Seitenleiste.

Hier können Sie Install the App to the Workspacedie erforderlichen Token erstellen . Als Faustregel beginnen Bot-Token mitxoxb-.

Sie möchten auch das Zündgeheimnis , das sich unter Grundlegende Informationen> App-Anmeldeinformationen befindet.

Als Ihr Bot fungieren

Jetzt haben Sie die erforderlichen Anmeldeinformationen, um API-Aufrufe durchzuführen und als Ihr Bot zu fungieren. Um dies zu testen, starten Sie ein Terminal und führen Sie dieses aus (mit dem richtigen Token und Kanalnamen):

curl -X POST \ -H 'Authorization: Bearer xoxb-your-token' \ -H 'Content-type: application/json;charset=utf-8' \ --data '{"channel":"#test","text":"Hello, Slack!"}' \ //slack.com/api/chat.postMessage

Wenn Sie zu diesem Kanal in Ihrem Arbeitsbereich gehen, sollten Sie jetzt eine Nachricht von Ihrem Bot sehen! Sie haben gerade eine HTTP-POST-Anfrage gestellt und einen Server gebeten, irgendwo eine Nachricht zu posten.

Bot programmieren

Wir wollen das oben genannte programmatisch tun. Es gibt verschiedene Möglichkeiten, einen Slackbot einzurichten. Ich werde Folgendes behandeln:

  • Wird regelmäßig (nach einem Zeitplan) ausgelöst, um etwas zu sagen
  • / slash Befehle

Für den zweiten muss ein Server ausgeführt werden, für den ersten nicht.

Geplante Nachrichten

Angenommen, Sie möchten regelmäßig irgendwo eine Nachricht senden - vielleicht jeden Montagmorgen. Gehen Sie zu dem Texteditor, in dem Sie geöffnet haben slackbot-tutorial.

Sie sollten eine Datei sehen scheduled.py. Schauen Sie mal: sendMessageist eine Funktion, die den API-Aufruf auslöst, um eine Nachricht zu lockern und zu veröffentlichen. Unten sehen Sie die Hauptmethode: Was wird ausgeführt, wenn Sie das Skript ausführen? Hier sehen Sie einige Dinge zu beachten:

  • SLACK_BOT_TOKENwird gezogen von os.environ['SLACK_BOT_TOKEN']- wie? Führen Sie export SLACK_BOT_TOKEN="xoxb-your-token"in Ihrem Terminal aus, um diese Variable festzulegen.
  • Hier wird ein Scheduler verwendet, und es gibt eine Endlosschleife, die im Scheduler nach Ereignissen sucht. Standardmäßig habe ich hier festgelegt, dass die sendMessageFunktion jede Minute aufgerufen wird.

Um dies zu testen, kehren Sie zu dem Terminal zurück, in dem Sie sich im slackbot-tutorialVerzeichnis befinden, und führen Sie es aus

export SLACK_BOT_TOKEN="xoxb-your-token" python scheduled.py

You should see the log messages print. Make sure you’ve changed channel=#test in the code to your test channel name (if different) and added your bot (in the slack channel, type /invite @botname. Let it run for a couple minutes and watch the messages show up on Slack!

This is, of course, a super basic implementation of a scheduled message sender — you can actually do this just with slackbot /remind #test “Hello, Slack!” every Monday at 9am.

The true power here is that you can substitute in any function for sendMessage, leveraging the power of interfacing with external services through APIs, doing math, etc and then constructing a message to post.

Slash Commands

This one requires a little more setup — go back to your app settings > Slash Commands. Create a new slash command: for example, /test. For the request URL, you’ll need to either deploy this web server (I use Heroku), or run a local ngrok instance to test it. The latter will run it locally, and is best for testing. You can brew install ngrok or get it from here.

In the starter code repo, look for slashCommand.py to start understanding this method. To start the server, run python server.py. The Request URL to put in Slack will be given by your ngrok instance and the @app.route in your code — it would be something like //a1234b5cde6f.ngrok.io/slack/test (the bold part comes from the route defined in the code). You should be able to test the slash commands in your Slack workspace. From the tutorial code, try /test.

Moving Forward

Now you have a very basic slackbot that either operates on a command or runs every so often. Be creative with how you use it! Think about what else you can link this skeleton to to make it more useful.

Other ways your bot might respond

  1. Actions/responses could be triggered by mentions or certain phrases. This requires running a server and listening the messages somewhere.
  2. You bot could be conversational, and might contribute to threads. Check out some NLP to get started on having intelligible conversation! Word2Vec + TensorFlow or Keras might be a place to start. DialogFlow is also great.
  3. Link it up with some other APIs. Maybe you want to be able to interact with a Google Sheet and run some calculations. You might want to send other users a message based on some actions. Integrate buttons. Perhaps you want to trigger messages based on something else.