ไม่ต้องทำ Manual ให้หัวจะปวด! เชื่อมระบบหลังบ้านของคุณแบบ Auto ผ่าน LINE SHOPPING API

Tan Warit
LINE Developers Thailand
6 min readJun 26, 2022

ตั้งแต่ปี 2020 LINE ได้เปิดตัว LINE SHOPPING ระบบหลังบ้านที่จะมาเชื่อมต่อกับ LINE Official Account ที่จะช่วยให้การซื้อขายผ่าน LINE มีประสบการณ์การใช้งานที่ดีที่สุด เพราะ LINE SHOPPING มาด้วยระบบจัดการหน้าร้าน หลังร้าน รวมถึงการเช็คสต๊อกสินค้า หรือการออกใบสรุปออเดอร์ให้ลูกค้าผ่าน LINE ได้เลย ส่วนนักพัฒนาอย่างเราก็มีฟีเจอร์หลายอย่างที่ใช้ได้เลยโดยไม่ต้องพัฒนาเอง เช่น สามารถให้ Chatbot + Admin คุยกับผู้ใช้ไปพร้อมๆกันได้ด้วย เป็นต้น

ทำไมต้อง LINE SHOPPING API?

สำหรับมุมของนักพัฒนา LINE DEV อย่างพวกเราหรือแบรนด์ต่างๆเองก็ดี การใช้งานเครื่องมือ LINE SHOPPING ผ่าน CMS อย่างเดียวก็คงจะธรรมดาไป ในมุมแบรนด์เองก็ต้องการ Integrate ข้อมูลที่เกิดขึ้นจากระบบหลังบ้านของ LINE SHOPPING ไปยังระบบอื่นๆด้วยแบบอัตโนมัติโดยไม่ต้องมานั่งทำ Manual เองให้หัวจะปวด ทั้งหมดนี้เป็นจริงได้ด้วย LINE SHOPPING API ครับ! (ปรบมือออ)

Use cases ของ LINE SHOPPING API

Use case 1— สำหรับแบรนด์ที่มีช่องทางการขายหลายๆทาง เช่น ขายผ่าน Website ของตัวเอง, eMarketplace, Social Commerce การที่จะจัดการ Stock ของสินค้าทั้งหมดทุกช่องทางแบบ Manual แค่คิดก็หัวจะปวดแล้วใช่ไหมฮะ ตรงนี้เราก็สามารถใช้ API ในการที่จะ Sync Stock ในทุกๆช่องทางได้เลย ดีย์งาม!

Use case 2— สำหรับแบรนด์ที่มีระบบ Database/CRM/ERP อยู่แล้ว แต่อยากนำข้อมูลจากระบบ LINE SHOPPING ไป Integrate ด้วย เช่น เอาข้อมูล Order ที่เกิดขึ้นใน LINE SHOPPING ไปผูกกับระบบของเค้าเพื่อที่อาจจะเอาข้อมูลไปวิเคราะห์ได้ดียิ่งขึ้น

Use case 3— สำหรับแบรนด์ที่มีระบบ Point system ก็สามารถที่จะนำข้อมูล Order จากระบบ LINE SHOPPING ไป Integrate เพื่อสร้าง Campaign ต่างๆได้ด้วย

LINE SHOPPING API ทำอะไรได้บ้าง?

ก่อนจะเริ่มใช้งานเรามาดูกันก่อนว่า API มีอะไรให้สามารถเรียกใช้ได้บ้าง หลักๆแบ่งออกเป็น 3 Categories ได้แก่

  1. Product API จัดการข้อมูลเกี่ยวกับสินค้าภายในร้าน
  2. Inventory API จัดการบริหาร Stock สินค้า
  3. Order API เข้าถึงข้อมูลเกี่ยวกับ Order ที่เกิดขึ้น
  4. Order Webhook ยิงข้อมูล Order ไประบบหลังบ้าน

Getting Started

