> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://help.bentoweb.com/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# คู่มือการใช้งาน Webhook In Cancel (ระบบแจ้งเตือนคำขอยกเลิกจากผู้ซื้อ)

เอกสารฉบับนี้อธิบายวิธีการใช้งานและความสำคัญของ **Webhook In Cancel** สำหรับนักพัฒนาที่เชื่อมต่อกับระบบ BentoWeb เพื่อจัดการคำสั่งซื้อจาก Marketplace (Shopee, Lazada, TikTok Shop)
## 1. Webhook In Cancel คืออะไร?

ปกติแล้วเวลาลูกค้ากดยกเลิกคำสั่งซื้อ จะมี 2 กรณี:

1. **ยกเลิกสำเร็จทันที (Instant Cancel):** กรณีที่ร้านยังไม่ได้กดเตรียมส่งของ (Arrange Shipment) -> สถานะออเดอร์จะเปลี่ยนเป็น `CANCELLED` เลย
2. **ขอยกเลิก (Cancellation Request):** กรณีที่ร้านกดเตรียมส่งของไปแล้ว หรือมีเลขพัสดุแล้ว ลูกค้าจะกด "ขอยกเลิก" ได้ แต่ **ต้องรอให้ร้านค้าอนุมัติก่อน**

**Webhook In Cancel** คือระบบแจ้งเตือนที่ BentoWeb จะส่งไปหาคุณทันทีเมื่อเกิดกรณีที่ 2 (**ลูกค้าขอยกเลิก และกำลังรอคุณกดอนุมัติ**) เพื่อให้ระบบของคุณทราบและตัดสินใจว่าจะ "ยอมรับ" หรือ "ปฏิเสธ" คำขอนั้น
> **รองรับ Platform:** Shopee, Lazada, TikTok Shop

## 2. วิธีการสมัครรับข้อมูล (Subscribe)

แจ้งความต้องการใช้งานผ่านระบบ  Support

## 3. ข้อมูลที่คุณจะได้รับ (Payload)
เมื่อมีลูกค้าขอยกเลิก ระบบจะส่ง JSON ไปยัง URL ที่คุณระบุไว้ โดยมีโครงสร้างข้อมูลมาตรฐานดังนี้:
```
{
  "status": "...",
  "data": {
    "platform": "shopee",  // shopee, lazada, tiktok
    "order": { ... },      // ข้อมูลออเดอร์ปกติใน BentoWeb
    "callback": { ... },   // ข้อมูลดิบจาก Marketplace (Raw Data)
    
    // *** ส่วนสำคัญ: ข้อมูลคำขอยกเลิก ***
    "request_cancellation_info": {
        "request_id": "260202MPR...",     // ID ของคำขอยกเลิก (ใช้สำหรับอ้างอิงตอนตอบรับ)
        "aggregate_order_id": "26020...", // เลขคำสั่งซื้อ Marketplace
        "bentoweb_order_id": 145001,      // เลขคำสั่งซื้อ BentoWeb
        "reason": "เปลี่ยนใจ",             // เหตุผลที่ลูกค้าเลือก
        "requested_at": "2026-02-03...",  // เวลาที่ลูกค้ากดขอ
        "type": "cancel_request",
        "items": [                        // รายการสินค้าที่ลูกค้าขอยกเลิก
             {
                "market_item_id": "199...",
                "seller_sku": "SKU-001",
                "quantity": 1,
                "product_name": "เสื้อยืดสีดำ",
                "variant_name": "Size L"
             }
        ]
    }
  }
}
```

## 4. สิ่งที่คุณควรทำเมื่อได้รับข้อมูลนี้

1. **ตรวจสอบสถานะ:** ดูว่าออเดอร์นี้แพ็คของไปหรือยัง? ส่งขนส่งไปแล้วหรือยัง?
2. **ตัดสินใจ:**
    * ถ้าของยังอยู่ -> **กดอนุมัติ (Accept)** เพื่อคืนเงินลูกค้า
    * ถ้าของส่งไปแล้ว -> **กดปฏิเสธ (Reject)** เพื่อให้กระบวนการจัดส่งดำเนินต่อ
3. **ตอบรับ (Action):**
    * คุณสามารถจัดการผ่านหน้า Admin BentoWeb หรือ Admin ของ Marketplace
    * หรือเรียก **BentoWeb API** เพื่อ Approve/Reject ได้ทันที (ดูรายละเอียด endpoint ได้ที่ [[OpenAPI Document]](https://open-api.bentoweb.com/bentoweb-order-prod/#/Order/post_order_approve_cancel_request__orderId_))

## Webhook Reply Cancel (แจ้งผลการตอบรับ)

### มันคืออะไร?
ระบบแจ้งผลลัพธ์สุดท้ายของคำขอยกเลิกนั้นๆ ว่าสรุปแล้ว **"สำเร็จ" (อนุมัติคืนเงิน)** หรือ **"ไม่สำเร็จ" (ปฏิเสธ/ถอนคำขอ)** เพื่อให้คุณนำไปตัดสต็อกหรือบันทึกบัญชีต่อได้ถูกต้อง

### ข้อมูลที่คุณจะได้รับ (Payload)
โครงสร้างเหมือน Webhook ปกติ แต่เพิ่ม Field `reply_status` เพื่อบอกผลลัพธ์:
```
{
  "order_id": 12345,
  "order_status": "CANCELLED", // สถานะล่าสุด
  "items": [ ... ],
  // ... ข้อมูลอื่นๆ
  
  "reply_status": "APPROVE" // หรือ "REJECT"
}
```

## สรุป

Webhook In Cancel ช่วยให้คุณไม่พลาด "คำขอยกเลิก" ที่ต้องรีบจัดการ ซึ่งสำคัญมากสำหรับ **Rating ร้านค้า** เพราะถ้าปล่อยทิ้งไว้นานเกินกำหนด ระบบ Marketplace อาจจะ Auto-accept (อนุมัติคืนเงินอัตโนมัติ) ทำให้เสียของฟรีได้

* **In Cancel**: ช่วยให้ทีมแอดมินรู้ทันทีว่ามีลูกค้าขอยกเลิก ไม่ต้องคอยกด Refresh หน้า Seller Center
* **Reply Cancel**: ช่วยให้ระบบบัญชีและสต็อกถูกต้องแม่นยำ (รู้ว่าต้องคืนเงินหรือรับรู้รายได้ต่อ)