Cómo construir un slackbot básico: una guía para principiantes

Actualización: el código y el tutorial se actualizaron el 28 de junio para reflejar los cambios de la API de Slack .

Slackbots: ¿Por qué usarlos?

Antes de pasar a la parte del tutorial de esta publicación, echemos un vistazo a por qué este puede ser un proyecto y una herramienta valiosos.

Slack es una herramienta cada vez más popular para la comunicación en todo el equipo. Ha crecido para incluir complementos para otras herramientas de gestión de proyectos ampliamente utilizadas, como JIRA, Google Drive y similares. Cualquier usuario de Slack lo sabe: cuanto más pueda hacer desde la conversación, mejor.

Los usos comunes de un slackbot van desde un simple notificador para cuando se completa una tarea (como una compilación de prueba o cuando su almuerzo está listo) hasta bots interactivos basados ​​en botones que ejecutan comandos a voluntad del usuario. Puede crear mecanismos de sondeo, bots conversacionales y más.

Configurar un entorno de programación de Python

Si es un usuario de Windows y no ha usado Python antes, deberá instalarlo. Usuarios de Linux / Mac: ¡Unix viene con python!

Una vez instalado, encienda su terminal y escriba pythono python3(si tiene varias instalaciones) para asegurarse de que funciona y está allí.

También verifique que tenga un buen editor de texto para código: sublime y atom son excelentes opciones.

Opcional: también puede ser útil trabajar en un entorno virtual; es una buena práctica para cuando tiene muchas dependencias.

pip install virtualenv virtualenv tutorial source tutorial/bin/activate

También debe bifurcar el repositorio de GitHub del tutorial y clonarlo en su máquina local, ya que usaremos ese código como marco para este tutorial.

Para hacer esto, vaya al repositorio y haga clic Forken la esquina superior derecha. El repositorio bifurcado debería ser / slackbot-tutorial . Presiona el Clone or downloadbotón verde a la derecha debajo de la barra de estadísticas y copia la URL. Regrese a la terminal para clonar el repositorio:

cd Desktop/ git clone //github.com/yourusername/slackbot-tutorial.git cd slackbot-tutorial/ sublime . (or open your text editor and open this directory)

Aplicaciones de Slack

Hay dos formas de crear su slackbot: bots independientes o aplicaciones de Slack. Las aplicaciones permiten una gama más amplia de funciones en el futuro y es la ruta recomendada por Slack para crear un usuario de bot.

Ve a //api.slack.com/apps y presiona Create New Appen la esquina superior derecha. Dale un nombre y elige un espacio de trabajo donde puedas crear un canal para probar tu bot. Siempre puedes reconfigurar tu bot para otro espacio de trabajo más tarde, o incluso publicarlo en el directorio de aplicaciones de Slack.

Recomiendo crear un canal de #prueba en un espacio de trabajo que cree solo con fines de desarrollo, o uno que tenga relativamente pocos usuarios a los que no les importaría que probara algo.

Lo primero que querrá hacer es obtener el token de bot. Cuando llegue a la página anterior, haga clic en Bots. Agregue algunos alcances; estos determinan qué permisos tendrá el usuario del bot de su aplicación. Para empezar, chatea: escribeysoy escrituraprobablemente sean suficientes.

Ahora, para obtener tus tokens, querrás ir a OAuth & Permissionsen la barra lateral izquierda.

Aquí podrás Install the App to the Workspacegenerar los tokens necesarios. Como regla general, los tokens de bot comienzan conxoxb-.

También querrá el secreto de encendido , que se encuentra en Información básica> Credenciales de la aplicación.

Actuando como tu Bot

Ahora tiene las credenciales necesarias para realizar llamadas a la API y actuar como su bot. Para probar esto, encienda una terminal y ejecute esto (con el token y el nombre del canal correctos):

curl -X POST \ -H 'Authorization: Bearer xoxb-your-token' \ -H 'Content-type: application/json;charset=utf-8' \ --data '{"channel":"#test","text":"Hello, Slack!"}' \ //slack.com/api/chat.postMessage

