Tuesday, July 28, 2015

Slack - O que é e formas de usar


1 - Índice
2 - Por que foi feito
3 - Como foi feito
4 - O que foi feito
5 - Exemplos de uso
5.1 - Integrando com sistemas suportados
5.2 - Implementando integração com novos sistemas
5.3 - Outgoing WebHooks e Comandos
6 - Conclusão

Com o crescente número de sistemas que utilizamos e assuntos que lidamos no dia-a-dia, passamos a distribuir as informações através de várias formas de comunicação,  e-mails, arquivos e documentos na nuvem. Essa distribuição prejudica a comunicação e eficiência geral da equipe.
O Slack permite que uma empresa/grupo de pessoas possa se comunicar de forma eficiente.

Algumas coisas que o Slack utiliza, para melhorar a eficiência da comunicação:

1 - Conversas por tópicos (canais)
2 - Filtro de notificações
3 - Integrações com outros sistemas
4 - Busca inteligente

Através da criação de canais, combinado com filtro de notificações e integração com outros sistemas, permite que um assunto seja visto de forma completa,  com acesso rápido a arquivos do Dropbox (só arrastar ou colar o link que ele já "entende"), arquivos do Google Docs e dezenas de outros sistemas.

Exemplos de uso

Nós da Martin.labs, trabalhamos com o desenvolvimento de software. Para gerir esse desenvolvimento, utilizamos um software chamado Jira.
Todos nossos projetos existem neste sistema. Nós usamos um "quadro" que resume tudo que deve ser feito até determinada data (um ciclo destes leva em média 2 semanas), e neste quadro, ficam coisas como "Design tela do mapa", "WS - Cadastro App".
Este sistema é ótimo e supri todas as nossas necessidades, porém, coisas como e-mail, Skype, Google Docs e Dropbox continuam sendo necessárias, principalmente para nos comunicarmos com pessoas de fora da empresa.
Em resumo, nossa comunicação era:
Jira para trabalho, Skype para conversas e dúvidas, E-mail para falar com o Cliente, Dropbox para arquivos, Google Docs para documentos compartilhados fora da empresa.

Não conseguia lembrar qual era aquele site importante, que eu mandei para um grupo ou pro meu colega. Não encontrava coisas que precisavam ser encontradas. As vezes era necessário buscar em todos sistemas para encontrar uma informação. A solução? Slack.

Integrando com sistemas suportados.

Para integrar com sistemas suportados pelo Slack, como Google Docs, Dropbox, JIRA e muitos outros, basta acessar seu Slack e ir em "Configure Integrations". Selecione o serviço que deseja integrar, e em alguns segundos você já terá tudo funcionando. É necessário autorizar o Slack a acessar seus arquivos (Dropbox, por exemplo).
Assim que você integrar com Dropbox, faça um pequeno teste, jogue um link do Dropbox em uma conversa e veja o que acontece :)

Integrando com novos sistemas -
Incoming WebHooks - Enviando informações para o Slack

Para seu sistema falar com Slack, é extremamente simples. Na maior parte dos casos, exige um mínimo de conhecimento em programação.
Para seu novo sistema poder falar com Slack, primeiro vamos criar a porta de entrada nas integrações do Slack.
Vá até Integrações, e procure por "Incoming Webhooks".  Adicione um novo hook e selecione o canal para onde as notificações serão enviadas.
A seguir, personalize um pouco a integração, alterando as propriedades como nome, descrição e ícone, e muito importante, salve a URL do hook.

O segredo do Slack, é que toda autenticação está embutida na URL gerada, você não precisa adicionar headers a requisição, OAuth 2.0, nada disso. Basta enviar a mensagem formatada para a URL e ela irá aparecer no Slack.
Um exemplo disso, é o nosso site. Anteriormente, todos contatos eram enviados para nosso servidor, que enviava para uma caixa de e-mail. Como era uma caixa de e-mail "alternativa",  as vezes levavam algumas horas até que detectássemos que algo havia chegado.
Alteramos para, invés de mandar e-mail, publicar em um canal do Slack utilizar Slack, e os ganhos foram instantâneos. Com um web-service muito simples, e pouquíssimas linhas de código, nosso site agora envia informações direto para nosso canal de atendimento do Slack, onde é visível para todos e ainda é possível conversar sobre o assunto.


