Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Python
Code

Construir un Bot Slack Usando Python

by
Length:LongLanguages:

Spanish (Español) translation by James (you can also view the original English article)

Final product image
What You'll Be Creating

Slack fue fundada en el año 2014 y está siendo considerado como la aplicación de negocios de más rápido crecimiento en la historia. Actualmente cuenta con más de 50.000 pagando las empresas que utilizan sus productos, incluyendo mi actual lugar de trabajo.

Slack muy ha distinguido de sus precursores que se centraron más en ser un sistema de mensajería con algunas capacidades de voz y video. Slack realmente ha empujado a la envolvente y está trabajando diligentemente en la construcción de un directorio de aplicación muy potente. El directorio de la aplicación contiene cientos o miles de integraciones que pueden proporcionar una cantidad increíble de flexibilidad para mejorar la eficiencia de la empresa.

El objetivo de este artículo es demostrar cómo usted puede construir su propia integración única con Slack, aprovechamiento de Python para la lógica.

Para ayudar a centrarse en la comprensión de la mecánica de los fundamentos de un Bot de Slack, me centraré en un bot personalizado.

¿Por qué construir un Bot Slack?

Aunque Slack tiene un directorio de aplicación de clase mundial, cada empresa tiene procesos únicos del negocio. Esto deja a muchas empresas en una situación donde simplemente no puede encontrar la aplicación perfecta para ellos.

Se trata de construir tu propio Bot de Slack donde entra en juego.

Trabajo de un Bot de Slack es recibir y manejar los eventos generados por la interacción flojo de su equipo. Holgura ofrece por lo menos 50 tipos de diferentes eventos, tales como:

  • message: un mensaje a un canal.
  • team_join: un nuevo miembro ha unido el equipo.
  • member_joined_channel: un usuario se unió a un canal público o privado.

Y por supuesto, hay muchos más tipos de eventos que tu bot opcionalmente puede manejar y reaccionar a. Por ejemplo, el evento team_join es un evento fantástico que puede comenzar un proceso de inducción completa.

El objetivo de este artículo demostrará cómo un Bot de holgura interactuarán con el evento de message para realizar acciones específicas cuando los miembros del equipo interactúan con el bot.

Escogiendo Bien el Tipo Bot Slack

En este artículo, creo una aplicación de Python y un Bot de Slack que se puede Agregar a su proyecto de equipo para responder al evento de message.

Para empezar, necesito crear un Bot en holgura. Pueden crear dos tipos de bots:

  • un bot personalizado
  • crear una aplicación y agregar un usuario bot

Este artículo va a crear un bot personalizado porque un usuario bot de aplicación sería más apropiado si estuviera planea escribir y publicar una aplicación en Slack  Dado que deseo este bot sea privada para mi equipo, bastará con un bot personalizado.

Crear un Bot de Slack Personalizado

Aquí se puede crear un bot personalizado: https://my.slack.com/apps/A0F7YS25R-bots. Si ya está conectado a tu cuenta de Slack  el de la izquierda Seleccione el botón de Añadir Configuración; en caso contrario, inicie sesión en su cuenta de parafina antes de proceder. Si no tienes una cuenta de parafina, usted puede registrarse gratis.

Esto le llevará a una nueva página donde deberá proporcionar un nombre de usuario para tu bot. Ingrese su ahora, que seguir pautas de nomenclatura de Slack  Una vez haya seleccionado un nombre impresionante bot, pulse Agregar configuración de bot.

Después de que has creado correctamente tu bot, Slack te redirige a una página que permite la mayor personalización de tu bot. Te dejo esa parte a su uno mismo creativo. Lo único que necesita de esta página es el API Token que comienza con xoxb-. Copiar este símbolo (token) en un lugar seguro para su uso posterior o simplemente deje esta página abierta hasta que necesitamos el token para la aplicación Python.

Configuración de Su Aplicación de Python

Según documentación oficial de Slack para el Kit de Desarrollador de Slack para Python, actualmente soporta la version 2.7. Hace mención a que la versión 3 se apoyará en un futuro cercano.

Ya tengo la version 2.7 instalado, así que voy a pegarlo con esa versión de Python por ahora. Si la instalación de Python ya está configurada y listo para entrar, puede pasar al siguiente paso; de lo contrario, por favor visite la página de Python Descargar y descargue la versión apropiada para su sistema operativo.

Para instalar el Kit de desarrollador de Slack, utilizo PyPi para simplificar la instalación del cliente de Slack. En algunos sistemas operativos, el comando de la pip se puede ejecutar directamente desde un símbolo del sistema. Si no, tendría que hacer referencia a la ruta completa al programa pip.

Por ejemplo, en mi sistema de Windows, ejecuté el siguiente comando para instalar el cliente de juego desde un símbolo del sistema (hace referencia a la ruta de acceso completa al archivo pip.exe): \Python27\Scripts\pip instalar slackclient.

