Como aumentar as vendas e a fidelidade do cliente corrigindo erros na página de checkout

Publicados: 2022-05-25

No mundo digital moderno e em rápida evolução, os clientes confiam nas oportunidades on-line oferecidas pelas empresas e esperam que tudo seja perfeito. Tendo experimentado algum erro na jornada do cliente, esses clientes se lembrarão do mau serviço e preferirão procurar produtos/serviços alternativos. Por isso, é tão importante prevenir contratempos e monitorar constantemente o desempenho do negócio.

Neste caso, descrevemos a solução fornecida pela equipe OWOX BI para um varejista de eletroeletrônicos e eletrodomésticos que teve desafios em corrigir erros na página de checkout para aumentar as vendas e fidelizar clientes.

Índice

  • Desafio
  • Meta
  • Solução
    • Etapa 1. Colete dados sobre erros
    • Etapa 2. Processar dados
    • Etapa 3. Use os dados obtidos
  • Resultados

Desafio

Cerca de 700.000 pessoas visitam o site do varejista por dia para ler análises de produtos ou navegar para encontrar o que gostariam de comprar. No entanto, os usuários às vezes podem experimentar erros do site na página de checkout que os impedem de concluir um pedido on-line, diminuindo assim a receita da empresa.

Meta

Os analistas, juntamente com os testadores, estudaram cuidadosamente as reclamações dos clientes para definir os cenários de erro típicos. Os erros que os especialistas conseguiram reproduzir foram corrigidos. O restante dos bugs críticos exigia monitoramento de configuração. Anteriormente, a empresa não costumava coletar esses dados, permanecendo incapaz de avaliar o número exato de bugs e como eles afetam as taxas de conversão. A empresa também precisava saber como cada bug estava conectado a um determinado usuário, a fim de ajudar o usuário a fazer um pedido.

Os analistas optaram por configurar o monitoramento dos bugs críticos no site e fazer todo o possível para ajudar os clientes a fazer pedidos com sucesso na página de checkout. Isso aumentaria as vendas e melhoraria a experiência do site do cliente. O fator desafiador foi que o monitoramento em tempo real era necessário para não perder nenhum dos clientes que tentavam fazer um pedido no site.

Solução

O seguinte plano foi elaborado para atingir a meta:

  1. Coloque o código adicional no site para coletar dados sobre erros e enviá-los ao Google BigQuery.
  2. Processe os dados obtidos e exporte para a tabela com a estrutura de acordo com a necessidade da empresa.
  3. Organize o envio de dados sobre usuários e erros para call centers que entrariam em contato com os clientes para ajudá-los a fazer um pedido.

Veja como fica o fluxo de dados da empresa:

Etapa 1. Colete dados sobre erros

A empresa usa o Google Tag Manager para rastrear o que os usuários fazem online. No entanto, nem todos os erros de lógica no site podem ser rastreados pelas formas padrão do Gerenciador de tags do Google. É por isso que os scripts personalizados foram escritos especificamente e implementados através do Google Tag Manager nas páginas do site necessárias. Os scripts adicionam os dados de erro detalhados ao DataLayer .

Em seguida, com a ajuda das tags do Google Tag Manager, os dados de erro vão para o Google BigQuery por meio do OWOX BI Pipeline. Isso permite obter dados brutos sem amostragem do site no Google BigQuery, quase em tempo real.

Usando a API, os analistas enviam os dados sobre os usuários do CRM para o Google BigQuery, obtendo todos os dados de que precisam no data warehouse na nuvem:

  • Tempo de erro.
  • Tipo de erro.
  • ID do usuário.
  • Endereço de e-mail do usuário.
  • Cidade do usuário.
  • Status atual do produto no carrinho.

Etapa 2. Processar dados

Utilizando o OWOX BI Pipeline, foram obtidas as tabelas de dados com uma ampla gama de parâmetros. Os analistas de BI da OWOX criaram uma consulta SQL para extrair dados da tabela, retornando-os com uma estrutura definida: um conjunto de linhas onde cada linha equivale a um único erro.