O código para fazer isso é muito simples, basta enviar uma requisição POST, com um parâmetro chamado "payload".  Muito fácil de fazer.
Esta é a classe Java que nós utilizamos para enviar requisições para o Slack:

import com.goebl.david.Webb;
import com.google.gson.Gson;

/**
 *
 * @author ricardoprado
 */
public class SlackUtils {
    public void publicarEmCanal(String mensagem, String url){
        Webb webb = Webb.create();
        Gson gson = new Gson();
        Payload payload = new Payload(mensagem);
        webb.post(url).param("payload", gson.toJson(payload)).ensureSuccess().asVoid();
    }
}

class Payload{
 
    private String text;

    public Payload(String text) {
        this.text = text;
    }
 
}


Outgoing WebHooks e Comandos

As funções Outgoing Hooks e comandos são muito similares. Ambas permitem que o Slack notifique um sistema externo, a partir de uma instrução dada no Slack.
A principal diferença entre comandos e outgoing hooks, é que os comandos são pessoais, apenas você vê o resultado do seu comando, já os outgoing hooks, publicam resultados em um canal compartilhado.

Os comandos e os outgoing hooks funcionarão da mesma maneira: você digita uma palavra / frase e, ao detecta-la, o sistema irá acionar a URL que você configurou, enviando junto com o comando, todo o texto que foi digitado. É o seu papel, ao desenvolver a integração, "interpretar" o que foi enviado junto com a mensagem.
Exemplo:

'/CalcularTrajeto' e 'trajeto:' são respectivamente um comando e um trigger para outgoing hook.
Para usar essa função, a pessoa precisará digitar "trajeto: rua teodoro sampaio, 744, sp, até avenida Bartolomeu de Gusmão, 540, Santos, sp". Neste caso, o formato precisa ser este, caso contrário, o servidor não conseguirá interpretar os dados (cada um implementa da forma que achar melhor).

 public String calcularTrajeto(SlackIncomingPayload payload){
        String origemEscapada, destinoEscapado;
        String urlGoogle = "http://maps.googleapis.com/maps/api/directions/json";
        String[] origemDestino = payload.getText().split(" ate ");
        origemDestino[0] = origemDestino[0].replace(payload.getTrigger_word(), "");
     
        origemEscapada = origemDestino[0].replace(" ", "+");
        destinoEscapado = origemDestino[1].replace(" ", "+");
     
        Webb webb = Webb.create();
        Response<String> response = webb.get(urlGoogle)
                .param("origin", origemEscapada)
                .param("destination", destinoEscapado)
                .param("units", "metric")
                .ensureSuccess()
                .asString();
        GoogleMapObject mapObject = gson.fromJson(response.getBody(), GoogleMapObject.class);
     
        String texto = "Distância de " + origemDestino[0] + " até " + origemDestino[1] + " estimada em " + mapObject.routes.get(0).legs.get(0).distance.text;
        SlackOutgoingPayload payloadSaida = new SlackOutgoingPayload(texto);
        return gson.toJson(payloadSaida);
    }
 



Neste caso, não está trazendo muita utilidade, porém essa ferramenta pode ser utilizada para melhorar a eficiência de alguns processos, como enviar um e-mail ou fazer deploy de sua aplicação em um servidor de testes.


Conclusão

O Slack é uma poderosa ferramenta de comunicação de integração. Além de ter uma interface extremamente bem cuidada, uma grande atenção para os detalhes, a facilidade de integração com novos serviços e a disponibilidade de um ótimo plano gratuito torna o Slack uma ótima opção para qualquer grupo de pessoas que pretende melhorar sua eficiência e comunicação.
Não deixamos de utilizar nenhuma das ferramentas que utilizávamos antes, porém, passamos a obter um valor maior de cada uma delas.




No comments:

Post a Comment