เชื่อม TikTok Shop กับ Odoo: สต็อกเดียว ไม่มีขายเกิน
TikTok Shop ทำงานต่างจากร้านค้าออนไลน์ทั่วไป ไลฟ์สตรีมครั้งเดียวสร้างออเดอร์ได้หลายร้อยรายการภายในยี่สิบนาที แล้วก็เงียบไปหลายชั่วโมง ถ้าระบบคลังสินค้าของคุณอัปเดตตามรอบเวลาแทนที่จะเป็นแบบเรียลไทม์ คุณจะขายเกินสต็อกทันทีที่ยอดขายพุ่งขึ้น เช้าวันถัดไปต้องมานั่งขอโทษลูกค้าและยกเลิกออเดอร์กัน
เราวางระบบเชื่อมต่อ TikTok Shop กับ Odoo ให้ผู้ขายทั้งในไทยและสหรัฐฯ มาหลายโปรเจกต์ รูปแบบที่ใช้ได้ผลจริงมักเหมือนกันเสมอ คือแหล่งข้อมูลสต็อกที่จริงเพียงจุดเดียว การซิงก์ออเดอร์ที่ตอบสนองภายในไม่กี่นาที ไม่ใช่เป็นชั่วโมง และการปิดบัญชีที่ไม่ต้องให้ใครมานั่งคีย์รายงานการชำระเงินของ TikTok ด้วยมือ
บทความนี้พาไปดูวิธีที่เราวางระบบเชื่อมต่อ TikTok Shop กับ Odoo จริงในหน้างาน รวมถึงส่วนที่ทำยากจริง เช่น ออเดอร์ที่พุ่งขึ้นช่วงไลฟ์ เงินที่แพลตฟอร์มกักไว้ก่อนจ่าย และค่าคอมมิชชันที่ TikTok หักก่อนโอนเงินให้คุณ
ทำไม TikTok Shop ถึงทำให้การซิงก์สต็อกแบบธรรมดาพัง
ตัวเชื่อมต่อมาร์เก็ตเพลสส่วนใหญ่ถูกออกแบบด้วยโมเดลแบบ polling คือตรวจสอบออเดอร์ใหม่ทุก 15 หรือ 30 นาที แล้วดึงเข้า ERP และปรับสต็อก วิธีนี้ใช้ได้ดีกับร้านที่มีออเดอร์ไหลเข้ามาสม่ำเสมอ แต่จะพังทันทีช่วงไลฟ์ของ TikTok เพราะครีเอเตอร์ขาย SKU หนึ่งหมดสต็อกได้ภายในเวลาเดียวกับที่ระบบเชื่อมต่อกำลังรอรอบถัดไป
พฤติกรรมสามอย่างที่สำคัญกว่าช่องทางอื่น
มีพฤติกรรมของ TikTok Shop สามอย่างที่สำคัญกว่าช่องทางอื่นมาก
- ออเดอร์พุ่งเป็นกลุ่มก้อน ไลฟ์ครั้งเดียวอาจสร้างยอดขายรวมของทั้งสัปดาห์ได้ภายในชั่วโมงเดียว
- การกันสต็อกเกิดขึ้นที่ระดับแพลตฟอร์มด้วย TikTok จะกันสต็อกตามจำนวนที่คุณประกาศขาย โดยไม่ขึ้นกับว่า Odoo คิดว่ามีสต็อกเหลือเท่าไร ตัวเลขสองฝั่งอาจคลาดเคลื่อนกันเร็วมากถ้าการซิงก์ล่าช้า
- การยกเลิกและการคืนสินค้ามักมาเป็นคลื่นหลังไลฟ์จบ บางครั้งช้าไป 24 ถึง 72 ชั่วโมง ระบบสต็อกของคุณต้องปลดล็อกการกันสต็อกให้ถูกต้อง ไม่ใช่แค่บวกสต็อกกลับเข้าไปแบบไม่ตรวจสอบ
ถ้างานซิงก์ทำงานตามตัวจับเวลา คุณกำลังเดิมพันว่าจะไม่มีไลฟ์เกิดขึ้นในช่วงเวลาระหว่างรอบ เราเลือกใช้การอัปเดตแบบ webhook เมื่อ API ของ TikTok รองรับ พร้อมสำรองด้วยการ polling แบบรอบสั้น ออเดอร์ใหม่จึงเข้ามาใน Odoo ภายในไม่กี่นาทีในสภาวะปกติ
การวางระบบเชื่อมต่อ TikTok Shop กับ Odoo
ระบบเชื่อมต่อที่ใช้งานได้จริงต้องแตะถึงสี่ส่วนใน Odoo คือ Sales, Inventory, Accounting และชั้น mapping ที่แปลงโมเดลข้อมูลของ TikTok ให้เข้ากับโครงสร้างของ Odoo
1. การ mapping SKU และสินค้าที่ลงขาย รายการสินค้าใน TikTok Shop ไม่ได้จับคู่กับสินค้าใน Odoo แบบหนึ่งต่อหนึ่งเสมอไป โดยเฉพาะเมื่อมีตัวเลือกย่อยอย่างสีหรือขนาดที่ขายเป็น SKU แยกกันบนแพลตฟอร์ม เราสร้างตาราง mapping ที่ระบุชัดเจน แทนที่จะพึ่งการจับคู่ด้วยสตริง SKU เพราะการพิมพ์ชื่อสินค้าผิดเพียงนิดเดียวไม่ควรทำให้เกิดสินค้าซ้ำใน Odoo โดยไม่มีใครรู้ตัว
2. การนำออเดอร์เข้าสู่ Sales ออเดอร์ที่ยืนยันแล้วบน TikTok แต่ละรายการจะกลายเป็นใบสั่งขายใน Odoo พร้อมแท็กหมายเลขออเดอร์ TikTok และชื่อร้าน เรายังเก็บ timestamp และสถานะออเดอร์เดิมของ TikTok ไว้คู่กับสถานะของ Odoo เอง เพราะทีมซัพพอร์ตต้องตอบได้ว่า "TikTok บอกว่าออเดอร์นี้เป็นอย่างไร" โดยไม่ต้องล็อกอินเข้าระบบที่สอง
3. การกันสต็อกที่เคารพทั้งสองระบบ นี่คือส่วนที่ตัวเชื่อมต่อส่วนใหญ่ทำพลาด เมื่อออเดอร์ถูกยืนยันใน Odoo ระบบควรกันสต็อกทันทีให้กับใบจัดส่ง การส่งข้อมูลสต็อกกลับไป TikTok ครั้งถัดไปควรสะท้อนจำนวนที่พร้อมขายจริง ไม่ใช่จำนวนคงเหลือทั้งหมด มิฉะนั้น TikTok จะยังขายสต็อกที่ Odoo ได้ผูกไว้กับออเดอร์ก่อนหน้าแล้ว
4. การซิงก์การจัดส่งและเลขพัสดุ เมื่อใบจัดส่งใน Odoo ถูกยืนยันแล้ว เลขพัสดุจะถูกส่งกลับไปที่ TikTok เพื่อให้ออเดอร์เปลี่ยนสถานะเป็นจัดส่งแล้วบนแพลตฟอร์ม ผู้ขายที่ข้ามขั้นตอนนี้มักเจอปัญหา TikTok ขึ้นแจ้งเตือนร้านว่าจัดส่งล่าช้า ทั้งที่คลังสินค้าส่งสินค้าตรงเวลาจริง
สำหรับผู้ขายที่ดำเนินงานหลายช่องทาง เรามักจับคู่การเชื่อมต่อนี้เข้ากับบริการเชื่อมต่อ API ของ Odoo ที่ครอบคลุมกว่า เพื่อให้ TikTok อยู่ร่วมกับ Shopee, Lazada หรือหน้าร้านออนไลน์ของตัวเอง บนตรรกะสต็อกและราคาเดียวกัน แทนที่แต่ละช่องทางจะมีกฎของตัวเองแยกกันโดยไม่เชื่อมโยงกัน
ป้องกันการขายเกินสต็อก: ปัญหา available-to-promise
การขายเกินสต็อกเกือบทั้งหมดย้อนกลับไปที่สาเหตุใดสาเหตุหนึ่งในสามข้อนี้ แต่ละข้อมีวิธีแก้ต่างกัน
| สาเหตุ | สิ่งที่เกิดขึ้น | วิธีแก้ |
|---|---|---|
| การซิงก์ล่าช้า | ส่งข้อมูลสต็อกไป TikTok ตามรอบเวลา 15-30 นาที | เปลี่ยนเป็นส่งแบบใกล้เคียงเรียลไทม์ โดยทริกเกอร์เมื่อยืนยันออเดอร์หรือมีการปรับสต็อก |
| สต็อกใช้ร่วมกัน ไม่มีบัฟเฟอร์ | คลังเดียวกันขายบน TikTok, Shopee และหน้าร้านพร้อมกัน | กันสต็อกสำรองแยกตามช่องทางใน Odoo ไม่ใช่ใช้ตัวเลขรวมเดียว |
| ไม่เคารพการกันสต็อก | Odoo แสดงสต็อกคงเหลือทั้งหมดแทนที่จะเป็นจำนวนพร้อมขายจริง | ส่งค่า (คงเหลือ ลบ กันไว้ ลบ สต็อกสำรองความปลอดภัย) ไม่ใช่สต็อกคงเหลือดิบ |
บัฟเฟอร์สำรองความปลอดภัยสำคัญกว่าที่หลายคนคิด ถ้าคุณขาย SKU เดียวกันทั้งในหน้าร้านและบน TikTok ลูกค้าที่หน้าเคาน์เตอร์อาจหยิบสินค้าชิ้นสุดท้ายไปในจังหวะเดียวกับที่ไลฟ์กำลังเปลี่ยนผู้ชมให้กลายเป็นผู้ซื้อพอดี บัฟเฟอร์สำรองเล็กน้อย แม้เพียงห้าถึงสิบชิ้นสำหรับ SKU ที่ขายดี ก็ช่วยรองรับสถานการณ์แย่งชิงแบบนี้ได้โดยไม่บล็อกการขายที่ถูกต้องในกรณีส่วนใหญ่
มีข้อจำกัดหนึ่งที่ต้องพูดตรง ๆ ไม่มีการซิงก์ใดที่เกิดขึ้นทันทีจริง ยังมีช่วงเวลาหนึ่งเสมอ โดยทั่วไปตั้งแต่ไม่กี่วินาทีถึงสองสามนาที ขึ้นอยู่กับข้อจำกัดอัตราเรียก API การขายเกินสต็อกยังมีโอกาสเกิดขึ้นได้ในทางทฤษฎี เป้าหมายของระบบเชื่อมต่อที่ดีคือการย่อช่วงเวลานี้ให้สั้นที่สุด ไม่ใช่การแสร้งทำเป็นว่าช่วงเวลานี้เป็นศูนย์ จับการขายเกินสต็อกที่เกิดขึ้นได้เร็วด้วยขั้นตอนยกเลิกและคืนเงินอัตโนมัติ
ปิดวงจรบัญชีให้ครบ
TikTok Shop ไม่ได้จ่ายเงินเต็มมูลค่าออเดอร์ให้คุณ ก่อนโอนยอดชำระ TikTok จะหักค่าคอมมิชชันที่คำนวณจากราคาสินค้าเท่านั้น ไม่รวมค่าขนส่ง และคำนวณบนฐานที่ไม่รวมภาษีมูลค่าเพิ่ม ไม่ใช่จากยอดรวมทั้งออเดอร์ ส่วนค่าขนส่งนั้นแยกคิดต่างหากจากค่าคอมมิชชัน และถูกจัดการต่างกันไปตามรูปแบบการจัดส่งที่คุณตั้งไว้ โปรโมชันที่ใช้งานอยู่ และการตั้งค่าของผู้ขายเอง ถ้าคุณยิงโฆษณาในแพลตฟอร์มก็ต้องบวกค่าโฆษณาเข้าไปอีก แล้ว TikTok จึงโอนยอดสุทธิให้ตามรอบของตัวเอง ซึ่งมักเป็นรายสัปดาห์
ถ้าระบบบัญชีของคุณบันทึกแค่ยอดขายรวม บัญชีจะไม่ตรงกับเงินที่เข้าบัญชีธนาคารจริง การปิดบัญชีสิ้นเดือนจะกลายเป็นงานกระทบยอดที่ปวดหัว
วิธีที่เราบันทึกการชำระเงินแต่ละรอบ
เราจัดการเรื่องนี้ด้วยการบันทึกการชำระเงินแต่ละรอบของ TikTok เป็นเอกสารแยกต่างหากในระบบบัญชีของ Odoo โดยไม่ปนกับใบแจ้งหนี้ขาย
- ใบสั่งขายและใบแจ้งหนี้ลูกค้าบันทึกยอดรวมที่ผู้ซื้อจ่ายจริง
- บิลผู้ขาย (หรือรายการบันทึกบัญชีเฉพาะ) บันทึกค่าคอมมิชชันและค่าธรรมเนียมของ TikTok เป็นต้นทุนขาย
- รายการในใบแจ้งยอดธนาคารสำหรับยอดโอนจะกระทบยอดกับ (ใบแจ้งหนี้ ลบ ค่าธรรมเนียม) เพื่อให้ตัวเลขตรงกันพอดี
สำหรับนิติบุคคลไทยยังมีอีกชั้นหนึ่ง คือเรื่องภาษีหัก ณ ที่จ่ายของค่าคอมมิชชันมาร์เก็ตเพลส และข้อกำหนดการออกใบกำกับภาษีอิเล็กทรอนิกส์ให้ถูกต้องในกรณีที่เข้าเงื่อนไข ค่าธรรมเนียมมาร์เก็ตเพลสต้องมีวิธีจัดการภาษีของตัวเองที่ชัดเจนตั้งแต่ต้น ไม่ใช่มาเสริมทีหลังในวันใกล้ปิดยื่นแบบภาษีมูลค่าเพิ่ม การวางระบบเรื่องนี้ให้ถูกต้องตั้งแต่ต้นเป็นส่วนหนึ่งของงานวางระบบบัญชีและภาษีไทยใน Odoo ที่เราทำควบคู่ไปด้วย แทนที่จะปล่อยให้เป็นงานเสริมที่มาทีหลังจากฝั่งขายเปิดใช้งานไปแล้ว
ขั้นตอนการขึ้นระบบจริงโดยทั่วไป
เราไม่แนะนำให้เชื่อมต่อ TikTok Shop เข้ากับฐานข้อมูลที่ใช้งานจริงโดยตรงตั้งแต่วันแรก ขั้นตอนที่เราใช้มีดังนี้
- mapping SKU และตรวจสอบการจัดการตัวเลือกสินค้าย่อยในสภาพแวดล้อม staging
- รันการซิงก์ออเดอร์แบบทางเดียวจาก TikTok เข้า Odoo สักสองสามวัน โดยยังส่งสต็อกด้วยมือ เพื่อยืนยันข้อมูลก่อนให้ระบบเขียนกลับไปที่แพลตฟอร์ม
- เปิดการส่งสต็อกแบบใกล้เคียงเรียลไทม์ โดยเริ่มด้วยบัฟเฟอร์สำรองที่ระมัดระวัง
- เชื่อมต่อการจัดส่งและการซิงก์เลขพัสดุ
- สร้างขั้นตอนกระทบยอดการชำระเงิน รันทดสอบให้ครบหนึ่งรอบการจ่ายเงินเต็มของ TikTok ก่อนจะถือว่างานเสร็จ
- อยู่ดูแลต่อจนผ่านการปิดบัญชีสิ้นเดือนครั้งแรก เพราะนั่นคือช่วงที่รายการค่าธรรมเนียมที่หายไปหรือการจัดหมวดภาษีผิดจะปรากฏให้เห็นจริง
ขั้นตอนสุดท้ายนี้สำคัญกว่าที่ฟังดู งาน "แก้บั๊กระบบเชื่อมต่อ" ส่วนใหญ่ที่เราถูกเรียกเข้าไปแก้ไม่ใช่ปัญหา API ล้มเหลว แต่เป็นรายการบัญชีที่ไม่เคยถูกสร้างไว้ตั้งแต่แรก มาถูกค้นพบสามสัปดาห์ให้หลัง ตอนที่ทีมการเงินอธิบายไม่ได้ว่าทำไมยอดเงินในธนาคารไม่ตรงกับบัญชีแยกประเภทการขาย สำหรับผู้ขายที่มีแคตตาล็อกหลากหลายช่องทางอยู่แล้ว ทีมพัฒนาอีคอมเมิร์ซ ของเรามักเข้ามาช่วยในจุดนี้ด้วย เพราะหน้าร้านออนไลน์และฟีดมาร์เก็ตเพลสต้องใช้ตัวเลขสต็อกชุดเดียวกัน
ถ้าคุณกำลังพิจารณาเชื่อมต่อ TikTok Shop กับ Odoo และมีการเชื่อมต่อ Shopee หรือ Lazada อยู่แล้ว เริ่มจากตรวจสอบว่าบัฟเฟอร์สำรองความปลอดภัยปัจจุบันของแต่ละช่องทางตั้งไว้เท่าไร การตรวจสอบจุดเดียวนี้มักจะเผยให้เห็นความเสี่ยงขายเกินสต็อกก่อนที่จะทำให้คุณต้องยกเลิกออเดอร์ในไลฟ์ครั้งถัดไป