Si va a ese canal en su espacio de trabajo de Slack, ¡ahora debería ver un mensaje de su bot! Acaba de realizar una solicitud HTTP POST: le pidió a un servidor que publicara un mensaje en algún lugar.

Programando el Bot

Queremos hacer lo anterior programáticamente. Hay algunas formas diferentes de configurar un slackbot. Cubriré lo siguiente:

  • Activado periódicamente (en un horario) para decir algo
  • / comandos de barra

El segundo requiere un servidor en ejecución, mientras que el primero no.

Mensajes programados

Supongamos que desea enviar un mensaje periódicamente a algún lugar, tal vez todos los lunes por la mañana. Ve al editor de texto donde abriste slackbot-tutorial.

Debería ver un archivo scheduled.py. Eche un vistazo: sendMessagees una función que activa la llamada a la API para aflojar y publica un mensaje. En la parte inferior, verá el método principal: qué se ejecuta cuando ejecuta el script. Aquí, verá algunas cosas para tener en cuenta:

  • SLACK_BOT_TOKENse extrae de os.environ['SLACK_BOT_TOKEN']- ¿cómo? Ejecute export SLACK_BOT_TOKEN="xoxb-your-token"en su terminal para establecer esta variable.
  • aquí se utiliza un planificador y hay un bucle infinito que comprueba si hay eventos en el planificador. De forma predeterminada aquí, he programado la sendMessagefunción para que se llame cada minuto.

Para probar esto, regrese a la terminal donde se encuentra en el slackbot-tutorialdirectorio y ejecute

export SLACK_BOT_TOKEN="xoxb-your-token" python scheduled.py

Debería ver la impresión de los mensajes de registro. Asegúrate de haber cambiado channel=#testel código al nombre de tu canal de prueba (si es diferente) y agregado tu bot (en el canal slack, escribe /invite @botname. ¡Deja que se ejecute durante un par de minutos y mira cómo aparecen los mensajes en Slack!

Esta es, por supuesto, una implementación súper básica de un remitente de mensajes programado; de hecho, puede hacer esto solo con slackbot /remind #test “Hello, Slack!” every Monday at 9am.

El verdadero poder aquí es que puede sustituir en cualquier función sendMessage, aprovechar el poder de interactuar con servicios externos a través de API, hacer matemáticas, etc. y luego construir un mensaje para publicar.

Comandos de barra

Este requiere un poco más de configuración: vuelva a la configuración de la aplicación> Comandos de barra. Cree un nuevo comando de barra oblicua: por ejemplo /test,. Para la URL de solicitud, necesitará implementar este servidor web (yo uso Heroku) o ejecutar una ngrokinstancia local para probarlo. Este último lo ejecutará localmente y es mejor para realizar pruebas. Puede brew install ngrokobtenerlo desde aquí.

En el repositorio de código de inicio, busque para slashCommand.pycomenzar a comprender este método. Para iniciar el servidor, ejecute python server.py. La URL de solicitud para poner en Slack la proporcionará su ngrokinstancia y @app.routesu código; sería algo así como //a1234b5cde6f.ngrok.io/ slack / test (la parte en negrita proviene de la ruta definida en el código). Debería poder probar los comandos de barra en su espacio de trabajo de Slack. Desde el código del tutorial, intente /test.

Avanzando

Ahora tiene un slackbot muy básico que opera con un comando o se ejecuta de vez en cuando. ¡Sea creativo con la forma en que lo usa! Piense en qué más puede vincular este esqueleto para que sea más útil.

Otras formas en que su bot podría responder

  1. Las acciones / respuestas pueden desencadenarse mediante menciones o determinadas frases. Esto requiere ejecutar un servidor y escuchar los mensajes en algún lugar.
  2. Tu bot podría ser conversacional y podría contribuir a los hilos. ¡Eche un vistazo a PNL para comenzar a tener una conversación inteligible! Word2Vec + TensorFlow o Keras podrían ser un lugar para comenzar. DialogFlow también es genial.
  3. Conéctelo con algunas otras API. Tal vez desee poder interactuar con una hoja de Google y ejecutar algunos cálculos. Es posible que desee enviar un mensaje a otros usuarios en función de algunas acciones. Integrar botones. Tal vez desee activar mensajes basados ​​en otra cosa.