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].
--Installation von pyenv, pyenv-virtualenv
Bitte bereiten Sie diese im Voraus vor.
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. 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.
Als nächstes nehmen wir Einstellungen für den Bot vor. Legen Sie die folgenden interaktiven Nachrichten und Berechtigungen fest.
Einstellungen für interaktive Nachrichten Geben Sie die URL an, zu der umgeleitet werden soll, wenn Sie auf die Schaltfläche klicken. Dieses Mal werden wir auf heroku zu'slack / json_html 'umleiten.
Berechtigungseinstellung Legen Sie die erforderlichen Berechtigungen im Bereich nahe der Mitte der Seite fest. Ist es vorerst ein Nachrichtensystem? Als Nächstes geben wir oben auf der Seite ein OAuth-Token aus Tokens für Ihren Arbeitsbereich aus. Bitte behalten Sie dies auch bei.
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>"
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.
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.
Recommended Posts