J'ai essayé de créer un slackbot interactif avec des boutons en python en utilisant SW. S'il est écrit par d'autres personnes, c'est généralement assez compliqué avec node.js et je ne suis pas bon en javascript, donc je veux éviter autant que possible et le faire avec python! J'ai donc essayé de le rendre aussi simple que possible en utilisant le client flask + heroku + slack. Le bot Slack avec un bouton a la réputation d'être gênant et populaire, donc je pense que cela peut être fait assez rapidement en se référant à cet article.
Le code est disponible ici [https://github.com/sh-tatsuno/slackbot_python_server).
--Installation de pyenv, pyenv-virtualenv
Veuillez les préparer à l'avance.
C'est assez compliqué, mais faisons de notre mieux.
--Création d'une application Slack Connectez-vous à ici et créez une nouvelle application Slack. Le nom de l'application peut être n'importe quoi, mais pour Workspace, spécifiez l'équipe avec laquelle vous souhaitez utiliser le bot.
Allez ensuite aux informations de base. À ce stade, veuillez enregistrer le jeton de vérification suivant.
Ensuite, nous allons définir les paramètres du bot. Définissez les messages interactifs et les autorisations suivants.
Paramètres des messages interactifs Spécifiez l'URL vers laquelle rediriger lorsque vous appuyez sur le bouton. Cette fois, nous redirigerons vers'slack / json_html 'sur heroku.
Réglage des autorisations Définissons les autorisations requises à partir de l'étendue près du centre de la page. Est-ce le système d'envoi de messages pour le moment? Ensuite, émettons un jeton OAuth à partir de jetons pour votre espace de travail en haut de la page. Veuillez garder ceci aussi.
Maintenant, faisons le côté serveur à partir d'ici.
--Création d'un environnement python
Créez un projet et installez un environnement virtualenv. Les bibliothèques nécessaires seront également installées à ce moment.
$ 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
--Créer un fichier Proc
$ echo web: gunicorn main:app --log-file=- > Procfile
--Créer main.py
Tout d'abord, définissez le client slack et le serveur flask. SLACK_BOT_TOKEN et SLACK_VERIFICATION_TOKEN seront définis plus tard dans heroku comme variables d'environnement.
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__)
Ensuite, définissez les pièces jointes pour la publication du bouton. À ce stade, définissez chaque élément du bouton dans la partie action. Il semble que vous puissiez saisir l'identifiant de votre choix pour call_back_id.
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": "champignon",
"value": "kinoko",
"type": "button"
},
{
"name": "choco2",
"text": "pousses de bambou",
"value": "takenoko",
"type": "button"
}
]
}
]
Définissez la partie racine. Lorsqu'une demande arrive avec GET, slack_client.api_call est appelé et un message boutonné est publié sur le canal général. L'élément défini précédemment est entré dans attachments_json.
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="Quelle école êtes-vous?",
attachments=attachments_json
)
return make_response("", 200)
Enfin, créez la partie de redirection lorsque vous appuyez sur le bouton. Puisque form_json ["actions"] [0] ["value"] contient la valeur sélectionnée par le bouton précédent, il se branche en fonction de cette valeur et renvoie l'instruction.
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 = "Très bien, alors c'est une guerre"
else:
response_text = "Très bien, alors allié"
response = slack_client.api_call(
"chat.postMessage",
channel="#general",
text=response_text,
attachments=[]
)
return make_response("", 200)
Ceci termine main.py.
--git paramètres heroku
Configurez git.
$ git init
$ git add .
$ git commit -m "first commit"
Créez et configurez heroku. En plus de créer un projet heroku, définissez les variables d'environnement du Token obtenu précédemment dans Slack.
$ heroku login
$ heroku create <app-name>
$ heroku config:set SLACK_BOT_TOKEN = "<Jeton OAuth obtenu plus tôt>" SLACK_VERIFICATION_TOKEN = "<Jeton de vérification acquis plus tôt>" --app "<app-name>"
Poussez le projet vers heroku avec la commande suivante.
$ git push heroku master
Maintenant, envoyez une demande à l'application donnée à heroku avec la commande suivante et vérifiez l'opération.
$ curl https://<heroku apps>.herokuapp.com/
À ce stade, si le bouton est affiché sur général et qu'il fonctionne, il réussit.
Au début, je l'ai fait avec le slackbot de python et je me suis retrouvé coincé dans un pot. J'ai eu du mal avec slackclient car il n'y avait pas beaucoup d'articles en japonais, mais quand je l'ai recherché, il semble qu'il puisse être sélectionné par une liste et que diverses options puissent être faites, donc cela semble assez pratique (probablement le même que js). ). Veuillez essayer.
Recommended Posts