เชื่อมต่อ Shopee กับ Odoo: ออเดอร์ สต็อก ค่าธรรมเนียม และการคืนสินค้า
ผู้ขาย Shopee ทุกรายที่เราเคยทำงานด้วยในไทยสุดท้ายแล้วจะเจอกำแพงเดียวกัน Shopee Seller Center ใช้งานได้ดีถ้ามีร้านเดียว แต่พอขยายเป็นสองสามร้านพร้อมกับหน้าร้านจริง ไม่มีใครบอกได้แน่ชัดว่าสต็อกที่แท้จริงเหลือเท่าไหร่ โดยไม่ต้องเปิดหน้าจอสี่หน้าพร้อมกัน Shopee Odoo integration ช่วยแก้ปัญหานี้ได้ แต่ต้องออกแบบระบบให้สอดคล้องกับพฤติกรรมจริงของ Shopee ไม่ใช่ตามที่เราอยากให้เป็น
บทความนี้พาไปดูขั้นตอนที่เราใช้วางระบบ Shopee Odoo integration จริง มีการดึงออเดอร์ การซิงก์สต็อกข้ามร้าน การบันทึกค่าธรรมเนียมมาร์เก็ตเพลสเป็นรายการบัญชีที่ถูกต้อง และการจัดการคืนสินค้า ทั้งหมดนี้ไม่ใช่ทฤษฎี เป็นลำดับขั้นตอนที่เราใช้จริงในโปรเจกต์ รวมถึงส่วนที่น่ารำคาญด้วย
ออเดอร์จาก Shopee เข้า Odoo อย่างไร
Shopee มี Open Platform API ที่เปิดให้ระบบภายนอกดึงออเดอร์ อัปเดตสต็อก และส่งเลขพัสดุกลับไปได้ ปัจจุบัน Odoo ได้เพิ่มคอนเนกเตอร์ Shopee อย่างเป็นทางการเข้ามาแล้ว เป็นโมดูลในตัวที่ซิงก์ออเดอร์ได้โดยตรง ไม่ต้องพัฒนาการเชื่อมต่อแบบกำหนดเองตั้งแต่ศูนย์เหมือนก่อน จุดนี้ช่วยตัดงานฝั่งโครงสร้างพื้นฐานที่เราเคยต้องเขียนเองไปได้มาก ถึงอย่างนั้นก็ยังต้องตั้งค่าให้เข้ากับผังบัญชีและโครงสร้างคลังสินค้าของแต่ละธุรกิจอยู่ดี
รูปแบบที่เราใช้คือ scheduled action ที่รันทุกห้าถึงสิบห้านาที เรียก endpoint รายการออเดอร์ของ Shopee แล้วสร้างใบสั่งขายใน Odoo สำหรับทุกออเดอร์ใหม่ มีการตัดสินใจสำคัญหลายจุดในขั้นตอนนี้
- หนึ่งใบสั่งขายต่อหนึ่งออเดอร์ Shopee ไม่ใช่ต่อรายการสินค้า เพื่อให้การแพ็กและการออกใบแจ้งหนี้ตรงกับสิ่งที่ลูกค้าเห็นจริง
- สร้างรายชื่อลูกค้า Shopee เฉพาะต่อร้าน หรือใช้ผู้ติดต่อแบบ "Shopee Marketplace" กลาง แทนการสร้างผู้ติดต่อให้ผู้ซื้อทุกคน มาร์เก็ตเพลสมักไม่ให้ข้อมูลผู้ซื้อครบถ้วน การสร้างผู้ติดต่อนับพันรายการแบบใช้ครั้งเดียวมีแต่ทำให้ฐานข้อมูลรกโดยไม่เกิดประโยชน์
- การแม็ปสถานะออเดอร์ สถานะ "ยังไม่ชำระ" "รอจัดส่ง" "จัดส่งแล้ว" "สำเร็จ" และ "ยกเลิก" ของ Shopee ต้องแม็ปเข้ากับสถานะใบสั่งขายและใบจัดส่งของ Odoo ควรตัดสินใจแต่เนิ่นๆ ว่าจะทำอย่างไรเมื่อผู้ซื้อยกเลิกหลังจากที่เราหยิบสินค้าไปแล้ว
ข้อจำกัดหนึ่งที่ควรรู้ไว้ตั้งแต่ต้น คือ API ของ Shopee มี rate limit และบางครั้งก็มีช่วงระบบล่ม การซิงก์จึงเป็นแบบ eventually consistent ไม่ใช่เรียลไทม์แท้ ควรมีงาน reconciliation รายวันที่เปรียบเทียบจำนวนออเดอร์ระหว่าง Shopee กับ Odoo แล้วแจ้งเตือนช่องว่าง เราเคยเจอออเดอร์หายไปเงียบๆ ระหว่างช่วงที่แพลตฟอร์มปิดปรับปรุง ไม่มีใครรู้ตัวจนลูกค้าทักมาถามว่าของยังไม่ถึง งานกระทบยอดชิ้นเดียวนี้คุ้มค่าตั้งแต่ครั้งแรกที่มันจับช่องว่างได้
รักษาสต็อกให้ตรงกันในหลายร้านพร้อมกัน
ถ้าขาย SKU เดียวกันทั้งหน้าร้านกรุงเทพฯ ร้าน Shopee และอาจจะร้าน Lazada ด้วย คำถามจริงไม่ใช่ "จะซิงก์สต็อกยังไง" แต่เป็น "ระบบไหนคือเจ้าของข้อมูลที่ถูกต้องที่สุด" เราแทบจะให้ Odoo เป็นแหล่งข้อมูลสต็อกหลักเสมอ โดยให้มาร์เก็ตเพลสเป็นเพียงผู้อ่านค่าจำนวนที่พร้อมขายซึ่งคำนวณมาแล้ว นี่คือการตัดสินใจเชิงออกแบบที่อยู่เบื้องหลัง Shopee Odoo integration ทุกโปรเจกต์ที่เราทำ
ขั้นตอนทั่วไปมีดังนี้
- Odoo คำนวณจำนวนสต็อกที่พร้อมขาย (available-to-promise) ต่อ SKU ต่อคลังสินค้า
- งาน push ส่งตัวเลขนี้ไปยัง Shopee รวมถึง Lazada หรือ TikTok Shop ที่เชื่อมไว้ ทุกครั้งที่ตัวเลขเปลี่ยนเกินเกณฑ์ที่กำหนด
- เมื่อออเดอร์ Shopee ถูกยืนยัน Odoo จะจองสต็อกทันที ป้องกันไม่ให้ออเดอร์ Lazada ที่เข้ามาเกือบพร้อมกันขายสินค้าชิ้นสุดท้ายซ้ำ
สำหรับผู้ขายที่มีร้าน Shopee มากกว่าหนึ่งร้าน ซึ่งมักพบเมื่อเจาะกลุ่มจังหวัดหรือระดับราคาต่างกัน เราจะแม็ปแต่ละร้านให้มีคลังสินค้า Odoo ของตัวเอง หรือใช้ stock location เฉพาะ วิธีนี้ป้องกันไม่ให้สต็อกของร้านหนึ่งไปครอบคลุมคำสัญญาของอีกร้านโดยไม่รู้ตัว และยังช่วยให้ใบจัดส่งกับรายการหยิบสินค้ายังเป็นระบบในวันเซลใหญ่อย่าง 9.9 หรือ 11.11 ที่ออเดอร์อาจพุ่งขึ้นอย่างรุนแรงในช่วงเวลาสั้นๆ
ข้อแลกเปลี่ยนคือการ push สต็อกแบบเกือบเรียลไทม์ทำให้เรียก API บ่อยขึ้น และ Shopee ก็มี rate limit ของตัวเองต่อร้าน สำหรับแคตตาล็อกที่มี SKU จำนวนมาก เราจะแบ่งอัปเดตเป็นชุดและให้ความสำคัญกับสินค้าขายดีก่อน สินค้าที่ขายช้าอาจล่าช้าไปหนึ่งหรือสองชั่วโมง นี่เป็นการประนีประนอมที่สมเหตุสมผลในทางปฏิบัติ
บันทึกค่าธรรมเนียม Shopee เป็นรายการบัญชี ไม่ใช่หักยอดรวมแบบเหมา
จุดนี้เป็นจุดที่การเชื่อมต่อแบบทำเองมักพลาด Shopee โอนเงินสุทธิหลังหักค่าคอมมิชชัน ค่าบริการ ค่าธรรมเนียมการชำระเงิน และบางครั้งก็หักค่าชดเชยค่าส่งคืนด้วย ถ้าแค่บันทึกยอดที่โอนเข้าบัญชีเป็นรายได้ตรงๆ จะมองไม่เห็นกำไรที่แท้จริงต่อออเดอร์เลย
สิ่งที่เราตั้งค่าแทนมีดังนี้
| รายการหักของ Shopee | วิธีจัดการใน Odoo |
|---|---|
| ค่าคอมมิชชัน | บันทึกเป็นรายการค่าใช้จ่ายในบัญชี "ค่าคอมมิชชันมาร์เก็ตเพลส" ผูกกับใบสั่งขาย |
| ค่าธรรมเนียมการชำระเงิน/ธุรกรรม | แยกบัญชีค่าใช้จ่าย มักจัดอยู่ในกลุ่มค่าธรรมเนียมธนาคาร |
| ค่าชดเชยหรือหักคืนค่าขนส่ง | จับคู่กับต้นทุนค่าส่งที่บันทึกไว้แล้วในออเดอร์ |
| ภาษีหัก ณ ที่จ่ายที่ Shopee หักไว้ | บันทึกเข้าบัญชีภาษีหัก ณ ที่จ่ายรอรับคืน เพื่อใช้กระทบยอด PND 53 |
| ยอดเงินสุทธิที่ได้รับ | กระทบยอดกับเงินที่เข้าบัญชีธนาคารจริง |
ในทางปฏิบัติ ออเดอร์ Shopee หนึ่งรายการจะสร้างใบแจ้งหนี้ขายตามยอดเต็มที่ลูกค้าจ่าย และสร้างบิลผู้ขายหรือรายการบัญชีแยกต่างหากสำหรับรายการหักของมาร์เก็ตเพลส โดยลงวันที่ให้ตรงกับรายงานการเคลียร์ยอดของ Shopee ยอดเงินที่เข้าบัญชีธนาคารควรกระทบยอดได้พอดีกับผลต่างสุทธิของสองเอกสารนี้ เดือนแรกที่ทำจะค่อนข้างน่าเบื่อ หลังจากนั้นระบบจะทำงานอัตโนมัติเกือบทั้งหมด และนักบัญชีของธุรกิจก็จะได้คำตอบชัดเจนในที่สุดว่า Shopee คิดค่าใช้จ่ายจริงเท่าไหร่
หากธุรกิจจดทะเบียน VAT ด้วย ควรระวังว่าใบแจ้งหนี้ค่าธรรมเนียมของ Shopee อาจมีหรือไม่มีใบกำกับภาษีที่ถูกต้องตามกฎหมายไทย ขึ้นอยู่กับวิธีที่ Shopee ประเทศไทยออกเอกสาร ควรตรวจสอบกับนักบัญชีก่อนสรุปว่าจะได้เครดิตภาษีซื้อเต็มจำนวนในทุกรายการค่าธรรมเนียม งานด้าน odoo erp services ของเราส่วนใหญ่ครอบคลุมการกระทบยอดค่าธรรมเนียมแบบนี้อยู่แล้วในโปรเจกต์เดียวกัน
จัดการคืนสินค้าโดยไม่ทำให้มูลค่าสต็อกผิดเพี้ยน
การคืนสินค้าบน Shopee เป็นไปตามขั้นตอนคืนสินค้า/คืนเงินของแพลตฟอร์มเอง และผู้ขายมักเป็นคนสุดท้ายที่รู้ว่ามีการอนุมัติคืนสินค้าแล้ว ตัวเชื่อมต่อของเราจะดึงข้อมูลจาก endpoint การคืนสินค้าแยกต่างหากจาก endpoint ออเดอร์ เพราะออเดอร์ที่ถูกคืนต้องจัดการใน Odoo ต่างจากออเดอร์ใหม่
เมื่อการคืนสินค้าได้รับการยืนยัน
- Odoo จะสร้างใบจัดส่งคืนสินค้า ย้อนกลับใบจัดส่งเดิม เพื่อนำสต็อกกลับเข้าคลังที่ถูกต้อง ไม่ใช่โยนเข้าที่พัก "สินค้าคืน" แบบรวมๆ ที่ไม่มีใครมากระทบยอดภายหลัง
- ระบบจะออกใบลดหนี้ให้ตรงกับยอดเงินที่คืนจริง ซึ่งไม่เท่ากับยอดเต็มของออเดอร์เสมอไป บางครั้ง Shopee ประมวลผลการคืนเงินบางส่วนสำหรับกรณีสินค้าชำรุด
- หากสินค้าที่คืนชำรุดหรือขายต่อไม่ได้ เราจะนำเข้า location "สินค้าชำรุด" แยกต่างหาก แทนที่จะนำกลับเข้าสต็อกที่พร้อมขาย เพื่อป้องกันไม่ให้ตัวเลขสต็อกพร้อมขายในช่องทางอื่นผิดเพี้ยน
สิ่งหนึ่งที่ควรตัดสินใจแต่เนิ่นๆ คือต้องการให้การคืนสินค้าทำงานอัตโนมัติทั้งหมด หรือมีขั้นตอนอนุมัติด้วยคนก่อนที่สต็อกและบัญชีจะถูกกระทบ เราเองมักแนะนำให้มีขั้นตอนอนุมัติด้วยคนในช่วงสองสามเดือนแรกของ Shopee Odoo integration โดยเฉพาะสำหรับการคืนสินค้า รูปถ่ายสินค้าชำรุดและข้อพิพาทกับผู้ซื้อต้องการคนช่วยดูก่อนที่จะปรับปรุงบัญชี การทำให้เป็นระบบอัตโนมัติเต็มรูปแบบสามารถทำได้ภายหลัง เมื่อเข้าใจรูปแบบของข้อพิพาทที่เกิดขึ้นจริงแล้ว
จุดที่ Shopee Odoo integration มักเกิดปัญหาในทางปฏิบัติ
ปัญหาที่เกิดซ้ำๆ จากการวางระบบของเรามีดังนี้
- SKU ไม่ตรงกัน Shopee เปิดให้ผู้ขายเปลี่ยนชื่อหรือโคลนตัวแปรสินค้าได้ค่อนข้างหลวม การจับคู่ item ID ของ Shopee กับสินค้าใน Odoo ให้แม่นยำจึงต้องทำตารางแม็ปปิ้งที่ชัดเจน แทนที่จะเชื่อว่าข้อความ SKU จะตรงกันเสมอ
- สกุลเงินและบัญชีหลายร้าน หากขายผ่าน Shopee ในไทยและผ่าน Shopee อีกประเทศหนึ่งด้วย โครงสร้างบริษัทใน Odoo ต้องสะท้อนสิ่งนี้ มักจะแยกเป็นคนละบริษัท หรืออย่างน้อยก็แยก analytic account
- โปรโมชันและส่วนลดที่ผู้ขายออกเอง แฟลชเซลและโค้ดส่วนลดของ Shopee มักทำให้ราคาที่ผู้ขายได้รับจริงต่ำกว่าราคาที่แสดง หากระบบซิงก์ออเดอร์อ่านแค่ยอดรวมโดยไม่แยกรายละเอียดส่วนลด การรับรู้รายได้จะผิดพลาด
ไม่มีข้อใดที่ร้ายแรงถึงขั้นทำโครงการพัง แต่ก็เป็นรายละเอียดแบบที่ทำให้ "คอนเนกเตอร์ API ง่ายๆ" กลายเป็นโปรเจกต์ที่ต้องใช้ บริการเชื่อมต่อ API อย่างจริงจัง แทนที่จะเป็นสคริปต์ที่เขียนจบในสุดสัปดาห์เดียว เรามักกำหนดขอบเขตเฟสแรกให้ครอบคลุมแค่การดึงออเดอร์และซิงก์สต็อก พิสูจน์ผลกับร้านเดียวสักสองถึงสามสัปดาห์ ก่อนขยายไปยังบัญชีค่าธรรมเนียมและการคืนสินค้าเมื่อพื้นฐานมั่นคงแล้ว
ขยายแนวทางเดียวกันนี้ไปไกลกว่า Shopee
หากธุรกิจมีร้าน Lazada หรือ TikTok Shop ควบคู่ไปกับ Shopee ด้วย สถาปัตยกรรมแบบเดียวกันนี้ขยายไปใช้กับแพลตฟอร์มเหล่านั้นได้ แม้ API จะมีรายละเอียดต่างกัน แต่หลักการตัดสินใจหลักยังเหมือนเดิม คือมีแหล่งข้อมูลสต็อกเดียวที่เชื่อถือได้ บันทึกบัญชีแบบยอดเต็มพร้อมค่าธรรมเนียมแยก ไม่ใช่แค่ยอดสุทธิที่โอนเข้าบัญชี และมีงานกระทบยอดที่ไม่ต้องมีใครคอยจำว่าต้องรันเอง สำหรับฝั่งบัญชีโดยเฉพาะ ควรพิจารณาคู่กับระบบ พัฒนาอีคอมเมิร์ซ ที่มีอยู่แล้ว เพื่อให้หน้าร้าน มาร์เก็ตเพลส และบัญชีใน Odoo ตรงกันทุกตัวเลข
สำหรับผู้ขายที่วางระบบภาษีไทยไว้ลึกอยู่แล้ว รายการบัญชีค่าธรรมเนียม Shopee ที่อธิบายไปข้างต้นจะเข้ากันได้ดีกับงานภาษีหัก ณ ที่จ่ายและใบกำกับภาษีอิเล็กทรอนิกส์ที่ลูกค้าค้าปลีกไทยของเราส่วนใหญ่มีใช้งานใน Odoo อยู่แล้ว ควรทบทวนการตั้งค่านั้นไปพร้อมกับตอนที่เชื่อมต่อ Shopee ทีม odoo consultancy services ของเรามักรวมงานนี้ไว้ในโปรเจกต์เดียวกัน แทนที่จะแยกออกเป็นคนละงาน



