Erstellen Sie einen einfachen Slackbot mit einer interaktiven Schaltfläche in Python

Ich habe versucht, mit SW einen interaktiven Slackbot mit Schaltflächen in Python zu erstellen. Wenn es von anderen Leuten geschrieben wird, ist es normalerweise ziemlich kompliziert mit node.js und ich bin nicht gut in Javascript, also möchte ich es so weit wie möglich vermeiden und es mit Python machen! Also habe ich versucht, es mit flask + heroku + slack client so einfach wie möglich zu machen. Der Slack-Bot mit einem Knopf hat den Ruf, lästig und beliebt zu sein, daher denke ich, dass dies relativ schnell möglich ist, wenn auf diesen Artikel verwiesen wird.

Der Code ist hier verfügbar [https://github.com/sh-tatsuno/slackbot_python_server].

Annahme

--Installation von pyenv, pyenv-virtualenv

Bitte bereiten Sie diese im Voraus vor.

Vorbereitung auf Spiel

Das ist ein ziemlicher Aufwand, aber lassen Sie uns unser Bestes geben.

--Eine lockere App erstellen Melden Sie sich bei hier an und erstellen Sie eine neue Slack-App. スクリーンショット 2017-09-17 23.22.29.png Der App-Name kann beliebig sein. Geben Sie für Workspace jedoch das Team an, mit dem Sie den Bot verwenden möchten.

Gehen Sie dann zu den grundlegenden Informationen. Speichern Sie zu diesem Zeitpunkt das folgende Bestätigungstoken.

スクリーンショット 2017-09-17 23.14.08.png

Als nächstes nehmen wir Einstellungen für den Bot vor. Legen Sie die folgenden interaktiven Nachrichten und Berechtigungen fest. スクリーンショット 2017-09-17 23.12.32.png

スクリーンショット 2017-09-17 23.38.11.png

Ein Projekt erstellen

Lassen Sie uns nun die Serverseite von hier aus erstellen.

--Erstellen einer Python-Umgebung

Erstellen Sie ein Projekt und installieren Sie eine virtuelle Umgebung. Zu diesem Zeitpunkt werden auch die erforderlichen Bibliotheken installiert.

$ mkdir slackbot_python_server
$ cd slackbot_python_server
$ pyenv virtualenv 3.6.2 heroku_python_3.6.2
$ pyenv local heroku_python_3.6.2
$ pip install Flask gunicorn slackclient
$ echo .python-version >> .gitignore
$ pip freeze > requirements.txt

--Erstellen Sie ein Procfile

$ echo web: gunicorn main:app --log-file=- > Procfile

--Erstelle main.py

Definieren Sie zunächst den Slack-Client und den Flask-Server. SLACK_BOT_TOKEN und SLACK_VERIFICATION_TOKEN werden später in Heroku als Umgebungsvariablen festgelegt.

main.py


from flask import Flask, request, make_response, Response
import os
import json

from slackclient import SlackClient


# Your app's Slack bot user token
SLACK_BOT_TOKEN = os.environ.get("SLACK_BOT_TOKEN")
SLACK_VERIFICATION_TOKEN = os.environ.get("SLACK_VERIFICATION_TOKEN")

# Slack client for Web API requests
slack_client = SlackClient(SLACK_BOT_TOKEN)

# Flask webserver for incoming traffic from Slack
app = Flask(__name__)

Definieren Sie als Nächstes die Anhänge für den Schaltflächenpfosten. Legen Sie zu diesem Zeitpunkt jedes Element der Schaltfläche im Aktionsteil fest. Es scheint, dass Sie eine beliebige ID für call_back_id eingeben können.

main.py


# your attachment
attachments_json = [
    {
        "fallback": "Upgrade your Slack client to use messages like these.",
        "color": "#258ab5",
        "attachment_type": "default",
        "callback_id": "the_greatest_war",
        "actions": [
            {
                "name": "choco1",
                "text": "Pilz",
                "value": "kinoko",
                "type": "button"
            },
            {
                "name": "choco2",
                "text": "Bambussprossen",
                "value": "takenoko",
                "type": "button"
            }
        ]
    }
]

Stellen Sie den Wurzelteil ein. Wenn eine Anfrage mit GET eingeht, wird slack_client.api_call aufgerufen und ein geknöpfter Beitrag wird auf dem allgemeinen Kanal veröffentlicht. Das zuvor festgelegte Element wird in attachments_json eingegeben.

main.py


#route
#when you access such as curl command, slackbot post interactive message
@app.route("/", methods=["GET"])
def index():
    slack_client.api_call(
        "chat.postMessage",
        channel="#general",
        text="Welche Schule bist du?",
        attachments=attachments_json
    )
    return make_response("", 200)

Erstellen Sie abschließend den Umleitungsteil, wenn Sie die Taste drücken. Da form_json ["Aktionen"] [0] ["Wert"] den mit der vorherigen Schaltfläche ausgewählten Wert enthält, verzweigt es basierend auf diesem Wert und gibt die Anweisung zurück.

main.py


#redirect from button
@app.route("/slack/json_html", methods=["POST"])
def json_html():

    # Parse the request payload
    form_json = json.loads(request.form["payload"])

    val = form_json["actions"][0]["value"]
    if val == "kinoko":
        response_text = "Also gut, dann ist es ein Krieg"
    else:
        response_text = "Also gut, dann Verbündeter"
    response = slack_client.api_call(
        "chat.postMessage",
        channel="#general",
        text=response_text,
        attachments=[]
    )

    return make_response("", 200)

Damit ist main.py abgeschlossen.

Git einrichten.

$ git init 
$ git add .
$ git commit -m "first commit"

Heroku erstellen und konfigurieren. Legen Sie zusätzlich zum Erstellen eines Heroku-Projekts die Umgebungsvariablen des zuvor in Slack erhaltenen Tokens fest.

$ heroku login
$ heroku create <app-name>
$ heroku config:set SLACK_BOT_TOKEN = "<OAuth Token früher erhalten>" SLACK_VERIFICATION_TOKEN = "<Verifizierungs-Token, das zuvor erworben wurde>"  --app "<app-name>"

Bereitstellungs- und Betriebsprüfung

Schieben Sie das Projekt mit dem folgenden Befehl nach Heroku.

$ git push heroku master

Senden Sie nun mit dem folgenden Befehl eine Anfrage an die App, die an Heroku gesendet wurde, und überprüfen Sie den Vorgang.

$ curl https://<heroku apps>.herokuapp.com/

Zu diesem Zeitpunkt ist die Schaltfläche erfolgreich, wenn sie auf "Allgemein" gesetzt ist und funktioniert. スクリーンショット 2017-09-18 0.29.03.png

Nachwort

Zuerst habe ich es mit Pythons Slackbot gemacht und bin in einem Topf stecken geblieben. Ich hatte Schwierigkeiten mit slackclient, weil es nicht viele Artikel auf Japanisch gab, aber als ich es nachgeschlagen habe, scheint es, dass es in einer Liste ausgewählt und verschiedene Optionen ausgewählt werden können, so dass es ziemlich praktisch zu sein scheint (wahrscheinlich dasselbe wie js). ). Bitte probieren Sie es aus.

