Créez un Slackbot simple avec un bouton interactif en python

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).

supposition

--Installation de pyenv, pyenv-virtualenv

Veuillez les préparer à l'avance.

Préparation sur le mou

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. スクリーンショット 2017-09-17 23.22.29.png 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.

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

Ensuite, nous allons définir les paramètres du bot. Définissez les messages interactifs et les autorisations suivants. スクリーンショット 2017-09-17 23.12.32.png

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

Créer un projet

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>"

Vérification du déploiement et du fonctionnement

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. スクリーンショット 2017-09-18 0.29.03.png

Épilogue

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.

Les références

Recommended Posts

Créez un Slackbot simple avec un bouton interactif en python
Créer un bookmarklet en Python
Faites une loterie avec Python
Essayez de créer un jeu simple avec Python 3 et iPhone
Qu'est-ce que Dieu? Créez un chatbot simple avec python
Faisons une interface graphique avec python.
Créer un système de recommandation avec python
[Python] Générer un mot de passe avec Slackbot
Implémentation d'un algorithme simple en Python 2
Faisons un graphe avec python! !!
Exécutez un algorithme simple en Python
J'ai fait un jeu de frappe simple avec tkinter de Python
Livre en spirale en Python! Python avec un livre en spirale! (Chapitre 14 ~)
Créer un fichier power simple avec Python
Faisons un jeu de shiritori avec Python
Un client HTTP simple implémenté en Python
Rubyist a essayé de créer une API simple avec Python + bouteille + MySQL
Essayez de dessiner une animation simple en Python
Créer une application GUI simple en Python
Créez un simple OMR (lecteur de feuille de marque) avec Python et OpenCV
Faisons la voix lentement avec Python
Faisons un langage simple avec PLY 1
Ecrire une méthode de cupidité simple en Python
Ecrire un plugin Vim simple en Python 3
Créez un framework Web avec Python! (1)
Faisons un calcul de combinaison avec Python
Créez une application de bureau avec Python avec Electron
Faisons un bot Twitter avec Python!
Créez un framework Web avec Python! (2)
J'ai fait un simple blackjack avec Python
Configurer un serveur HTTPS simple avec Python 3
[Python] Récupérez les fichiers dans le dossier avec Python
Créer un bot Twitter Trend avec heroku + Python
Créez un simple générateur d'images par points avec Flask
Créer un environnement virtuel avec conda avec Python
Démarrez un serveur Web Python simple avec Docker
Copiez la liste en Python
Essayez de créer un code de "décryptage" en Python
Créez un jeu Janken en une seule ligne (python)
Notes de programme simples Pub / Sub en Python
Créer un modèle d'investissement dynamique simple en Python
Remplaçons UWSC par Python (5) Faisons un robot
Travaillez dans un environnement virtuel avec Python virtualenv.
Créez un tracé de R semblable à un joyplot avec python
Créer une nouvelle page en confluence avec Python
Essayez de créer un groupe de dièdre avec Python
Configurer un serveur SMTP simple en Python
Liste de tâches simple créée avec Python + Django
GRPC simple en Python
Créer un bouton Nyan
Développement Slackbot en Python
Mettez Docker dans Windows Home et exécutez un serveur Web simple avec Python
J'ai fait une application d'envoi de courrier simple avec tkinter de Python
Combinez des chaînes répétitives en une seule avec des expressions régulières Python.
Comment convertir / restaurer une chaîne avec [] en python
Essayez de créer un module Python en langage C
Ecrire un programme de dynamique moléculaire super simple en python
Je veux faire la transition avec un bouton sur le ballon
Faisons un outil de veille de commande avec python