Dans le domaine de l’hébergement de haute performance et des outils de développement polyvalents, Kinsta se distingue comme une plateforme de premier plan pour WordPress, les applications, les bases de données et même l’hébergement gratuit de sites statiques.
Slack, réputé pour ses commandes Slash, s’intègre parfaitement aux applications et services hébergés par Kinsta, ce qui permet aux utilisateurs d’automatiser des tâches et d’améliorer considérablement leur efficacité.
Ce guide explique comment établir une communication en temps réel entre Slack et une application Python hébergée sur Kinsta. En exploitant mes commandes Slash, les utilisateurs de l’application ont la possibilité de créer, interroger et supprimer rapidement des produits.
Cette intégration leur permet de mettre à jour dynamiquement leur inventaire de produits, garantissant ainsi des réponses rapides aux besoins des clients.
Comprendre les commandes Slack
Les commandes Slack sont des raccourcis textuels. Elles commencent par une barre oblique (/
) suivie d’un mot-clé spécifique et d’un paramètre facultatif.
Les commandes Slash déclenchent des actions ou interagissent directement avec des intégrations dans l’interface Slack. Par exemple, /remind
permet de définir des rappels directement par le biais des notifications Slack.
Grâce aux intégrations Slack, vous pouvez configurer des commandes personnalisées pour vos applications. Dans ce tutoriel, votre équipe peut interroger sans effort l’inventaire de notre application produit à l’aide de la commande Slash /check_inventory
et d’autres commandes.
L’intégration de Slack à vos applications favorise une interaction transparente et des flux de travail rationalisés dans un environnement de travail moderne. Elle améliore la communication et la productivité via :
- Un centre de communication centralisé – Slack sert d’espace unifié pour les équipes. L’intégration d’applications dans Slack permet de consolider les canaux, de conserver les conversations et les informations en un seul endroit et de renforcer l’efficacité.
- Mises à jour en temps réel – Les applications intégrées fournissent des alertes instantanées sur les évènements clés, ce qui permet à chacun de rester informé et de réagir rapidement aux changements ou aux mises à jour.
- Rationalisation des flux de travail – Les intégrations automatisent les tâches telles que les notifications des outils de gestion de projet ou le déclenchement d’actions dans les logiciels de gestion de la relation client, réduisant ainsi le travail manuel.
- Collaboration améliorée – Les membres de l’équipe qui accèdent aux applications directement depuis Slack favorisent une collaboration transparente. Ils peuvent facilement partager, modifier des fichiers et discuter de projets, ce qui favorise le travail d’équipe entre les différentes fonctions.
Comment créer une application Python sur Kinsta
Construisons et déployons une application de gestion de produits sur Kinsta. Ensuite, intégrez-la à Slack pour explorer les commandes Slash. Les utilisateurs peuvent ajouter, supprimer et interroger les produits de l’inventaire via les commandes Slash dans Slack.
Pré-requis
Pour suivre ce guide, nous supposons que vous avez :
- Des connaissances de base en Python
- Un compte Slack
Tout d’abord, configurons un projet Python sur Kinsta. Pour cema, suivez les étapes ci-dessous :
- Visitez le modèle Python de Kinsta sur GitHub.
- Sélectionnez Utiliser ce modèle > Créer un nouveau dépôt pour copier le code de démarrage dans un dépôt au sein de votre compte GitHub.
- Une fois que votre dépôt est prêt, connectez-vous ou créez un compte pour afficher votre tableau de bord MyKinsta.
- Autorisez Kinsta avec votre fournisseur Git (Bitbucket, GitHub ou GitLab).
- Cliquez sur Applications dans la colonne latérale de gauche, puis sur Ajouter une application.
- Sélectionnez le dépôt et la branche à partir desquels vous souhaitez déployer.
- Attribuez un nom unique à votre application et choisissez l’emplacement du centre de données.
- Configurez ensuite votre environnement de construction. Sélectionnez la configuration Machine de construction standard avec l’option Nixpacks recommandée pour cette démo.
- Utilisez toutes les configurations par défaut, puis cliquez sur Créer une application.
Le déploiement prend généralement quelques minutes et, en cas de succès, vous recevrez un lien vers votre application ainsi qu’un tableau de bord contenant des informations sur le déploiement.
Comment configurer l’intégration de Slack dans une application Python
Commençons par créer une application Slack, puis configurons les commandes Slash qui seront connectées à votre application Python via des jetons. Configurons une application Slack :
- Accédez au tableau de bord de l’API Slack.
- Cliquez sur Créer une nouvelle application et choisissez À partir de zéro.
- Nommez votre application Slack (par exemple, product-inventory).
- Sélectionnez l’espace de travail et cliquez sur Créer une application.
Maintenant, pour l’authentification :
- Activez le mode Socket dans la colonne latérale de votre tableau de bord Slack.
- Générez un jeton au niveau de l’application en saisissant un nom de jeton et en cliquant sur Générer.
- Enregistrez ce jeton au niveau de l’application pour configurer les variables environnementales ultérieurement.
Comment configurer les commandes Slash
Pour configurer les commandes Slash de votre application :
- Accédez à la section Fonctionnalités sous Informations de base dans le tableau de bord de l’API Slack. Choisissez Commandes Slash.
- Cliquez sur Créer une nouvelle commande pour configurer une nouvelle commande.
- Sur la page Créer une nouvelle commande, renseignez les détails de votre nouvelle commande Slack. Par exemple, tapez
/hi
dans le champ Commande. Si vous le souhaitez, ajoutez une brève description telle que « Says hello ! » et fournissez un indice d’utilisation. Cliquez sur Enregistrer. - Dans la section Installer l’application de la colonne latérale, cliquez sur Installer dans l’espace de travail.
- Accédez au jeton OAuth de l’utilisateur du robot en accédant à OAuth & Permissions dans la colonne latérale. Enregistrez ce jeton pour référence ultérieure.
Comment ajouter des jetons au déploiement de l’application Kinsta
- Allez dans la section Variables d’environnement sous Régalges du déploiement de votre application dans MyKinsta.
- Cliquez sur Ajouter une variable d’environnement.
- Pour la clé 1, SLACK_BOT_TOKEN, collez le jeton OAuth de l’utilisateur du bot dans la valeur 1. Pour la clé 2, SLACK_APP_TOKEN, collez le jeton de niveau application dans la valeur 2.
- Assurez-vous que les deux options sont cochées et cliquez sur Déployer maintenant pour que Kinsta puisse redéployer votre application avec les variables d’environnement.
Comment implémenter la communication en temps réel
Pour cette démo, vous utilisez le modèle Python de Kinsta, qui contient les fichiers suivants :
- Procfile – Spécifie les commandes pour exécuter votre application.
- requirements.txt – Liste les dépendances nécessaires à l’application Python.
- server.py – Le fichier principal de l’application Python, qui gère les fonctionnalités ou les opérations côté serveur.
Kinsta crée automatiquement un processus basé sur le Procfile dans la racine du référentiel lors du déploiement d’une application. Le Procfile contient le code suivant.
web: python server.py
Cette commande exécute le code que server.py contient. Kinsta installe également les dépendances Python dans requirements.txt lors du déploiement et du redéploiement.
Maintenant, utilisons le framework Bolt pour mettre en place une communication en temps réel avec votre application. Ajoutez les lignes suivantes à votre fichier requirements.txt pour installer automatiquement Bolt sur votre application Python lorsque vous mettez à jour le référentiel.
slack-bolt==1.18.0
slack-sdk==3.23.0
Ajoutez également la bibliothèque psycopg2
au fichier requirements.txt. Elle sera utilisée pour se connecter à une base de données Postgres.
psycopg2-binary==2.9.9
Comment implémenter une base de données Postgres avec Kinsta
L’application d’inventaire des produits a besoin d’un moyen de conserver les données sur les produits que les commandes Slash ajoutent à la base de données. Pour créer un stockage de données persistant, vous pouvez utiliser la base de données hébergée de Kinsta.
- Tout d’abord, déployez une base de données Postgres sur votre tableau de bord Kinsta en accédant à la section Bases de données dans la barre latérale du tableau de bord MyKinsta.
- Cliquez sur Créer une base de données. Configurez les détails de votre base de données en entrant un nom et en sélectionnant le type de base de données. Sélectionnez l’option PostgreSQL et configurez la taille souhaitée. Un nom d’utilisateur et un mot de passe pour la base de données sont automatiquement générés :
- Cliquez sur Continuer pour terminer la configuration de votre base de données. Attendez que la base de données PostgreSQL soit créée.
Une fois la création réussie, pour obtenir votre chaîne de connexion pour l’accès externe à votre base de données, naviguez jusqu’à la section Connexions externes du tableau de bord de votre base de données déployée et copiez la chaîne de connexion externe.Vous pouvez maintenant utiliser cette chaîne de connexion pour vous connecter à la base de données depuis votre application Python.
- Dans votre projet Python, créez un fichier db.py dans votre répertoire de projet pour les fonctions d’initialisation de la base de données. Ajoutez le code suivant :
import psycopg2 import os # get connection string from environment variable connection_string = os.environ.get("DATABASE_CONNECTION_STRING") def get_conn(): # create connection conn = psycopg2.connect(connection_string) # Return connection to the database return conn def init_db(): # get connection conn = get_conn() # get cursor cur = conn.cursor() cur.execute(""" DROP TABLE IF EXISTS products; CREATE TABLE products ( id INTEGER PRIMARY KEY, name TEXT UNIQUE NOT NULL, quantity INTEGER NOT NULL ); """) cur.close() conn.commit() conn.close()
Lorsque la fonction
get_conn()
est appelée, elle crée et renvoie une connexion à la base de données Kinsta déployée en utilisant votre chaîne de connexion externe.La fonction
init_db()
obtient une connexion à la base de données, définit le schéma de la base de données et crée la table tout en validant les modifications. Vous ne devez appeler la fonctioninit_db()
qu’une seule fois lors de la configuration initiale du serveur d’application. Utilisez la fonctionget_conn()
dans les appels suivants pour obtenir une connexion à la base de données.
Comment implémenter les gestionnaires de commandes Slash
Maintenant, construisez le code du serveur d’application.
- Supprimez le contenu du fichier server.py et importez les bibliothèques suivantes :
import os from slack_bolt import App from slack_bolt.adapter.socket_mode import SocketModeHandler from db import get_conn, init_db from psycopg2 import DatabaseError
Celles-ci sont nécessaires pour les fonctionnalités de l’application Slack, les connexions à la base de données et la gestion des erreurs.
- Ajoutez le code suivant au fichier server.py après les déclarations d’importation :
# Initialize your app with your bot token app = App( token=os.environ.get("SLACK_BOT_TOKEN"), )
La classe
App
deslack_bolt
est utilisée pour créer une instance de l’application Slack. Elle initialise l’application avec le jeton OAuth de l’utilisateur du robot récupéré dans la variable d’environnementSLACK_BOT_TOKEN
. - Ensuite, déployez un gestionnaire pour la commande Slash
/hi
que vous avez ajoutée à votre application Slack plus tôt. Ajoutez les lignes suivantes au fichier server.py.# The hi command simply sends back a greeting @app.command("/hi") def send_hello(ack, respond, command): # Acknowledge command request ack() respond(f"Hello!")
Le fichier
@app.command()
crée un récepteur pour la chaîne de commande transmise en tant qu’argument et met en correspondance la fonction suivante avec les requêtes de cette commande Slash. La fonctionsend_hello()
gère la logique de la requête.Le code transmet également les variables de requête
ack
,respond
etcommand
à la fonction. Appelezack
pour accuser réception de la requête de la commande Slash, car il s’agit de la première étape avant la poursuite du traitement, et appelezrespond
pour renvoyer une réponse textuelle.Lorsque l’utilisateur tape la commande Slash
/hi
dans votre espace de travail Slack, il obtient la réponse « Hello ! » - Retournez au tableau de bord de votre application Slack et ajoutez les commandes suivantes.
Commande Brève description Conseil d’utilisation /add_product
Ajouter un produit à l’inventaire. product_id, product_name, product_quantity /check_inventory
Rechercher dans l’inventaire un produit dont l’ID correspond. product_id /delete_product
Supprimer de l’inventaire le produit dont l’ID correspond. product_id Votre page de commandes Slash devrait ressembler à la capture d’écran suivante, qui contient une liste de commandes et leurs détails.
- Ajoutez le gestionnaire
/add_product
au fichier server.py.# command to add products @app.command("/add_product") def add_product(ack, respond, command, request): #Acknowledge command request ack() # Extract payload from request payload = request.body['text'] id, name, quantity = [i.strip() for i in payload.split(",")] # conn object conn = None try: # get conn conn = get_conn() # get cursor cur = conn.cursor() # Insert product into the database cur.execute( "INSERT INTO products (id, name, quantity) VALUES (%s, %s, %s)", (int(id), name, int(quantity)) ) # close communication with postgresql cur.close() # commit changes conn.commit() # Response respond(f"""Added product to inventory: id - {id}, name - {name}, quantity - {quantity} """) except DatabaseError: # Send a response respond(f"Product with ID {id} exists in inventory!") finally: # close connection if conn is not None: conn.close()
request.body
accède à la charge utile complète de la requête que Slack envoie pendant le processus de traitement.Lorsqu’un utilisateur tape la commande
/add_product
Slash, l’application envoie l’exemple suivant de charge utile JSON sous la forme d’une requête POST.{ 'token': , 'team_id': , 'team_domain': , 'channel_id': , 'channel_name': , 'user_id': , 'user_name': , 'command': '/add_product', 'text': '1, notebook, 5', 'api_app_id': , 'is_enterprise_install': , 'response_url': , 'trigger_id': }
Les champs
command
ettext
sont inclus.command
contient la commande Slash déclenchée tandis quetext
contient son texte additionnel. Par exemple, si l’utilisateur tape la commande/add_product 1, notebook, 5
,text
contient « 1, notebook, 5 ».Le gestionnaire
add_product
extrait l’ID, le nom et la quantité du produit de la demande de l’utilisateur et se connecte à la base de données à l’aide de la fonction d’aideget_conn()
. Il exécute également une opération SQL d’insertion pour ajouter le produit à la base de données. Si l’identifiant du produit existe déjà dans la base de données, le code traite l’erreur et répond que l’identifiant existe déjà. - Ajoutez maintenant le reste des gestionnaires de commandes au fichier server.py.
# command to check inventory for a product_id @app.command("/check_inventory") def check_inventory(ack, respond, command, request): # Acknowledge command request ack() # Extract payload from request id = request.body['text'].strip() # Get a database connection conn = None try: # get conn conn = get_conn() # get cursor cur = conn.cursor() # Fetch matching product with ID from database cur.execute( "SELECT * FROM products WHERE id=%s", (int(id),) ) product = cur.fetchone() # close comms cur.close() if product is None: respond(f"No product with matching ID {id} found.") else: # Deconstruct tuple if the product exists _, name, quantity = product respond(f"""Product with ID {id} found: name - {name}, quantity - {quantity} """) except Exception as e: print("Connection error: %s", e) finally: # close connection if conn is not None: conn.close() # command to delete the matching product_id from inventory @app.command("/delete_product") def delete_product(ack, respond, command, request): #Acknowledge command request ack() # Extract payload from request id = request.body['text'].strip() # Get connection conn = None try: # Get connection conn = get_conn() # get cursor cur = conn.cursor() # Insert the product into the database cur.execute( "DELETE FROM products WHERE id = %s", (int(id),) ) cur.close() conn.commit() # Response respond(f"Product with ID {id} deleted from inventory!") except Exception as e: print("Connection error: %s", e) finally: # close connection if conn is not None: conn.close()
Ces deux gestionnaires de commandes interrogent et suppriment respectivement l’ID de produit correspondant dans l’inventaire.
Comment mancer le serveur
- Pour réunir l’initialisation de la base de données et la connexion à la socket, ajoutez les lignes suivantes à votre fichier server.py.
# Start your app if __name__ == "__main__": # Initialize database on start init_db() # Connect socket handler = SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]) handler.start()
Vous devez initialiser
SocketModeHandler
avec votre jeton au niveau de l’application. UtilisezSLACK_APP_TOKEN
pour accéder à la variable d’environnement déployée dans l’application Kinsta. - Livrez les changements à votre dépôt distant pour les déployer automatiquement dans Kinsta. Maintenant, server.py initialise la base de données et établit la connexion socket. Kinsta va déclencher un redéploiement automatique de votre application Python.
Tester et dépanner votre application
Vous pouvez tester votre application sur Slack en utilisant les commandes Slash configurées.
-
- Allez dans l’espace de travail associé à votre application. Saisissez la barre oblique (‘/’) pour afficher les commandes de l’application :
- Testez chaque commande Slash. Par exemple, saisissez
/hi
. Vous obtenez la réponse « Hello ! » - Testez ce qui se passe lorsque vous ajoutez deux fois le même produit. Exécutez deux fois la commande slash
/add_product 1, notepad, 2
.Comme le montre la capture d’écran ci-dessus, la première commande a fonctionné. Elle a ajouté un nouveau produit. La seconde commande a entraîné une réponse indiquant que l’identifiant existait déjà.
- Essayez de rechercher l’identifiant du produit que nous venons d’ajouter. Saisissez
/check_inventory 1
.La requête a renvoyé le produit avec l’ID correspondant.
- Enfin, essayez de supprimer le produit que vous avez ajouté. Tapez
/delete_product 1
.
Comment résoudre les problèmes
Lors de la configuration et du déploiement de votre application, vous pouvez rencontrer des erreurs à résoudre pour que votre application fonctionne correctement. Essayez les méthodes suivantes pour détecter et corriger les erreurs typiques.
-
-
- Vérifiez vos jetons : Assurez-vous que vous configurez correctement votre jeton au niveau de l’application avec la portée
connections:write
pour permettre l’accès en mode Socket. Utilisez également les bons jetons pour la classe de l’application. Le jeton d’utilisateur du robot commence parxoxb-<...>
. Utilisez le jeton de niveau application (xapp-<...>
) pour la classeSocketModeHandler
. - Vérifiez vos commandes slash : Assurez-vous d’avoir configuré les commandes Slash sur le tableau de bord de votre application Slack et d’avoir configuré les bons gestionnaires dans le code de votre serveur d’application.
- Améliorez la gestion des erreurs : Assurez-vous que votre logique d’application gère correctement les erreurs, par exemple, lors de l’exécution d’opérations de base de données.
- Vérifiez vos jetons : Assurez-vous que vous configurez correctement votre jeton au niveau de l’application avec la portée
-
Résumé
Dans ce guide, vous avez appris à construire une application Python avec une communication en temps réel via les commandes Slash de Slack. Vous avez également appris à déployer l’application sur Kinsta.
L’intégration d’une application hébergée par Kinsta avec Slack permet aux utilisateurs d’apporter rapidement des modifications à l’aide des commandes Slash, ce qui améliore l’interactivité et l’efficacité du flux de travail tout en offrant un accès immédiat aux données en temps réel. Le personnel peut désormais ajouter, supprimer ou vérifier l’inventaire des produits en toute transparence sans quitter leur plateforme de communication, ce qui stimule la productivité au cours d’une journée de travail bien remplie.
Le PaaS de Kinsta offre encore plus de possibilités : vous pouvez connecter des applications et des bases de données, déployer des solutions complètes pour les sociétés et les entreprises. Et le meilleur ? Nous prenons en charge vos 20 premiers euros !
Laisser un commentaire