Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. Node.js
Code

Construir un Slack Bot con Node.js

by
Length:LongLanguages:

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

Slack se está convirtiendo en el nuevo estándar para comunicarse con los equipos de la industria. De hecho, es tan popular que cuando yo juego en Google, como esperaba, el primer resultado fue la definición de la palabra del diccionario. ¡Esto fue seguido inmediatamente por el sitio web de Slack!

Esto es casi algo inaudito para palabras más comunes en el Diccionario de inglés. Por lo general, definición de Google seguido de varios enlaces a los sitios web de diccionario superior.

¿Qué es Slack?

En su forma más básica, Slack es un sistema de mensajería. Permite mensajes directos a los miembros del equipo y la creación de canales (públicos o privados) que permiten la colaboración y comunicación fácil equipo en tiempo real. Para más información sobre Slack, puede ver Características de Slack.

En este punto, tal vez se pregunte de donde viene Node.js. Como ya he mencionado, en su forma más básica, Slack es un sistema de mensajería; sin embargo, puede ser infinitamente extendido y modificado para requisitos particulares. Slack ofrece un sistema muy flexible para personalizar la integración de su equipo, incluyendo:

  • crear mensajes de bienvenida personalizados
  • crear emojis personalizado
  • instalar aplicaciones de terceros
  • crear tus propias aplicaciones
  • creación personalizada de Slack Bots

En este artículo, voy a demostrar cómo crear un Slack Bot con Node.js que pueden agregarse a la configuración Slack de su equipo.

Slack Bots Definidos

Trabajo de un Slack Bot es recibir eventos de holgura y las manejan. Hay una gran cantidad de eventos que será enviado a tu Bot, y aquí es donde se vienen Node.js. Tenemos que decidir no sólo qué eventos para manejar, sino cómo controlar cada evento individual.

Por ejemplo, algunos eventos comunes que se ocuparía un Bot son:

  • member_joined_channel
  • member_left_channel
  • Mensaje

En este artículo, creo una aplicación de Node.js y un Slack Bot que se puede Agregar a su proyecto de equipo para realizar acciones específicas, basados en los eventos que recibe.

Para empezar, necesito crear un Bot en Slack. 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 se planea escribir y publicar una aplicación en holgura. Dado que deseo este bot sea privada para mi equipo, bastará con un bot personalizado.

Crear un Slack Bot 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 Slack antes de proceder. Si no tienes una cuenta de Slack, 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-. O copiar este símbolo (token) en un lugar seguro para utilizarlo más adelante o simplemente deje esta página abierta hasta que necesitamos el token para la aplicación de Node.js.

Configuraciones

Antes de pasar al código, se requieren dos configuraciones más de Slack:

  1. Crear o elegir un canal existente que tu bot interactuará con. Estoy probando mi nuevo bot, decidí crear un nuevo canal. Asegúrese de recordar el nombre del canal como lo necesitará dentro de su aplicación poco.
  2. Añadir/invitan a tu bot al canal por lo que puede interactuar con él.

Ahora que tengo mi Bot de holgura configurado, es tiempo de pasar a la aplicación de Node.js. Si ya tienes instalado Node.js, usted puede mover al siguiente paso. Si no tienes instalado Node.js, sugiero que comenzar por visitar la página de Descarga de Node.js y seleccionar al instalador de su sistema.

Para mi Bot de flojo, voy a crear una nueva aplicación de Node.js ejecutando a través del proceso de npm init. Con un símbolo que se establece en donde desea que la aplicación a instalar, puede ejecutar los siguientes comandos:

Si no está familiarizado con el npm init, este lanza una utilidad para ayudarte a configurar tu nuevo proyecto. Lo primero que pide es el nombre. Por defecto mío a slackbot, que me siento cómodo con. Si desea cambiar su nombre de la aplicación, ahora es la oportunidad; de lo contrario, presione Enter para continuar con el siguiente paso de configuración. Las siguiente opciones son versión y descripción. He dejado tanto como el valor por defecto y simplemente continuó presionando Enter para ambas de estas opciones.

Puntos de Entrada

Lo siguiente que se pide es el punto de entrada. Esto por defecto index.js; sin embargo, muchas personas les gusta utilizar app.js. Desea entrar en este debate y dada mi aplicación no requiere una estructura de proyecto intensivo, voy a dejar minas como el defecto de index.js.

Después que ha recuperado de un debate que es probablemente tan fuerte como las tabs y espacios, la configuración sigue, varias preguntas más:

  • comando de la prueba
  • repositorio git
  • Palabras clave
  • autor
  • licencia

Para los efectos de este artículo, he dejado todas las opciones como su defecto. Finalmente, una vez que se han configurado todas las opciones, se muestra una confirmación del archivo package.json antes de crearlo. Pulse Enter para completar la configuración.

Entrar en el SDK

Para hacer interactuar con holgura, también voy a instalar el paquete de Kit de Desarrollo de Slack como sigue:

¿Usted está finalmente listo para algún código? Estoy seguro. Para empezar, voy a usar el código de ejemplo del sitio web del Kit de desarrollador de holgura que los mensajes de un mensaje de parafina utilizando la API de Mensajería en Tiempo Real (RTM) con unos pocos ajustes.

Dado que el punto de entrada que escogí fue index.js, es tiempo de crear este archivo. El ejemplo del sitio web del Kit de desarrollador de holgura es de aproximadamente 20 líneas de código. Voy a romper varias líneas a la vez, sólo para permitir que las explicaciones de lo que están haciendo estas líneas. Pero ten en cuenta que todas estas líneas deben ser contenidas en su archivo index.js.

El código comienza por incluyendo dos módulos desde el Kit de Desarrollador de Slack:

El RtmClient, una vez instanciado, será nuestro objeto de bot que hace referencia a la API de RTM. Los CLIENT_EVENTS son los eventos que el bot se escucha para.

Una vez que estos módulos se incluyen, es el momento de instanciar e iniciar el bot:

Asegúrese de reemplazar el API Token que está ofuscado por encima con su token obtenido durante la creación del Slack Bot.

Llamar a la función de start en mi RtmClient se inicializa sesión del bot. Esto intentará autenticar mi bot. Cuando mi bot ha conectado con éxito a Slack, se enviarán eventos permitiendo que mi aplicación a proceder. Estos eventos se mostrarán momentáneamente.

Con el cliente crea una instancia, se crea una variable de channel para llenar momentáneamente dentro de uno de los eventos CLIENT_EVENTS.

La variable de channel se utilizará para realizar acciones específicas, como el envío de que un mensaje en el canal el bot está conectado.

Cuando se inicia la sesión de (rtm.start();) y un API Token válido para que el bot, se enviará el mensaje RTM.AUTHENTICATED. La siguiente que escuchar varias líneas para este evento:

Cuando la RTM.AUTHENTICATED del evento, el código anterior realiza un for bucle a través de la lista de canales de equipo de Slack. En mi caso, específicamente estoy buscando jamiestestchannel y asegurar que mi bot es un miembro de ese canal. Cuando se cumple esa condición, el ID del canal se almacena en la variable de channel.

Depuración

Para ayudar en la depuración, se registra un mensaje de consola que muestra un mensaje indicando que el bot ha autenticado correctamente mostrando su nombre (${rtmStartData.self.name}) y el nombre de equipo (${rtmStartData.team.name}) pertenece a.

Una vez que el bot ha autenticado, se desencadena otro evento (RTM. RTM_CONNECTION_OPENED) que significa el bot está completamente conectado y puede comenzar a interactuar con holgura. Las siguientes líneas de código crean el detector de eventos; ¡con éxito, un Hola! se envía mensaje al canal (en mi caso, jamiestestchannel).

En este punto, yo puedo ejecutar mi aplicación de nodo y ver mi bot automáticamente publicar un nuevo mensaje a mi canal:

Los resultados de la ejecución de este comando (al éxito) son dos:

  1. Recibo mi mensaje de depuración que indica que mi bot ha ingresado con éxito. Esto originó de la RTM.AUTHENTICATED se desencadenó después de iniciar al cliente RTM.
  2. ¡Recibir un Hola! mensaje en mi canal de parafina. Este se produjo cuando la RTM. RTM_CONNECTION_OPENED evento mensaje fue recibido y manejado por la aplicación.

Antes de continuar y seguir mejorando mi solicitud, ahora es un buen momento para recapitular lo que he hecho para llegar tan lejos:

  1. Creado un Bot personalizado de Slack.
  2. Crear un canal personalizado de Slack e invitó a mi bot a él.
  3. Crea una nueva aplicación de Node.js llamada slackbot.
  4. Instalado el paquete de Kit de Desarrollo de Slack a mi aplicación.
  5. Creado mi archivo index.js que crea un RtmClient con mi API Token de mi bot personalizado.
  6. Crea un detector de eventos para RTM.AUTHENTICATED que se encuentra el canal de holgura mi bot es miembro de.
  7. Crea un detector de eventos para RTM. RTM_CONNECTION_OPENED que envía un Hola! mensaje a mi canal de Slack.
  8. Llamado método RTM iniciar sesión para iniciar el proceso de autenticación que es manejado por mi detectores de eventos.

Construcción del Bot

Ahora es el momento para la verdadera diversión comenzar. Ofertas (no contar) de parafina por lo menos 50 diferentes eventos que están disponibles para mi bot personalizado escuchar y manejar opcionalmente. Como se puede ver en la lista de eventos de holgura, algunos eventos son personalizados a la API de RTM (que estamos utilizando), mientras que otros eventos son personalizados a la API de Eventos. En el momento de escribir este artículo, es mi entendimiento que el SDK de Node.js sólo soporta RTM.

Para terminar mi bot, se encargará del evento de message; por supuesto, esto es probablemente uno de los eventos más complicados ya que soporta un gran número de subtipos que exploro en el momento.