A continuación, tienes que elegir una ubicación para su aplicación. Disfruto usando GitHub, así que creé una carpeta principal de python que contiene todas mis diferentes aplicaciones de Python. Dentro de esta carpeta, hice una subcarpeta llamada apropiadamente slackbot.

Una vez que he elegido donde se celebrará mi solicitud, voy a guardar la base de mi aplicación en un archivo llamado slackbot.py.

La Primera Llamada de API de Slack

Es el momento de poner los dedos en el teclado y conectar con holgura y hacer nuestra primera llamada a la API. Vamos a la derecha del código, y voy a explicar lo que sucede después de:

El código comienza con la importación de la biblioteca de cliente de Slack, seguida de instanciar la clase SlackClient con API Token de tu Bot Slack que guardó anteriormente. Asegúrese de reemplazar el token de ejemplo en este ejemplo con tu token.

El objeto de SlackClient se almacena en una variable local denominada slack_client que se utilizará para interactuar con Slack.

Usando el slack_client, se hace una llamada a la API para obtener una lista de los usuarios de su equipo. Si tuvo éxito la llamada a la API, la lista de los miembros del equipo se almacena en la variable de users. La variable de los users es una matriz que, utilizando un bucle, imprime el nombre de cada miembro del equipo para la aplicación de consola.

Slack es compatible con diferentes tipos de interacciones con el sistema. El primero, que nos acaba de terminar, hizo una llamada a la API. Holgura ofrece muchos otros tipos de llamadas a la API: API Web, API de eventos, conversaciones API, API de mensajería de tiempo Real y SCIM API. La llamada de API que hicimos para recuperar la lista de usuarios aprovecha la API de SCIM.

En el siguiente ejemplo, demuestro cómo utilizar el sistema de mensajería de tiempo Real. Una vez que comenzamos el bot final del edificio, se utilizará el API de conversaciones enviar mensajes en respuesta a los comandos de a que nuestro bot responderá.

Conectar con el Sistema de Mensajería en Tiempo Real

El sistema RTM proporciona un gran poder porque holgura envía eventos que su aplicación puede manejar y responder inmediatamente a. Por supuesto, hay muchos eventos que tu bot no necesitar controlar cada evento. Para demostrar los muchos y diferentes eventos que ocurren simplemente en la conexión, en el ejemplo siguiente se dará salida a cada evento que se recibe.

Inmediatamente veamos el código para conectar y comenzar a recibir eventos de Slack:

Al igual que el ejemplo anterior, este código comienza con la importación de la biblioteca de cliente de Slack y crea una instancia de la clase SlackClient con el mismo API Token como antes. Este ejemplo también importa la biblioteca de tiempo que se utiliza más adelante en el código.

Con el SlackClient creado con éxito, la siguiente línea de código hace una llamada al método rtm_connect. Esto se hace con un if instrucción. Si la conexión falla por alguna razón, se genera un mensaje de error en la consola. Cuando es exitosa, un mensaje de éxito es impreso para hacernos saber que estamos conectados y listo para comenzar a interactuar con eventos de Slack.

Un sin fin mientras que entonces se inicia el bucle. Dentro de este bucle, yo llame al método rtm_read de la biblioteca de cliente de Slack.

Los resultados de esta convocatoria se registran en la consola. Después de esto ocurre, la aplicación duerme durante 1 segundo antes de leer el próximo evento potencial de Slack  A continuación es un ejemplo de lo que parece leyendo eventos en la primera conexión:

Cuando se conecta el bot, tres eventos son enviados por la Slack como se ve arriba. Porque esto es en un tiempo del lazo, cuando no hay ningún caso, recibe una matriz vacía como se ve arriba con el vacío corchetes [].

Ahora que tenemos una comprensión básica de hacer una llamada a la API y conectar al sistema de mensajería de tiempo Real de juego, es el momento de construir un robot completamente funcional de Slack.

Mi Bot de Slack se escucha eventos usando el sistema RTM. Cuando recibe un evento de mensaje que se dirige a mi bot, mi aplicación responderá al usuario con una respuesta al comando que recibió.

Construyendo el Bot Slack

Para construir un bot completo, requiere un poco de código. Para ayudar a organizar y simplificar el código final, voy a dividir la funcionalidad en tres clases diferentes: Bot, eventos y comandos. Estas clases deben ser extensibles por su aplicación, mejorar la funcionalidad de su propio bot. Vamos a explorar el propósito de cada una de las tres clases diferentes:

  1. La clase de Bot se encargará de conectar con Slack y comenzará el tiempo bucle de eventos.
  2. La clase de evento es responsable de leer los acontecimientos recibidos de Slack, los análisis sólo trato con eventos de mensaje que apuntan directamente a nuestro bot. Cuando se recibe un mensaje, llamar a la clase de comando y enviar una llamada a la API con la respuesta de la clase de comando.
  3. La clase de comando recibirá el texto del evento y brindar un mensaje personalizado basado en el comando recibido. Este mensaje se enviará entonces a la clase de evento canal de Slack origina al canal de origen del mensaje.