Verweise

Recommended Posts

Erstellen Sie einen einfachen Slackbot mit einer interaktiven Schaltfläche in Python
Erstellen Sie ein Lesezeichen in Python
Machen Sie eine Lotterie mit Python
Versuchen Sie, ein einfaches Spiel mit Python 3 und iPhone zu erstellen
Was ist Gott? Erstelle einen einfachen Chatbot mit Python
Lassen Sie uns eine GUI mit Python erstellen.
Erstellen Sie ein Empfehlungssystem mit Python
[Python] Generiere ein Passwort mit Slackbot
Implementierung eines einfachen Algorithmus in Python 2
Lassen Sie uns ein Diagramm mit Python erstellen! !!
Führen Sie einen einfachen Algorithmus in Python aus
Ich habe ein einfaches Tippspiel mit tkinter of Python gemacht
Spiralbuch in Python! Python mit einem Spiralbuch! (Kapitel 14 ~)
Erstellen einer einfachen Power-Datei mit Python
Lassen Sie uns mit Python ein Shiritori-Spiel machen
Ein einfacher HTTP-Client, der in Python implementiert ist
Rubyist hat versucht, eine einfache API mit Python + Flasche + MySQL zu erstellen
Versuchen Sie, eine einfache Animation in Python zu zeichnen
Erstellen Sie eine einfache GUI-App in Python
Erstellen Sie mit Python und OpenCV ein einfaches OMR (Mark Sheet Reader)
Lassen Sie uns mit Python langsam sprechen
Lassen Sie uns mit PLY 1 eine einfache Sprache erstellen
Schreiben Sie eine einfache Giermethode in Python
Schreiben Sie ein einfaches Vim-Plugin in Python 3
Erstellen Sie ein Webframework mit Python! (1)
Lassen Sie uns eine Kombinationsberechnung mit Python durchführen
Erstellen Sie eine Desktop-App mit Python mit Electron
Machen wir einen Twitter-Bot mit Python!
Erstellen Sie ein Webframework mit Python! (2)
Ich habe mit Python einen einfachen Blackjack gemacht
Richten Sie mit Python 3 einen einfachen HTTPS-Server ein
[Python] Holen Sie sich die Dateien mit Python in den Ordner
Machen Sie Twitter Trend Bot mit Heroku + Python
Erstellen Sie mit Flask einen einfachen Punktbildgenerator
Erstellen Sie eine virtuelle Umgebung mit conda in Python
Starten Sie mit Docker einen einfachen Python-Webserver
Kopieren Sie die Liste in Python
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Mach ein Janken-Spiel in einer Zeile (Python)
Einfache Pub / Sub-Programmhinweise in Python
Erstellen Sie in Python ein einfaches Momentum-Investmentmodell
Ersetzen wir UWSC durch Python (5) Machen wir einen Roboter
Arbeiten Sie in einer virtuellen Umgebung mit Python virtualenv.
Machen Sie mit Python eine Joyplot-ähnliche Handlung von R.
Erstellen Sie eine neue Seite im Zusammenfluss mit Python
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Richten Sie einen einfachen SMTP-Server in Python ein
Einfache Aufgabenliste, erstellt mit Python + Django
Einfacher gRPC in Python
Machen Sie einen Nyan-Knopf
Slackbot-Entwicklung in Python
Stellen Sie Docker in Windows Home und führen Sie einen einfachen Webserver mit Python aus
Ich habe eine einfache Mail-Sendeanwendung mit tkinter von Python erstellt
Kombinieren Sie sich wiederholende Zeichenfolgen mit regulären Python-Ausdrücken zu einer.
So konvertieren / wiederherstellen Sie einen String mit [] in Python
Versuchen Sie, ein Python-Modul in C-Sprache zu erstellen
Schreiben Sie ein super einfaches molekulardynamisches Programm in Python
Ich möchte mit einem Knopf am Kolben übergehen
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen