Ir para o conteúdo principal

1) Ferramentas de Integração do Pipefy

OBJETIVO

Descrever o processo de análise e indicar a melhor alternativa para implantação da USER STORY “Estudar uma forma de acompanhar as demandas solicitadas pelos clientes registradas no pipefy.”.

JUSTIFICATIVA

Após reunião de alinhamento do time com a gerência, identificou-se a necessidade de disponibilizar as informações presentes no pipefy para os cliente, permitindo a estes acompanhar o status de desenvolvimento das atividades planejadas e consequentemente, fornecendo uma maior transparência entre as partes envolvidas. Foi identificada a necessidade da realização de um estudo prévio da funcionalidades hoje presentes na ferramenta, para que seja identificada uma abordagem que atendam a demanda .

RESULTADOS ESPERADOS

  1. Lista contendo os dados que são disponibilizados pela ferramenta e que atendam a demanda.
  2. Maneiras das quais é possível obter esses dados.
  3. Relatório de viabilidade técnica com indicação de qual a melhor abordagem de utilização (se existir).

ENVOLVIDOS

  • Baymax (B.I. Team)

GLOSSÁRIO

  • API - Interface de Programação de Aplicações é o conjunto de rotinas e padrões estabelecidos por um software para a utilização de suas funcionalidades.
  • PIPEFY - ferramenta de controle de demandas e fluxo de trabalho atualmente utilizada pela SETIC.

PREMISSAS

  1. O Pipefy é a solução oficial adotada pela SETIC, sendo qualquer alteração nesse sentido além do escopo deste estudo.
  2. Convém disponibilizar aos clientes as informações necessárias em uma ferramenta externa ao Pipefy.

GRAPHQL

GraphQL é uma sintaxe que descreve uma maneira de solicitar dados. Ele é geralmente utilizado para entregar dados, do servidor para o cliente. O GraphQL tem três principais características:

  1. Ele permite que o cliente especifique exatamente os dados que ele quer.
  2. Torna mais fácil agregar dados de várias fontes.
  3. Usa um sistema de tipos para descrever os dados.

Com o GraphQL, o usuário pode fazer uma única chamada para buscar todas as informações que precisa. Diferente do que acontece na arquitetura REST, que é necessário fazer várias requisições para buscar as mesmas informações.

 

image-1598745127576.png
Figura 1 - Exemplo de consulta utilizando GraphQL.

ZAPIER

O Zapier é uma ferramenta de automação que permite a integração entre diversos serviços, incluindo o Pipefy. A ferramenta integra, de maneira segura, os pipes à outros aplicativos como Google Sheets, Slack, Evernote, Git Hub e muitos outros.

A ferramenta é recomendada pela própria equipe do Pipefy, porém sua utilização de maneira gratuita é restritiva, sendo necessário um investimento financeiro para melhor aproveitamento da mesma.

image-1598745231039.png
Figura 2 - Tabela de precificação da ferramenta Zapier.

PROPOSTAS

A seguir são descritas duas abordagens possíveis para a implantação, utilizando o GraphQl e o Zapier.

1. UTILIZAÇÃO DO GRAPHQL

  • AÇÕES ASSOCIADAS
    • Alinhamento com a Gerência identificando as necessidades
    • Definição de quais atributos serão utilizados
    • Estudo para definir qual abordagem para implantar a solução
    • Implantação da solução
  • COMPLEXIDADE - depende do alinhamento.
  • EXEMPLO - a partir da ferramenta disponível pelo Pipefy é possível realizar consultas de acordo com os atributos fornecidos pela documentação. As consultas realizadas estão dispostas na figura 2, a seguir.

image-1598745348922.png

Figura 3 - Exemplo de Utilização do GraphQl que atenda a demanda. Foi identificado o card,a time responsável, o status atual e quando ocorreu a movimentação.

Para a utilização por ferramentas externas é necessário montar a requisição “POST”. A seguir, um exemplo dessa requisição em Javascript e em Python.

 

var data = null;
 
var xhr = new XMLHttpRequest();
 
xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});
 
xhr.open("POST", "https://api.pipefy.com/graphql");
xhr.setRequestHeader('Authorization', 'Bearer ' + "TOKEN_FORNECIDO")
xhr.setRequestHeader("content-type", "Content-Type");
 
xhr.send(data);

Exemplo de requisição em Javascript.

 

import requests

url = "https://api.pipefy.com/graphql"
headers = {"content-type": "application/json",'Authorization': 'Bearer ' + "TOKEN_FORNECIDO"}
response = requests.request("POST", url, headers=headers)

print(response.text)

Exemplo de requisição em Python.

 

2. UTILIZAÇÃO DO ZAPIER

  • AÇÕES ASSOCIADAS
    • Alinhamento com a Gerência identificando as necessidades
    • Definição de qual a aplicação será integrada
    • Alinhamento para definir como a aplicação será disponibilizada aos clientes
  • COMPLEXIDADE - baixa
  • EXEMPLO - devido as restrições de usuário não foi possível disponibilizar um exemplo.

 