Inicializando el Bot Slack

Anteriormente había mencionado que mi punto de entrada de aplicación Python se coloca en el archivo slackbot.py. Este archivo contiene el mínimo para obtener la aplicación del balanceo que es instanciar la clase de Bot que controlará el resto del proceso:

Crear la Clase de Bot

La clase de Bot contiene el corazón del bot y configuración. Echemos un vistazo a toda la clase Bot que yo he colocado dentro de un archivo bot.py:

El fichero empieza importando las librerías necesarias: tiempo, evento y SlackClient. A continuación se creará la biblioteca de eventos.

Con las bibliotecas de importados, ahora se crea la clase de Bot. Constructor de la clase dentro de la función __init__ establece algunas variables que se utilizarán durante el resto del código. Esto incluye el slack_client, el bot_name y el bot_id.

El nombre del bot se utiliza para encontrar el ID del bot. El ID se utilizará más adelante para analizar eventos que buscan directamente el bot. Si la aplicación no puede encontrar el bot, la aplicación se sale con un error como que no se puede continuar sin el ID.

La clase de evento entonces se crea una instancia un poco más adelante en la clase. La última cosa que hace el constructor es llamar a la función de escuchar, que conecta con el sistema RTM y comienza el bucle infinito a la espera de acontecimientos que el bot va a controlar.

La siguiente función, get_bot_id, es muy similar al primer ejemplo que recorre los usuarios, esta vez encontrar el ID de nuestro bot por encontrar su nombre en la lista de usuarios y devolver el ID. En el caso de que no se puede encontrar el bot, no se devuelve, que hará que el código anterior salir porque era incapaz de encontrar el bot.

La función final de la clase de Bot es la función de escuchar antes mencionados. Esta función es muy similar al segundo ejemplo donde previamente conectado al sistema de RTM de holgura. La diferencia clave en este ejemplo es que él llama la función wait_for_event que será explorado siguiente en el evento de la clase.

Esto completa la clase del Bot, lo que es responsable de crear el SlackClient y a partir del bucle infinito a la espera de acontecimientos. Él, sin embargo, no hace nada con esos eventos, dejando esa responsabilidad a la clase de evento.

La Clase de Evento

El propósito de la clase Event es leer cualquier evento devuelto por sistema RTM de holgura. Se examinará cada evento recibida un mensaje que contiene una referencia al ID. del Bot La siguiente es la clase de evento que he colocado dentro de un archivo event.py:

Esta clase comienza importando la clase final que se estudiarán, la clase de comando. El constructor de la clase de evento recibe un único parámetro: una referencia al objeto Bot. Se almacena en una variable que se puede acceder por las otras funciones de esta clase. Dentro de la función __init__, se crea otra variable que crea una instancia de la clase de comando previamente importada.

La siguiente función, wait_for_event, es la función que fue llamada por la función de escucha de clase del Bot. Esta función Lee los eventos que se han recibido desde sistema de RTM de holgura. La función rtm_read() devuelve una matriz de eventos. La función wait_for_event chequea si el array contiene los eventos. Si lo hace, los eventos se coloca a través de y llaman a parse_event de función interna del evento.

La función parse_event recibe el evento como entrada. Procede a comprobar una propiedad en el evento denominada text. Si esta propiedad existe, entonces comprueba que la propiedad text contiene una referencia al ID. de nuestro Bot Cuando esta condición es true, esta función llama a la función final de esta clase, la función handle_event.

Antes de llamar a la función handle_event, la propiedad de text utiliza el Python función split, el separador de cadena está representada por el ID. del bot Esto convierte la propiedad text en una matriz. El primer elemento de la matriz es la cadena que contiene el texto del bot ID. El segundo elemento contiene el resto del mensaje. Este elemento se pasa a la función handle_event antes mencionados como el comando.

La función final, handle_event, acepta tres propiedades: el usuario que envió el mensaje, el comando que se envía y el canal fue enviado en.

La función de handle_event asegura que el mando y el canal contienen valores válidos. Cuando lo hacen, un mensaje de depuración amistoso se genera en la consola que indica lo que fue recibido, el canal fue enviado y usuario que lo envió.

Después del mensaje de depuración amigable, la función handle_event llama a la función principal de la clase de comando antes mencionada. El resultado de esta función se utiliza la función handle_event por hacer una llamada de API que los mensajes de la respuesta de la función de la clase de comando al canal que inició el evento.

