Boa Angeli, cê é foda.
Precisamos melhorar o atendimento no Brasil, para alcançar esse resultado, faz-se necessário um algoritmo que classifique nossos tickets (disponível em tickets.json) por uma ordem de prioridade, um bom parâmetro para essa ordenação é identificar o humor do consumidor. Pensando nisso, queremos classificar nossos tickets com as seguintes prioridades: Normal e Alta.
- Consumidor insatisfeito com produto ou serviço
- Prazo de resolução do ticket alta
- Consumidor sugere abrir reclamação como exemplo Procon ou ReclameAqui
- Primeira interação do consumidor
- Consumidor não demostra irritação
Considere uma classificação com uma assertividade de no mínimo 70%, e guarde no documento (Nosso json) a prioridade e sua pontuação.
- Um algoritmo que classifique nossos tickets
- Uma API que exponha nossos tickets com os seguintes recursos
- Ordenação por: Data Criação, Data Atualização e Prioridade
- Filtro por: Data Criação (intervalo) e Prioridade
- Paginação
- Você deverá fornecer informações para que possamos executar e avaliar o resultado;
- Poderá ser utilizado serviços pagos (Mas gostamos bastante de projetos open source)
- Organização de código;
- Lógica para resolver o problema (Criatividade);
- Performance
Para executar a aplicação é necessário ter o Docker e o Docker Compose instalados em seu sistema operacional.
Caso o seu sistema seja um linux é recomendado a execução desses comandos, a fim de que você possa executar comandos do docker sem a instrução sudo.
Para verificar o sucesso da instalação das ferramentas necessárias execute os seguintes comandos:
> docker --version
> docker-compose --version
A saída dos comandos devem representar respectivamente a versão do Docker e do Docker Compose.
Por fim, vamos construir uma imagem de teste (hello-world) para confirmar o funcionamento Docker.
docker run hello-world
A saída do comando executado deve ser semelhante a esta:
docker : Unable to find image 'hello-world:latest' locally
...
latest:
Pulling from library/hello-world
ca4f61b1923c:
Pulling fs layer
ca4f61b1923c:
Download complete
ca4f61b1923c:
Pull complete
Digest: sha256:97ce6fa4b6cdc0790cda65fe7290b74cfebd9fa0c9b8c38e979330d547d22ce1
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
Se a saída está semelhante ao exemplo acima, ótimo! Estamos prontos para começar :)
Para executar o ambiente da aplicação é necessário ir até a pasta do projeto e digitar o seguinte comando:
> docker-compose up -d
Esse comando irá realizar o build do ambiente da aplicação que consiste em um conteiner com Apache + PHP 7.2.6 em conjunto com outro container com o banco de dados orientado a documentos MongoDB.
Após a execução do comando, uma instrução em background será executada que realizará o download das dependências do projeto via composer. Para verificar o progresso dessa instrução utilize o comando:
> docker logs php
O output do comando deve ser semlhante à saída abaixo:
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 1 install, 0 updates, 0 removals
- Installing mongodb/mongodb (1.4.2): Downloading (100%)
Generating autoload files
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Generated optimized autoload files containing 77 classes
Caso a saída seja semelhante, ótimo! Os containers já foram construídos e as dependências já foram adicionadas ao projeto :)
Após a construção do ambiente da aplicação, basta acessar http://localhost:80 para visualizar o painel principal da aplicação.
O painel possui 2 cards, o primeiro exibe algumas informações sobre o processo de classificação dos tickets em conjunto com a resposta do serviço de classificação que pode ser requisitado manualmente através do arquivo /services/classifier.php.
O segundo quadro apresenta um formulário com campos de ordenação, paginação e filtros dos tickets. Para realizar uma requisição para a API (localizada em /services/api.php) com os filtros escolhidos basta clicar no botão no cabeçalho do respectivo card denominado de "Buscar". A resposta da requisição será exibida no quadro abaixo do formulário.
A prioridade dos tickets foi definida manualmente com base nas informações enviadas, os registros foram salvos no arquivo /files/tickets.json e a prioridade definida é representada pelo atributo priority.
O classificador implementado utiliza de dois pesos para realizar a predição:
- Quantidade de palavras negativas encontradas nas interações;
- A porcentagem de tempo excedido em comparação ao tempo médio de um ticket (36,8 dias).
As palavras consideradas como negativas foram extraídas dos tickets após uma leitura manual. Pode-se visualizar as palavras na classe system/Classifier.class.php.
Nesse contexto o classificador realiza a seguinte verificação:
- Se o texto tiver mais de 3 palavras negativas ou o tempo excedido for maior ou igual a 11% o ticket é classificado como prioridade Alta, caso contrário, o mesmo o será classificado como prioridade Normal.
Durante o processo de classificação as informações utilizadas são armazenadas no atributo classification e a classe sugerida pelo classificador é representada pelo atributo suggested_priority.
Os tickets classificados são salvos no arquivo /files/classified_tickets.json e no banco de documentos MongoDB para que possam ser consultados por intermédio da API.
URL: /services/api.php Método: GET
- filter: JSON
{
"start": "2017-12-02",
"end": "2017-12-30",
"priority": "Normal"
}
- orderBy: JSON
{
"field": "DateCreate",
"mode": "DESC"
}
- pagination: JSON
{
"qtd": "10",
"page": "1"
}
{
"pagination": {
"total_of_tickets": 12,
"number_of_pages": 2,
"current_page": 1,
"tickets_per_page": 10
},
"data": [
{} ... {}
]
}
Caso encontre algum erro durante a execução de um dos serviços (classifier ou api), o composer pode ter encontrado algum problema durante a gestão de dependências do projeto. Para solucionar possíveis erros execute os seguintes comandos:
> docker exec -it php bash
O comando irá exibir o console do container php, dentro do terminal execute os comandos:
composer update
composer dump-autoload -o