Desarrollando un Slack Bot anónimo con Ruby y Sinatra

A no ser que hayas vivido debajo de una piedra durante este último año, habrás oído hablar de Slack o probablemente lo estés utilizando ya en tu empresa. Para aquellos que realmente viven debajo de una piedra, deciros que Slack es una plataforma de comunicación de equipo que es fundamental en miles de flujos de trabajo de empresas. Lanzada en 2013, la tasa de adopción del producto ha sido increíblemente fenomenal. Slack cuenta con una serie de características transgresoras que la mayoría de las herramientas de comunicación existentes no ofrecen. Eso, en cierto modo, ha dinamitado su meteórico crecimiento.

Una de sus características únicas es la capacidad de crear extensiones llamadas bots para la diversión y la productividad. Con el reciente lanzamiento de la plataforma Slack, es hora de desarrollar todo tipo de extensiones y aplicaciones para Slack.

Hoy vamos a ver la manera de construir uno de esos Slack Bots por diversión en Ruby. Este bot "podría" ser útil para ti, pero el objetivo principal de este artículo es introducirte al desarrollo de bots de Slack y a que te acostumbres a su API. Sin más preámbulos, vamos a empezar.

Nuestro bot, que se llamará anonbot, permitirá a los usuarios enviar mensajes anónimos en Slack. Vamos a implementar esto utilizando la Slack's slash command API y webhook API. Estamos utilizando slash commands, porque estos mensajes serán privados y sólo se mostrarán al destinatario, incluso dentro de un canal. Luego, utilizando un web hook entrante, vamos a publicar de nuevo el contenido que nos fue enviado a través de un slash command al canal correspondiente desde el que se envió.

Configuración del proyecto

Como hemos mencionado, vamos a desarrollar esto con Ruby y Sinatra. Es una aplicación sencilla que podría construirse en Ruby puro, pero utilizamos Sinatra para simplificarlo aún más. Sinatra es un framework web ligero para Ruby que es muy útil para la creación de aplicaciones web sencillas como la nuestra.

Vamos a empezar por la creación de los archivos necesarios para nuestra aplicación, los cuales sólo dos son. Para comenzar, crea una carpeta para nuestro proyecto y crea los dos archivos mencionados a continuación en su interior:

anonbot
    |
    |-------- app.rb
    |-------- Gemfile
    |-------- config.ru

En app.rb es donde va la lógica, y Gemfile sirve para especificar los requisitos de la gema. Nos es necesario config.ru para albergarlo en Heroku, pero no es obligatorio para la funcionalidad de la aplicación.

Añade las siguientes líneas a nuestro Gemfile y estaremos listos para hacer commit del proyecto en Git.

source "https://rubygems.org"
 
gem "sinatra"
gem "httparty"

La gema Sinatra es para el framework, y necesitamos httparty para enviar el mensaje anónimo al webhoook entrante de Slack. Después de añadir las gemas, ejecuta la instalación desde dentro del directorio del proyecto.

Se habrá creado un nuevo archivo Gemfile.lock ahora. Bien, vamos a inicializar nuestro proyecto en Git y a confirmar los cambios.

git init
git add -A
git commit -m "Initial commit with gem requisites"

Implementación

Vamos al asunto. Vamos a tener un solo API endpoint, que Slack llamará cuando se invoque nuestra slash command. Abre app.rb y añádele las siguientes líneas.

require 'sinatra'
require 'httparty'
require 'json'
 
get '/anonymize' do
  postback params[:text], params[:channel_id]
  status 200
end
 
def postback message, channel
    slack_webhook = ENV['SLACK_WEBHOOK_URL']
    HTTParty.post slack_webhook, body: {"text" => message.to_s, "username" => "John Doe", "channel" => params[:channel_id]}.to_json, headers: {'content-type' => 'application/json'}
end

Suponemos que el código es bastante auto-explicativo, pero aún así vamos a explicarlo un poco. Primero requerimos las librerías necesarias, e inicializamos nuestro primer y único API endpoint. Este es el endpoint que Slack llamará cada vez que se invoque nuestro slash command personalizado.

Vamos a obtener una lista de parámetros junto con el mensaje, pero sólo nos interesarán dos de ellos:

text: el mensaje que se ha escrito siguiendo el slash command
channel_id: el canal desde el cual el usuario ha invocado el comando; lo necesitamos para ponerlo de nuevo a ese canal

El método postback se encarga de publicar el mensaje utilizando la dirección URL webhook de Slack. Especificamos el texto, y reemplazamos el nombre de usuario y el canal que se establece durante la configuración de la web hook. Hay una nueva opción que Slack introdujo en el slash command, que es una manera rápida y fácil de hacer esto en sólo dos líneas, pero lo veremos más tarde.

Al hacer esto, ya estaría lista la funcionalidad de la aplicación. Agrega las siguientes líneas a config.ru antes de confirmar los cambios.

require './app'
run Sinatra::Application

Este archivo es necesario para Heroku para reconocer el tipo de aplicación y empezar a atender las solicitudes. Vamos a confirmar los cambios:

git add -A
git commit -m "Add app functionality"

Si no tienes el cinturón de herramientas de Heroku, es el momento para instalarlo ya. Si ya lo tienes instalado, crea una app de Heroku y desplega nuestro nuevo y brillante bot.

heroku create appbot-name
heroku deploy

¡Hurra! Ya lo tenemos.

Fuente: Vinoth Kumar

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP