Criando um bot para Slack usando CoffeeScript e Yeoman

Desde setembro nossa equipe vem trabalhando com a plataforma Slack para se comunicar. Plataformas como o Slack e o HipChatpromovem a comunicação através de conversas em grupos privadas, conversas em canais, conversas privadas e o melhor de tudo: permite integração com outros aplicativos através da sua API. Com essas plataformas você pode fazer integrações como por exemplo o Google Calendar, Google Hangout, Google Drive, GitHub, Jenkins, Trello, Twitter, ZenDesk … e mais um monte de outras integrações. Com o Slack por exemplo, fica fácil trocar arquivos, abrir uma conferência ou conversar em um canal com um determinado grupo de pessoas. O Slack também possui aplicativos que permitem que você o utilize da forma que mais preferir: integrado ao Chrome, no Android, no iOS, no browser e etc…

Mas o objetivo desse post não é falar sobre o Slack. Iremos falar sobre como criar bot’s para rodar no Slack. Bot’s além de serem divertidos de programar, podem ajudar o seu time de desenvolvimento a se tornar mais produtivo.

Como funciona um bot?

Os bot’s aparecerão na listagem de usuários da plataforma de comunicação e eles podem desempenhar quaisquer tipos de tarefa que você possa programar, e caso você não queira programar um do zero, poderá utilizar um dos vários scripts que possuem no projeto Hubot ScriptsHubot-Scripts. Existem scripts prontos para que o bot ajude a lembrar das daily meetings, para pesquisar uma determinada imagem no Google Images, para solucionar equações, para traduzir palavras… enfim, você poderá falar com o bot (enviar um comando) para que ele desempenhe uma função (programação).

Nós integramos com algumas bibliotecas já prontas e criamos umas próprias visando eliminar alguns desperdícios em nosso processo de trabalho, na imagem abaixo você pode conferir um pouco do que é possível fazer com um Slackbot:

No exemplo acima é um diálogo entre eu e a “Nixie”, nossa slackbot. Uma secretária virtual. Ela agenda e lembra sobre alguns compromissos, informa sobre as pastas dos projetos, faz algumas coisas burocráticas de RH, interpreta algumas informações de alguns quadros no Trello e de outros sistemas e etc.

Criando o bot

Nota: O Yeoman é um gerador de código que roda no Node.JS, por isto você precisará ter o Node.JS instalado.

  1. Iremos utilizar o projeto Yeoman para criar o nosso bot.
npm install -g hubot coffee-script yo generator-hubot

2. Agora podemos criar o nosso projeto. Ao ser criado, o próprio console irá lhe pedir algumas informações como o nome do hubot, o nome do autor e etc.

yo hubot

3. Após criar o template, um arquivo “example.coffee” será criado na pasta scripts. Por padrão, isto deve chegar até você comentado.

4. Pronto! Até aqui já temos um bot funcional. Basta executar o comando abaixo para ver o bot funcionando com o script de exemplo criado pelo Yeoman (executando a parte que eu descomentei).bin/hubot

Como podem ver, o código é bem simples. Na imagem acima, mostra o bot respondendo ao comando que eu enviei pra ele com um minuto de atraso.

5. Agora, para publicarmos o app precisaremos instalar o adaptador do Hubot para o Slack:

npm install hubot-slack --save

Configurando o Slack para receber o bot

  1. Acesse o seu Slack e clique em “Get Slack Apps” e então selecione o “Hubot”.

2. Agora adicione uma nova configuração para o seu bot. Nesta página, você poderá dar uma foto para o seu bot, um nome, informar em quais canais ele participa e etc.

Configurando o ambiente de produção

Antes de começarmos, é importante que o bot precisa ser hospedado como um aplicativo normal. Neste caso, mostrarei como hospedar o aplicativo utilizando a plataforma de cloud Heroku. O bom do Heroku é que existe uma instância gratuita. Além de hospedar a aplicação, o Heroku baixará o código-fonte do GitHub e fará o deploy do aplicativo a cada commit , atualizando o bot no Slack automaticamente.

Obs: Você poderá usar também o Microsoft Azure, Amazon o outra plataforma que preferir, neste caso, tendo que adaptar as etapas referentes ao Heroku.

  1. Criando um novo app no Heroku:

2. Após criado o aplicativo, vá em Resources e em seguida pesquise por “Redis Cloud” para instalar.

3. Agora precisamos obter as configurações o HUBOT_SLACK_TOKENe REDISCLOUD_URL. Você poderá fazer isto, clicando na aba “Settings” e copiando os valores (que eu deixei embaçado).

4. Ainda na página “Settings” copie o Heroku Domain da sua aplicação (iremos precisar disto também mais adiante). Essa URL poderá ser utilizada posteriormente para “levantar a aplicação”.

5. Retorne ao terminal e vincule o seu Heroku Domain:

heroku config:add HEROKU_URL:SUA_URL_DO_HEROKU_AQUI

6. Vincule também a chave Hubot Slack Token:

heroku config:add HEROKU_SLACK__TOKEN=SEU_SLACK_TOKEN_AQUI ./bin/hubot/ --adapter slack

7. Você poderá conectar o seu app no Heroku com o seu GitHub para fazer o deploy automático.

Bem é essencialmente isto. Se você não habilitou o deploy automático no Heroku a cada código versionado no GitHub, poderá fazer isto manualmente pelo painel da plataforma de cloud. Após feito o deploy, basta acessar a URL do seu Heroku e ele deverá aparcer na sua listagem de usuários do Slack.

Espero que tenha sucesso com o seu bot!