Aquí está un ejemplo de lo que parece el evento de message más básico de Slack:

En este objeto básico, las tres cosas más importantes que me importan son:

  1. channel. Quiero asegurar que este mensaje pertenece al canal de de que mi bot es una parte.
  2. El usuario. Esto me permitirá interactuar directamente con el usuario o realizar una acción específica basada en quién es el usuario.
  3. text. Esto es probablemente la pieza más importante ya que contiene el contenido del mensaje. Mi bot tendrá que responder sólo a ciertos tipos de mensajes.

Algunos mensajes son más complicados. Pueden contener muchas características secundarias tales como:

  • edited: un objeto secundario que describe que el usuario editado el mensaje y Cuándo ocurrió.
  • subtype: una cadena que define una de las muchas diversas clases, tales como channel_join, channel_leave, etcetera.
  • is_starred: un valor booleano que indica si este mensaje ha sido estrellado.
  • pinned_to: una serie de canales donde este mensaje ha sido fijado.
  • reactions: una matriz de objetos de reacción que definen lo que la reacción era por ejemplo (facepalm), cuántas veces ocurrió, y una matriz de usuarios que reaccionó de esta manera el mensaje.

Voy a ampliar mi index.js creado anteriormente para escuchar eventos de message. Para reducir la redundancia del código, los siguientes ejemplos contienen solo la porción de código relacionado con las mejoras de evento de message.

Lo primero que debe hacerse es incluir un nuevo módulo para el RTM_EVENTS que escuchaba a. He puesto esta debajo de mis dos anterior módulo incluye:

El código para controlar el evento de message que se coloca en la parte inferior de mi archivo. Para probar que el evento de message funciona correctamente, he creado un nuevo detector de eventos para el objeto del message a la consola como sigue:

Ahora puedo volver a ejecutar mi aplicación de nodo (node index.js). Cuando escribo un mensaje en mi canal, la siguiente se registra en mi consola:

Hasta ahora, bien. Mi bot está recibiendo correctamente mensajes. El siguiente paso incremental para hacer es garantizar que el mensaje pertenece al canal de en que mi bot es:

Ahora cuando ejecuto mi aplicación, sólo veo mi mensaje de depuración si el mensaje fue para el canal que mi bot es una parte.

Ahora me voy a extender la aplicación para enviar un mensaje personalizado al canal de demostrar cómo un usuario puede ser etiquetado en un mensaje:

Ahora, cuando cualquier persona tipos de un mensaje en el canal, mi bot envía su propio mensaje que se ve algo así como: ¡parada, todo el mundo escucha, @endyourif tiene algo importante que decir!

OK, no muy útil. En cambio, voy a terminar mi bot mejorando el detector de eventos de message para responder a comandos específicos. Esto se logra haciendo lo siguiente:

  1. Dividir la porción de texto de un mensaje en una matriz basada en un espacio en blanco.
  2. Compruebe si el primer índice corresponde a username de mi bot.
  3. Si lo hace, me mira el segundo índice (si existe) y tratan como un comando que debe ejecutar mi bot.

Para que sea fácil de detectar si mi bot se ha mencionado, tengo que crear una nueva variable que guardará mi bot usuario ID. A continuación es una actualizada sección de código donde previamente configurar la variable de channel. Ahora también almacena los ID de usuario de mi bot en una variable llamada bot.

Con mi conjunto variable de bot, he terminado mi bot de descarnadura hacia fuera el detector de eventos de message creado anteriormente como sigue:

El código siguiente divide la propiedad text del objeto de message en una matriz basada en un espacio. Luego de asegurarse de que tenga al menos dos elementos en la matriz, lo ideal sería mi bot y el comando a realizar.

Cuando el primer elemento de la matriz coincide con mi bot, realizar una instrucción switch en el segundo elemento de la matriz: el comando. Los comandos actuales compatibles son salto y ayuda. Cuando se envía un mensaje al canal que se ve como "salto de @jamiestest", mi bot responderá con un mensaje especial para el usuario de origen.

Si el comando no se reconoce, se caen en mi declaración caso de predeterminado para mi switch y responde con un comando genérico que tendrá el siguiente aspecto: "@endyourif, lo siento no entiendo el comando"Hola". Para una lista de comandos soportados, tipo: ayuda de @jamiestest ".

Conclusión

¡En este punto, mi bot está completa! Si usted está interesado en mejorar tu bot, aquí está una lista de ideas:

  • Manejar a un nuevo miembro del equipo de participar en el evento team_join. Cuando se une un nuevo miembro del equipo, sería una gran idea enviarles una variedad de inducción información o documentación de bienvenida al equipo.
  • Mejorar la lista de comandos soportados que he empezado.
  • Hacer los comandos interactivos mediante la búsqueda de una base de datos, Google, YouTube, etcetera.
  • Crear un usuario bot en una aplicación y crear tus propios comandos slash personalizados.
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.