IMPEDIMENTOS E POSSÍVEIS IMPEDIMENTOS

  1. Após análise da documentação, não foram identificadas informações referentes ao número de consultas permitidas. Uma limitação no número de consultas pode impactar na usabilidade da solução. Atualizado em 01/09/2020 - segundo a DOCUMENTAÇÃO do Pipefy, a assinatura Enterprise permite requisições ilimitadas. 
  2. Não foi possível testar o número de requisições devido a indisponibilidade de um usuário para esse tipo de teste. A utilização dos usuários de produção para este teste pode acarretar em bloqueios para o mesmo.  Atualizado 01/09/2020 - Usuário disponibilizado e teste de carga realizado com sucesso.

TESTES DE VALIDAÇÃO DO GRAPHQL

Para a validação da User Story, é necessário garantir a correta utilização da API disponibilizada pelo Pipefy. Nesse caso, optou-se por realizar dois teste, sendo um de autenticação e outro de carga. Para este conjunto de testes,  utilizou-se o Pipefy SDK, ferramenta open-source (DISPONÍVEL AQUI) escrita em Python que permite a utilização dos recursos disponíveis pela API de uma maneira mais simples e intuitiva.

TESTE DE AUTENTICAÇÃO

Tendo o usuário teste sendo disponibilizado para o time, o primeiro passo é gerar um token a ser utilizado para a autenticação das requisições à API. O token pode ser gerado dentro do Pipefy (LINK) e uma vez gerado, basta copiar o valor gerado.

image-1598973741373.png

De acordo com a documentação, é necessário apenas passar o valor token no construtor, para que seja possível fazer a conexão com o serviço provido pelo Pipefy e utilizar os recursos da API.

 

image-1598973862289.png

Para a utilização, basta importar o SDK para um projeto Python. No exemplo a seguir é feita a importação, inicialização do objeto passando o token correto como parâmetro e é consultada a lista de organizações disponíveis.

import pipefy

p = pipefy.Pipefy(token='Bearer #TOKEN_CORRETO', mock_server=False)

print(p.rawQuery(query='{organizations{name}}'))

Para essa consulta, o valor de retorno a seguir está de acordo com o resultado esperado.

{'organizations': [{'name': 'DITECRO'}]}

Alterando o valor do token para um valor incorreto, o retorno a seguir está de acordo com o resultado esperado.

Traceback (most recent call last):
File ".\result.py", line 5, in <module>
raise PipefyException(response.get('error_description', response.get('error')))
pipefy.PipefyException: The access token is invalid

Após analise de ambos os valores retornados, é possível validar a utilização do Token, SDK e API, sendo necessária a realização do teste a seguir para garantir se a disponibilidade da solução encontrada atende a demanda esperada.

TESTE DE CARGA

Para o teste de carga, realizou-se uma série de mil requisições sequenciais. O valor foi escolhido considerando a utilização simultânea de dez usuários realizando cem requisições cada.

Para esse segundo teste, listamos o nome de todos os utilizadores do Pipefy pertencentes a nossa organização, resultando na seguinte consulta:

query = '{organizations{id, name, members{user{displayName}}}}'

O resultado foi obtido de acordo com o esperado.

{ "organizations":[
      {  "id":"120158",
         "name":"DITECRO",
         "members":[
            {"user":{"displayName":"Isadora Basso Badalotti"}},
            {"user":{"displayName":"DITEC Rondônia"}},
            {"user":{"displayName":"Caveiras"}},
            {"user":{"displayName":"Defensores"}},
            {"user":{"displayName":"Guardiões"}},
            {"user":{"displayName":"Tambaqui"}},
            {"user":{"displayName":"Baymax Time de BI"}},
            {"user":{"displayName":"Esquadrão Suicida"}},
            {"user":{"displayName":"BlackOps"}},
            {"user":{"displayName":"Vingadores"}},
            {"user":{"displayName":"Dark Souls"}},
            {"user":{"displayName":"Amazonas Dev"}},
            {"user":{"displayName":"Gerência Administrativa e Financeira"}},
            {"user":{"displayName":"Product Owner"}},
            {"user":{"displayName":"300"}},
            {"user":{"displayName":"Dashboard Setic RO"}}
         ]
      }
   ]
}

A primeira requisição foi realizada precisamente as 10:52:13 e a última requisição as 11:05:32, decorrendo um período de aproximadamente 13 minutos para a realização das 1000 requisições ou 76 requisições por minuto em uma máquina com configuração padrão de hardware e infraestrutura de internet.

 

CONCLUSÃO

Após análise pelos integrantes do time, foi identificado que a utilização do GRAPHQL embora mais trabalhosa, permite uma maior flexibilidade de utilização. O time então opta pela utilização desta ferramenta, sendo destacado que não foi possível validar se o número de requisições permitidos será capaz de atender as necessidades. O time indica que novos estudos sejam realizados para que essas questões sejam sanadas antes do desenvolvimento da solução.

ATUALIZADO 01/09/2020 - Após realização de novos estudos, o time constata que a ferramenta escolhida consegue suprir a demanda esperada, atendendo as necessidades da organização. Os dados estão estruturados de maneira não-relacional, sendo necessária futura análise na fase de modelagem.


REFERÊNCIAS