Cómo crear un Slack bot en Python para automatizar el envío de mensajes a un canal
Muy buenas, ¿Qué tal? Esta semana me ha tocado pelearme con Slack para poder automatizar el envío de mensajes cuando un servicio devuelva un error. Como me dio un buen dolor de cabeza (más que nada porque lo intenté hacer a última hora, al día siguiente fluyó todo así que recordad descansar) para el tutorial de esta semana vamos a ver cómo crear un Slack bot en Python para automatizar el envío de mensajes a un canal.
Paso 1: Crear una app en Slack
El primer paso para poder crear un bot en Slack será crear una app, para ello deberemos ir al siguiente enlace https://api.slack.com/apps o buscar "create app slack" en cualquier buscador. Nos debería aparecer algo como esto:
Pulsamos en el botón "Create an App" y nos aparecerá una ventana emergente en el que deberemos seleccionar "From scratch":
Al pulsar en From scratch nos aparecerá una nueva ventana donde podremos darle un nombre a nuestra app y en la que nos pedirá que seleccionemos el espacio de trabajo.
Pulsamos en el botón "Create App" y listo, ya tenemos nuestra app 🎉.
Ahora nos debería aparecer una ventana con información sobre nuestra app. En esta ventana, pulsaremos en el desplegable "Add features and functionality" y después pulsaremos en "Incoming Webhooks":
Al pulsar nos redirigirá a una nueva página en la que tendremos que hacer scroll hasta el final y pulsar el botón "Add new webhook to workspace".
En la siguiente página nos aparecerá un desplegable en el que podremos seleccionar el canal donde queremos enviar los mensajes, seleccionamos el canal que queramos utilizar y pulsamos en permitir:
Una vez dado los permisos, nos llevará a la ventana anterior y ya nos aparecerá la url (Webhook url) a la que debemos de atacar si queremos enviar un mensaje y un ejemplo de como realizar una petición con Curl. Si lo tenéis instalado, podéis probarlo para verificar que funciona correctamente:
Por cierto, no intentéis espamearme porque para cuando esté publicado el tutorial ya lo habré eliminado 😆.
Yo he lanzado una prueba y como podéis ver a continuación, funciona perfectamente:
Paso 2: Enviar mensajes desde Python
Ahora que ya tenemos la parte de Slack configurada, toca ponernos manos a la obra con Python. Para ello yo me he creado una carpeta que contendrá el proyecto y un archivo llamado main.py que será el encargado de enviar los mensajes.
Para realizar las peticiones, necesitaremos usar la librería "requests" de Python. Para instalarla, primero crearemos un entorno virtual en el directorio raíz de nuestro proyecto:
python -m venv env
Luego solo tendremos que activarlo:
Windows
env/Scripts/activate
Linux/Mac
source env/bin/activate
Por último, instalamos la librería requests:
pip install requests
Ahora que ya tenemos todo el entorno preparado, es hora de empezar a autoespamearnos para comprobar que todo está ok. Para ello, abrimos el archivo main.py y añadimos el siguiente código:
import requests
if __name__ == "__main__":
url = 'https://hooks.slack.com/services/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'
msg = input('Introduce el mensaje que quieres enviar: ')
r = requests.post(url, json={'text':msg})
if(r.text == 'ok'):
print('El mensaje ha sido enviado')
else:
print(r.text)
Como veis, he hecho un script muy simple para que podamos ver fácilmente su funcionamiento.
Primero importamos la librería requests, ya que la necesitaremos para realizar las peticiones a la API de Slack.
Después definimos el punto de entrada de nuestro script con if __name__ == "__main__": y como podéis ver, dentro está toda la funcionalidad del script.
He declarado una variable para guardar el webhook url que nos proporcionó Slack en pasos anteriores y después utilizo input para que nosotros mismos podamos escribir el mensaje que queramos.
Una vez escrito el mensaje, utilizamos la librería requests para enviar el mensaje por post y en el parámetro json le enviamos la información. Al usar el parámetro json, la cabecera "Content-type: application/json" se añade automáticamente por lo que no tendremos que añadirla nosotros al utilizar requests.
Al realizar la petición, Slack nos devuelve "ok" si todo ha ido bien o un error si hay algún problema. Para acceder a la respuesta de Slack lo hacemos escribiendo r.text.
Os dejo el enlace al repositorio en GitHub por si queréis echarle un vistazo 😁.
También tenéis el tutorial en formato video para Youtube pinchando aquí.
Espero que este post te ayude y como siempre, te recomiendo seguirme en Twitter para estar al tanto de los nuevo contenido. Ahora también puedes seguirme en Instagram donde estoy subiendo tips, tutoriales en vídeo e información sobre herramientas para developers.
Por último os dejo mi guía para aprender a trabajar con APIs donde explico todo el funcionamiento de una API, el protocolo HTTP y veremos como construir una API con arquitectura REST.
Nos leemos 👋.