Comment augmenter les ventes et la fidélité des clients en corrigeant les erreurs sur la page de paiement

Publié: 2022-05-25

Dans le monde numérique moderne et en évolution rapide, les clients comptent sur les opportunités en ligne offertes par les entreprises et s'attendent à ce que tout soit parfait. Ayant déjà rencontré des erreurs dans leur parcours client, ces clients se souviendront du mauvais service et préféreront rechercher des produits/services alternatifs. C'est pourquoi il est si important de prévenir les difficultés et de surveiller en permanence les performances de l'entreprise.

Dans ce cas, nous décrivons la solution fournie par l'équipe OWOX BI pour un détaillant d'électronique grand public et d'appareils électroménagers qui avait des difficultés à corriger les erreurs sur la page de paiement pour augmenter les ventes et la fidélité des clients.

Table des matières

  • Défi
  • But
  • Solution
    • Étape 1. Recueillir des données sur les erreurs
    • Étape 2. Traiter les données
    • Étape 3. Utiliser les données obtenues
  • Résultats

Défi

Environ 700 000 personnes visitent le site Web du détaillant chaque jour, pour lire des avis sur les produits ou parcourir pour trouver ce qu'ils aimeraient acheter. Cependant, les utilisateurs peuvent parfois rencontrer des erreurs de site Web sur la page de paiement qui les empêchent de terminer une commande en ligne, diminuant ainsi les revenus de l'entreprise.

But

Les analystes et les testeurs ont soigneusement étudié les plaintes des clients pour définir les scénarios d'erreur typiques. Les erreurs que les spécialistes ont réussi à reproduire ont été corrigées. Le reste des bogues critiques nécessitait une surveillance de la configuration. Auparavant, l'entreprise n'avait pas l'habitude de collecter de telles données, restant incapable d'évaluer le nombre exact de bugs et leur impact sur les taux de conversion. L'entreprise avait également besoin de savoir comment chaque bogue était lié à un certain utilisateur, afin d'aider l'utilisateur à passer une commande.

Les analystes ont choisi de mettre en place une surveillance des bogues critiques sur le site Web et de faire tout leur possible pour aider les clients à réussir leurs commandes sur la page de paiement. Cela augmenterait les ventes et améliorerait l'expérience client sur le site Web. Le défi était qu'une surveillance en temps réel était nécessaire afin de ne perdre aucun des clients essayant actuellement de commander quelque chose sur le site Web.

Solution

Le plan suivant a été préparé pour atteindre l'objectif :

  1. Placez le code supplémentaire sur le site Web pour collecter des données sur les erreurs et les envoyer à Google BigQuery.
  2. Traiter les données obtenues et les exporter vers la table avec la structure selon les besoins de l'entreprise.
  3. Organisez l'envoi de données sur les utilisateurs et les erreurs aux centres d'appels qui contacteraient les clients pour les aider à passer une commande.

Voici à quoi ressemble le flux de données de l'entreprise :

Étape 1. Recueillir des données sur les erreurs

L'entreprise utilise Google Tag Manager pour suivre ce que les utilisateurs font en ligne. Cependant, toutes les erreurs de logique sur le site Web ne peuvent pas être suivies par les méthodes standard de Google Tag Manager. C'est pourquoi les scripts personnalisés ont été écrits spécifiquement et mis en œuvre via Google Tag Manager sur les pages Web nécessaires. Les scripts ajoutent les données d'erreur détaillées au DataLayer .

Ensuite, à l'aide des balises Google Tag Manager, les données d'erreur sont transmises à Google BigQuery via le pipeline OWOX BI. Cela permet d'obtenir des données brutes non échantillonnées du site Web dans Google BigQuery, en temps quasi réel.

À l'aide de l'API, les analystes envoient les données sur les utilisateurs du CRM à Google BigQuery, obtenant toutes les données dont ils ont besoin dans l'entrepôt de données cloud :

  • Heure d'erreur.
  • Type d'erreur.
  • Identifiant d'utilisateur.
  • Adresse e-mail de l'utilisateur.
  • Ville utilisatrice.
  • État actuel du produit dans le panier.

Étape 2. Traiter les données

À l'aide d'OWOX BI Pipeline, les tableaux de données avec un large éventail de paramètres ont été obtenus. Les analystes OWOX BI ont créé une requête SQL pour extraire les données de la table, en les renvoyant avec une structure définie : un ensemble de lignes où chaque ligne équivaut à une seule erreur.

Ci-dessous l'exemple de requête 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

À la suite de la requête, les analystes ont obtenu un tableau contenant les informations suivantes :

  • Date;
  • Heure;
  • Minute;
  • Adresse e-mail de l'utilisateur ;
  • Erreur de description;
  • Ville utilisatrice ;
  • ID du produit dans le panier ;
  • Noms des produits dans le panier ;
  • Prix ​​des produits dans le panier ;
  • Nombre total de produits dans le panier ;
  • Prix ​​total des produits dans le panier.

Ensuite, l'importation des données vers Google Sheets a été configurée, à l'aide du module complémentaire OWOX BI BigQuery Reports qui met à jour les informations dans les tableaux automatiquement et toutes les heures. Cela signifie que le rapport contient toujours des données à jour sur les erreurs de l'heure précédente.

Vous pouvez trouver un exemple d'un tel rapport ci-dessous :

Étape 3. Utiliser les données obtenues

Les utilisateurs responsables reçoivent automatiquement le rapport d'erreurs toutes les heures (de 9h00 à 18h00, selon les heures de travail). Ensuite, ils l'envoient aux développeurs de l'entreprise au cas où il y aurait des problèmes critiques à résoudre, et aux responsables de la réussite client qui appellent les utilisateurs et les aident à terminer une commande par téléphone.

Résultats

  • Le rapport structuré a été créé pour surveiller les erreurs du site Web qui empêchent les utilisateurs d'effectuer un achat.
  • Les développeurs de la société ont ajouté un formulaire de commentaires sur le site Web. Il apparaît automatiquement chaque fois que les utilisateurs qui ne se sont pas connectés voient une erreur, leur permettant ainsi de signaler le problème et de laisser leurs coordonnées. Cela aide l'entreprise à réagir rapidement à toute erreur ou bogue, ainsi qu'à élargir la clientèle, y compris les contacts des utilisateurs qui ne se sont pas connectés.
  • Les centres d'appels de l'entreprise peuvent obtenir rapidement des données sur les utilisateurs qui rencontrent des problèmes lors de l'ajout du produit au panier et du paiement. Les opérateurs du centre d'appels apprennent à connaître le contenu du panier et aident à finaliser l'achat.
  • Environ 3 % des utilisateurs qui ont reçu un appel en raison de l'erreur du site Web ont réussi à passer la commande par téléphone. Cela donne à l'entreprise 1 600 $ supplémentaires qui auraient été perdus si les erreurs avaient été ignorées.