Comment créer un bot de notification de tâches pour Slack avec Python (1ère partie)

«L'arrière-plan d'un bot dans un article sur chatbotslife» par Vic Yankoff est marqué comme «réutilisable» sur Google.

J'ai construit un bot Slack qui automatise le processus de notification aux membres des tâches qui leur sont assignées dans un groupe ou une équipe. Ces tâches doivent figurer sur une feuille de calcul Google.

Le robot Slack récupère les données d’une feuille de calcul Google, les analyse et informe le canal du groupe des tâches à archiver ou à soumettre à une date donnée. J'ai ajouté une fonctionnalité qui permet à un membre de l'équipe d'utiliser les commandes Slack Slash (par exemple, / ranti show-task aujourd'hui) pour demander la tâche pour un jour spécifique ou leurs tâches personnelles.

Il y a pas mal de choses à comprendre pour que toutes les pièces soient réunies, alors j’ai pensé documenter le processus et partager mon expérience pour aider les autres fainéants et les développeurs, en particulier ceux qui cherchent à créer des robots Slack personnalisés avec les fonctionnalités susmentionnées.

Les robots sont de petits assistants pratiques qui traînent dans votre application, attendent les commandes, puis trouvent ou créent ce dont vous avez besoin. Ils constituent un autre moyen d'utiliser vos applications préférées sans avoir besoin de les ouvrir, en exécutant des tâches automatisées pour vous. C’est la grande nouveauté, une partie essentielle de Slack, Facebook Messenger et les nouvelles fonctionnalités de Telegram, mais elles sont souvent trop compliquées à construire et à utiliser. - Matthew Guay

À la fin de ce tutoriel, nous aurions créé un webhook et une commande slash / ranti permettant aux utilisateurs de recevoir des notifications de tâches sur un canal et de demander des tâches pour eux-mêmes ou pour des jours spécifiques. Cet article vous apprendra également les bases de l’interaction avec une feuille de calcul Google à l’aide du package python gspread.

Exigences

Pour suivre, les conditions suivantes doivent être remplies:

Outils / Packages

  • Une équipe de slack (pour le développement / test)
  • La console API slack (il sera très utile de lire la documentation de l'api slack ici)
  • Python 3.x (cela peut ne pas fonctionner correctement sous Python 2.x)
  • VirtualEnv (pour installer des packages Python localement pour un projet sans entrer en conflit avec des packages globaux)
  • Flask (microframework for Python basé sur Werkzeug, Jinja 2 et les bonnes intentions)
  • Un éditeur de texte (j'ai utilisé Visual Studio Code, mais je commence à aimer PyCharm)
  • Heroku (pour tester notre application)
  • Feuille de calcul Google (vous pouvez faire une copie de cette feuille de calcul)
  • Console API Google (pour obtenir un compte de service Google et des informations d'identification OAuth2)

Compétences

  • Familiarité avec les commandes de base de la CLI
  • Compétences de base en python (installation de paquet et syntaxe de base)

Configuration de notre référentiel d'applications.

Commençons notre flux de travail en créant notre structure de fichiers et en établissant les bases pour écrire notre bot. Suivez les étapes énumérées dans ce Github Gist.

Notre structure de fichier

Nous allons créer quatre dossiers dans notre dossier de projet créé précédemment. Ils incluent app, config, static, templates. Dans notre dossier d’application, créons un dossier utils. Cela contiendra tous nos utilitaires d'application.

.
├──projet
├── app
│ ├── __init__.py
│ ├── actions.py
│ └── utils
│ ├── gappshelper.py
│ └── slackhelper.py
├── client_secret.json
├── config
│ ├── __init__.py
│ └── env.py
├── ranti.py
├── ├── Requirements.txt
├── statique
├── ├── modèles
├── ├── Procfile
├── LISEZMOI.md
└── └── travailleur.py
│
└──renv

Création d'une application de flacon

La prochaine étape consiste à créer une simple application de flacon pour servir notre projet afin de pouvoir l’héberger. Créez un fichier appelé ranti.py à la racine du dossier de projet. Ce sera notre point d'entrée de l'application. Insérez le code suivant dedans:

Vous avez créé une application de flacon complète. Notre application sera servie sur le port 5000 par défaut. Pour voir notre application, lancez l'application avec le flacon, puis allez à http: // localhost: 5000 dans votre navigateur et vous devriez voir «Hello World».

Configurations d'applications

Configurons nos configurations d’application pour différents environnements. Dans le dossier de configuration, créez deux fichiers appelés _init_.py et env.py.

Nous allons initialiser notre configuration dans le _init_.py. Copiez et collez l'extrait suivant dans le fichier __init__.py.

À partir de ce qui précède, nous avons besoin de notre env.py contenant des références et des configurations pour différents environnements pour notre application. Ces données sont ensuite stockées dans notre variable d’environnement système et peuvent être récupérées en appelant la méthode get_env et en transmettant la clé souhaitée, dans ce cas notre app_env.

Copiez et collez l'extrait de code ci-dessous dans env.py.

Configuration «utilisateur utilisateur de bot» et configuration de l'API (clé d'authentification)

Créons une nouvelle application pour que nous puissions obtenir un jeton d’API pour tester notre bot une fois que nous avons terminé. Définissez le nom souhaité pour l'application et choisissez votre espace de travail de développement souhaité - une équipe souple à laquelle vous appartenez déjà et qui a un accès administrateur. Je vais utiliser «Ranti Bot» pour le mien et sélectionner l’espace de travail Proton Slack Team.

formulaire de création d'applications lâches. NB: gardez le tableau de bord api lâche ouvert pour les prochaines étapes.

Nous sélectionnons ensuite "Utilisateurs Bot" dans la section "Fonctionnalités". Set, le nom d'affichage et le nom d'utilisateur par défaut pour notre utilisateur de bot. Cela donne à notre bot la possibilité de parler dans des canaux, des groupes et d'envoyer des messages directs aux utilisateurs dans l'espace de travail. Cliquez sur «Ajouter un utilisateur Bot» pour enregistrer les modifications. Nous devrions voir un écran comme celui-ci:

page de configuration de l'utilisateur bot.

Maintenant, sélectionnez le menu “Installer App” dans la section “Paramètres”. Cliquez sur le bouton pour installer l'application dans notre espace de travail de développement d'équipe. Une fois l'application installée, nous devrions voir l'écran suivant:

La page des paramètres de l'application installée - Détails d'authentification peut être trouvée ici.

Copiez et enregistrez le «jeton d'accès OAuth» et le «jeton d'accès Bot User OAuth». Nous les utiliserons plus loin dans la suite du tutoriel.

Configuration et configuration de l'API «Feuille» de Google (clé d'authentification)

Reproduisons tous cette feuille afin que nous puissions suivre ce tutoriel. Pour pouvoir lire par programme à partir de votre feuille Google, un compte de service et les informations d'identification OAuth2 de la console Google API sont requis.

Nous allons créer notre compte de service et obtenir les informations d'identification nécessaires en procédant comme suit:

  1. Visitez la console Google API.
  2. Créez un nouveau projet. Nommez-le «tâche du groupe Proton»
  3. Cliquez sur Activer l'API. Recherchez et activez l'API Google Drive.
  4. Créez des informations d'identification pour qu'un serveur Web puisse accéder aux données d'application.
  5. Nommez le compte de service et accordez-lui un rôle de projet «Editeur».
  6. Téléchargez le fichier JSON sur votre système.
  7. Copiez le fichier JSON téléchargé dans le répertoire de votre projet et nommez-le dans client_secret.json.
Création du compte de service. étapes en GIF.

Partagez ensuite le classeur avec le client_email dans le fichier client_secret.json.

partage de la feuille de calcul avec client_email dans le fichier client_secret.json. étapes en GIF.

Nous sommes maintenant autorisés à utiliser à la fois l'API slack et l'API Google Spreadsheet.

Nous utiliserons les packages python suivants pour l’interface avec nos API,

  1. slackclient - pour interagir avec les API slack
  2. gspread - pour interagir avec les API Google Spreadsheets
  3. oauth2client - pour autoriser l'API Google Drive à l'aide de oAuth2.0

Il est temps de faire un peu plus de codage…
Commençons par créer notre assistant client slack - slackhelper.py et l’aide du tableur Google - fichiers gappshelper.py. Ces fichiers contiendront des connexions à nos API et des méthodes qui seront utilisées par nos actions de bot.

Créez un fichier gappshelper.py dans notre dossier app / utils. Dans ce fichier, copions l’extrait suivant dans celui-ci.

importer gspread
depuis le chemin d'importation os
depuis config import get_env
depuis oauth2client.service_account, importation ServiceAccountCredentials

Maintenant que nous avons importé tous les packages et dépendances nécessaires pour ce fichier, nous pouvons ensuite créer notre classe GappsHelper qui contiendra les propriétés et les méthodes nécessaires pour interagir avec notre feuille de calcul Google.

Dans le code ci-dessus, nous avons créé une méthode __init__ pour initialiser une instance de GappsHelperclass chaque fois que nous en avons besoin, avec les propriétés nécessaires au bon fonctionnement de l'instance de la classe, comme indiqué dans la documentation de l'API de Google Drive.
Nous avons également créé une méthode appelée open_sheet qui serait utilisée pour ouvrir une feuille et renvoyer tous les enregistrements de cette feuille. Ceci sert de demande get à notre feuille de calcul database-google.

Nous avons maintenant accès à notre feuille Google et pouvons y récupérer des données. Comment allons-nous transmettre ces données aux utilisateurs en attente qui les ont demandés à l'aide de nos commandes slash?
Et bien réfléchissez bien, nous allons créer un fichier slackhelper.py dans le dossier app / utils pour contenir toutes nos propriétés et méthodes permettant d’interagir avec Slack. Dans le fichier, nous aurons besoin d’un paquetage appelé SlackClien, qui encapsule l’API Slack en python et notre méthode get_env dans notre module de configuration.

depuis slackclient import SlackClient
depuis config import get_env

Maintenant, créons notre classe SlackHelper et commençons à créer nos méthodes d’aide au relâchement.

classe SlackHelper:

   def __init __ (auto):
      self.slack_token = get_env ('SLACK_TOKEN')
      self.slack_client = SlackClient (self.slack_token)
      self.slack_channel = get_env ('SLACK_CHANNEL')

Nous créons notre constructeur et définissons des propriétés telles que slack_token, slack_channel à partir de nos variables d'environnement et slack_client - une instance de SlackClient.

Ensuite, nous créons les autres méthodes nécessaires pour que nous puissions interagir avec Slack à partir de notre application. Copiez et collez l'extrait de code ci-dessous dans le fichier SlackHelper.

Nous avons créé les méthodes post_message, post_message_to_channel, file_upload et user_info. Ici, nous pouvons avoir beaucoup d'autres méthodes utilisées pour interagir avec Slack, de la méthode de dialogue, etc.

Modifions légèrement notre point d’entrée d’application, ranti.py. Nous allons résumer certaines fonctionnalités ici dans notre dossier d'applications.

Remplacez le contenu de ranti.py par l'extrait de code ci-dessus. Nous importons notre méthode create_app à partir du dossier app dans __init__.py, puis passons dans app_env. Nous appelons ensuite la méthode run sur notre application pour démarrer notre serveur flask.

Dans notre dossier d’application, créons un fichier __init__.py. Ici, nous allons créer notre application et écrire également notre route principale d'entrée de l'application. Copiez et collez l'extrait de code ci-dessous.

Hourra, maintenant nous pouvons démarrer notre serveur et nous devrions voir Hello World lorsque nous visitons l'URL dans le navigateur.

Nous allons continuer notre implémentation de notre Webhook et notre interaction d'application avec nos commandes slash dans la partie 2 de ce tutoriel.

Avez-vous des questions? Vous pouvez me joindre sur Twitter @jattorize. Je suis aussi sur GitHub avec le nom d’utilisateur jattoabdul.

Vous voyez quelque chose qui ne va pas dans ce post? Insérez la source de ce tutoriel sur GitHub et soumettez une demande d'extraction.

Vous pouvez trouver la partie 2 de ce tutoriel ici

Avez-vous besoin de recruter les meilleurs développeurs? Parlez à Andela pour vous aider avec ça.