พอเรารู้แล้วว่ามีอะไรให้ใช้บ้าง เราไปเริ่มกันเลยฮะ! (ตั้งแต่วันที่ 31 พค 2023 สามารถเริ่มใช้งานได้เลย) ขอออกตัวก่อนว่า API อาจจะยังมาไม่ครบทุกเส้นแต่ก็ถือว่าเป็นจุดเริ่มต้นของ LINE SHOPPING API ครับผม!

จากนั้นก็เหมือนกับการใช้งานใน API ทั่วไป ก็คือเราต้องไปมีกุญแจในการไขเข้าใช้งานก่อนเนอะ ซึ่งเราสามารถไปสร้างกุญแจได้ที่ oaplus.line.biz > Channel ที่ต้องการ > Settings > API keys > กดปุ่ม Generate > กดปุ่ม Copy เพื่อเตรียมเอาไปใช้

ต่อมาให้เอา API Key ที่ได้ไปใส่ไว้ใน Header โดยตั้งชื่อ Key ว่าX-API-KEY แค่นี้ก็สามารถเข้าใช้งาน LINE SHOPPING API ได้แล้ว อ้อ ผมแนะนำให้เพิ่ม Parameter อีกตัวไว้ใน Header ชื่อว่า User-Agent และใส่ Value เป็นชื่อบริษัทหรือชื่อบริการเราก็ได้ครับ เพื่อที่เวลาทีม Support เค้าช่วยแก้ปัญหาให้เราได้รวดเร็วยิ่งขึ้นฮะ ถัดไปเราไปลองเรียก API ต่างๆกันดูฮะ!

1. Product API 🧸

Get All Products — ดึงข้อมูลเกี่ยวกับสินค้าที่มีอยู่ในร้านของเรา

GET https://developers-oaplus.line.biz/myshop/v1/products

Authorization: API Key (ตั้งชื่อ Key ว่า X-API-KEY)
Query Params (Optional)
ids:
ใส่ id ของสินค้าที่ต้องการจะดึง (สามารถใส่ได้หลาย id เป็น Array of strings)
skus:
ใส่ sku ของสินค้าที่ต้องการจะดึง (สามารถใส่ได้หลาย sku เป็น Array of strings)
page:
ตัวเลข Page ที่ต้องการดึงข้อมูลสินค้า (ค่า Default คือ 1)
perPage:
ระบุว่าให้ใน 1 page จะให้ดึงจำนวนสินค้าออกมาจำนวนเท่าไร (ค่า Default คือ 25 โดยเราสามารถกำหนดได้ตั้งแต่ 1-100)

Response ที่จะได้กลับมาในกรณี 200 OK

  • currentPage: ตัวเลขหน้า Page ปัจจุบัน
  • data: Array ของ Objects สินค้า
  • perPage: ตัวเลขที่แสดงถึงจำนวนสินค้าต่อ 1 Page
  • totalPage: ตัวเลข Page ทั้งหมดของผลลัพธ์ที่สามารถดึงได้
  • totalRow: ตัวเลขของจำนวนสินค้าทั้งหมด

มาดูตัว Object สินค้ากันสักนิดครับ (ขอหยิบข้อมูลบางส่วนเท่านั้นนะครับ จริงๆแล้วมีมากกว่านี้สามารถไปดูตามใน Spec เพิ่มเติมได้ครับผม)

  • brand: ชื่อแบรนด์ของสินค้านั้นๆ
  • categoryName: ชื่อ Category ของสินค้า
  • description: รายละเอียดสินค้า
  • imageUrl: URL รูปสินค้า
  • isDisplay: สินค้าตัวนี้ถูกแสดงอยู่ในหน้าร้านหรือไม่
  • variants: Array ของ Variants objects เช่น availableNumber จำนวนคงเหลือ, price ราคา, weight นำ้หนัก เป็นต้น

2. Inventory API 📦

ในส่วนนี้จะมี API ย่อยๆ 3 ตัวที่ลักษณะการใช้งานคล้ายกันเลย ได้แก่

  1. Adjust inventory — แก้ไขจำนวนสินค้าใน Inventory (เอาไปทับเลย)
  2. Decrease inventory — ลดจำนวนสินค้าใน Inventory (เอาไปคำนวนกับของที่มีอยู่)
  3. Increase inventory — เพิ่มจำนวนสินค้าใน Inventory (เอาไปคำนวนกับของที่มีอยู่)
