Envoyer un message Slack

Envoyer des messages à Slack avec Python est facile !

C05348A3-9AB8-42C9-A6E0-81DB3AC59FEB
           

L'envoi de messages à un canal Slack est une excellente option pour être informé des événements qui se produisent sur vos systèmes. Si vous utilisez toujours le courrier électronique pour les notifications… s'il vous plaît, ne le faites pas, Slack est bien mieux adapté pour informer les gens que les méthodes traditionnelles. Si vous organisez les chaînes Slack par sujet, cela permet aux gens de s'abonner aux chaînes qui les intéressent et de se désabonner lorsqu'ils passent à autre chose et ne sont plus sur ce projet. Slack vous permet également de notifier de force tous les membres d'un canal qui, si les gens ont configuré le client mobile, peut entraîner une alerte comme un message texte.

Le script suivant peut être utilisé comme outil de ligne de commande pour envoyer des messages slack à n'importe quel canal particulier.

Vous devrez d'abord obtenir une URL Webhook entrante Slack . Cette URL n'est en réalité qu'une "URL magique" qui vous permet de publier sur un canal particulier via une requête POST, aucun en-tête ni authentification n'est nécessaire. Évidemment, vous devez le protéger très soigneusement, en utilisant par exemple la bibliothèque Python Encryption . Dans cet exemple, nous utiliserons une variable d'environnement nommée SLACK_WEBHOOK_URL , qui est l'URL complète fournie par Slack, y compris le protocole https://...


Les exemples de code sur ce site Web sont fournis sous la licence LGPL v3 . En utilisant ce code, vous acceptez les termes de ce contrat de licence.

#!/usr/bin/env python3
 # -*- codage : utf-8 -*-

 '''
 Envoie une notification à un canal Slack donné
 '''

 # IMPORTATIONS ############################################### ###############

 de __future__ importer print_function
 # de la future importation standard_library
 # bibliothèque_standard.install_aliases()
 # depuis l'entrée d'importation intégrée
 importer l'analyse d'arguments
 demandes d'importation
 importer json
 importer système
 importer le système d'exploitation


 __author__ = "Videre Research, LLC"

 # MONDIAUX ############################################### ###############

 webhookURL = os.getenv('SLACK_WEBHOOK_URL', '')

 # LES FONCTIONS ################################################ ###########


 def main() :
 """Fonction principale."""
 si os.getenv('SLACK_WEBHOOK_URL', '') == "":
 print('Variable d'environnement SLACK_WEBHOOK_URL non définie')
 sys.exit(1)

 assert webhookURL.startswith('https://hooks.slack.com/services/')

 analyseur = argparse.ArgumentParser()
 analyseur.add_argument(
 '-t', '--title', action='store',
 requis=Vrai,
 help='Ligne de titre du message Slack (peut contenir du balisage).'
 )
 analyseur.add_argument(
 '-b', '--body', action='store',
 requis=Vrai,
 help='Corps du message Slack (ne peut PAS contenir de balisage).'
 )
 analyseur.add_argument(
 '-u', '--user', action='store',
 default=':Slack-Bot :', required=False,
 help='Nom d'utilisateur à afficher avec le message, par défaut : Slack-Bot.'
 )
 analyseur.add_argument(
 '-i', '--icon', action='store',
 default=':peaking_head_in_silhouette:', required=False,
 help='Icône (emoji intégré) à afficher avec la publication, par défaut : :peaking_head_in_silhouette:.'
 )
 analyseur.add_argument(
 '-c','--color', action='store',
 par défaut='36a64f', requis=Faux,
 help='Code de couleur hexadécimal pour le contenu de la publication, par défaut : 36a64f.'
 )
 args = analyseur.parse_args()

 headers = {'Content-Type' : 'application/json', 'Accept' : 'application/json'}
 données = {
 "nom d'utilisateur": "SlackPost",
 "icon_emoji": args.icon,
 "text": args.titre,
 "pièces jointes": [
 {
 "de secours": args.body,
 "couleur": args.couleur,
 "texte": args.body
 }
 ]
 }

 essayer:
 r = requests.request(method='POST', url=webhookURL, data=json.dumps(data), headers=headers, timeout=25)
 si r.status_code == 200 :
 réponse = r.contenu
 imprimer (réponse)
 autre:
 print('Erreur :')
 impression(r.status_code)
 print(r.headers)
 print(r.text)
 impression(sys.exc_info()[:2])
 sys.exit(1)
 sauf exception comme e :
 print("Erreur {0}".format(str(e)))
 sys.exit(1)

 sys.exit(0)

 ################################################# #############################

 si __nom__ == "__main__":
 principale()

 # FIN DE FICHIER ################################################ #######

Utilisation de l'outil de ligne de commande

Comme vous pouvez le voir en invoquant le script avec le paramètre '-h', les deux seuls paramètres requis sont le "-t" pour le titre de votre message lâche et le "-b" pour un corps. Vous pouvez spécifier tout autre paramètre si vous le souhaitez ou simplement modifier la valeur par défaut dans le script lui-même.

Notez que vous pouvez utiliser ' <!channel|channel> ' dans le corps pour alerter tous les utilisateurs actifs de ce canal (équivalent à @channel). Veuillez vous abstenir d'utiliser @ici si possible.

Bon relâchement (au sens figuré bien sûr), et veuillez l'utiliser de manière responsable !

python3 send_slack.py -h
 utilisation : __main__.py [-h] -t TITRE -b CORPS [-u UTILISATEUR] [-i ICÔNE] [-c COULEUR]

 arguments facultatifs :
 -h, --help affiche ce message d'aide et quitte
 -t TITRE, --title TITRE
 Ligne de titre de la publication Slack (peut contenir du balisage).
 -b BODY, --body BODY Corps de la publication Slack (ne peut PAS contenir de balisage).
 -u USER, --user USER Nom d'utilisateur à afficher avec la publication, par défaut : Slack-
 Bot.
 -i ICON, --icon ICON Icône (emoji intégré) à afficher avec la publication,
 par défaut : : tête_parlante_en_silhouette :.
 -c COULEUR, --color COULEUR
 Code de couleur hexadécimal pour le contenu de la publication, par défaut :
 36a64f.
Commentaires publiés : 0

Tagged with:
notification