
Compartilhar:
Solomon Soh é um profissional certificado pela Alteryx e pela Alibaba Cloud, com foco no desenvolvimento de soluções de IA para os setores de tecnologia de publicidade (ad-tech) e tecnologia financeira (fintech), além de problemas operacionais de negócios.
Análise de sentimento para a experiência do cliente com Python e Streamlit
Tempo de leitura: 13 minutos
Comece a aproveitar a Messages API da Vonage para melhorar o atendimento ao cliente, por exemplo, coletando comentários de avaliações em plataformas de mídia social, como o Facebook.
A análise de sentimento extrai insights a partir do feedback dos clientes por meio de técnicas de processamento de linguagem natural, a fim de determinar se os dados desse feedback são positivos, negativos ou neutros. As empresas utilizam a análise de sentimento para monitorar a percepção em relação aos produtos e à marca, além de compreender as necessidades dos clientes.
Este tutorial aborda os seguintes tópicos:
Inicializar o ambiente de testes da Messages API na Vonage
Coletar dados dos clientes pelo Facebook
Crie um bot para lidar com o feedback dos clientes no Facebook da seguinte forma:
Armazenar esses dados em um banco de dados ou arquivo de texto
Enviar respostas relevantes ao cliente
Crie um painel de controle usando o Streamlit para entender o tom dos comentários dos clientes em tempo real
Avalie a opinião dos clientes por meio de uma escala que inclua as categorias positivo, negativo e neutro
Analise os principais pontos críticos dos clientes por meio de visualização
Pré-requisitos
Criação de um bot no Facebook
A Sandbox da Messages API permite que as empresas enviem e recebam mensagens por meio de diversos canais sociais, como WhatsApp, Facebook e Viber. Ela também permite que as empresas enviem SMS e MMS por meio dessa API. Para enviar mensagens por meio de qualquer um dos canais sociais externos, você precisará de um account empresarial com cada provedor e conectá-lo à sua conta do Vonage APIs.
Para este tutorial, vamos usar o Facebook; portanto, certifique-se de ter um Account no Facebook pronto para fazer os testes.
Para começar a criar nosso aplicativo, no diretório do seu projeto, execute o seguinte comando para inicializar o projeto Node.js e, em seguida, instale as bibliotecas de terceiros necessárias:
Os comandos acima criarão package.json, package.lock arquivos, bem como um node_modules diretório. Dentro do package.json arquivo, você verá as bibliotecas que acabamos de instalar, como express e vonage/server-sdk. Veja abaixo um exemplo do que você verá:
{
"name": "facebook-bot",
"version": "1.0.0",
"description": "Sign up for a Vonage API account at ${CUSTOMER_DASHBOARD_URL}.",
"main": "index.js",
"scripts": {
"serve": "node index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@vonage/server-sdk": "^2.10.7-beta",
"body-parser": "^1.19.0",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"nedb": "^1.8.0"
},
"devDependencies": {}
}Quando uma mensagem chega do Facebook, a Vonage enviará uma solicitação HTTP para uma URL de webhook pré-configurada. Sua aplicação Node deve estar acessível pela internet para recebê-la; por isso, recomendamos usar o Ngrok.
No Terminal, execute o seguinte comando para iniciar o Ngrok na porta 3000 (Observe que a URL de redirecionamento muda sempre que o Ngrok é reiniciado; lembre-se disso caso precise reiniciá-lo):
Agora precisamos criar um aplicativo no painel. Certifique-se de adicionar um nome relevante para a finalidade do aplicativo e, em seguida, ative Messages a opção, pois esse aplicativo precisará utilizar a Messages API. Em seguida, clique no botão “Gerar chave pública e privada”. Isso fará com que seu navegador baixe um private.key arquivo. Coloque-o no diretório raiz do seu projeto. Por fim, clique no Generate new application botão; isso o redirecionará para a página de exibição do aplicativo. Faça uma cópia do Application ID exibido na página, pois ele também será necessário no código mais adiante.
Enquanto você estiver nesta página, precisamos definir as URLs dos webhooks. Um webhook é uma extensão de uma API, mas, em vez de seu código solicitar dados da plataforma de API, a Vonage envia os dados para você. Os dados chegam por meio de uma solicitação da web ao seu aplicativo, o que pode ser resultado de uma chamada de API anterior (esse tipo de webhook também é chamado de “callback”), como uma solicitação assíncrona à Messages API. Os webhooks também são usados para notificar seu aplicativo sobre eventos, como uma mensagem recebida a ser armazenada em um arquivo ou o envio de uma mensagem para o aplicativo.
Os URLs precisam ser atualizados no painel conforme mostrado abaixo (certifique-se de substituir <ngrok URL> pela sua URL do ngrok):
Webhooks de entrada:
http://<ngrok URL>/webhooks/inboundWebhooks de status:
http://<ngrok URL>/webhooks/status
Voltar para a Sandbox de Mensagens para adicionar seu Account do Facebook à lista de permissões do Sandbox do Facebook Messenger. Clique Add to sandbox e siga as instruções fornecidas na página.
Armazene suas credenciais em um .env arquivo que possa ser acessado por meio de index.js.
Em seguida, no index.js arquivo, inclua os módulos que foram instalados anteriormente, como express e Vonage server-sdk, conforme mostrado no exemplo abaixo:
const app = require('express')()
const bodyParser = require('body-parser')
const nedb = require('nedb')
const Vonage = require('@vonage/server-sdk')Em seguida, precisamos criar um banco de dados com o nome de arquivo messages.db, adicione a seguinte linha ao seu index.js arquivo:
const messages = new nedb({ filename: 'messages.db', autoload: true })Agora precisamos inicializar um novo objeto Vonage com nossas credenciais, que consistem na chave da API, no segredo da API e no ID do aplicativo, além do caminho e do nome do arquivo private.key. Também precisamos definir a URL do host da API para que aponte para a URL do ambiente de teste. No seu index.js arquivo, adicione o seguinte código:
const vonage = new Vonage({
apiKey: process.env.VONAGE_API_KEY,
apiSecret: process.env.VONAGE_API_SECRET,
applicationId: process.env.VONAGE_APPLICATION_ID,
privateKey: './private.key'
}, {
apiHost: 'https://messages-sandbox.nexmo.com'
})Vamos criar uma função chamada sendMessage, que enviará mensagens ao Facebook em resposta às dúvidas, comentários ou avaliações dos clientes. Na função, mostrada no exemplo abaixo, há um to e um from, que serão as instruções para a API. O to (ou destinatário) precisa ser o Account do Facebook incluído na lista de permissões. Adicione a função abaixo ao seu index.js arquivo:
function sendMessage(sender, recipient, text) {
const to = { type: 'messenger', id: recipient }
const from = { type: 'messenger', id: sender }
const message = { content: { type: 'text', text: text } }
vonage.channel.send(to, from, message, function(error, result) {
if(error) { return console.error(error) }
console.log(result)
})
}No exemplo acima, você verá vonage.channel.send, que envia uma mensagem com os parâmetros de to, from e a mensagem e, em caso de erro, retorna esse erro e registra a mensagem de erro.
Em seguida, precisaremos adicionar o webhook ao nosso aplicativo para monitorar o caminho /webhooks/inbound na URL, que receberá mensagens da Messages API sempre que uma mensagem do Facebook for recebida. Ele analisa e obtém o ID do Messenger do remetente a partir do corpo da mensagem, bem como o texto enviado, juntamente com o carimbo de data/hora, e insere na resposta as mensagens correspondentes, seja uma condição de erro (if-else) ou uma compreensão bem-sucedida do feedback dos usuários.
Se ocorrer um erro, a mensagem enviada de volta ao remetente será “Desculpe! Você poderia repetir?”. Por outro lado, caso o aplicativo de mensagens recupere e encaminhe a mensagem dos clientes para o aplicativo, ela será armazenada em messages.db enquanto uma resposta do tipo “Obrigado pelo seu feedback e avaliação!” será enviada aos usuários. Portanto, adicione o seguinte ao seu index.js arquivo:
app.post('/inbound', function(request, response) {
if (request.body.message.content.text.toLowerCase().trim() === 'recap') {
messages.find({'from.id': request.body.from.id }, function (error, records) {
if (error) { return console.error(error) }
const message = records.map(function(record) {
return record.message.content.text + ' (sent at ' + record.timestamp + ')'
}).join('\n\n')
sendMessage(request.body.to.id, request.body.from.id, message)
})
} else {
messages.insert(request.body, function (error, record) {
if (error) {
sendMessage(request.body.to.id, request.body.from.id, 'Sorry! Could you repeat?')
return console.error(error)
}
sendMessage(request.body.to.id, request.body.from.id, 'Thanks for your feedback and review!')
})
}
response.send('ok')
})Por fim, precisamos adicionar outro ouvinte para o /webhooks/status ponto de extremidade, que retornará a mensagem “ok”. Também precisamos adicionar a funcionalidade de escuta, que mantém o aplicativo em execução e escutando como um servidor web na porta 3000. Portanto, no final do seu index.js arquivo, adicione o seguinte:
app.post('/status', function(request, response) {
console.log(request.body)
response.send('ok')
})
app.listen(3000)Agora é hora de testar seu aplicativo! Primeiro, você precisa executar seu aplicativo web; no Terminal, execute o seguinte comando:
Agora, se você acessar Facebook Messenger, procure o usuário “Vonage Sandbox” e envie uma mensagem para ele. Você receberá uma resposta no Messenger.
Analisar o feedback dos usuários
Os dados do Facebook dos clientes, obtidos por meio do ambiente de testes da Vonage, são armazenados no messages.db arquivo. Em uma demonstração simulada, um usuário fez críticas aos produtos e serviços de uma empresa de serviços personalizados, e uma amostra desses dados está registrada no script de exemplo abaixo.
{"message_uuid":"e6e659be-3cdb-464f-96ef-8597cb307586","from":{"type":"messenger","id":"3819505444810553"},"to":{"type":"messenger","id":"107083064136738"},"message":{"content":{"type":"text","text":"how terrible can this product be, does not solve my pain point"}},"timestamp":"2021-03-15T08:43:30.993Z","_id":"6TdDhlo8CVxEr7tq"}
{"message_uuid":"7775fa83-f073-481c-8866-c60bca28ec97","from":{"type":"messenger","id":"3819505444810553"},"to":{"type":"messenger","id":"107083064136738"},"message":{"content":{"type":"text","text":"how can there be no response for so long on such bad service"}},"timestamp":"2021-03-15T08:44:37.924Z","_id":"GSVzREWsYllKHOlJ"}Podemos ver que cada message_uuid é único para cada mensagem enviada ao bot do Facebook. O from e to especificam a identidade dos clientes e do bot, respectivamente. A mensagem contém o conteúdo, que é do tipo texto e consiste simplesmente no feedback fornecido pelo cliente. Para analisar esse feedback, ele será visualizado por meio da estrutura Streamlit do Python, com bibliotecas como TextBlob, WordCloud, Matplotlib e Pandas. Crie um novo arquivo chamado dashboard.py e adicione o seguinte código a esse novo arquivo:
import streamlit as st
from textblob import TextBlob
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
import matplotlib.pyplot as plt
import pandas as pd
st.set_option('deprecation.showPyplotGlobalUse', False)Streamlit é uma estrutura de aplicativos de código aberto para equipes de aprendizado de máquina e ciência de dados. TextBlob é uma biblioteca em Python para o processamento de dados textuais. Ela oferece uma API simples para realizar tarefas comuns de processamento de linguagem natural (NLP). WordCloud é uma técnica para mostrar quais palavras são as mais frequentes em um determinado texto. O Matplotlib é uma biblioteca abrangente para a criação de visualizações estáticas, animadas e interativas em Python. Pandas é uma ferramenta de código aberto para análise e manipulação de dados, rápida, poderosa, flexível e fácil de usar, desenvolvida com base na linguagem de programação Python.
Com todas essas ferramentas, primeiro abrimos os dados armazenados no arquivo messages.db, lemos e processamos cada registro de feedback coletado de todos os usuários. Procuramos as mensagens/conteúdo e removemos o carimbo de data e hora, pois ele não é necessário para a análise do sentimento no feedback. O feedback processado será armazenado em uma lista.
O exemplo abaixo executa as instruções listadas acima. Adicione isso ao final do seu dashboard.py arquivo:
file1 = open('messages.db', 'r')
Lines = file1.readlines()
feedback_list = list()
for line in Lines:
feedback = line.split(":")[11]
feedback = feedback.replace('}},"timestamp"',"")
feedback_list.append(feedback)Em seguida, geramos uma nuvem de palavras para visualizar a frequência das palavras mencionadas nos comentários dos usuários. Podemos observar que certas palavras-chave se destacam muito mais, como “péssimo”, “longo”, “ruim” etc. A nuvem de palavras simplesmente conta quantas vezes cada palavra apareceu em todas as frases dos comentários enviados pelos clientes. Uma maneira melhor seria analisar o sentimento geral do cliente.
Podemos usar a análise básica de polaridade de sentimento do TextBlob na frase, o que fornece uma estimativa relativamente confiável das experiências emocionais do cliente a partir de seu feedback textual, e armazená-la em uma nova lista de valores de sentimento. Agora, em seu dashboard.py , adicione o seguinte código:
sentiment_values = list()
for feedback in feedback_list:
sentiment_feedback = TextBlob(feedback).sentiment.polarity
sentiment_values.append(sentiment_feedback)A seguir, mostraremos o sentimento geral em uma escala de -1 a 1. Para polaridades de sentimento acima de 0, a exibição será em verde; já para os valores negativos, que indicam insatisfação, o sentimento será exibido em vermelho na página da web. Copie o seguinte para o seu dashboard.py arquivo:
st.title("Overall Sentiment")
if average_sentiment > 0:
colors = 'green'
else:
colors = 'red'
Atualmente, o sentimento geral é de -0,417, o que sugere que, de modo geral, grande parte dos comentários não é favorável aos produtos e serviços da empresa. Podemos ver os comentários em uma tabela, na qual cada um dos sentimentos expressos é apresentado. Há poucos sentimentos com valor 0. Isso significa que a análise considerou esses comentários neutros e não conseguiu identificar conotações negativas na mensagem. Podemos observar que frases como “Este produto não está à altura...” e “só usarei este produto se ele me for dado de graça” sugeririam sentimentos negativos; no entanto, o resultado é neutro ou positivo. Portanto, é possível desenvolver um modelo mais complexo para aprendizado e treinamento na análise de sentimentos para este caso de uso. Além disso, a análise geral de sentimentos talvez não deva se limitar a uma simples média, mas sim a cálculos potencialmente mais complexos ou a uma média ponderada.
O aplicativo de painel da web do Streamlit pode ser iniciado executando o comando a seguir. É necessário ter o Streamlit instalado para que o painel da web seja configurado. Outros métodos de implantação, como o Flask ou o Django, funcionam igualmente bem e podem ser explorados.
Para concluir, este tutorial mostrou como configurar e conectar uma Messages API do Vonage ao Facebook e coletar feedback dos clientes, que é então analisado por meio da análise de sentimentos para realizar o monitoramento em tempo real das opiniões dos clientes.