Send a Slack Message
¡Enviar mensajes a Slack con Python es fácil!
Enviar mensajes a un canal de Slack es una excelente opción para recibir notificaciones sobre los eventos que ocurren en sus sistemas. Si todavía usa el correo electrónico para las notificaciones... no lo haga, Slack es mucho más adecuado para informar a las personas que los métodos tradicionales. Si organiza los canales de Slack por tema, permite a las personas suscribirse a los canales que les interesan y darse de baja cuando se mudan y ya no están en ese proyecto. Slack también le permite notificar a la fuerza a todos los miembros de un canal que, si las personas tienen configurado el cliente móvil, puede generar una alerta como un mensaje de texto.
La siguiente secuencia de comandos se puede utilizar como una herramienta de línea de comandos para enviar mensajes de holgura a cualquier canal en particular.
Primero deberá obtener una URL de webhook entrante de Slack . Esa URL es realmente solo una "URL mágica" que le permite publicar en un canal en particular a través de una solicitud POST, no se necesitan encabezados ni autenticación. Obviamente, debe protegerlo con mucho cuidado, utilizando, por ejemplo, la biblioteca de cifrado de Python . En este ejemplo, usaremos una variable de entorno denominada SLACK_WEBHOOK_URL , que es la URL completa proporcionada por Slack, incluido el protocolo https://...
Los ejemplos de código en este sitio web se proporcionan bajo la licencia LGPL v3 . Al utilizar este código, acepta los términos de este acuerdo de licencia.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
Sends a notification to a given Slack channel
'''
# I M P O R T S ###############################################################
from __future__ import print_function
# from future import standard_library
# standard_library.install_aliases()
# from builtins import input
import argparse
import requests
import json
import sys
import os
__author__ = "Videre Research, LLC"
# G L O B A L S ###############################################################
webhookURL = os.getenv('SLACK_WEBHOOK_URL', '')
# F U N C T I O N S ###########################################################
def main():
"""Main function."""
if os.getenv('SLACK_WEBHOOK_URL', '') == "":
print('Environment variable SLACK_WEBHOOK_URL not set')
sys.exit(1)
assert webhookURL.startswith('https://hooks.slack.com/services/')
parser = argparse.ArgumentParser()
parser.add_argument(
'-t', '--title', action='store',
required=True,
help='Title line of the Slack post (can contain markup).'
)
parser.add_argument(
'-b', '--body', action='store',
required=True,
help='Body of the Slack post (can NOT contain markup).'
)
parser.add_argument(
'-u', '--user', action='store',
default=':Slack-Bot:', required=False,
help='User Name to display with the post, default to: Slack-Bot.'
)
parser.add_argument(
'-i', '--icon', action='store',
default=':speaking_head_in_silhouette:', required=False,
help='Icon (built-in emoji) to display with the post, default to: :speaking_head_in_silhouette:.'
)
parser.add_argument(
'-c','--color', action='store',
default='36a64f', required=False,
help='Hex color code for the post content, default to: 36a64f.'
)
args = parser.parse_args()
headers = {'Content-Type': 'application/json', 'Accept': 'application/json'}
data = {
"username": "SlackPost",
"icon_emoji": args.icon,
"text": args.title,
"attachments": [
{
"fallback": args.body,
"color": args.color,
"text": args.body
}
]
}
try:
r = requests.request(method='POST', url=webhookURL, data=json.dumps(data), headers=headers, timeout=25)
if r.status_code == 200:
response = r.content
print(response)
else:
print('Error:')
print(r.status_code)
print(r.headers)
print(r.text)
print(sys.exc_info()[:2])
sys.exit(1)
except Exception as e:
print("Error {0}".format(str(e)))
sys.exit(1)
sys.exit(0)
###############################################################################
if __name__ == "__main__":
main()
# E N D O F F I L E #######################################################
Uso de la herramienta de línea de comandos
Como puede ver al invocar el script con el parámetro '-h', los únicos dos parámetros que se requieren son la "-t" para el título de su publicación floja y la "-b" para el cuerpo. Puede especificar cualquier otro parámetro si lo desea o simplemente cambiar el valor predeterminado en el propio script.
Tenga en cuenta que puede usar ' <!channel|channel> ' en el cuerpo para alertar a todos los usuarios activos en ese canal (equivalente a @channel). Absténgase de usar @aquí si es posible.
¡Feliz holgazanería (en sentido figurado, por supuesto), y por favor utilícelo de manera responsable!
python3 send_slack.py -h
usage: __main__.py [-h] -t TITLE -b BODY [-u USER] [-i ICON] [-c COLOR]
optional arguments:
-h, --help show this help message and exit
-t TITLE, --title TITLE
Title line of the Slack post (can contain markup).
-b BODY, --body BODY Body of the Slack post (can NOT contain markup).
-u USER, --user USER User Name to display with the post, default to: Slack-
Bot.
-i ICON, --icon ICON Icon (built-in emoji) to display with the post,
default to: :speaking_head_in_silhouette:.
-c COLOR, --color COLOR
Hex color code for the post content, default to:
36a64f.
Tagged with:
notification