# สถิติข้อความ

## messages:list

แสดงรายการข้อความที่ส่งแล้ว

`POST` `https://api.pushwoosh.com/api/v2/messages:list`

##### ส่วนหัว (Headers)

| ชื่อ    <div style="width:200px"></div>        | จำเป็น <div style="width:100px"></div>| คำอธิบาย  <div style="width:150px"></div>                                                                                        |
|----------------|----------|------------------------------------------------------------------------------------------------------|
| `Authorization`| ใช่      | [Server API token](/th/developer/api-reference/api-access-token/#server-api-token) ต้องระบุในรูปแบบต่อไปนี้: `Authorization: Api <Server Key>`     |

##### พารามิเตอร์ในส่วนเนื้อหาของคำขอ (Request body)

| ชื่อ <div style="width:150px"></div> | จำเป็น <div style="width:100px"></div> | ประเภท <div style="width:100px"></div> | คำอธิบาย <div style="width:150px"></div> |
|--------------------------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------|
| `platforms`                         | ไม่       | Array   | แพลตฟอร์มข้อความ ค่าที่เป็นไปได้: `"IOS"`, `"ANDROID"`, `"OSX"`, `"WINDOWS"`, `"AMAZON"`, `"SAFARI"`, `"CHROME"`, `"FIREFOX"`, `"IE"`, `"EMAIL"`, `"HUAWEI_ANDROID"`, `"SMS"`                                                           |
| `date_range`                         | ไม่       | Object  | ช่วงเวลาการรายงาน `date_from` และ `date_to` ต้องเป็นไปตามรูปแบบ `YYYY-MM-DD` (เช่น `"2000-01-01"`)                                                                  |
| `campaign`                           | ไม่       | String  | [รหัสแคมเปญ (Campaign code)](/th/developer/api-reference/api-identifiers/#campaign-code)                                                                                                               |
| `filters`                            | ใช่      | Object  | ตัวกรองข้อความ                                                                                                          |
| `source`                             | ไม่       | String  | แหล่งที่มาของข้อความ ตัวอย่างเช่น: `AB_TEST`, `API`, `AUTO_PUSH`, `CP`, `CSV`, `CUSTOMER_JOURNEY`, `EMAIL_API`, `EMAIL_CP`, `GEO_ZONE`, `PUSH_ON_EVENT`, `RSS`                                                             |
| `messages_codes`                     | ไม่       | Array   | [รหัสข้อความ (Message codes)](/th/developer/api-reference/api-identifiers/#message-code) ที่ได้รับจากการตอบกลับของ API `/createMessage`                                                                                                               |
| `messages_ids`                       | ไม่       | Array   | ID ของข้อความที่ได้รับจากประวัติข้อความ                                                                                                                |
| `params`                             | ไม่       | Object  | ระบุว่าจะแสดงรายละเอียดและเมตริกของข้อความหรือไม่ ตั้งค่า `with_details: true` เพื่อรวมอ็อบเจกต์ `"details"` และ `with_metrics: true` เพื่อรวมอ็อบเจกต์ `"metrics"` ในการตอบกลับ                               |
| `application`                        | ใช่      | String  | [รหัสแอปพลิเคชัน Pushwoosh](/th/developer/api-reference/api-identifiers/#application-code)                                                                                                  |
| `per_page`                           | ไม่       | Integer | จำนวนผลลัพธ์ต่อหน้า (≤ 1000)                                                                                         |
| `page`                               | ไม่       | Integer | หมายเลขหน้าสำหรับการแบ่งหน้า ดูขีดจำกัดการแบ่งหน้าแบบลึกด้านล่าง                                                                                                  |

<Aside type="caution" title="การแบ่งหน้าแบบลึก">
`messages:list` จะปฏิเสธคำขอที่ `page × per_page` เกิน 100,000 ผลลัพธ์ ให้จำกัด `date_range` ให้แคบลงหรือใช้ `per_page` ที่เล็กลงเพื่อให้อยู่ในขีดจำกัด
</Aside>

##### ตัวอย่างคำขอ

```json
{
    "filters": {
      "platforms": [],                  // IOS, ANDROID, OSX, WINDOWS, AMAZON, SAFARI, CHROME, FIREFOX, IE, EMAIL, HUAWEI_ANDROID, SMS
      "date_range": {
        "date_from": "string",          // รูปแบบที่ต้องการ: 2000-01-01
        "date_to": "string"             // รูปแบบที่ต้องการ: 2000-01-01
      },
      "source": "API",                  // AB_TEST, API, AUTO_PUSH, CP, CSV, CUSTOMER_JOURNEY, EMAIL_API, EMAIL_CP, GEO_ZONE, PUSH_ON_EVENT, RSS
      "campaign": "string",             // รหัสแคมเปญ
      "messages_ids": [],               // ID ของข้อความ
      "messages_codes": [],             // รหัสข้อความ
      "application": "string"           // รหัสแอปพลิเคชัน Pushwoosh
    },
    "params": {
      "with_details": true,             // เพิ่มรายละเอียดข้อความในการตอบกลับ (อ็อบเจกต์ "details")
      "with_metrics": true              // เพิ่มเมตริกข้อความในการตอบกลับ (อ็อบเจกต์ "metrics")
    },
    "per_page": 20,                     // <= 1000
    "page": 0
}
```

 <details>
  <summary> โค้ดการตอบกลับและตัวอย่าง </summary>
<Tabs>
<TabItem label="200: OK">
```json
{
  "total": 0,
  "items": [{
    "id": 0,
    "code": "string",
    "created_date": "string",
    "send_date": "string",
    "status": "string",
    "platforms": [],
    "source": "string",
    "push_info": {
      "details": {
        "title": "string",
        "filter_name": "string",
        "filter_code": "string",
        "content": {
          "key": "value"
        },
        "platform_parameters": {
          "android_header": "string",
          "android_root_params": {
            "key": "value"
          },
          "ios_title": "string",
          "ios_subtitle": "string",
          "ios_root_params": {
            "key": "value"
          },
          "chrome_header": "string",
          "chrome_root_params": {
            "key": "value"
          },
          "firefox_header": "string",
          "firefox_root_params": {
            "key": "value"
          },
          "conditions": [               // เงื่อนไขแท็ก (ดู /developer/api-reference/messages-api/#tag-conditions)
            TAG_CONDITION1,
            TAG_CONDITION2,
            ...,
            TAG_CONDITIONN
          ],
          "conditions_operator": "AND", // ตัวดำเนินการตรรกะสำหรับอาร์เรย์เงื่อนไข; ค่าที่เป็นไปได้: AND, OR
          "data": {
            "key": "value"
          }
        },
        "follow_user_timezone": true
      },
      "metrics": [{
        "sends": 0,
        "opens": 0,
        "deliveries": 0,
        "inbox_opens": 0,
        "unshowable_sends": 0,
        "errors": 0,
        "platform": 0
      }]
    },
    "email_info": {
      "details": {
        "template": "string",
        "filter_name": "string",
        "filter_code": "string",
        "subject": {
          "key": "value"
        },
        "from_name": "string",
        "from_email": "string",
        "reply_name": "string",
        "reply_email": "string",
        "follow_user_timezone": true,
        "conditions": [              // เงื่อนไขแท็ก (ดู Messages-api - tag-conditions) 
          TAG_CONDITION1,
          TAG_CONDITION2,
          ...,
          TAG_CONDITIONN
        ],  
        "conditions_operator": "AND" // ตัวดำเนินการตรรกะสำหรับอาร์เรย์เงื่อนไข; ค่าที่เป็นไปได้: AND, OR
      },
      "metrics": [{
        "sends": 0,
        "opens": 0,
        "deliveries": 0,
        "hard_bounces": 0,
        "soft_bounces": 0,
        "rejects": 0,
        "confirmed_sends": 0,
        "unsubs": 0,
        "complaints": 0,
        "errors": 0
      }]
    }
  }]
}
```
</TabItem>

<TabItem label="400: ข้อผิดพลาด Bad Request">
`date_range` ครอบคลุมระยะเวลามากกว่า 30 วัน:
```json
{
  "error": "exceeded the maximum date interval. Max interval: 30 days"
}
```
`page × per_page` เกินขีดจำกัดการแบ่งหน้าแบบลึก:
```json
{
  "error": "requested result window is too large, narrow the date range"
}
```
</TabItem>

<TabItem label="401: API access token ไม่ถูกต้อง">
```json
{
  "error": "account not found"
}
```
</TabItem>

<TabItem label="500: ข้อผิดพลาดภายในเซิร์ฟเวอร์">

</TabItem>
</Tabs>

</details>


<Aside type="note">
สำหรับ iOS โปรดตรวจสอบให้แน่ใจว่าคุณได้เพิ่ม Notification Service Extension ในโปรเจกต์ของคุณเพื่อติดตามการส่ง push [เรียนรู้เพิ่มเติม](/th/developer/pushwoosh-sdk/ios-sdk/ios-message-delivery-tracking)
</Aside>

## totalsByIntervals

ส่งคืนข้อมูลเมตริกและ conversion ตามรหัสข้อความ โดยรวบรวมเป็นรายชั่วโมง

**POST** `https://api.pushwoosh.com/api/v2/statistics/messages/totalsByIntervals`
  

##### การให้สิทธิ์ (Authorization)

การให้สิทธิ์จะจัดการผ่าน API Access Token ในส่วนหัวของคำขอ

##### พารามิเตอร์ในส่วนเนื้อหาของคำขอ (Request body)

| ชื่อพารามิเตอร์  <div style="width:150px"></div>   | ประเภท   <div style="width:150px"></div>   | คำอธิบาย                 | จำเป็น |
|----------------|--------|-----------------------------|----------|
| `message_code` | string | [รหัสข้อความ (Message code)](/th/developer/api-reference/api-identifiers/#message-code) ที่ได้รับจากการตอบกลับของ API `/createMessage`    | ใช่      |
| `platforms`    | [int]  | [แพลตฟอร์ม](/th/developer/api-reference/messages-api/api-prerequisites/#platforms)                    | ไม่       |

##### ตัวอย่างคำขอ

```json
{
  "message_code": "XXXXX-XXXXXXXXX-XXXXXXXX", // จำเป็น. ตัวระบุข้อความที่ไม่ซ้ำกัน
  "platforms": [1, 3, 7, 10, 11, 12]          // ไม่จำเป็น. รายการรหัสแพลตฟอร์ม
}
```

##### ฟิลด์การตอบกลับ

| ชื่อ              | ประเภท   | คำอธิบาย                                                       |
|-------------------|--------|-------------------------------------------------------------------|
|  **`metrics`**         | **array**  | **ประกอบด้วยอาร์เรย์ของเมตริกข้อความ**                              |
|    `timestamp`       | string | เวลาของเมตริก                                           |
|    `platform`        | int    | รหัสแพลตฟอร์ม (เช่น iOS, Android)                           |
| `sends`           | string | จำนวนข้อความที่ส่ง                                      |
| `opens`           | string | จำนวนข้อความที่เปิด                                    |
| `deliveries`      | string | จำนวนข้อความที่ส่งถึง                                 |
| `inbox_opens`     | string | จำนวนการเปิดในกล่องข้อความ                                        |
| `unshowable_sends`| string | จำนวนข้อความที่ส่งแล้วแต่ไม่สามารถแสดงได้              |
| `errors`          | string | จำนวนข้อผิดพลาด                                             |
| **`conversion`**      | **object** | **ประกอบด้วยข้อมูล conversion**                                          |
| `sends`           | string | จำนวนข้อความที่ส่งทั้งหมด                                |
| `opens`           | string | จำนวนข้อความที่เปิดทั้งหมด                              |
| **`events`**          | **array**  | **อาร์เรย์ของ event พร้อมสถิติ**                         |
| `name`            | string | ชื่อของ event (เช่น cart add)                           |
| `hits`            | string | จำนวน hits                                               |
| `conversion`      | float  | อัตรา conversion เทียบกับการเปิด                            |
| `revenue`         | float  | รายได้ (เฉพาะ event ที่มีแอตทริบิวต์ `__amount` และ `__currency`) |

##### ตัวอย่างการตอบกลับ

```json
{
  "metrics": [{
    "timestamp": "2024-08-03 15:00:00",  // ประทับเวลาของเมตริกในรูปแบบ "YYYY-MM-DD HH:MM:SS"
    "platform": 3,                       // รหัสแพลตฟอร์ม
    "sends": "55902",                    // จำนวนข้อความที่ส่ง
    "opens": "382",                      // จำนวนข้อความที่เปิด
    "deliveries": "22931",               // จำนวนข้อความที่ส่งถึง
    "inbox_opens": "0",                  // จำนวนข้อความที่เปิดในกล่องข้อความ
    "unshowable_sends": "2",             // จำนวนข้อความที่ไม่สามารถแสดงได้
    "errors": "0"                        // จำนวนข้อผิดพลาดที่พบ
  }],
  "conversion": {
    "sends": "55902",                    // จำนวนข้อความที่ส่งทั้งหมด
    "opens": "772",                      // จำนวนข้อความที่เปิดทั้งหมด
    "events": [{
      "name": "cart_add",                // ชื่อของ event
      "hits": "96",                      // จำนวน hits สำหรับ event
      "conversion": 0.12,                // อัตรา conversion เทียบกับการเปิด
      "revenue": 0                       // รายได้ที่เกิดจาก event (เฉพาะ event ที่มีแอตทริบิวต์ amount/currency)
    }]
  }
}
```

## getDeliveryFunnel

ส่งคืน delivery funnel สำหรับข้อความเดียว: audience → sent → successful → delivered → opens พร้อมรายละเอียดว่า audience หายไปในแต่ละขั้นตอนที่ใด

`POST` `https://api.pushwoosh.com/api/v2/statistics/messages/getDeliveryFunnel`

##### ส่วนหัว (Headers)

| ชื่อ   <div style="width:150px"></div>              | จำเป็น <div style="width:150px"></div>    |  คำอธิบาย    <div style="width:150px"></div>                                                                                                             |
|-----------------|----------|----------------------------------------------------------------------------------------------------------------------------|
| `Authorization` | จำเป็น | [API access token](/th/developer/api-reference/api-access-token/) จาก Pushwoosh Control Panel |

##### พารามิเตอร์ในส่วนเนื้อหาของคำขอ (Request body)

| ชื่อ    <div style="width:150px"></div>            | จำเป็น <div style="width:80px"></div>      | ประเภท   <div style="width:100px"></div>              | คำอธิบาย       <div style="width:150px"></div>                                                                                                                                                                                               |
|--------------------|------------------|----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `message_code`     | ใช่        | String          | [รหัสข้อความ (Message code)](/th/developer/api-reference/api-identifiers/#message-code) ที่ได้รับจากการตอบกลับของ API `/createMessage` |
| `timestamp_from`   | ใช่        | String (RFC 3339 date-time) | จุดเริ่มต้นของช่วงเวลาการรายงาน เช่น `"2026-08-01T00:00:00Z"` ต้องมาก่อน `timestamp_to` |
| `timestamp_to`     | ใช่        | String (RFC 3339 date-time) | จุดสิ้นสุดของช่วงเวลาการรายงาน เช่น `"2026-08-04T00:00:00Z"` |
| `platforms`        | ไม่         | Array of Integer | ตัวกรอง [ID แพลตฟอร์ม](/th/developer/api-reference/messages-api/api-prerequisites/#platforms) (ไม่จำเป็น) |

##### ตัวอย่างคำขอ

```json
{
  "message_code": "A444-AAABBBCC-00112233",  // จำเป็น, รหัสข้อความที่ได้รับจากการตอบกลับของ /createMessage
  "timestamp_from": "2026-08-01T00:00:00Z",  // จำเป็น, ต้องมาก่อน timestamp_to
  "timestamp_to": "2026-08-04T00:00:00Z",    // จำเป็น
  "platforms": [1, 3, 7]                     // ไม่จำเป็น, รายการรหัสแพลตฟอร์ม
}
```

##### ฟิลด์การตอบกลับ

| ชื่อ                | ประเภท   | คำอธิบาย                                                                                                                                            |
|---------------------|--------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|
| **`funnel`**            | **array**  | **ขั้นตอนของ Funnel จะส่งคืนตามลำดับนี้เสมอ: `STAGE_AUDIENCE`, `STAGE_SENT`, `STAGE_SUCCESSFUL`, `STAGE_DELIVERED`, `STAGE_OPENS`**                                    |
| `stage`             | string | ชื่อขั้นตอนของ Funnel                                                                                                                                       |
| `count`             | string | จำนวนรวมสำหรับขั้นตอน                                                                                                                                |
| `pieces`            | array  | การแบ่งย่อยของ `count` เป็นหมวดหมู่ หมวดหมู่ที่มีจำนวนเป็นศูนย์จะถูกละไว้แทนที่จะส่งคืนเป็น `0`                                                |
| `pieces[].kind`     | string | ความสัมพันธ์ของส่วนย่อยกับผลรวมของขั้นตอน: `KIND_PASSED` (ไปยังขั้นตอนถัดไป), `KIND_REASON` (หลุดออกไปด้วยเหตุผลนี้), หรือ `KIND_SUBSET` (เป็นส่วนหนึ่งของขั้นตอน ไม่ใช่ตัวบวกแยกต่างหาก) |
| `pieces[].category` | string | หมวดหมู่การแบ่งย่อย เช่น `INVALID_TOKEN`, `FREQUENCY_CAPPING`, `CONTROL_GROUP` — ดูตารางขั้นตอนด้านล่าง                                               |
| `pieces[].count`    | string | จำนวนสำหรับหมวดหมู่นี้                                                                                                                                  |

##### ขั้นตอนของ Funnel

| ขั้นตอน | `count` หมายถึง | `pieces` |
|---|---|---|
| `STAGE_AUDIENCE` | อุปกรณ์ที่นำเข้าสู่การประมวลผล | `KIND_PASSED` `ELIGIBLE_AUDIENCE` (ไปยัง `STAGE_SENT`); `KIND_REASON`: `FREQUENCY_CAPPING`, `CONTROL_GROUP`, `UNSUBSCRIBED`, `BOUNCED`, `COMPLAINT`, `FILTERED_BY_CATEGORY` |
| `STAGE_SENT` | มีการพยายามส่ง | `KIND_PASSED` `SUCCESSFUL` (ผู้ให้บริการยอมรับ); `KIND_REASON`: `INVALID_TOKEN`, `NO_TOKEN`, `NO_DEVICE`, `PLATFORM_DISABLED`, `QUOTA_EXCEEDED`, `INVALID_CONTENT`, `INVALID_CONFIGURATION`, `INTERNAL_ERROR`, `PROVIDER_ERROR` (ข้อผิดพลาดของผู้ให้บริการที่ไม่จัดหมวดหมู่) |
| `STAGE_SUCCESSFUL` | ผู้ให้บริการยอมรับ | `KIND_PASSED` `SHOWABLE`; `KIND_REASON` `NOTIFICATIONS_DISABLED` |
| `STAGE_DELIVERED` | อุปกรณ์ที่ไม่ซ้ำกันที่ยืนยันการส่ง | ไม่มี |
| `STAGE_OPENS` | อุปกรณ์ที่ไม่ซ้ำกันที่เปิด | `KIND_SUBSET` `MACHINE_OPENS_AMPP` (การเปิดที่เกิดจากระบบอัตโนมัติของ AMP ไม่ใช่การเปิดของผู้ใช้จริง) |

##### ตัวอย่างการตอบกลับ

```json
{
  "funnel": [
    {
      "stage": "STAGE_AUDIENCE",
      "count": "600000",
      "pieces": [
        { "kind": "KIND_PASSED", "category": "ELIGIBLE_AUDIENCE", "count": "580000" },
        { "kind": "KIND_REASON", "category": "FREQUENCY_CAPPING", "count": "14000" },
        { "kind": "KIND_REASON", "category": "CONTROL_GROUP", "count": "6000" }
      ]
    },
    {
      "stage": "STAGE_SENT",
      "count": "580000",
      "pieces": [
        { "kind": "KIND_PASSED", "category": "SUCCESSFUL", "count": "560000" },
        { "kind": "KIND_REASON", "category": "INVALID_TOKEN", "count": "18000" },
        { "kind": "KIND_REASON", "category": "PROVIDER_ERROR", "count": "2000" }
      ]
    },
    {
      "stage": "STAGE_SUCCESSFUL",
      "count": "560000",
      "pieces": [
        { "kind": "KIND_PASSED", "category": "SHOWABLE", "count": "540000" },
        { "kind": "KIND_REASON", "category": "NOTIFICATIONS_DISABLED", "count": "20000" }
      ]
    },
    {
      "stage": "STAGE_DELIVERED",
      "count": "168316",
      "pieces": []
    },
    {
      "stage": "STAGE_OPENS",
      "count": "30514",
      "pieces": [
        { "kind": "KIND_SUBSET", "category": "MACHINE_OPENS_AMPP", "count": "412" }
      ]
    }
  ]
}
```

<details>
  <summary> โค้ดการตอบกลับและตัวอย่าง </summary>
<Tabs>
<TabItem label="200: OK">
```json
{
  "funnel": []
}
```
</TabItem>

<TabItem label="400: Bad Request">
```json
{
  "error": "message_code must be set"
}
```
จะถูกส่งคืนเป็น `"invalid date range: timestamp_from must be before timestamp_to"` เมื่อช่วงเวลาถูกกลับด้านหรือว่างเปล่า
</TabItem>

<TabItem label="401: Unauthorized">
```json
{
  "error": "account not found"
}
```
</TabItem>

<TabItem label="404: Not Found">
```json
{
  "error": "message not found"
}
```
</TabItem>

<TabItem label="500: Internal Server Error">

</TabItem>
</Tabs>

</details>

<Aside type="note">
`count` ของแต่ละขั้นตอนเท่ากับผลรวมของส่วน `KIND_PASSED` และ `KIND_REASON` ส่วน `KIND_SUBSET` (เช่น `MACHINE_OPENS_AMPP` ภายใต้ `STAGE_OPENS`) อธิบายส่วนหนึ่งของขั้นตอนและไม่ใช่ปริมาณเพิ่มเติม — อย่าบวกเข้าไปใน `count`
</Aside>

<Aside type="note">
จำนวนที่ไม่ซ้ำกันของ `STAGE_DELIVERED` จะรวมอยู่เฉพาะในบัญชีที่เปิดใช้งานการมองเห็นสถิติการส่ง ยกเว้นแพลตฟอร์มอีเมลซึ่งจะรวมอยู่เสมอ จำนวนของ `STAGE_OPENS` จะรวมอยู่เสมอโดยไม่คำนึงถึงการตั้งค่านี้
</Aside>

## getMessageLog

แสดงข้อมูลโดยละเอียดเกี่ยวกับข้อความที่ส่ง

`POST` `https://api.pushwoosh.com/api/v2/statistics/getMessageLog`

##### ส่วนหัว (Headers)


| ชื่อ   <div style="width:150px"></div>              | จำเป็น <div style="width:150px"></div>    |  คำอธิบาย    <div style="width:150px"></div>                                                                                                             |
|-----------------|----------|----------------------------------------------------------------------------------------------------------------------------|
| `Authorization` | จำเป็น | [API access token](/th/developer/api-reference/api-access-token/) จาก Pushwoosh Control Panel |


##### พารามิเตอร์ในส่วนเนื้อหาของคำขอ (Request body)

| ชื่อ    <div style="width:150px"></div>            | จำเป็น <div style="width:80px"></div>      | ประเภท   <div style="width:100px"></div>              | คำอธิบาย       <div style="width:150px"></div>                                                                                                                                                                                               |
|--------------------|------------------|----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `message_id`       | ไม่        | Integer         | เลือก event ของข้อความตาม Message ID ที่ได้รับจากประวัติข้อความ ตัวอย่าง: `12345678900`                                                                                                               |
| `message_code`     | ไม่         | String          | เลือก event ของข้อความตาม [รหัสข้อความ (Message code)](/th/developer/api-reference/api-identifiers/#message-code) ที่ได้รับจากการตอบกลับของ API `/createMessage` ตัวอย่าง: `"A444-AAABBBCC-00112233"`                                                                                |
| `campaign_code`    | ไม่         | String          | เลือก event ของข้อความตาม [รหัสแคมเปญ (Campaign code)](/th/developer/api-reference/api-identifiers/#campaign-code) ที่ระบุใน payload ของข้อความของคุณ ตัวอย่าง: `"AAAAA-XXXXX"`                                                                                                      |
| `hwid`            | ไม่          | String or Array  | เลือก event ของข้อความตาม [HWID (Hardware ID)](/th/developer/api-reference/api-identifiers/#hardware-id) หรืออาร์เรย์ของ HWIDs                                                                                                                                        |
| `date_from`       | จำเป็นหากไม่ได้ระบุ `message_id`, `message_code`, หรือ `campaign_code` | Datetime        | วันที่เริ่มต้นสำหรับการกรองข้อความ รูปแบบ: `"YYYY-MM-DD HH:MM:SS"` ตัวอย่าง: `"2000-01-25 00:00:00"`                                                                                                   |
| `date_to`         | จำเป็นหากไม่ได้ระบุ `message_id`, `message_code`, หรือ `campaign_code` | Datetime        | วันที่สิ้นสุดสำหรับการกรองข้อความ รูปแบบ: `"YYYY-MM-DD HH:MM:SS"` ตัวอย่าง: `"2000-01-26 00:00:00"`                                                                                                     |
| `limit`           | ไม่        | Integer         | จำนวนสูงสุดของ event ของข้อความที่ส่งคืนในการตอบกลับครั้งเดียว ค่าสูงสุด: `100000`                                                                                                                 |
| `pagination_token` | ไม่         | String         | โทเค็นการแบ่งหน้าที่ได้รับจากการตอบกลับ `/getMessageLog` ก่อนหน้า ใช้เพื่อดึงผลลัพธ์เพิ่มเติม                                                                                              |
| `user_id`         | ไม่          | String          | เลือก event ของข้อความตาม [User ID](/th/developer/api-reference/api-identifiers/#user-id) ที่กำหนดเอง ดู `/registerUser` สำหรับรายละเอียดเพิ่มเติม                                                                                                                        |
| `application_code` | ใช่        | String          | เลือก event ของข้อความตาม [รหัสแอปพลิเคชัน Pushwoosh](/th/developer/api-reference/api-identifiers/#application-code)                                                                                                                                                |
| `actions`         | ไม่         | Array           | กรองผลลัพธ์ตามการกระทำของข้อความที่ระบุ ค่าที่เป็นไปได้: `"sent"`, `"delivered"`, `"opened"`, `"inbox_delivered"`, `"inbox_read"`, `"inbox_opened"`, `"inbox_deleted"`                           |
| `platforms`       | ไม่         | Array           | อาร์เรย์ของแพลตฟอร์มเป้าหมายเพื่อกรองผลลัพธ์ ค่าที่เป็นไปได้: `"ios"`, `"android"`, `"osx"`, `"windows"`, `"amazon"`, `"safari"`, `"chrome"`, `"firefox"`, `"ie"`, `"email"`, `"huawei_android"`     |

##### ตัวอย่างคำขอ
```shell
curl --location --request POST 'https://api.pushwoosh.com/api/v2/statistics/getMessageLog' \
--header 'Authorization: Key API_ACCESS_TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
   "pagination_token": "PAGINATION_TOKEN_FROM_PREVIOUS_RESPONSE",  // ไม่จำเป็น, โทเค็นสำหรับการแบ่งหน้า
   "limit": 1000,                                  // ไม่จำเป็น, จำนวนรายการสูงสุดสำหรับการตอบกลับครั้งเดียว
   "application_code": "XXXXX-XXXXX",              // รหัสแอป Pushwoosh
   "message_code": "A444-AAABBBCC-00112233",       // ไม่จำเป็น, รหัสข้อความที่ได้รับจากคำขอ /createMessaage
   "message_id": 1234567890,                       // ไม่จำเป็น, ID ของข้อความที่ได้รับจาก Pushwoosh Control Panel
   "campaign_code": "AAAAA-XXXXX",                 // ไม่จำเป็น, รหัสของแคมเปญที่จะดึงข้อมูลบันทึก
   "hwid": "aaazzzqqqqxxx",                        // ไม่จำเป็น, ID ฮาร์ดแวร์ของอุปกรณ์เฉพาะที่ถูกกำหนดเป้าหมายด้วยข้อความ
   "user_id": "user_123",                          // ไม่จำเป็น, ID ของผู้ใช้ที่ถูกกำหนดเป้าหมายด้วยข้อความ
   "date_from": "2000-01-25 00:00:00",             // ไม่จำเป็น, จุดเริ่มต้นของช่วงเวลาสถิติ 
   "date_to": "2000-02-10 23:59:59",               // ไม่จำเป็น, จุดสิ้นสุดของช่วงเวลาสถิติ
   "actions": ["opened", "inbox_opened"],          // ไม่จำเป็น, ใช้สำหรับการกรองผลลัพธ์ ค่าที่เป็นไปได้: "sent", "opened", "delivered", "inbox_delivered", "inbox_read", "inbox_opened", "inbox_deleted" การตอบกลับจะรวมข้อความทั้งหมดที่มีการกระทำที่ระบุ
   "platforms": ["ios", "chrome"]                  // ไม่จำเป็น, ใช้สำหรับการกรองผลลัพธ์ ค่าที่เป็นไปได้: "ios", "android", "osx", "windows", "amazon", "safari", "chrome", "firefox", "ie", "email", "huawei android"
}'
```


<Aside type="caution" title="สำคัญ">
ต้องระบุฟิลด์ใดฟิลด์หนึ่งต่อไปนี้:\
\- _message\_id_\
_- message\_code_\
_- campaign\_code_\
_- hwid_\
_- user\_id_\
_- date\_from_ และ _date\_to_

พิจารณาใช้พารามิเตอร์การกรองต่างๆ เพื่อให้ได้ประโยชน์สูงสุดจากสถิติข้อความของคุณ
</Aside>

<details>
  <summary> โค้ดการตอบกลับและตัวอย่าง </summary>
<Tabs>
<TabItem label="200: OK">
```json
{
  "pagination_token": "PAGINATION_TOKEN_FOR_NEXT_REQUEST",
  "data": [{
    "timestamp": "2000-01-25T11:18:47Z",
    "application_code": "XXXXX-XXXXX",
    "message_id": 12345678900,
    "message_code": "A444-AAABBBCC-00112233",
    "campaign_code": "AAAAA-XXXXX",
    "hwid": "aaazzzqqqqxxx",
    "user_id": "user_123",
    "platform": "android",
    "action": "sent",
    "status": "success",
    "push_alerts_enabled": "true"
  }, {
    "timestamp": "2000-01-25T11:18:49Z",
    "application_code": "XXXXX-XXXXX",
    "message_id": 12345678900,
    "message_code": "A444-AAABBBCC-00112233",
    "campaign_code": "AAAAA-XXXXX",
    "hwid": "aaazzzqqqqxxx",
    "user_id": "user_123",
    "platform": "android",
    "action": "delivered",
    "push_alerts_enabled": "true"
  }, {
    "timestamp": "2000-01-25T11:19:23Z",
    "application_code": "XXXXX-XXXXX",
    "message_id": 12345678900,
    "message_code": "A444-AAABBBCC-00112233",
    "campaign_code": "AAAAA-XXXXX",
    "hwid": "aaazzzqqqqxxx",
    "user_id": "user_123",
    "platform": "android",
    "action": "opened",
    "push_alerts_enabled": "true"
  }]
}
```
</TabItem>

<TabItem label="400: Bad Request">
```json
{
  "error": "exceeded the maximum date interval. Max interval: 30 days"
}
```
</TabItem>

<TabItem label="401: Unauthorized">
```json
{
  "error": "account not found"
}
```
</TabItem>

<TabItem label="500: Internal Server Error">

</TabItem>
</Tabs>

</details>



<Aside type="note">
สามารถดาวน์โหลดข้อมูลได้สูงสุด 30 วันนับจากเวลาปัจจุบัน
</Aside>


<Aside type="tip">
สำหรับ iOS โปรดตรวจสอบให้แน่ใจว่าคุณได้เพิ่ม Notification Service Extension ในโปรเจกต์ของคุณเพื่อติดตามการส่ง push [เรียนรู้เพิ่มเติม](/th/developer/pushwoosh-sdk/ios-sdk/ios-message-delivery-tracking)
</Aside>

## สถิติอีเมล

### linksInteractions

แสดงสถิติการคลิกลิงก์ในอีเมล

`POST` `https://api.pushwoosh.com/api/v2/statistics/emails/linksInteractions`


##### ส่วนหัว (Headers)

| ชื่อ    <div style="width:200px"></div>         | จำเป็น <div style="width:100px"></div> | คำอธิบาย                                                                                          |
|-----------------|----------|-------------------------------------------------------------------------------------------------------|
| `Authorization` | ใช่      | [API access token](/th/developer/api-reference/api-access-token/) จาก Pushwoosh Control Panel        |

##### พารามิเตอร์ในส่วนเนื้อหาของคำขอ (Request body)

| ชื่อ    <div style="width:200px"></div>            | จำเป็น  <div style="width:50px"></div> |  ประเภท | คำอธิบาย                                                                                          |
|--------------------|----------|--------|------------------------------------------------------------------------------------------------------|
| `date_range`       | ไม่       | Object | กำหนดช่วงเวลาการรายงาน ประกอบด้วย `date_from` และ `date_to`                                   |
| `filters`          | ใช่      | Object | ตัวกรองอีเมล                                                                                      |
| `application`      | ใช่      | String | [รหัสแอปพลิเคชัน Pushwoosh](/th/developer/api-reference/api-identifiers/#application-code) (หรือระบุ `campaign`, `messages_ids`, หรือ `message_codes` แทน) |
| `messages_codes`   | ใช่      | Array  | [รหัสข้อความ (Message codes)](/th/developer/api-reference/api-identifiers/#message-code) (หรือระบุ `application`, `campaign`, หรือ `messages_ids` แทน)                |
| `campaign`        | ใช่      | String | [รหัสแคมเปญ (Campaign code)](/th/developer/api-reference/api-identifiers/#campaign-code) (หรือระบุ `application`, `messages_ids`, หรือ `message_codes` แทน)           |
| `messages_ids`     | ใช่      | Array  | ID ของข้อความ (หรือระบุ `application`, `campaign`, หรือ `message_codes` แทน)                 |
| `link_template`    | จำเป็นหากระบุ `application` หรือ `campaign`     | String  | กรองการโต้ตอบกับลิงก์อีเมลด้วยคีย์เวิร์ด เฉพาะลิงก์ที่มีข้อความที่ระบุใน URL เท่านั้นที่จะถูกส่งคืนในการตอบกลับของ API ตัวอย่างเช่น หากอีเมลของคุณมีลิงก์เช่น `https://example.com/news` และ `https://example.com/shop` การตั้งค่า "link_template": "shop" จะส่งคืนการโต้ตอบสำหรับ `https://example.com/shop` เท่านั้น   |
| `email_content_code`        | ไม่       | String | [ตัวระบุที่ไม่ซ้ำกันสำหรับเนื้อหาอีเมล](/th/developer/api-reference/api-identifiers/#email-content-code)                                                                               |
| `params`          | ไม่       | Object | กำหนดตัวเลือกการตอบกลับเพิ่มเติม รวมถึง `with_full_links` ซึ่งจะเพิ่มรายการลิงก์เต็มพร้อมสถิติ |

##### ตัวอย่างคำขอ

```shell
curl --location --request POST 'https://api.pushwoosh.com/api/v2/statistics/emails/linksInteractions' \
--header 'Authorization: Api API_ACCESS_TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
   "filters": {
      "date_range": {
         "date_from": "string",           // รูปแบบที่ต้องการ: 2000-01-01
         "date_to": "string"              // รูปแบบที่ต้องการ: 2000-01-01
      },
      "campaign": "string",               // รหัสแคมเปญ (คุณสามารถระบุ application, messages_ids, หรือ message_codes แทนได้)
      "application": "string",            // รหัสแอปพลิเคชัน (คุณสามารถระบุ campaign, messages_ids, หรือ message_codes แทนได้)
      "messages_ids": [],                 // ID ของข้อความ (คุณสามารถระบุ application, campaign, หรือ message_codes แทนได้)
      "messages_codes": [],               // รหัสข้อความ (คุณสามารถระบุ application, campaign, หรือ message_ids แทนได้)
      "link_template": "string",          // เทมเพลตลิงก์ (จำเป็นหากระบุ application หรือ campaign)
      "email_content_code": "string"      // ตัวระบุที่ไม่ซ้ำกันสำหรับเนื้อหาอีเมล
   },
   "params": {
      "with_full_links": true             // ระบุว่าจะแสดงสถิติโดยละเอียดหรือไม่ รายการลิงก์เต็มพร้อมสถิติจะถูกส่งผ่านในอาร์เรย์ full_links
   }
}'
``` 

##### โค้ดการตอบกลับและตัวอย่าง 
<Tabs>
<TabItem label="200: OK">
```json
{
  "items": [{
    "template": "string",
    "link": "string",
    "title": "string",
    "clicks": 0,
    "full_links": [{
      "full_link": "string",
      "clicks": 0
    }]
  }]
}
```
</TabItem>

<TabItem label="400: Bad Request">
```json
{
  "error": "exceeded the maximum date interval. Max interval: 30 days"
}
```
</TabItem>

<TabItem label="401: Unauthorized">
```json
{
  "error": "account not found"
}
```
</TabItem>

<TabItem label="500: Internal Server Error ">

</TabItem>
</Tabs>



### linksInteractionsDevices

แสดงผู้ใช้ที่คลิกลิงก์ในอีเมล

`POST` `https://api.pushwoosh.com/api/v2/statistics/emails/linksInteractionsDevices`


##### ส่วนหัว (Headers)

| ชื่อ  <div style="width:150px"></div>            | จำเป็น <div style="width:100px"></div> | คำอธิบาย                                                                                          |
|-----------------|----------|------------------------------------------------------------------------------------------------------|
| `Authorization` | ใช่      | [API access token](/th/developer/api-reference/api-access-token/) จาก Pushwoosh Control Panel    |



##### พารามิเตอร์ในส่วนเนื้อหาของคำขอ (Request body)

| ชื่อ    <div style="width:150px"></div>            | จำเป็น  <div style="width:100px"></div> | ประเภท    | คำอธิบาย                                                                                          |
|--------------------|----------|---------|------------------------------------------------------------------------------------------------------|
| `date_range`       | ไม่       | Object  | กำหนดช่วงเวลาการรายงาน ประกอบด้วย `date_from` และ `date_to`                                   |
| `filters`          | ใช่      | Object  | ตัวกรองอีเมล                                                                                      |
| `application`      | ใช่      | String  | [รหัสแอปพลิเคชัน Pushwoosh](/th/developer/api-reference/api-identifiers/#application-code) (หรือระบุ `campaign`, `messages_ids`, หรือ `message_codes` แทน) |
| `messages_codes`   | ใช่      | Array   | [รหัสข้อความ (Message codes)](/th/developer/api-reference/api-identifiers/#message-code) (หรือระบุ `application`, `campaign`, หรือ `messages_ids` แทน)                |
| `campaign`         | ใช่      | String  | [รหัสแคมเปญ (Campaign code)](/th/developer/api-reference/api-identifiers/#campaign-code) (หรือระบุ `application`, `messages_ids`, หรือ `message_codes` แทน)           |
| `messages_ids`     | ใช่      | Array   | ID ของข้อความ (หรือระบุ `application`, `campaign`, หรือ `message_codes` แทน)                 |
| `link_template`    | จำเป็นหากระบุ `application` หรือ `campaign`     | String  | กรองการโต้ตอบกับลิงก์อีเมลด้วยคีย์เวิร์ด เฉพาะลิงก์ที่มีข้อความที่ระบุใน URL เท่านั้นที่จะถูกส่งคืนในการตอบกลับของ API ตัวอย่างเช่น หากอีเมลของคุณมีลิงก์เช่น `https://example.com/news` และ `https://example.com/shop` การตั้งค่า "link_template": "shop" จะส่งคืนการโต้ตอบสำหรับ `https://example.com/shop` เท่านั้น   |
| `email_content_code`         | ไม่       | String  | [ตัวระบุที่ไม่ซ้ำกันสำหรับเนื้อหาอีเมล](/th/developer/api-reference/api-identifiers/#email-content-code)                                                                             |
| `page`            | ไม่       | Integer | หมายเลขหน้าสำหรับการแบ่งหน้า                                                                         |
| `per_page`        | ไม่       | Integer | จำนวนผลลัพธ์ต่อหน้า (≤ 1000)                                                                |

##### ตัวอย่างคำขอ

```shell
curl --location --request POST 'https://api.pushwoosh.com/api/v2/statistics/emails/linksInteractionsDevices' \
--header 'Authorization: Api API_ACCESS_TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
   "filters": {
      "date_range": {
         "date_from": "string",         // รูปแบบที่ต้องการ: 2000-01-01
         "date_to": "string"            // รูปแบบที่ต้องการ: 2000-01-01
      },
      "campaign": "string",             // รหัสแคมเปญ (คุณสามารถระบุ application, messages_ids, หรือ message_codes แทนได้)
      "application": "string",          // รหัสแอปพลิเคชัน (คุณสามารถระบุ campaign, messages_ids, หรือ message_codes แทนได้)
      "messages_ids": [],               // ID ของข้อความ (คุณสามารถระบุ application, campaign, หรือ message_codes แทนได้)
      "messages_codes": [],             // รหัสข้อความ (คุณสามารถระบุ application, campaign, หรือ message_ids แทนได้)
      "link_template": "string",        // เทมเพลตลิงก์ (จำเป็นหากระบุ application หรือ campaign)
      "email_content_code": "string"    // ตัวระบุที่ไม่ซ้ำกันสำหรับเนื้อหาอีเมล
   },
   "per_page": 100,
   "page": 0
}'
``` 

##### โค้ดการตอบกลับและตัวอย่าง  
<Tabs>
<TabItem label="200: OK">
```json
{
  "total": 0,
  "items": [{
    "timestamp": "string",
    "link": "string",
    "hwid": "string"
  }]
}
```
</TabItem>

<TabItem label="400: Bad Request">
```json
{
  "error": "exceeded the maximum date interval. Max interval: 30 days"
}
```
</TabItem>

<TabItem label="401: Unauthorized">
```json
{
  "error": "account not found"
}
```
</TabItem>

<TabItem label="500: Internal Server Error">

</TabItem>
</Tabs>


### bouncedEmails

**POST** `https://api.pushwoosh.com/api/v2/statistics/emails/bouncedEmails`

ให้ข้อมูลเกี่ยวกับการร้องเรียนทางอีเมล, soft bounces, และ hard bounces รวมถึงวันที่, ที่อยู่อีเมล, และเหตุผลของแต่ละ bounce

##### การให้สิทธิ์ (Authorization)

การให้สิทธิ์จะจัดการผ่าน API Access Token ในส่วนหัวของคำขอ

##### พารามิเตอร์ในส่วนเนื้อหาของคำขอ (Request body)

| ชื่อพารามิเตอร์ | ประเภท   | คำอธิบาย                                                                                      | จำเป็น                                       |
|----------------|--------|--------------------------------------------------------------------------------------------------|------------------------------------------------|
| `application`  | string | [รหัสแอปพลิเคชัน Pushwoosh](/th/developer/api-reference/api-identifiers/#application-code)                                                                             | ใช่                                            |
| `message_code` | string | [รหัสข้อความ (Message code)](/th/developer/api-reference/api-identifiers/#message-code)                                                                                 | จำเป็นหากไม่ได้ระบุ `date range` หรือ `campaign`        |
| `campaign` | string | [รหัสแคมเปญ (Campaign code)](/th/developer/api-reference/api-identifiers/#campaign-code)    | จำเป็นหากไม่ได้ระบุ `message_code` หรือ `date range`        |
| `date_from`    | string | วันที่เริ่มต้นสำหรับข้อมูลในรูปแบบ `YYYY-MM-DDTHH:MM:SS.000Z` (มาตรฐาน ISO 8601)         | จำเป็นหากไม่ได้ระบุ `message_code` หรือ `campaign`     |
| `date_to`      | string | วันที่สิ้นสุดสำหรับข้อมูลในรูปแบบ `YYYY-MM-DDTHH:MM:SS.000Z` (มาตรฐาน ISO 8601)           | จำเป็นหากไม่ได้ระบุ `message_code` หรือ `campaign`     |
| `per_page`     | int    | จำนวนแถวต่อหน้า สูงสุด 5000                                                        | ใช่                                            |
| `page`         | int    | หมายเลขหน้า เริ่มต้นจากศูนย์                                                              | ใช่                                            |
| `type`         | string | ประเภทของ bounce: Complaint, Softbounce, Hardbounce                                            | ไม่                                             |

##### ตัวอย่างคำขอ

```json
{
  "application": "XXXXX-XXXXX",               // จำเป็น. รหัสแอป Pushwoosh
  "message_code": "XXXXX-XXXXXXXXX-XXXXXXXX", // จำเป็นหากไม่ได้ระบุ campaign หรือ date range
                                              //          ตัวระบุข้อความที่ไม่ซ้ำกัน
  "campaign": "XXXXX-XXXXX",                  // จำเป็นหากไม่ได้ระบุ message_code หรือ date range
                                              //          รหัสแคมเปญ
  "date_from": "2024-07-20T00:00:00.000Z",    // จำเป็นหากไม่ได้ระบุ message_code หรือ campaign
                                              //          วันที่เริ่มต้นในรูปแบบ ISO 8601 "YYYY-MM-DDTHH:MM:SS.SSSZ"
  "date_to": "2024-07-20T00:00:00.000Z",      // จำเป็นหากไม่ได้ระบุ message_code หรือ campaign
                                              //          วันที่สิ้นสุดในรูปแบบ ISO 8601 "YYYY-MM-DDTHH:MM:SS.SSSZ"
  "per_page": 1000,                           // จำเป็น. จำนวนผลลัพธ์ต่อหน้า สูงสุด 5000
  "page": 5,                                  // ไม่จำเป็น. หมายเลขหน้า เริ่มต้นจากศูนย์
  "type": "Softbounce"                        // ไม่จำเป็น. ประเภทของ bounce: Complaint, Softbounce, Hardbounce 
}

```

##### ฟิลด์การตอบกลับ

| ชื่อฟิลด์        | ประเภท   | คำอธิบาย                                                                 |
|-------------------|--------|-----------------------------------------------------------------------------|
| `total`           | int    | จำนวนแถวทั้งหมด                                                    |
| `bounced_emails`  | array  | อาร์เรย์ของรายละเอียดอีเมลที่ตีกลับ                                           |
| ├── `email`       | string | ที่อยู่อีเมลที่ตีกลับ                                              |
| ├── `date`        | string | วันที่ของการตีกลับ (รูปแบบ: `YYYY-MM-DDTHH:MM:SS.000Z`)                |
| ├── `reason`      | string | เหตุผลของการตีกลับ                                                   |
| └── `type`        | string | ประเภทของ bounce: Complaint, Softbounce, Hardbounce                       |

##### ตัวอย่างการตอบกลับ

```json
{
  "total": 25,                             // จำนวนแถวทั้งหมด
  "bounced_emails": [{
    "email": "example@example.com",        // ที่อยู่อีเมลที่ตีกลับ
    "date": "2024-07-20T00:00:00.000Z",    // วันที่ตีกลับในรูปแบบ ISO 8601
    "reason": "Invalid recipient address", // เหตุผลของการตีกลับ
    "type": "Hardbounce"                   // ประเภทของ bounce: Complaint, Softbounce, Hardbounce
  }]
}
```