PUT https://developers-oaplus.line.biz/myshop/v1/inventory/{id}/adjusthttps://developers-oaplus.line.biz/myshop/v1/inventory/{id}/decreasehttps://developers-oaplus.line.biz/myshop/v1/inventory/{id}/increaseAuthorization: API Key (ตั้งชื่อ Key ว่า X-API-KEY)Path Params
id:
ใส่ Inventory id ของสินค้าที่ต้องการจะแก้ไขจำนวน
Request Body
amount:
จำนวนของสินค้าที่ต้องการแก้ไข (มากกว่า 0 แต่ไม่เกิน 100,000)

Response ที่จะได้กลับมาในกรณี 200 OK

  • availableNumber: จำนวนคงเหลือที่จะแสดงหน้าร้าน
  • onHandAmount: จำนวนคงเหลือใน Stock
  • readyToShipAmount: จำนวนคงเหลือที่ลูกค้าจ่ายเงินแล้วและรอการส่งอยู่
  • reservedAmount: จำนวนคงเหลือที่รอลูกค้าชำระเงินอยู่

3. Order API 🛒

ในส่วนนี้จะมี API ต่างๆทั้งหมด 5 ตัวด้วยกันนะครับ เริ่มกันที่ตัวแรก

1.Get All Orders — List ข้อมูลเกี่ยวกับ Order ตามเงื่อนไขที่ต้องการ (ได้ผลลัพธ์กลับมาหลายๆ Order)

GET https://developers-oaplus.line.biz/myshop/v1/orders

Authorization: API Key (ตั้งชื่อ Key ว่า X-API-KEY)
Query Params (Optional)
search:
ใส่คำที่ต้องการค้นหา เช่น ชื่อลูกค้า หรือ หมายเลข Order ตัว API จะทำการค้นหาแบบ Partial match ให้
page: ตัวเลข Page ที่ต้องการดึงข้อมูล Order (ค่า Default คือ 1)perPage: ระบุว่าให้ใน 1 page จะให้ดึงจำนวน Order ออกมาจำนวนเท่าไร (ค่า Default คือ 25 โดยเราสามารถกำหนดได้ตั้งแต่ 1-100)sortBy: สำหรับการเรียงผลลัพธ์ที่ได้โดยสามารถระบุค่าได้ดังนี้ ORDER_NO, CREATED_AT, UPDATED_AT, CHECKED_OUT_AT (ค่า Default คือ ORDER_NO)orderBy: สำหรับการเรียงแบบ Ascending หรือ Descending ให้ระบุ ASC หรือ DESCorderStatus: ค้นหาตามสถานะของ Order สามารถระบุค่่าได้ดังนี้ FINALIZED, COMPLETED, EXPIRED, CANCELED (สามารถใส่ได้หลายค่าเป็น Array of strings)paymentStatus: ค้นหาตาม Status ของการจ่ายเงินสามารถระบุค่่าได้ดังนี้ NO_PAYMENT, PENDING, PAID, REFUND (สามารถใส่ได้หลายค่าเป็น Array of strings)paymentMethod: ค้นหาตามวิธีการจ่ายเงิน สามารถระบุค่่าได้ดังนี้ BANK, COD, RLP (สามารถใส่ได้หลายค่าเป็น Array of strings)shipmentStatus: ค้นหาตามสถานะการส่งของ สามารถระบุค่่าได้ดังนี้ NO_SHIPMENT, SHIPPED_ALL, SHIPMENT_READY (สามารถใส่ได้หลายค่าเป็น Array of strings)startAt: ค้นหาตามเวลาที่เริ่มต้น เช่น 2022–01–01T09:30:00Z
startAt: ค้นหาตามเวลาที่สิ้นสุด เช่น 2022–01–03T09:30:00Z

