7 votes

Bot Slack, enregistrement, clic sur le bouton de message

J'essaie de construire un bot Slack en Python. Je veux que mon robot envoie un message avec des boutons interactifs, et qu'en fonction de ceux sur lesquels l'utilisateur clique, il exécute une fonction en Python. Je n'arrive pas à trouver comment faire cela.

Mon code ressemble maintenant à ceci :

message = "message"
attachments = [{"text": "message",
                "attachment_type": "default",
                "actions": [
                    {
                        "name": "list",
                        "text": "message",
                        "type": "select",
                        "options": [
                        {
                            "name": "1",
                            "text": "1",
                            "type": "button",
                            "value": "1"
                        },
                        {
                            "name": "1",
                            "text": "1",
                            "type": "button",
                            "value": "2"
                        }
                    ]}]}]

sc.api_call("chat.postMessage",
             channel=channel,
             text=message,
             attachments=attachments)

Cela me donne un message avec deux boutons. Je veux cependant exécuter une fonction en fonction de la réponse donnée par l'utilisateur.

Disons donc que s'ils cliquent sur 1, la fonction1() s'exécute et que s'ils cliquent sur 2, la fonction2() s'exécute.

La documentation de l'API de Slack est assez confuse sur la manière de procéder, et le "listener" qu'ils fournissent rtm_read() ne détecte pas le clic de l'utilisateur sur l'un des boutons.

Si quelqu'un pouvait m'aider, ce serait très apprécié.

6voto

blakev Points 692

Lorsque vous cliquez sur un bouton dans une conversation Slack, cela revient à appliquer un callback. Le rappel est envoyé à un endroit que vous définissez dans les paramètres de l'application, puis c'est CE service qui décide de ce qu'il faut faire ensuite avec les informations données.

  1. Vous devez d'abord créer une nouvelle application Slack .

  2. Une fois qu'elle est créée, cliquez sur l'application pour accéder à sa page d'accueil. Informations de base page.

  3. De là, sur le côté gauche sous Caractéristiques trouver "Composants interactifs".

  4. Enregistrez les deux URL qui recevront les données POST provenant d'un clic sur un bouton.

  5. Interprétez les données et continuez :)

Dans la documentation de Slack, vous pouvez trouver leur marche à suivre aquí .

Vous allez avoir besoin d'un serveur web en fonctionnement, quelque chose de simple en Flacon fonctionnera très bien.

from flask import Flask, request

app = Flask('SlackReceiver')

@app.route('/slack/message', methods=['POST'])
def incoming_slack_message():
    req = request.get_json()
    # .. do something with the req ..
    return 'action successful'

@app.route('/slack/options', methods=['POST', 'OPTIONS'])
def incoming_slack_options():
    # .. idk ..
    return 'ok'

if __name__ == '__main__':
    app.run('0.0.0.0', 8088, debug=False)

...

Enfin, selon la documentation, vous devez héberger cette application sur un serveur web avec un certificat HTTPS valide configuré. La configuration d'un serveur est hors de portée de cette question, la façon la plus simple d'obtenir des certificats HTTPS gratuits (valides) est avec Let's Encrypt et certbot .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X