วิธีเพิ่มยอดขายและความภักดีของลูกค้าโดยแก้ไขข้อผิดพลาดในหน้าชำระเงิน
เผยแพร่แล้ว: 2022-05-25ในโลกดิจิทัลสมัยใหม่ที่มีการพัฒนาอย่างรวดเร็ว ลูกค้าพึ่งพาโอกาสออนไลน์ที่ธุรกิจนำเสนอและคาดหวังให้ทุกอย่างไม่สมบูรณ์แบบ เมื่อพบข้อผิดพลาดในการเดินทางของลูกค้า ลูกค้าเหล่านี้จะจดจำบริการที่ไม่ดีและต้องการมองหาผลิตภัณฑ์/บริการอื่น นั่นคือเหตุผลที่การป้องกันความยากลำบากและติดตามผลการดำเนินงานของธุรกิจอย่างต่อเนื่องเป็นสิ่งสำคัญมาก
ในกรณีนี้ เราอธิบายโซลูชันที่จัดทำโดยทีม OWOX BI สำหรับร้านค้าปลีกเครื่องใช้ไฟฟ้าและเครื่องใช้ไฟฟ้าภายในบ้านที่มีความท้าทายในการแก้ไขข้อผิดพลาดที่หน้าชำระเงินเพื่อเพิ่มยอดขายและความภักดีของลูกค้า
สารบัญ
- ท้าทาย
- เป้าหมาย
- สารละลาย
- ขั้นตอนที่ 1 รวบรวมข้อมูลเกี่ยวกับข้อผิดพลาด
- ขั้นตอนที่ 2 ประมวลผลข้อมูล
- ขั้นตอนที่ 3 ใช้ข้อมูลที่ได้รับ
- ผลลัพธ์
ท้าทาย
ผู้คนประมาณ 700,000 คนเข้าเยี่ยมชมเว็บไซต์ของผู้ค้าปลีกต่อวัน เพื่ออ่านบทวิจารณ์ผลิตภัณฑ์ หรือเรียกดูรอบๆ เพื่อค้นหาสิ่งที่พวกเขาต้องการซื้อ อย่างไรก็ตาม บางครั้งผู้ใช้อาจพบข้อผิดพลาดของเว็บไซต์ที่หน้าชำระเงิน ซึ่งทำให้พวกเขาไม่สามารถทำการสั่งซื้อทางออนไลน์ได้สำเร็จ ส่งผลให้รายได้ของบริษัทลดลง
เป้าหมาย
นักวิเคราะห์ร่วมกับผู้ทดสอบได้ศึกษาข้อร้องเรียนของลูกค้าอย่างละเอียดถี่ถ้วนเพื่อกำหนดสถานการณ์ข้อผิดพลาดทั่วไป แก้ไขข้อผิดพลาดที่ผู้เชี่ยวชาญสามารถทำซ้ำได้ ข้อบกพร่องที่สำคัญที่เหลือจำเป็นต้องมีการตรวจสอบการตั้งค่า ก่อนหน้านี้ บริษัทไม่ได้ใช้เพื่อรวบรวมข้อมูล ยังไม่สามารถประเมินจำนวนจุดบกพร่องได้อย่างแม่นยำ และผลกระทบต่ออัตราการแปลงเป็นอย่างไร บริษัทยังต้องรู้ว่าจุดบกพร่องแต่ละจุดเชื่อมต่อกับผู้ใช้บางคนอย่างไร เพื่อช่วยให้ผู้ใช้สั่งซื้อได้
นักวิเคราะห์เลือกที่จะตั้งค่าการตรวจสอบจุดบกพร่องที่สำคัญบนเว็บไซต์และพยายามอย่างเต็มที่เพื่อช่วยให้ลูกค้าประสบความสำเร็จในการสั่งซื้อในหน้าชำระเงิน สิ่งนี้จะเพิ่มยอดขายและปรับปรุงประสบการณ์เว็บไซต์ของลูกค้า ปัจจัยที่ท้าทายคือต้องมีการตรวจสอบแบบเรียลไทม์เพื่อไม่ให้สูญเสียลูกค้าที่พยายามสั่งซื้อบางอย่างบนเว็บไซต์
สารละลาย
แผนต่อไปนี้ได้เตรียมการเพื่อให้บรรลุเป้าหมาย:
- วางโค้ดเพิ่มเติมบนเว็บไซต์เพื่อรวบรวมข้อมูลเกี่ยวกับข้อผิดพลาดและส่งไปยัง Google BigQuery
- ประมวลผลข้อมูลที่ได้รับและส่งออกไปยังตารางที่มีโครงสร้างตามความต้องการของบริษัท
- จัดระเบียบการส่งข้อมูลเกี่ยวกับผู้ใช้และข้อผิดพลาดไปยังศูนย์บริการที่จะติดต่อลูกค้าเพื่อช่วยในการสั่งซื้อ
ลักษณะการไหลของข้อมูลของบริษัทมีลักษณะดังนี้:

