> For the complete documentation index, see [llms.txt](https://www.boxhero.io/docs/llms.txt). Every page is available as Markdown by appending `.md` to its URL; this page is [Markdown](https://www.boxhero.io/docs/th/developers/webhooks/overview.md).

# ภาพรวม

> Webhook เป็นฟีเจอร์ที่ช่วยให้คุณได้รับการแจ้งเตือนแบบเรียลไทม์ เมื่อเกิดเหตุการณ์บางอย่างใน BoxHero

![](https://assets.boxhero.io/docs/images/e073efd69a551d1c50313ce8969f89656fe7fb6c2f4bf97cd67eb7398f4e21d6-1601x941.jpeg)

---

## การลงทะเบียน

คุณสามารถลงทะเบียน Webhook ได้ที่ `การตั้งค่า` > `การเชื่อมต่อ` ในทีม BoxHero ของคุณ

![](https://assets.boxhero.io/docs/images/39738e2bf18459a1ba1d9df4c6a3eb786fc434f5fab37932e8edf50bf6a0b91a-1100x810.png)

## การส่งและการส่งซ้ำ

เมื่อเกิดเหตุการณ์ BoxHero จะส่งคำขอ HTTP `POST` ไปยังปลายทาง (endpoint) ของ Webhook ที่คุณลงทะเบียนไว้ โดยเนื้อหาคำขอ (request body) จะมี JSON payload ที่อธิบายเหตุการณ์นั้น

- หากเซิร์ฟเวอร์ของคุณตอบกลับด้วย**รหัสสถานะ 2xx** ใด ๆ (เช่น 200, 201, 204) จะถือว่าการส่งสำเร็จ
- **การตอบกลับที่ไม่ใช่ 2xx** ทั้งหมดจะถือว่าล้มเหลว และระบบจะส่งซ้ำ

## โครงสร้าง Payload ของ Webhook

เหตุการณ์ Webhook ทั้งหมดจะถูกส่งโดยมีโครงสร้าง JSON ต่อไปนี้ในเนื้อหาคำขอ:

```json
{
  "id": "3f9a2b7c-6d4e-4a1f-9c8b-2e5d7a0f1b34", // Event's unique ID
  "topic": "txs/new", // Event topic
  "version": 1, // Payload schema version
  "payload": { // Event-specific data
    ...
  },
  "created_time": "2025-08-06T09:20:48.623Z" // Timestamp of event occurrence (ISO 8601)
}
```

---

## ลำดับของเหตุการณ์

BoxHero **ไม่** รับประกันลำดับการส่งเหตุการณ์ ตัวอย่างเช่น เหตุการณ์ `item/new` อาจมาถึงหลังเหตุการณ์ `item/delete` ของสินค้าเดียวกัน

ฟิลด์ `created_time` ใน payload ของเหตุการณ์คือเวลาที่เกิดเหตุการณ์จริง ควรออกแบบตัวจัดการ Webhook ให้มีตรรกะแบบ idempotent และรองรับเหตุการณ์ที่มาไม่เรียงลำดับ เพื่อให้จัดการเหตุการณ์ได้อย่างน่าเชื่อถือ

เหตุการณ์ของธุรกรรมที่ถูกแก้ไขและลบ (`txs/edit`, `txs/delete`) จะมี `revision` มาด้วย เพื่อให้คุณทราบว่าเหตุการณ์นั้นอธิบายธุรกรรมเวอร์ชันใด

## หัวข้อเหตุการณ์

> **Note**
>
> หากต้องการให้รองรับหัวข้อเหตุการณ์เพิ่มเติม โปรดติดต่อ[ฝ่ายสนับสนุน](https://www.boxhero.io/docs/th/resources/contact)

### txs/new

ทำงานเมื่อเกิดธุรกรรมสต็อก (การรับเข้า / การนำออก / การปรับสต็อก / การย้ายสต็อก)

> **Caution**
>
> **หมายเหตุ:** เหตุการณ์นี้จะ_ไม่_ทำงานสำหรับการปรับสต็อกที่สร้างจากการแก้ไขหรือการนำเข้าจำนวนมาก (เช่น เมื่อเพิ่มหรืออัปเดตสินค้าผ่าน Excel)

| ฟิลด์ | จำเป็น | คำอธิบาย |
| --- | --- | --- |
| id | ✓ | ID เฉพาะของธุรกรรม |
| type | ✓ | ประเภทธุรกรรม (in, out, adjust, move) |
| partner |  | คู่ค้า |
| partner.id |  | ID เฉพาะของคู่ค้า |
| partner.name |  | ชื่อคู่ค้า |
| partner.deleted |  | คู่ค้าถูกลบแล้วหรือไม่ |
| from_location |  | ตำแหน่งจัดเก็บต้นทาง |
| from_location.id |  | ID เฉพาะของตำแหน่งจัดเก็บต้นทาง |
| from_location.name |  | ชื่อตำแหน่งจัดเก็บต้นทาง |
| from_location.deleted |  | ตำแหน่งจัดเก็บต้นทางถูกลบแล้วหรือไม่ |
| to_location | ✓ | ตำแหน่งจัดเก็บปลายทาง |
| to_location.id | ✓ | ID เฉพาะของตำแหน่งจัดเก็บปลายทาง |
| to_location.name | ✓ | ชื่อตำแหน่งจัดเก็บปลายทาง |
| to_location.deleted | ✓ | ตำแหน่งจัดเก็บปลายทางถูกลบแล้วหรือไม่ |
| items | ✓ | รายการสินค้าในธุรกรรม |
| items.id | ✓ | ID เฉพาะของสินค้า |
| items.name | ✓ | ชื่อสินค้า |
| items.quantity | ✓ | จำนวนสต็อกที่เปลี่ยนแปลงจากการรับเข้า/นำออก/ปรับ/ย้าย |
| items.deleted | ✓ | สินค้าถูกลบแล้วหรือไม่ |
| items.from_location_new_stock_level |  | ระดับสต็อกที่ตำแหน่งจัดเก็บต้นทางหลังเกิดธุรกรรม |
| items.to_location_new_stock_level | ✓ | ระดับสต็อกที่ตำแหน่งจัดเก็บปลายทางหลังเกิดธุรกรรม |
| transaction_time | ✓ | เวลาของธุรกรรม (เช่น เวลารับเข้า/นำออก) |
| created_at | ✓ | เวลาที่สร้างธุรกรรม |
| created_by | ✓ | สมาชิกที่สร้างธุรกรรม |
| created_by.id | ✓ | ID เฉพาะของสมาชิก |
| created_by.name | ✓ | ชื่อสมาชิก |
| created_by.deleted | ✓ | สมาชิกถูกลบแล้วหรือไม่ |
| count_of_items | ✓ | จำนวนสินค้า |
| total_quantity | ✓ | จำนวนสต็อกที่เปลี่ยนแปลงทั้งหมด |
| url | ✓ | ที่อยู่ URL สำหรับดูหน้ารายละเอียดของธุรกรรม |
| memo |  | หมายเหตุที่เกี่ยวข้องกับธุรกรรม |

#### ตัวอย่าง Webhook Payload – เหตุการณ์การรับเข้า

```json
{
  "id": 16160911,
  "type": "in",
  "to_location": {
    "id": 52766,
    "name": "Warehouse 3",
    "deleted": false
  },
  "items": [
    {
      "id": 14277699,
      "name": "belif Cleansing Gel Oil Enriched",
      "quantity": 2,
      "deleted": false,
      "to_location_new_stock_level": 3
    },
    {
      "id": 14277698,
      "name": "belif Aqua Bomb Jelly Cleanser",
      "quantity": 2,
      "deleted": false,
      "to_location_new_stock_level": 5
    }
  ],
  "transaction_time": "2023-04-25T05:42:27.545Z",
  "created_at": "2023-08-14T05:14:29.499Z",
  "created_by": {
    "id": 201345,
    "name": "corp",
    "deleted": false
  },
  "count_of_items": 2,
  "total_quantity": 4,
  "url": "https://web.boxhero-app.com/team/149058/mode/0#/tx/16160911"
}
```

#### ตัวอย่าง Webhook Payload – เหตุการณ์การย้ายสต็อก

```json
{
  "id": 3692714,
  "type": "move",
  "from_location": {
    "id": 52765,
    "name": "Warehouse 2",
    "deleted": false
  },
  "to_location": {
    "id": 52766,
    "name": "Warehouse 3",
    "deleted": false
  },
  "items": [
    {
      "id": 14873303,
      "name": "Auto liner 3.5mm",
      "quantity": 1,
      "deleted": false,
      "from_location_new_stock_level": -1,
      "to_location_new_stock_level": 1
    }
  ],
  "transaction_time": "2025-04-25T05:42:27.545Z",
  "created_at": "2025-04-25T05:42:27.545Z",
  "created_by": {
    "id": 176829,
    "name": "Tony Lee",
    "deleted": false
  },
  "count_of_items": 1,
  "total_quantity": 1,
  "url": "https://web.boxhero-app.com/team/150581/mode/2#/ltx/3692714"
}
```

### txs/edit

ส่งเมื่อธุรกรรมสต็อกที่มีอยู่ (การรับเข้า / การนำออก / การย้ายสต็อก / การปรับสต็อก) ถูก**แก้ไข**

| ฟิลด์ | จำเป็น | คำอธิบาย |
| --- | --- | --- |
| id | ✓ | ID เฉพาะของธุรกรรม |
| type | ✓ | ประเภทธุรกรรม (in, out, adjust, move) |
| partner |  | คู่ค้า |
| partner.id |  | ID เฉพาะของคู่ค้า |
| partner.name |  | ชื่อคู่ค้า |
| partner.deleted |  | คู่ค้าถูกลบแล้วหรือไม่ |
| from_location |  | ตำแหน่งจัดเก็บต้นทาง |
| from_location.id |  | ID เฉพาะของตำแหน่งจัดเก็บต้นทาง |
| from_location.name |  | ชื่อตำแหน่งจัดเก็บต้นทาง |
| from_location.deleted |  | ตำแหน่งจัดเก็บต้นทางถูกลบแล้วหรือไม่ |
| to_location | ✓ | ตำแหน่งจัดเก็บปลายทาง |
| to_location.id | ✓ | ID เฉพาะของตำแหน่งจัดเก็บปลายทาง |
| to_location.name | ✓ | ชื่อตำแหน่งจัดเก็บปลายทาง |
| to_location.deleted | ✓ | ตำแหน่งจัดเก็บปลายทางถูกลบแล้วหรือไม่ |
| items | ✓ | รายการสินค้าในธุรกรรม |
| items.id | ✓ | ID เฉพาะของสินค้า |
| items.name | ✓ | ชื่อสินค้า |
| items.quantity | ✓ | จำนวนที่เปลี่ยนแปลงจากธุรกรรม (in/out/adjust/move) |
| items.deleted | ✓ | สินค้าถูกลบแล้วหรือไม่ |
| items.from_location_new_stock_level |  | ระดับสต็อกที่ตำแหน่งจัดเก็บต้นทางหลังเกิดธุรกรรม |
| items.to_location_new_stock_level | ✓ | ระดับสต็อกที่ตำแหน่งจัดเก็บปลายทางหลังเกิดธุรกรรม |
| transaction_time | ✓ | เวลาของธุรกรรม (เช่น เวลารับเข้า/นำออก) |
| created_at | ✓ | เวลาที่สร้างธุรกรรม |
| created_by | ✓ | สมาชิกที่สร้างธุรกรรม |
| created_by.id | ✓ | ID เฉพาะของสมาชิก |
| created_by.name | ✓ | ชื่อสมาชิก |
| created_by.deleted | ✓ | สมาชิกถูกลบแล้วหรือไม่ |
| count_of_items | ✓ | จำนวนสินค้า |
| total_quantity | ✓ | จำนวนสต็อกที่เปลี่ยนแปลงทั้งหมด |
| url | ✓ | ที่อยู่ URL สำหรับดูหน้ารายละเอียดของธุรกรรม |
| memo |  | หมายเหตุที่เกี่ยวข้องกับธุรกรรม |
| revision | ✓ | หมายเลขเวอร์ชันปัจจุบันของธุรกรรม โดยเริ่มจาก 1 |

#### ตัวอย่าง Webhook Payload – ธุรกรรมการรับเข้าที่ถูกแก้ไข

```json
{
  "id": 16160911,
  "revision": 2,
  "type": "in",
  "to_location": {
    "id": 52766,
    "name": "Warehouse 3",
    "deleted": false
  },
  "items": [
    {
      "id": 14277699,
      "name": "belif Cleansing Gel Oil Enriched",
      "quantity": 2,
      "deleted": false,
      "to_location_new_stock_level": 3
    },
    {
      "id": 14277698,
      "name": "belif Aqua Bomb Jelly Cleanser",
      "quantity": 2,
      "deleted": false,
      "to_location_new_stock_level": 5
    }
  ],
  "transaction_time": "2023-04-25T05:42:27.545Z",
  "created_at": "2023-08-14T05:14:29.499Z",
  "created_by": {
    "id": 201345,
    "name": "corp",
    "deleted": false
  },
  "count_of_items": 2,
  "total_quantity": 4,
  "url": "https://web.boxhero-app.com/team/149058/mode/0#/tx/16160911"
}

```

#### ตัวอย่าง Webhook Payload – ธุรกรรมการย้ายสต็อกที่ถูกแก้ไข

```json
{
  "id": 3692714,
  "revision": 2,
  "type": "move",
  "from_location": {
    "id": 52765,
    "name": "Warehouse 2",
    "deleted": false
  },
  "to_location": {
    "id": 52766,
    "name": "Warehouse 3",
    "deleted": false
  },
  "items": [
    {
      "id": 14873303,
      "name": "Auto liner 3.5mm",
      "quantity": 1,
      "deleted": false,
      "from_location_new_stock_level": -1,
      "to_location_new_stock_level": 1
    }
  ],
  "transaction_time": "2023-04-25T05:42:27.545Z",
  "created_at": "2023-04-25T05:42:27.545Z",
  "created_by": {
    "id": 176829,
    "name": "Joy Kim",
    "deleted": false
  },
  "count_of_items": 1,
  "total_quantity": 1,
  "url": "https://web.boxhero-app.com/team/150581/mode/2#/ltx/3692714"
}

```

### txs/delete

ส่งเมื่อธุรกรรมสต็อกถูก**ลบ**

| ฟิลด์ | คำอธิบาย |
| --- | --- |
| id | ID เฉพาะของธุรกรรม |
| revision | หมายเลขเวอร์ชันปัจจุบันของธุรกรรม โดยเริ่มจาก 1 |

#### ตัวอย่าง Webhook Payload – ธุรกรรมที่ถูกลบ

```json
{
  "id": 27036740,
  "revision": 2
}
```

### item/new

ส่งเมื่อมีการเพิ่มสินค้าใหม่ลงในสต็อกของทีม

> **Caution**
>
> **หมายเหตุ**: เหตุการณ์นี้จะ_ไม่_ทำงานเมื่อใช้ฟีเจอร์ `เพิ่มสินค้าแบบหลายตัวเลือก` หรือนำเข้าสินค้าผ่าน `นำเข้าจาก Excel`

| ฟิลด์ | คำอธิบาย |
| --- | --- |
| id | ID สินค้า |
| name | ชื่อสินค้า |
| sku | SKU |
| barcode | บาร์โค้ด |
| photo_url | URL รูปภาพ |
| cost | ราคาซื้อ |
| price | ราคาขาย |
| attrs | คุณสมบัติ |

#### ตัวอย่าง Payload – สร้างสินค้า

```json
{
  "id": 26122826,
  "name": "belif Peat Miracle Revital Cream",
  "sku": "SKU-YH2361KI",
  "barcode": "2002074321218",
  "photo_url": "https://d3l9wd8kivvlqy.cloudfront.net/ap-northeast-2/image-up-ap-northeast-2/30b0cc84-601d-493d-87fd-b7e8b5825601",
  "cost": "50000",
  "price": "65000",
  "attrs": [
    {
      "id": 413101,
      "name": "Category",
      "type": "text",
      "value": "Foundation"
    },
    {
      "id": 459264,
      "name": "Expiration date",
      "type": "date",
      "value": "2027-08-07"
    },
    {
      "id": 668272,
      "name": "Safety Stock",
      "type": "number",
      "value": 33
    }
  ]
}
```

### item/edit

ส่งเมื่อสินค้าที่มีอยู่ถูกแก้ไข

> **Caution**
>
> **หมายเหตุ**: เหตุการณ์นี้จะ_ไม่_ทำงานสำหรับการแก้ไขจำนวนมากผ่าน `การจัดการข้อมูล` > `สินค้า` หรือผ่านฟังก์ชัน `นำเข้าจาก Excel`

| ฟิลด์ | คำอธิบาย |
| --- | --- |
| id | ID สินค้า |
| name | ชื่อสินค้า |
| sku | SKU |
| barcode | บาร์โค้ด |
| photo_url | URL รูปภาพ |
| cost | ราคาซื้อ |
| price | ราคาขาย |
| attrs | คุณสมบัติ |

#### ตัวอย่าง Payload – อัปเดตสินค้า

```json
{
  "id": 26122826,
  "name": "belif Peat Miracle Revital Cream",
  "sku": "SKU-YH2361KI",
  "barcode": "2002074321218",
  "photo_url": "https://d3l9wd8kivvlqy.cloudfront.net/ap-northeast-2/image-up-ap-northeast-2/30b0cc84-601d-493d-87fd-b7e8b5825601",
  "cost": "50000",
  "price": "65000",
  "attrs": [
    {
      "id": 413101,
      "name": "Category",
      "type": "text",
      "value": "Foundation"
    },
    {
      "id": 459264,
      "name": "Expiration date",
      "type": "date",
      "value": "2027-08-07"
    },
    {
      "id": 668272,
      "name": "Safety Stock",
      "type": "number",
      "value": 33
    }
  ]
}
```

### item/delete

ส่งเมื่อสินค้าถูกลบออกจากสต็อกของทีม

> **Caution**
>
> **หมายเหตุ**: เหตุการณ์นี้จะ_ไม่_ทำงานสำหรับการลบจำนวนมากผ่าน `การจัดการข้อมูล` > `รายการสินค้า`

| ฟิลด์ | คำอธิบาย |
| --- | --- |
| id | ID สินค้า |

#### ตัวอย่าง Payload – ลบสินค้า

```json
{
  "id": 26122826
}
```
