Jak zwiększyć sprzedaż i lojalność klientów poprzez naprawę błędów na stronie kasy?
Opublikowany: 2022-05-25W nowoczesnym, szybko ewoluującym cyfrowym świecie klienci polegają na możliwościach internetowych oferowanych przez firmy i oczekują, że wszystko będzie nie mniej niż doskonałe. Po wystąpieniu jakichkolwiek błędów na ścieżce klienta, klienci ci będą pamiętać złą obsługę i wolą szukać alternatywnych produktów/usług. Dlatego tak ważne jest, aby zapobiegać wszelkim trudnościom i stale monitorować wyniki biznesowe.
W tym przypadku opisujemy rozwiązanie dostarczone przez zespół OWOX BI dla sprzedawcy sprzętu RTV i AGD, który miał problemy z naprawą błędów na stronie kasy w celu zwiększenia sprzedaży i lojalności klientów.
Spis treści
- Wyzwanie
- Bramka
- Rozwiązanie
- Krok 1. Zbierz dane o błędach
- Krok 2. Przetwarzaj dane
- Krok 3. Wykorzystaj uzyskane dane
- Wyniki
Wyzwanie
Każdego dnia witrynę sprzedawcy odwiedza około 700 000 osób, aby przeczytać recenzje produktów lub przeglądać je, aby znaleźć to, co chcieliby kupić. Jednak użytkownicy mogą czasami napotkać błędy witryny na stronie kasy, które uniemożliwiają im zrealizowanie zamówienia online, zmniejszając tym samym przychody firmy.
Bramka
Analitycy wraz z testerami dokładnie przeanalizowali skargi klientów, aby zdefiniować typowe scenariusze błędów. Błędy, które udało się odtworzyć specjalistom, zostały naprawione. Reszta krytycznych błędów wymagała monitorowania konfiguracji. Wcześniej firma nie zbierała takich danych, nie będąc w stanie ocenić dokładnej liczby błędów i ich wpływu na współczynniki konwersji. Firma musiała również wiedzieć, w jaki sposób każdy błąd był powiązany z określonym użytkownikiem, aby pomóc użytkownikowi złożyć zamówienie.
Analitycy postanowili skonfigurować monitorowanie krytycznych błędów w witrynie i dołożyć wszelkich starań, aby pomóc klientom skutecznie składać zamówienia na stronie kasy. Zwiększyłoby to sprzedaż i poprawiłoby wrażenia klientów ze strony internetowej. Wyzwaniem było to, że wymagane było monitorowanie w czasie rzeczywistym, aby nie stracić żadnego z klientów, którzy obecnie próbują zamówić coś na stronie internetowej.
Rozwiązanie
Aby osiągnąć cel, przygotowano następujący plan:
- Umieść dodatkowy kod na stronie, aby zbierać dane o błędach i przesyłać je do Google BigQuery.
- Uzyskane dane przetworzyć i wyeksportować do tabeli o strukturze zgodnej z potrzebami firmy.
- Organizuj wysyłanie danych o użytkownikach i błędach do call center, które skontaktują się z klientami, aby pomóc im złożyć zamówienie.
Oto jak wygląda przepływ danych w firmie:

Krok 1. Zbierz dane o błędach
Firma korzysta z Menedżera tagów Google do śledzenia działań użytkowników online. Jednak nie wszystkie błędy logiczne w witrynie można śledzić standardowymi sposobami Menedżera tagów Google. Dlatego niestandardowe skrypty zostały napisane specjalnie i zaimplementowane za pomocą Menedżera tagów Google na niezbędnych stronach witryny. Skrypty dodają szczegółowe dane o błędach do DataLayer .
Następnie, za pomocą tagów Google Tag Manager, dane o błędach trafiają do Google BigQuery za pośrednictwem potoku OWOX BI. Pozwala to na uzyskiwanie surowych, niespróbkowanych danych ze strony internetowej w Google BigQuery w czasie zbliżonym do rzeczywistego.
Za pomocą API analitycy przesyłają dane o użytkownikach z CRM do Google BigQuery, pozyskując wszystkie potrzebne dane w hurtowni danych w chmurze:
- Czas błędu.
- Typ błędu.
- Identyfikator użytkownika.
- Adres e-mail użytkownika.
- Miasto użytkownika.
- Aktualny status produktu w koszyku.
Krok 2. Przetwarzaj dane
Wykorzystując OWOX BI Pipeline uzyskano tabele danych o szerokim zakresie parametrów. Analitycy OWOX BI stworzyli zapytanie SQL w celu pobrania danych z tabeli, zwracając je z określoną strukturą: zbiór wierszy, w których każdy wiersz oznacza pojedynczy błąd.
Poniżej znajduje się przykład zapytania 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
W wyniku zapytania analitycy uzyskali tabelę zawierającą następujące informacje:

- Data;
- Godzina;
- Minuta;
- adres e-mail użytkownika;
- Opis błędu;
- Miasto użytkownika;
- identyfikator produktu w koszyku;
- Nazwy produktów w koszyku;
- Cena produktów w koszyku;
- Całkowita liczba produktów w koszyku;
- Całkowita cena produktów w koszyku.
Następnie skonfigurowano import danych do Arkuszy Google za pomocą dodatku OWOX BI BigQuery Reports, który automatycznie i co godzinę aktualizuje informacje w tabelach. Oznacza to, że raport zawsze zawiera aktualne dane o błędach z poprzedniej godziny.
Przykład takiego raportu znajdziesz poniżej:

Krok 3. Wykorzystaj uzyskane dane
Odpowiedzialni użytkownicy automatycznie otrzymują raport o błędach co godzinę (od 9:00 do 18:00, zgodnie z godzinami pracy). Następnie wysyłają go do programistów firmy w przypadku krytycznych problemów do rozwiązania, a także do menedżerów sukcesu klienta, którzy dzwonią do użytkowników i pomagają im zrealizować zamówienie przez telefon.
Wyniki
- Ustrukturyzowany raport został stworzony w celu monitorowania błędów na stronie, które uniemożliwiają użytkownikom dokonanie zakupu.
- Deweloperzy firmy dodali do serwisu formularz opinii. Pojawia się automatycznie za każdym razem, gdy użytkownicy, którzy się nie zalogowali, zobaczą błąd, dzięki czemu mogą zgłosić problem i pozostawić swoje dane kontaktowe. Pozwala to firmie szybko reagować na ewentualne błędy czy błędy, a także poszerzać bazę klientów, w tym kontakty użytkowników, którzy się nie zalogowali.
- Call center firmy może szybko uzyskać dane o użytkownikach, którzy napotykają problemy podczas dodawania produktu do koszyka i kasowania. Operatorzy call center dowiadują się, co jest w koszyku i pomagają sfinalizować zakup.
- Około 3% użytkowników, którzy otrzymali telefon z powodu błędu na stronie, pomyślnie kończy składanie zamówienia przez telefon. Daje to firmie dodatkowe 1600 USD, które zostałyby utracone, gdyby błędy zostały zignorowane.