Response ที่จะได้กลับมาในกรณี 200 OK

  • currentPage: ตัวเลขหน้า Page ปัจจุบัน
  • data: Array ของ Order object
  • perPage: ตัวเลขที่แสดงถึงจำนวนสินค้าต่อ 1 Page
  • totalPage: ตัวเลข Page ทั้งหมดของผลลัพธ์ที่สามารถดึงได้
  • totalRow: ตัวเลขของจำนวนสินค้าทั้งหมด

มาดูตัว Order object กันอีกสักนิด (ขอหยิบข้อมูลบางส่วนเท่านั้นนะครับ ดูใน Spec เพิ่มเติมได้ครับผม)

  • orderStatus: Array ของ Order object
  • paymentMethod: วิธีการชำระเงิน
  • paymentStatus: สถานะของการชำระเงิน
  • shipmentStatus: สถานะของการส่งของ
  • totalPrice: จำนวนเงินรวมทั้งหมดของ Order
  • discountAmount: ส่วนลดใน Order
  • shippingAddress: ที่อยู่ในการจัดส่ง (เป็น JSON Object)

2.Order detail — ดึงข้อมูลรายละเอียดตามหมายเลข Order (ได้ผลลัพธ์กลับมา Order เดียว)

GET https://developers-oaplus.line.biz/myshop/v1/orders/{orderNo}Authorization: API Key (ตั้งชื่อ Key ว่า X-API-KEY)Path Params
orderNo:
หมายเลข Order ที่ต้องการจะดูข้อมูล

Response ที่จะได้กลับมาในกรณี 200 OK จริงๆผลลัพธ์จะคล้ายกับ Field data (Order object) จาก API Get All Orders เลยครับ แต่ตัวนี้จะมีรายละเอียดเกี่ยวกับสินค้าที่อยู่ภายใน Order มาให้ด้วย (ขอหยิบข้อมูลเฉพาะ orderItems ซึ่งเป็นส่วนที่แตกต่างกันนะครับ ที่เหลือดูใน Spec เพิ่มเติมได้ครับผม)

  • barcode: บาร์ โค้ดสินค้า
  • discountedPrice: ราคาส่วนลดสินค้า
  • imageURL: URL รูปสินค้า
  • name: ชื่อสินค้า
  • price: ราคาสินค้า
  • productId: รหัสสินค้า
  • quantity: จำนวนสินค้า
  • sku: SKU สินค้า
  • variantId: รหัส Variant
  • variants: Array ของ Variant object เช่น สีของสินค้า
  • weight: นำ้หนักสินค้า

3.Mark as ship — อัปเดตสถานะการส่งของของ Order ให้เป็นส่งของแล้ว (SHIPPED_ALL) พร้อมอัปเดตหมายเลข Tracking ของการส่ง

POST https://developers-oaplus.line.biz/myshop/v1/orders/{orderNo}/mark-as-shipAuthorization: API Key (ตั้งชื่อ Key ว่า X-API-KEY)Path Params
orderNo:
หมายเลข Order ที่ต้องการ
Request Body
trackingNumber:
หมายเลข Tracking ของการส่ง (ไม่เกิน 50 ตัวอักษร)
พอเรายิง API Mark-as-ship ปุ๊บ ลูกค้าก็จะได้รับข้อความจากระบบอัตโนมัติเลยว่าของกำลังไป ดีย์งาม

ส่วน Response ในกรณี 200 OK จะได้เหมือนกับตัว API Order detail ครับ

4.Mark as paid (COD) — อัปเดตสถานะการชำระเงินเป็นชำระแล้วให้กับ Order ที่เลือกวิธีการชำระเงินเป็น COD (ต้องผ่านการเรียก Mark as ship ก่อนเพราะเป็น COD)

POST https://developers-oaplus.line.biz/myshop/v1/orders/{orderNo}/mark-as-paidAuthorization: API Key (ตั้งชื่อ Key ว่า X-API-KEY)Path Params
orderNo:
หมายเลข Order ที่ต้องการ
หลังจากเรียกใช้ API ตัวนี้สถานะของ Order จะเปลี่ยนเป็น COMPLETED

Response ในกรณี 200 OK จะได้เหมือนกับตัว API Order detail ครับ

