# การตั้งค่า High-speed delivery

## ภาพรวม

ใน Pushwoosh กลุ่มเป้าหมาย (audience segments) จะถูกกำหนดโดยใช้ **Segments**

สำหรับแคมเปญ push มาตรฐาน Segment จะถูกประมวลผล **หลังจาก** ส่ง request [`/createMessage`](/th/developer/api-reference/messages-api/#createmessage) แล้ว ซึ่งหมายความว่าอาจมีความล่าช้าเล็กน้อยก่อนที่ข้อความจะถูกส่งออกไป โดยเฉพาะอย่างยิ่งหาก Segment มีความซับซ้อน

ด้วย High-speed delivery Segments จะถูกประมวลผลล่วงหน้าทุกๆ 10 นาที สิ่งนี้ช่วยให้ข้อมูลเป็นปัจจุบันและพร้อมใช้งาน เพื่อให้สามารถส่งข้อความได้ทันที—โดยไม่ต้องรอให้ Segment ประมวลผล

High-speed delivery มีประโยชน์อย่างยิ่งเมื่อเวลาเป็นเรื่องสำคัญ ตัวอย่างเช่น องค์กรกีฬาอย่าง UEFA และ FIBA สามารถใช้เพื่อส่งอัปเดตแบบเรียลไทม์ที่ทุกวินาทีมีความหมาย

คู่มือนี้จะอธิบายวิธีการตั้งค่า High-speed delivery โดยใช้แอปกีฬาเป็นตัวอย่าง คุณจะได้เรียนรู้วิธีสร้าง audience segments เพื่อแจ้งเตือนผู้ใช้เกี่ยวกับการแข่งขันที่กำลังจะมาถึงและเหตุการณ์สด

## ทำไมต้องใช้ High-speed delivery

ข้อกำหนดเบื้องต้นสำหรับการใช้ High-speed delivery โดยองค์กรกีฬามีดังนี้:

* การแข่งขันทั้งหมดถูกกำหนดตารางเวลาไว้ล่วงหน้า ดังนั้นคุณจึงรู้ว่าต้องสร้าง Segments เมื่อใดและสามารถประมวลผล audience segments ล่วงหน้าได้
* ทุกการแข่งขันจะเชื่อมโยงกับ ID ที่ไม่ซ้ำกัน ตัวอย่างเช่น match ID สำหรับ Champions League Final คือ 0123
* ทุกทีมจะเชื่อมโยงกับ ID ที่ไม่ซ้ำกัน ตัวอย่างเช่น Juventus ID คือ 111, Real Madrid ID คือ 222 เป็นต้น
* มีชุดของเหตุการณ์สดที่คุณต้องการแจ้งเตือนผู้ใช้ (ประตู, รายชื่อผู้เล่น, เริ่มการแข่งขัน ฯลฯ)

## การตั้งค่า

<Aside type="caution" icon="setting" title="ต้องการความช่วยเหลือจากนักพัฒนา">
****
การตั้งค่า High-speed delivery ต้องอาศัยความช่วยเหลือจากนักพัฒนา โปรดแชร์คู่มือนี้กับพวกเขาเพื่อการดำเนินการที่ถูกต้อง
</Aside>

Segments ทั้งหมดสำหรับ High-speed delivery ควรถูกสร้างขึ้นล่วงหน้า—ในกรณีตัวอย่างคือควรสร้างก่อนการแข่งขันจะเริ่ม Pushwoosh จะใช้เงื่อนไขของ Segment กับฐานผู้ใช้ของแอปและ **ประมวลผล Segments ล่วงหน้าทุกๆ 10 นาที** (ช่วงเวลานี้สามารถปรับได้)

เมื่อคุณส่ง API request [`/createMessage`](/th/developer/api-reference/messages-api/#createmessage) พร้อมเนื้อหา push และชื่อ Segment ทาง Pushwoosh จะมีรายชื่อผู้รับที่ประมวลผลล่วงหน้าไว้แล้ว ทำให้สามารถส่งการแจ้งเตือน push ได้ทันที

<Aside type="caution" title="ข้อสำคัญ">
****
การประมวลผล Segment เป็นงานที่ใช้ทรัพยากรมาก และความเร็วขึ้นอยู่กับ:
- ความซับซ้อนของเงื่อนไข Segment (จำนวน Tags ที่ใช้, ความหลากหลายของค่า Tag);
- จำนวน Segments ที่ไม่ซ้ำกันที่ถูกประมวลผลล่วงหน้าพร้อมกัน;
- จำนวนผู้ใช้ที่สมัครรับข้อมูลของแอป

ดังนั้น **Segments ทั้งหมดสำหรับเกมจะต้องถูกสร้างผ่าน API ก่อนเริ่มเกมและลบออกหลังจากจบเกม** เพื่อให้จำนวน Segments ที่ใช้งานอยู่และถูกประมวลผลล่วงหน้ามีน้อยที่สุดและประหยัดทรัพยากรการคำนวณ
</Aside>

### สร้าง Tags

ขั้นแรก ให้สร้างชุดของ Tags ที่จะใช้ และกำหนดค่า Tag ให้กับอุปกรณ์ของผู้ใช้
[สร้าง Tags](/th/product/audience-data-and-segmentation/user-data-tags/tags/) ประเภท LIST ที่สอดคล้องกับเหตุการณ์การแข่งขันสด เช่น **kickoff, goal, red card,** ฯลฯ

ตัวอย่างเช่น:
**MATCH-KICKOFF, MATCH-GOAL, MATCH-RED\_CARD**
![Create Tags](/push-notifications-high-speed-delivery-2.webp)

สร้างชุด Tags เดียวกันที่อธิบายเหตุการณ์การแข่งขันสดสำหรับทีม
ตัวอย่างเช่น:
**TEAM-KICKOFF, TEAM-GOAL, TEAM-RED\_CARD**

<Aside type="tip">
หากต้องการสร้าง Tags ผ่าน API ให้เรียกใช้ [`/addTag`](/th/developer/api-reference/tags/#addtag)
</Aside>

โดยการติดตาม (subscribe) Tags เหล่านี้ ผู้ใช้แอปสามารถเลือกการแจ้งเตือนที่ต้องการรับได้:

- การแจ้งเตือนเกี่ยวกับการแข่งขันที่ระบุ (เช่น แมตช์ Juventus - Real Madrid)
- การแจ้งเตือนเกี่ยวกับการแข่งขันของทีมโปรด (เช่น แมตช์ของ Juventus เท่านั้น)
- การแจ้งเตือนเกี่ยวกับเหตุการณ์ที่เกิดขึ้นระหว่างการแข่งขัน (เช่น ประตูในแมตช์ Juventus - Real Madrid เท่านั้น)
- การแจ้งเตือนเกี่ยวกับเหตุการณ์เฉพาะจากทีมโปรด (เช่น ประตูและรายชื่อผู้เล่นของแมตช์ Juventus)

### กำหนดค่า Tags

ตอนนี้คุณสามารถใส่ค่า Tag ที่ระบุไว้ก่อนหน้านี้ผ่าน API request [`setTags`](/th/developer/api-reference/device-api/#settags) และสมัครรับข้อมูลผู้ใช้เข้าสู่หมวดหมู่การแจ้งเตือน push ที่เฉพาะเจาะจง

ตัวอย่างเช่น:
เมื่อผู้ใช้สมัครรับข้อมูลอัปเดตการเริ่มการแข่งขันและประตูของ Champions League Final ให้เรียกใช้ [`/setTags`](/th/developer/api-reference/device-api/#settags) โดยระบุ match ID:

```
{
  "request": {
    "application": "app_code",
    "hwid": "device_hardware_id",
    "tags": {
      "MATCH_KICKOFF": "0123", // match ID
      "MATCH_GOAL": "0123"     // match ID
    }
  }
}
```

ผู้ใช้จะได้รับการแจ้งเตือนเกี่ยวกับการเริ่มการแข่งขันและประตูที่ทำได้ใน Champions League Final
เมื่อผู้ใช้สมัครรับข้อมูลอัปเดตประตูและใบแดงของแมตช์ Real Madrid ให้เรียกใช้ [`/setTags`](/th/developer/api-reference/device-api/#settags) ดังนี้:

```
{
  "request": {
    "application": "app_code",
    "hwid": "device_hardware_id",
    "tags": {
      "TEAM_KICKOFF": "222", // team ID
      "TEAM_GOAL": "222"     // team ID
    }
  }
}
```

ผู้ใช้รายนี้จะได้รับการแจ้งเตือนเกี่ยวกับการเริ่มการแข่งขันและประตูเมื่อใดก็ตามที่ Real Madrid ลงแข่ง

### สร้าง Segments

ตอนนี้คุณสามารถสร้าง Segments สำหรับเหตุการณ์การแข่งขันโดยอิงตาม Tags และค่าของ Tags (match IDs และ team IDs) Segments ควรถูกสร้างผ่าน API request [`/createFilter`](/th/developer/api-reference/segmentation-filters-api/#createfilter) 30 นาทีก่อนการแข่งขันเริ่ม

เพื่อแจ้งเตือนผู้ใช้เกี่ยวกับประตูที่ทำได้ใน Champions League Final จากตัวอย่างข้างต้น ให้เรียกใช้ [`/createFilter`](/th/developer/api-reference/segmentation-filters-api/#createfilter) ด้วยพารามิเตอร์ต่อไปนี้:
**Segment name**: 0123_GOAL
**Segment conditions**: `#TEAM-GOAL(111, 222) OR #MATCH-GOAL(0123)`

```
{
  "request": {
    "auth": "auth_token",
    "name": "0123_GOAL",
    "conditions": [
      ["TEAM-GOAL", "IN", ["111", "222"]],
      ["MATCH-GOAL", "IN", ["0123"]]
    ],
    "operator": "OR", // optional. Operator values: 'AND', 'OR'
    "application" : "AAAAA-00000"
  }
}
```

คำขอนี้จะประมวลผล Segment ของผู้ใช้ที่สมัครรับข้อมูลอัปเดตประตูของ Champions League Final (match ID=0123) หรือผู้ใช้ที่ติดตาม Juventus หรือ Real Madrid (team ID=111,222)

เพื่อตั้งค่า High-Speed Delivery ใน Pushwoosh Control Panel ของคุณ ให้ [สร้าง Segment ใหม่](/th/product/audience-data-and-segmentation/segmentation/create-segments) ด้วยค่า Tag ที่สอดคล้องกันและเชื่อมโยงกับแอปที่คุณจะส่ง push ไปหา Segments เฉพาะของแอปจะถูกประมวลผลล่วงหน้าทุกๆ 10 นาทีเพื่อให้ audience segments เป็นปัจจุบันอยู่เสมอ

![create a new Segment](/push-notifications-high-speed-delivery-1.webp)

เมื่อเหตุการณ์การแข่งขันเกิดขึ้น (ทำประตูได้, เริ่มการแข่งขัน, ใบแดง ฯลฯ) ให้เรียกใช้ [`/createMessage`](/th/developer/api-reference/messages-api/#createmessage) พร้อมเนื้อหาการแจ้งเตือน push และชื่อ Segment:

```json
{
  "request": {
    "application": "AAAAA_00000",
    "auth": "auth_token",
    "notifications": [
      {
        "content": "12’ Juventus goal! Juventus 1 – 0 Real Madrid",
        "filter": "0123_GOAL",
        "send_date": "now"
      }
    ]
  }
}
```

เมื่อเราได้รับคำเรียก [`/createMessage`](/th/developer/api-reference/messages-api/#createmessage) เราจะมีรายการอุปกรณ์ที่ตรงตามเกณฑ์ของ Segment ที่ประมวลผลล่วงหน้าไว้แล้ว และเราจะส่งการแจ้งเตือนไปยังเกตเวย์ APNs และ FCM ทันที

<Aside type="caution" title="ข้อสำคัญ">
*****
High-Speed Delivery Segments ไม่รองรับการใช้ตัวดำเนินการ **daysago** หากคุณพยายามสร้าง Segment ด้วยตัวดำเนินการนี้ คุณจะได้รับข้อความแสดงข้อผิดพลาด

ข้อจำกัดนี้มีอยู่เพราะเพื่อให้ทำงานได้อย่างถูกต้อง High-Speed Delivery Segments จะอาศัยการเปลี่ยนแปลงที่เกิดขึ้นในแอปบนอุปกรณ์ของผู้ใช้ (เช่น การสมัครรับการแจ้งเตือน push หรือการตั้งค่าค่า Tag เฉพาะ) ตัวดำเนินการ **daysago** ไม่เกี่ยวข้องกับการเปลี่ยนแปลงดังกล่าว ดังนั้น Segment จะไม่ทำงานตามที่ตั้งใจไว้
นอกจากนี้ โปรดทราบว่า High-Speed Delivery Segments ไม่สามารถใช้กับข้อความที่กำหนดเวลาส่งล่วงหน้า (scheduled messages) ได้
</Aside>

## ลบ Segments

หลังจากจบการแข่งขัน Segments ที่เกี่ยวข้องทั้งหมดควรถูกลบออก เพื่อไม่ให้ทรัพยากรการคำนวณถูกใช้ไปกับการประมวลผลซ้ำของ Segments ที่ไม่เกี่ยวข้องอีกต่อไป โดยเฉพาะอย่างยิ่งเมื่อต้องแลกกับทรัพยากรสำหรับ Segments ของการแข่งขันที่จะมีขึ้นถัดไป ลบ Segments ผ่าน API request [`/deleteFilter`](/th/developer/api-reference/segmentation-filters-api/#deletefilter) ตัวอย่างเช่น:

```json
{
  "request": {
    "auth": "auth_token",
    "name": "0123_GOAL"
  }
}
```

เพื่อหลีกเลี่ยงการลบ Segments ด้วยตนเอง ให้ตั้งค่าวันหมดอายุของ Segment ผ่าน request [`/createFilter`](/th/developer/api-reference/segmentation-filters-api/#createfilter) เพื่อให้ Segment ถูกลบโดยอัตโนมัติในวันที่ระบุ:

```
{
  "request": {
    "auth": "auth_token",
    "name": "0123_GOAL",
    "conditions": [
      ["TEAM-GOAL", "IN", ["111", "222"]],
      ["MATCH-GOAL", "IN", ["0123"]]
    ],
    "operator": "OR",  // optional. Values: 'AND', 'OR'
    "application": "AAAAA-00000",
    "expiration_date": "YYYY-MM-DD"  // optional. Segment (Filter) expiry
  }
}
```