# User-centric API

## registerUser

`POST` `https://api.pushwoosh.com/json/1.3/registerUser`

เชื่อมโยง User ID ภายนอกกับอุปกรณ์ที่ระบุ

#### Request headers

| ชื่อ | จำเป็น | ค่า | คำอธิบาย |
|---------------|----------|---------------|------------------------------------------------------------|
| Authorization | ใช่ | Token `XXXX` | [API Device Token](/th/developer/api-reference/api-access-token/#device-api-token) เพื่อเข้าถึง Device API แทนที่ `XXXX` ด้วย API Device Token จริงของคุณ |

#### Request body

| ชื่อ | จำเป็น | ประเภท | คำอธิบาย |
| ----------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------ |
| userId | ไม่ | string | [User ID](/th/developer/api-reference/api-identifiers/#user-id) ที่จะเชื่อมโยงกับอุปกรณ์ หากเว้นว่างไว้ ให้ใช้ hwid |
| application | ใช่ | string | [Pushwoosh application code](/th/developer/api-reference/api-identifiers/#application-code) |
| hwid | ใช่ | string | [Pushwoosh HWID](/th/developer/api-reference/api-identifiers/#hardware-id) |
| tz_offset | ไม่ | integer | ค่าความต่างของโซนเวลาเป็นวินาทีสำหรับอุปกรณ์ |
| device_type | ไม่ | integer | [Device type](/th/developer/api-reference/api-identifiers/#device-type) ดูค่าที่เป็นไปได้ใน `/registerDevice` |

สามารถใช้ในภายหลังในการเรียก API [`/createMessage`](/th/developer/api-reference/messages-api/#createmessage) (พารามิเตอร์ _users_)
คุณสามารถเรียกฟังก์ชันนี้ก่อนที่จะมี push token และก่อนการเรียก [`/registerDevice`](/th/developer/api-reference/device-api/#registerdevice)

#### ตัวอย่าง Request

```json
{
  "request": {
    "userId": "user_3078a",                     // ไม่จำเป็น หากเว้นว่างไว้ ให้ใช้ hwid
    "application": "XXXXX-XXXXX",               // จำเป็น Pushwoosh application code
    "hwid": "8f65b16df378e7a6bece9614e1530fb2", // จำเป็น Hardware device ID
    "tz_offset": -3600,                         // ไม่จำเป็น ค่าความต่างของโซนเวลาเป็นวินาที
    "device_type": 3                            // ไม่จำเป็น ประเภทอุปกรณ์ ดูประเภทอุปกรณ์ได้ที่ /registerDevice
                                                //           
  }
}
```

#### ตัวอย่าง Response

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200, 
  "status_message": "OK",
  "response": null
}
```
</TabItem>
</Tabs>

<Aside type="note">
สำหรับอีเมล ให้เรียก [`/registerEmailUser`](/th/developer/api-reference/email-api/#registeremailuser)
</Aside>

## deleteUser

`POST` `https://api.pushwoosh.com/api/v2/device-api/deleteUser`

ลบผู้ใช้และอุปกรณ์ทั้งหมดที่เชื่อมโยงกับ [User ID](/th/developer/api-reference/api-identifiers/#user-id) ที่ระบุภายในแอปพลิเคชัน คำขอจะถูกประมวลผลแบบอะซิงโครนัส และ endpoint จะส่งคืน `200 OK` ทันทีที่คำขอลบได้รับการยอมรับเพื่อการประมวลผล

#### Request headers

| ชื่อ | จำเป็น | ค่า | คำอธิบาย |
|---------------|----------|------------------|------------------------------------------------------------|
| Authorization | ใช่ | Token `XXXX` | [API Device Token](/th/developer/api-reference/api-access-token/#device-api-token) เพื่อเข้าถึง Device API แทนที่ `XXXX` ด้วย API Device Token จริงของคุณ |
| Content-Type | ใช่ | application/json | |

#### Request body

| ชื่อ | จำเป็น | ประเภท | คำอธิบาย |
| ----------- | -------- | ------ | --------------------------------------------------------------------------------------------------------------- |
| application | ใช่ | string | [Pushwoosh application code](/th/developer/api-reference/api-identifiers/#application-code) |
| user_id | ใช่ | string | [User ID](/th/developer/api-reference/api-identifiers/#user-id) ที่จะลบ อุปกรณ์ทั้งหมดที่เชื่อมโยงกับผู้ใช้นี้ในแอปพลิเคชันที่ระบุจะถูกลบออก |


#### ตัวอย่าง Request

```json
{
  "application": "XXXXX-XXXXX",   // จำเป็น Pushwoosh application code
  "user_id": "user_3078a"         // จำเป็น User ID ที่จะลบ
}
```

#### ตัวอย่าง Response

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": null
}
```
</TabItem>
</Tabs>

##### รหัสสถานะ

| รหัสสถานะ HTTP | status_code | คำอธิบาย |
| ---------------- | ------------ | -------------------------------------------------- |
| 200 | 200 | คำขอลบได้รับการยอมรับแล้ว |
| 200 | 210 | ข้อผิดพลาดของอาร์กิวเมนต์ ดูข้อมูลเพิ่มเติมใน status_message |
| 400 | N/A | สตริงคำขอมีรูปแบบไม่ถูกต้อง |
| 401 | N/A | Authorization token หายไปหรือไม่ถูกต้อง |
| 500 | 500 | ข้อผิดพลาดภายใน |

## postEvent

`POST` `https://api.pushwoosh.com/json/1.3/postEvent`

ทริกเกอร์ event

#### Request headers

| ชื่อ | จำเป็น | ค่า | คำอธิบาย |
|---------------|----------|---------------|------------------------------------------------------------|
| Authorization | ใช่ | Token `XXXX` | [API Device Token](/th/developer/api-reference/api-access-token/#device-api-token) เพื่อเข้าถึง Device API แทนที่ `XXXX` ด้วย API Device Token จริงของคุณ |


#### Request body

| ชื่อ | จำเป็น | ประเภท | คำอธิบาย |
| ---------------- | -------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| hwid | ใช่ | string | [Hardware device ID](/th/developer/api-reference/api-identifiers/#hardware-id) ที่ใช้ในคำขอ /registerDevice สามารถใช้ร่วมกับ 'userId' เพื่อระบุผู้ใช้ที่ทริกเกอร์ event |
| application | ใช่ | string | [Pushwoosh application code](/th/developer/api-reference/api-identifiers/#application-code) |
| event | ใช่ | string | [Event name](/th/developer/api-reference/api-identifiers/#event-name) ต้องตรงกับที่สร้างใน Pushwoosh Control Panel ทุกประการ |
| attributes | ใช่ | object | อ็อบเจกต์ JSON ที่มี attribute ของ event ปล่อยให้ว่างไว้หากไม่ต้องการส่ง attribute ใดๆ |
| timestampUTC | ไม่ | integer | Timestamp ในรูปแบบ UTC |
| timestampCurrent | ไม่ | integer | Timestamp ในเวลาท้องถิ่น |
| userId | ใช่ | string | [User ID](/th/developer/api-reference/api-identifiers/#user-id) ที่เชื่อมโยงกับผู้ใช้ที่ทริกเกอร์ event สามารถใช้แทนที่หรือใช้ร่วมกับ HWID ได้ |
| device_type | ไม่ | integer | [ดูค่าที่เป็นไปได้](/th/developer/api-reference/api-identifiers/#device-type) |

ชื่อของ event ในคำขอต้องตรงกับชื่อ event ใน Pushwoosh Control Panel โปรดทราบว่าคุณสมบัติ "attributes" อาจว่างเปล่าได้ (แต่ห้ามละเว้น) ในกรณีที่ event ไม่มี attribute

#### ตัวอย่าง Request

```json
{
  "request":{ 
    "hwid": "8f65b16df378e7a6bece9614e1530fb2", // จำเป็น Hardware device ID ที่ใช้ใน /registerDevice API
                                                //           สามารถใช้ร่วมกับ userId เพื่อระบุ
                                                //           ผู้ใช้ที่ทริกเกอร์ event
    "application": "XXXXX-XXXXX",               // จำเป็น Pushwoosh application code
    "event": "activityCompleted",               // จำเป็น ชื่อ Event ต้องตรงกับที่สร้างใน Pushwoosh Control Panel ทุกประการ
    "attributes": {                             // จำเป็น ปล่อยให้ว่างไว้หากไม่ต้องการส่ง attribute ใดๆ
      "login": "facebook",
      "success": "yes",
      "internet": "wifi"
    },
    "timestampUTC": 1435228403,                 // ไม่จำเป็น Timestamp ในรูปแบบ UTC
    "timestampCurrent": 1435253603,             // ไม่จำเป็น Timestamp ในเวลาท้องถิ่น
    "userId": "someuser@user.com",              // จำเป็น User ID ที่ใช้สำหรับระบุ
                                                //           ผู้ใช้บนอุปกรณ์หลายเครื่อง สามารถใช้แทนที่
                                                //           หรือใช้ร่วมกับ HWID
    "device_type": 1                            // ไม่จำเป็น
  }
}

```

#### ตัวอย่าง Response

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": {
    "code": "61BC9-84DD0"
  }
}
```
</TabItem>
</Tabs>

#### การส่ง conversion events

หากต้องการรายงานรายได้โดยตรงแทนการ [แมป event ที่มีอยู่](/th/product/audience-data-and-segmentation/events/conversion-events/) ให้ส่ง `postEvent` โดยใช้ `PW_Conversion` เป็นชื่อ event และระบุ `value` และ `currency` ของธุรกรรมใน `attributes`:

```json
{
  "request":{
    "hwid": "8f65b16df378e7a6bece9614e1530fb2",
    "application": "XXXXX-XXXXX",
    "event": "PW_Conversion",
    "attributes": {
      "value": 49.99,               // จำเป็น จำนวนเงินของธุรกรรม
      "currency": "USD",            // จำเป็น รหัสสกุลเงิน ISO 4217
      "transaction_id": "txn_8f21", // ไม่จำเป็น การอ้างอิงธุรกรรมของคุณเอง
      "product_id": "prod_premium"  // ไม่จำเป็น
    },
    "userId": "someuser@user.com"
  }
}
```

<Aside type="note">
`transaction_id` ไม่ได้ถูกใช้โดย Pushwoosh เพื่อขจัดรายได้ที่ซ้ำซ้อน — แต่จะถูกจัดเก็บตามที่เป็นอยู่เพื่อการรายงานและการกระทบยอดของคุณเอง หากคุณรายงานธุรกรรมเดียวกันมากกว่าหนึ่งครั้ง การเรียกแต่ละครั้งจะถูกบันทึกแยกกัน ดู [Conversion events](/th/product/audience-data-and-segmentation/events/conversion-events/) สำหรับข้อมูลว่า canonical events และการแมป event ทำงานร่วมกันอย่างไร
</Aside>