5.Update tracking number — อัปเดตหมายเลข Tracking ของการส่ง (ใช้ในกรณีที่ต้องการเปลี่ยนหมายเลข Tracking ใน Order ที่เคยเรียก Mask as ship มาแล้ว)

PUT https://developers-oaplus.line.biz/myshop/v1/orders/{orderNo}/shipmentsAuthorization: API Key (ตั้งชื่อ Key ว่า X-API-KEY)Path Params
orderNo:
หมายเลข Order ที่ต้องการ
Request Body
trackingNumber:
หมายเลข Tracking ของการส่ง (ไม่เกิน 50 ตัวอักษร)
พอเรายิง API ตัวนี้ ลูกค้าก็จะได้รับข้อความจากระบบอัตโนมัติว่าหมายเลข Tracking มีการเปลี่ยนแปลง

และ Response ในกรณี 200 OK ก็จะได้เหมือนกับตัว API Order detail ครับ

4. Order Webhook ยิงไประบบหลังบ้าน

อีกหนึ่ง Features เด็ดสำหรับนักพัฒนาก็คือเราสามารถที่จะตั้ง Webhook ให้ LINE SHOPPING API ยิงข้อมูลมาที่หลังบ้านของเราในกรณีที่ Order ต่างๆมีการเปลี่ยนสถานะเป็น Ready to ship ได้ด้วย (Order Paid Status) วิธีการก็คือ

  • ถ้าลูกค้าเลือกวิธีชำระเงินเป็น COD/RLP (Rabbit LINE Pay) สถานะของ Order จะเป็น Ready to ship เลย
  • ถ้าลูกค้าเลือกวิธีโอนเงิน หลังจากที่แอดมินตรวจสอบและยืนยันการชำระแล้ว Order ก็จะเปลี่ยนเป็นสถานะนี้เช่นกัน)
  1. ไปตั้งค่าเปิด Webhook ที่ oaplus.line.biz > Channel ที่ต้องการ > E-Commerce > Shop settings > Open API > กดปุ่ม Create Webhook > กรอกข้อมูลต่างๆลงไป (ให้เราไปตั้ง Server ของเราเพื่อรอรับ Webhook และเอามากรอกใน Webhook URL) > กดปุ่ม Save

2. หลังจากที่ Webhook ถูกสร้างเราสามารถกดเข้าไปดูค่า Secret key ได้ (กดตรงชื่อหรือปุ่ม Edit)

ตัว Secret Key จะเอาไว้ใช้ Validate ว่า Webhook ที่เข้ามาหลังบ้านเรา เป็นของแท้ที่มาจาก LINE SHOPPING API จริงๆ หลักการคือระบบจะแนบค่า x-myshop-signature ใน Headers กับทุก Request ของ Webhook ที่จะเข้ามา (เหมือนกันกับตอนเรา Validate Webhook ใน Messaging API ที่จะใช้ x-line-signature นั่นเอง อ่านข้อมูลเพิ่มเติมได้ที่นี่เลยครับ)

3. Spec ของ Webhook object สามารถดูได้ที่นี่เลยครับ หลักๆจะเหมือนกันกับผลลัพธ์ของ Order detail API เลย เรามาทดสอบดูสักหน่อยว่ามี Webhook ยิงเข้ามาจริงๆไหม

หรือเราสามารถเข้าไปดู Log ได้ตรง Setting ของ Webhook ได้ด้วยฮะ

สรุป

ก่อนหน้านี้ก็จะมีคำถามในกลุ่มของ LINE DEV Community ว่าเมื่อไรจะมี LINE SHOPPING API เปิดให้ใช้น้า ณ วันนี้มาแล้วครับผม นักพัฒนา LINE DEV สามารถเอา API ตัวนี้ไป Integrate กับระบบต่างๆได้เลย ซึ่งจริงๆ API อาจจะยังไม่ได้ CRUD ครบทุกเส้นแต่ก็ถือว่าเป็นจุดเริ่มต้นที่ดีครับผม ถ้าได้เอาไปลองเล่นแล้วมี Feedback สามารถแจ้งมาได้ในกลุ่มของเรานะครับ วันนี้ลาไปก่อนแล้วเจอกันครับ!

--

--