Ahora veamos la clase de comando para ver cómo genera una respuesta personalizada basada en el comando recibido del usuario.

La Clase de Comando

Para completar nuestro bot, es el momento de crear la clase final, Comando, en un archivo de nombre command.py:

Me gusta mucho cómo esta clase resultó porque proporciona una base sólida que es fácilmente extensible para manejar muchos más comandos que describí anteriormente.

El constructor a la clase de comando crea un diccionario de claves con un acompañamiento nombre de la función que se ejecutará cuando se recibe la orden de la clase de evento. En este ejemplo abreviado, el Diccionario de comandos contiene dos comandos: saltar y ayudar. Este diccionario puede ampliarse para incluir otros comandos que desea manejar con su propio bot.

La siguiente función, handle_command, es la función que se llama cuando un evento exitoso que contiene un mensaje dirigido a nuestro bot se llama a la función de handle_event del evento clase.

La función handle_command acepta dos parámetros: el usuario que envió el mensaje y el comando. La función comienza con la construcción de una cadena de respuesta que dirigirá un mensaje al usuario que envió el comando. La función comprueba entonces que el comando recibido es un comando válido en el Diccionario de comandos definidos en el constructor.

Cuando el comando es válido, se llama la función asociada a esa orden, anexar la cadena a la variable de respuesta que creó anteriormente.

Si el comando no existe, la respuesta se agrega para indicar que el comando no es válido. También se pide la ayuda función de mando para ayudar al usuario en la comprensión de lo que manda es compatibles con este bot.

Las funciones restantes, jump y help, generan una respuesta personalizada que se enviará al usuario que ha iniciado el comando.

Como ya he mencionado en el constructor, el Diccionario de comandos se puede ampliar con un nuevo comando. Para completar que proceso, una función de acompañamiento debe ser creada es llamado automáticamente mediante la función handle_command.

Prueba del Slack Bot

Ahora que toda la codificación se completa, es hora de probar nuestro nuevo. Para empezar, debemos ejecutar nuestro script principal de Python: slackbot.py. En el símbolo del sistema, ejecute este script con el Python, por ejemplo python slackbot.py.

Esto lanzará el bot y conectar al sistema de mensajería en tiempo Real de holgura. Con éxito, se debe imprimir nuestro mensaje de depuración a la consola que indica que nuestro bot flojo está listo para recibir comandos.

Para ejecutar un comando, nuestro bot debe ser invitado a un canal público o privado. Una vez que el bot en el canal, un usuario puede saber el bot para saltar o pedir ayuda. En mi caso yo diría: @jamietest jump. Responde acertadamente el bot: @endyourif: Kris Kross te hará saltar salto.

Este bot no se limita a un solo canal. Porque analiza el canal desde el mensaje de evento, puede manejar comandos de diversos canales.

Ahora es tu turno de darle tu bot un ir y ver lo que usted puede hacer que hacer!

Conclusión

Mi bot está ahora completa. Que te he demostrado el poder de crear un bot flojo. Con las clases múltiples (Bot, evento y comando) cada uno manejando una sola preocupación, la clase de comando puede ampliarse para manejar muchos más comandos.

Para ver el código fuente completo, he creado un Repositorio de GitHub.

Recuerde, no dude en ver lo que tenemos disponibles para la venta y para el estudio en Envato Market y no dude en hacer cualquier pregunta y proporcionar sus valiosos comentarios con el avance a continuación.

El cielo es verdaderamente interminable en cómo este bot puede ser extendido. Debajo está una lista corta de ideas para ampliar la configuración inicial de las clases:

  • Para agregar un nuevo comando, sería crear una nueva función siguiendo el modelo de las funciones de jump y help dentro de la clase de comando. Cuando la función se crea, debe agregarse al Diccionario de comandos disponibles.
  • Otra gran manera de mejorar aún más tu bot es extender la funcionalidad de la función parse_event en la clase de evento. En la actualidad, esta función explícitamente busca un evento de mensaje que contiene el identificador de nuestro Bot en el texto. Esta función podría ampliarse aún más para buscar otros eventos, como team_join. Este evento podría llamar un nuevo comando (en la clase de comando) que proporciona al nuevo miembro del equipo con las políticas y documentos de incorporaciones de la empresa.
  • Por último, si usted está interesado en crear una aplicación personalizada o el deseo de crear tus propios Comandos de Slack, puede explorar creando una aplicación personalizada y agregar un usuario bot a la aplicación. Muchos de los ejemplos de código funcionan con cualquier tipo de bot.

Espero que has disfrutado este artículo sobre como crear un Bot de parafina usando Python. ¡Utilice el siguiente formulario de comentarios para que los demás lectores sepan cómo han extendido los ejemplos anteriores para crear un Bot de Slack muy robusto!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.