Abaixo está o exemplo de consulta SQL:

    Select date, hour,minute, email, description, City, productIds, productnames, productprice, cartquantity, cartamount, From ( SELECT usererrors.date as date, usererrors.hour as hour, usererrors.minute as minute, usererrors.userEmail as email, usererrors.action as action, usererrors.error as error, case when action = 'disabled' and error = 'buttonCreateOrder' then 'Unable to checkout in cart' when action = 'notAdded' and error = 'productToCart' then 'Unable to add product to cart' when action = 'open' and error = 'emptyCart' then 'Product can not be viewed in cart' when action = 'open' and error = 'HoldingPageCheckout' then 'Maintenance work in progress (after checkout)' when action = 'absent' and error = ƋdiscountCart' then Ƌ% discount unavailable online (in cart)' when action = 'absent' and error = ƋdiscountCheckout' then Ƌ% discount unavailable online (at the checkout page)' when action = 'disabled' and error = 'buttonSubmit' then 'Button "Place Order" not working at the checkout page' else 'Other' end as description, Dimensions.city as City, Dimensions.productids as productIds, Dimensions.productnames as productnames, customMetrics.productprice as productprice, customMetrics.cartquantity as cartquantity, customMetrics.cartamount as cartamount, FROM (SELECT date, hour,minute, hitId, userEmail, eventInfo.eventAction as action, eventInfo.eventLabel as error, hour(CURRENT_TIMESTAMP())+2-hour as currenthour from TABLE_DATE_RANGE([mvideo-ru:Streaming.streaming_], DATE_ADD(CURRENT_TIMESTAMP(), 0 ,'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), 0 , 'DAY') ) where eventInfo.eventCategory = 'Errors' and userEmail is not null group by 1,2,3,4,5,6,7,8) as usererrors left join (SELECT hitId, MAX(IF(customDimensions.index=4, customDimensions.value, NULL)) WITHIN hitId AS city, MAX(IF(customDimensions.index=21, customDimensions.value, NULL)) WITHIN hitId AS productids, Max(IF(customDimensions.index=22, customDimensions.value, NULL)) WITHIN hitId AS productnames from TABLE_DATE_RANGE([mvideo-ru:Streaming.streaming_], DATE_ADD(CURRENT_TIMESTAMP(), 0 ,'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), 0 , 'DAY') )) as Dimensions ON Dimensions.hitId=usererrors.hitId left join (SELECT hitId, MAX(IF(customMetrics.index=1, customMetrics.value, NULL)) WITHIN hitId AS productprice, MAX(IF(customMetrics.index=4, customMetrics.value, NULL)) WITHIN hitId AS cartamount, Max(IF(customMetrics.index=5, customMetrics.value, NULL)) WITHIN hitId AS cartquantity FROM TABLE_DATE_RANGE([mvideo-ru:Streaming.streaming_], DATE_ADD(CURRENT_TIMESTAMP(), 0 ,'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), 0 , 'DAY') )) as customMetrics ON customMetrics.hitId=usererrors.hitId where usererrors.currenthour=0 ) ORDER BY date asc, hour asc, minute asc, email asc
Select date, hour,minute, email, description, City, productIds, productnames, productprice, cartquantity, cartamount, From ( SELECT usererrors.date as date, usererrors.hour as hour, usererrors.minute as minute, usererrors.userEmail as email, usererrors.action as action, usererrors.error as error, case when action = 'disabled' and error = 'buttonCreateOrder' then 'Unable to checkout in cart' when action = 'notAdded' and error = 'productToCart' then 'Unable to add product to cart' when action = 'open' and error = 'emptyCart' then 'Product can not be viewed in cart' when action = 'open' and error = 'HoldingPageCheckout' then 'Maintenance work in progress (after checkout)' when action = 'absent' and error = ƋdiscountCart' then Ƌ% discount unavailable online (in cart)' when action = 'absent' and error = ƋdiscountCheckout' then Ƌ% discount unavailable online (at the checkout page)' when action = 'disabled' and error = 'buttonSubmit' then 'Button "Place Order" not working at the checkout page' else 'Other' end as description, Dimensions.city as City, Dimensions.productids as productIds, Dimensions.productnames as productnames, customMetrics.productprice as productprice, customMetrics.cartquantity as cartquantity, customMetrics.cartamount as cartamount, FROM (SELECT date, hour,minute, hitId, userEmail, eventInfo.eventAction as action, eventInfo.eventLabel as error, hour(CURRENT_TIMESTAMP())+2-hour as currenthour from TABLE_DATE_RANGE([mvideo-ru:Streaming.streaming_], DATE_ADD(CURRENT_TIMESTAMP(), 0 ,'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), 0 , 'DAY') ) where eventInfo.eventCategory = 'Errors' and userEmail is not null group by 1,2,3,4,5,6,7,8) as usererrors left join (SELECT hitId, MAX(IF(customDimensions.index=4, customDimensions.value, NULL)) WITHIN hitId AS city, MAX(IF(customDimensions.index=21, customDimensions.value, NULL)) WITHIN hitId AS productids, Max(IF(customDimensions.index=22, customDimensions.value, NULL)) WITHIN hitId AS productnames from TABLE_DATE_RANGE([mvideo-ru:Streaming.streaming_], DATE_ADD(CURRENT_TIMESTAMP(), 0 ,'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), 0 , 'DAY') )) as Dimensions ON Dimensions.hitId=usererrors.hitId left join (SELECT hitId, MAX(IF(customMetrics.index=1, customMetrics.value, NULL)) WITHIN hitId AS productprice, MAX(IF(customMetrics.index=4, customMetrics.value, NULL)) WITHIN hitId AS cartamount, Max(IF(customMetrics.index=5, customMetrics.value, NULL)) WITHIN hitId AS cartquantity FROM TABLE_DATE_RANGE([mvideo-ru:Streaming.streaming_], DATE_ADD(CURRENT_TIMESTAMP(), 0 ,'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), 0 , 'DAY') )) as customMetrics ON customMetrics.hitId=usererrors.hitId where usererrors.currenthour=0 ) ORDER BY date asc, hour asc, minute asc, email asc

Como resultado da consulta, os analistas obtiveram uma tabela contendo as seguintes informações:

  • Encontro;
  • Hora;
  • Minuto;
  • Endereço de e-mail do usuário;
  • Descrição de erro;
  • Cidade do usuário;
  • ID do produto no carrinho;
  • Nomes dos produtos no carrinho;
  • Preço dos produtos no carrinho;
  • Número total de produtos no carrinho;
  • Preço total dos produtos no carrinho.

Em seguida, configurou-se a importação de dados para o Planilhas Google, utilizando o add-on OWOX BI BigQuery Reports que atualiza as informações nas tabelas de forma automática e horária. Isso significa que o relatório sempre contém dados atualizados sobre erros da hora anterior.

Você pode encontrar um exemplo de tal relatório abaixo:

Etapa 3. Use os dados obtidos

Os usuários responsáveis ​​recebem automaticamente o relatório de erros a cada hora (9h às 18h, de acordo com o horário de trabalho). Em seguida, eles o enviam para os desenvolvedores da empresa caso haja problemas críticos a serem corrigidos e para os gerentes de sucesso do cliente que ligam para os usuários e os ajudam a concluir um pedido pelo telefone.

Resultados

  • O relatório estruturado foi criado para monitorar os erros do site que impedem o usuário de realizar uma compra.
  • Os desenvolvedores da empresa adicionaram um formulário de feedback ao site. Ele aparece automaticamente toda vez que os usuários que não efetuaram login veem um erro, permitindo que eles relatem o problema e deixem seus dados de contato. Isso ajuda a empresa a reagir rapidamente a quaisquer erros ou bugs, além de ampliar a base de clientes, incluindo contatos dos usuários que não efetuaram login.
  • Os call centers da empresa podem obter rapidamente dados sobre usuários que enfrentam problemas ao adicionar o produto ao carrinho e fazer o check-out. Os operadores de call center ficam sabendo o que está dentro do carrinho e ajudam a finalizar a compra.
  • Cerca de 3% dos usuários que receberam uma ligação por causa do erro do site, concluem com sucesso o pedido por telefone. Isso dá à empresa US$ 1.600 adicionais que seriam perdidos se os erros fossem ignorados.