ขั้นตอนที่ 1 รวบรวมข้อมูลเกี่ยวกับข้อผิดพลาด
บริษัทใช้ Google Tag Manager เพื่อติดตามว่าผู้ใช้ทำอะไรทางออนไลน์ แม้ว่าข้อผิดพลาดทางตรรกะบางอย่างบนเว็บไซต์จะไม่สามารถติดตามได้ด้วยวิธีการมาตรฐานของ Google Tag Manager นี่คือสาเหตุที่สคริปต์ที่กำหนดเองถูกเขียนขึ้นโดยเฉพาะและใช้งานผ่าน Google Tag Manager บนหน้าเว็บไซต์ที่จำเป็น สคริปต์เพิ่มข้อมูลข้อผิดพลาดโดยละเอียดไปยัง DataLayer
ต่อไป ด้วยความช่วยเหลือของแท็ก Google Tag Manager ข้อมูลข้อผิดพลาดจะไปยัง Google BigQuery ผ่าน OWOX BI Pipeline ซึ่งช่วยให้สามารถรับข้อมูลดิบที่ไม่ได้เก็บตัวอย่างจากเว็บไซต์ใน Google BigQuery ได้ในเวลาใกล้เคียงเรียลไทม์
เมื่อใช้ API นักวิเคราะห์จะส่งข้อมูลเกี่ยวกับผู้ใช้จาก CRM ไปยัง Google BigQuery เพื่อรับข้อมูลทั้งหมดที่ต้องการในคลังข้อมูลบนคลาวด์:
- เวลาผิดพลาด
- ประเภทข้อผิดพลาด
- รหัสผู้ใช้
- ที่อยู่อีเมลของผู้ใช้
- เมืองผู้ใช้
- สถานะสินค้าปัจจุบันในรถเข็น
ขั้นตอนที่ 2 ประมวลผลข้อมูล
เมื่อใช้ OWOX BI Pipeline คุณจะได้ตารางข้อมูลที่มีพารามิเตอร์หลากหลาย นักวิเคราะห์ OWOX BI ได้สร้างแบบสอบถาม SQL เพื่อดึงข้อมูลจากตาราง โดยส่งคืนด้วยโครงสร้างที่แน่นอน: ชุดของบรรทัดที่แต่ละบรรทัดมีค่าเท่ากับความผิดพลาดเพียงครั้งเดียว
ด้านล่างนี้คือตัวอย่างแบบสอบถาม 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
จากผลลัพธ์ของแบบสอบถาม นักวิเคราะห์ได้รับตารางที่มีข้อมูลต่อไปนี้:

- วันที่;
- ชั่วโมง;
- นาที;
- ที่อยู่อีเมลของผู้ใช้;
- คำอธิบายข้อผิดพลาด
- เมืองผู้ใช้;
- ID ของผลิตภัณฑ์ในรถเข็น;
- ชื่อผลิตภัณฑ์ในรถเข็น
- ราคาสินค้าในตะกร้า;
- จำนวนสินค้าในตะกร้า;
- ราคารวมสินค้าในตระกร้า
จากนั้น มีการตั้งค่าการนำเข้าข้อมูลไปยัง Google ชีต โดยใช้โปรแกรมเสริม OWOX BI BigQuery Reports ที่อัปเดตข้อมูลในตารางโดยอัตโนมัติทุกชั่วโมง ซึ่งหมายความว่ารายงานจะมีข้อมูลล่าสุดเกี่ยวกับข้อผิดพลาดในชั่วโมงก่อนหน้าเสมอ
คุณสามารถดูตัวอย่างของรายงานดังกล่าวได้ที่ด้านล่าง:

ขั้นตอนที่ 3 ใช้ข้อมูลที่ได้รับ
ผู้ใช้ที่รับผิดชอบจะได้รับรายงานข้อผิดพลาดโดยอัตโนมัติทุกชั่วโมง (9.00 น. ถึง 18.00 น. ตามเวลาทำงาน) ถัดไป จะส่งให้นักพัฒนาของบริษัทในกรณีที่มีปัญหาสำคัญที่ต้องแก้ไข และไปยังผู้จัดการความสำเร็จของลูกค้าที่โทรหาผู้ใช้และช่วยดำเนินการสั่งซื้อทางโทรศัพท์
ผลลัพธ์
- รายงานที่มีโครงสร้างถูกสร้างขึ้นเพื่อตรวจสอบข้อผิดพลาดของเว็บไซต์ที่ป้องกันไม่ให้ผู้ใช้ทำการซื้อ
- นักพัฒนาของบริษัทได้เพิ่มแบบฟอร์มข้อเสนอแนะลงในเว็บไซต์ โดยจะปรากฏขึ้นโดยอัตโนมัติทุกครั้งที่ผู้ใช้ที่ไม่ได้เข้าสู่ระบบเห็นข้อผิดพลาด ซึ่งช่วยให้พวกเขารายงานปัญหาและทิ้งรายละเอียดการติดต่อไว้ได้ ซึ่งช่วยให้บริษัทตอบสนองต่อข้อผิดพลาดหรือจุดบกพร่องได้อย่างรวดเร็ว ตลอดจนขยายฐานลูกค้า ซึ่งรวมถึงผู้ติดต่อของผู้ใช้ที่ไม่ได้เข้าสู่ระบบ
- คอลเซ็นเตอร์ของบริษัทสามารถรับข้อมูลเกี่ยวกับผู้ใช้ที่ประสบปัญหาขณะเพิ่มสินค้าลงในรถเข็นและชำระเงินได้อย่างรวดเร็ว เจ้าหน้าที่คอลเซ็นเตอร์จะได้รู้ว่ามีอะไรอยู่ในรถเข็นและช่วยทำการซื้อให้เสร็จสิ้น
- ผู้ใช้ประมาณ 3% ที่ได้รับสายเนื่องจากข้อผิดพลาดของเว็บไซต์ ทำการสั่งซื้อทางโทรศัพท์ได้สำเร็จ ซึ่งจะทำให้บริษัทได้รับเงินเพิ่มอีก 1,600 เหรียญสหรัฐฯ ซึ่งจะสูญเสียไปหากละเลยข้อผิดพลาด