# Braze คอนเนกชัน

Braze คอนเนกชันช่วยให้คุณพุชข้อมูลผู้เล่นไปยัง Braze โดยตรงผ่าน
[/users/track](https://www.braze.com/docs/api/endpoints/user_data/post_user_track/) API
ทุกอีเวนต์ทริกเกอร์จะส่งทั้ง**แอตทริบิวต์ผู้ใช้**และ**อีเวนต์แบบกำหนดเอง**ไปยัง Braze
ทำให้คุณสามารถสร้างเซกเมนต์ ทริกเกอร์แคมเปญ และจัดการ Canvas flow ตามกิจกรรมในเกมได้

---

## สิ่งที่ต้องมี

| ข้อกำหนด               | หาได้ที่                                                                             |
| :--------------------- | :----------------------------------------------------------------------------------- |
| **Braze REST API Key** | Braze Dashboard → **Settings** → **API Keys** (ต้องมีสิทธิ์ `users.track`)           |
| **REST Endpoint**      | Braze Dashboard → **Settings** → **API Keys** (เช่น `https://rest.iad-01.braze.com`) |

---

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

1. ไปที่**คอนเนกชัน**จากเมนูหลัก
2. คลิก**เพิ่มคอนเนกชัน**และเลือก **Braze**
3. กรอก **API Key** และ **REST Endpoint**
4. บันทึกคอนเนกชัน
5. เชื่อมต่อกับสตรีมและเลือกอีเวนต์ทริกเกอร์

---

## การระบุตัวตนผู้ใช้

DailyPlay ระบุตัวตนผู้ใช้ใน Braze ผ่าน URL parameter ที่ส่งมาเมื่อผู้เล่นเข้าถึงสตรีม Braze
รองรับตัวระบุ 2 ประเภท:

| URL Parameter | Braze API Field | คำอธิบาย                           |
| :------------ | :-------------- | :--------------------------------- |
| `braze_id`    | `braze_id`      | ตัวระบุผู้ใช้ภายในของ Braze        |
| `external_id` | `external_id`   | User ID ของระบบคุณที่แมปใน Braze   |
| `user_id`     | `external_id`   | Alias — ใช้เหมือนกับ `external_id` |

DailyPlay ตรวจสอบตัวระบุตามลำดับความสำคัญ: `braze_id` → `external_id` → `user_id` หากไม่มีใน URL
parameter จะใช้ `player_uuid` ของ DailyPlay เป็น `external_id`

### ตัวอย่าง Stream URL

```
https://app.dailyplay.ai/stream/my-org/my-stream?external_id=usr_123
```

---

## แอตทริบิวต์ที่ส่งไปยัง Braze

แต่ละอีเวนต์ทริกเกอร์จะอัปเดตโปรไฟล์ผู้ใช้ใน Braze ด้วยแอตทริบิวต์แบบกำหนดเองดังนี้:

### แอตทริบิวต์ระดับบนสุด

| แอตทริบิวต์   | ประเภท | คำอธิบาย                                           |
| :------------ | :----- | :------------------------------------------------- |
| `country`     | string | รหัสประเทศของผู้เล่น (ตรวจจับอัตโนมัติ)            |
| `device_type` | string | ประเภทอุปกรณ์ของผู้เล่น (เช่น `mobile`, `desktop`) |

### ออบเจกต์ `dailyplay` แบบซ้อน

แอตทริบิวต์เฉพาะของ DailyPlay ทั้งหมดจัดกลุ่มภายใต้ออบเจกต์ `dailyplay` บนโปรไฟล์ผู้ใช้:

| แอตทริบิวต์                      | ประเภท | คำอธิบาย                                                                                |
| :------------------------------- | :----- | :-------------------------------------------------------------------------------------- |
| `dailyplay.last_game_id`         | string | ID ของเกมที่เล่นล่าสุด                                                                  |
| `dailyplay.last_stream_name`     | string | ชื่อสตรีมที่เกมอยู่                                                                     |
| `dailyplay.last_stream_slug`     | string | URL slug ของสตรีม                                                                       |
| `dailyplay.last_play_date`       | string | ISO 8601 timestamp ของการโต้ตอบครั้งล่าสุด                                              |
| `dailyplay.stream_<stream_slug>` | string | ประเภทอีเวนต์ที่บันทึกสำหรับสตรีมนี้ (เช่น `play_complete`) — ใช้สำหรับ funnel tracking |
| `dailyplay.last_game_score`      | number | คะแนนผู้เล่น (เฉพาะอีเวนต์ `play_complete`)                                             |
| `dailyplay.last_play_duration`   | number | ระยะเวลาเล่น (วินาที) (เฉพาะอีเวนต์ `play_complete`)                                    |

:::tip แอตทริบิวต์ `dailyplay.stream_<stream_slug>` เก็บประเภทอีเวนต์ล่าสุดต่อสตรีม ใช้ใน Braze
เพื่อสร้างเซกเมนต์ตาม journey เช่น กำหนดเป้าหมายผู้ใช้ที่ `dailyplay.stream_welcome_stream` เท่ากับ
`play_complete` :::

---

## อีเวนต์แบบกำหนดเองที่ส่งไปยัง Braze

แต่ละทริกเกอร์จะส่งอีเวนต์แบบกำหนดเองใน Braze ตามรูปแบบชื่อ `dailyplay_<event_type>`:

| ชื่ออีเวนต์                  | ทำงานเมื่อ                    |
| :--------------------------- | :---------------------------- |
| `dailyplay_stream_access`    | ผู้เล่นเปิดหน้าสตรีม          |
| `dailyplay_play_start`       | ผู้เล่นเริ่มเล่นเกม           |
| `dailyplay_play_complete`    | ผู้เล่นเล่นเกมจบ              |
| `dailyplay_prize_redemption` | ผู้เล่นรับรางวัลหรือบัตรกำนัล |

### พร็อพเพอร์ตี้ของอีเวนต์

อีเวนต์แบบกำหนดเองทุกรายการมีพร็อพเพอร์ตี้ดังนี้:

| พร็อพเพอร์ตี้           | ประเภท | คำอธิบาย                                          |
| :---------------------- | :----- | :------------------------------------------------ |
| `game_id`               | string | ID ของเกม                                         |
| `stream_id`             | number | ID ของสตรีม (แคมเปญ)                              |
| `stream_name`           | string | ชื่อแสดงของสตรีม                                  |
| `player_uuid`           | string | ตัวระบุผู้เล่น DailyPlay                          |
| `score`                 | number | คะแนนผู้เล่น (เฉพาะ `play_complete`)              |
| `play_duration_seconds` | number | เวลาที่ใช้เล่นจบ (วินาที) (เฉพาะ `play_complete`) |
| `url_<param>`           | string | URL parameter เพิ่มเติมที่มี prefix `url_`        |

:::note พารามิเตอร์ระบุตัวตน (`braze_id`, `external_id`, `user_id`)
จะไม่รวมอยู่ในพร็อพเพอร์ตี้ของอีเวนต์ เนื่องจากใช้สำหรับการระบุตัวตนผู้ใช้แล้ว :::

---

## ตัวอย่าง Payload

ด้านล่างคือ payload `/users/track` ฉบับเต็มที่ DailyPlay ส่งไปยัง Braze สำหรับอีเวนต์
`play_complete`:

```json
{
  "attributes": [
    {
      "external_id": "usr_123",
      "country": "US",
      "device_type": "mobile",
      "dailyplay": {
        "last_game_id": "163",
        "last_stream_name": "Summer Campaign",
        "last_stream_slug": "summer-campaign",
        "last_play_date": "2026-04-09T14:30:00.000Z",
        "stream_summer-campaign": "play_complete",
        "last_game_score": 85,
        "last_play_duration": 32
      }
    }
  ],
  "events": [
    {
      "external_id": "usr_123",
      "name": "dailyplay_play_complete",
      "time": "2026-04-09T14:30:00.000Z",
      "properties": {
        "game_id": "163",
        "stream_id": 453,
        "stream_name": "Summer Campaign",
        "player_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "score": 85,
        "play_duration_seconds": 32,
        "url_source": "email_campaign"
      }
    }
  ]
}
```

---

## กรณีการใช้งานใน Braze

- **แคมเปญแบบทริกเกอร์** — ส่งข้อความติดตามเมื่อ `dailyplay_play_complete` ทำงาน
- **เซกเมนเทชัน** — สร้างเซกเมนต์จากแอตทริบิวต์ `dailyplay.last_game_score` หรือ
  `dailyplay.stream_<slug>`
- **Canvas flow** — ใช้อีเวนต์เกมเป็น entry trigger หรือ decision split ใน journey แบบหลายขั้นตอน
- **รีเอ็นเกจเมนต์** — กำหนดเป้าหมายผู้ใช้ที่ทริกเกอร์ `dailyplay_play_start` แต่ไม่ทริกเกอร์
  `dailyplay_play_complete`