# Messages API

import { Badge } from '@astrojs/starlight/components';

<Aside type="caution" title="/createMessage และ /createTargetedMessage เลิกใช้แล้ว">
การผสานรวมใหม่ควรใช้ [**Messaging API v2**](/th/developer/api-reference/messaging-api-v2/) ที่เป็นหนึ่งเดียว — endpoint เดียวจะมาแทนที่กลุ่ม `/create*Message` ทั้งหมด ดู [คู่มือการย้ายระบบ](/th/developer/api-reference/messaging-api-v2/migration-from-v1/) สำหรับการจับคู่แบบฟิลด์ต่อฟิลด์

เมธอดรุ่นเก่าด้านล่างยังคงใช้งานได้เต็มรูปแบบ `/deleteMessage`, `/cancelMessage` และ `/getMessageDetails` ยังไม่เลิกใช้ — ใช้ได้ตามปกติกับข้อความที่สร้างด้วย v1 หรือ v2
</Aside>

<Aside type="note">
ในการเริ่มต้น โปรดตรวจสอบคำอธิบายของ [พารามิเตอร์คำขอ /createMessage](/th/developer/api-reference/messages-api/api-prerequisites)
</Aside>

## createMessage <Badge text="เลิกใช้แล้ว" variant="caution" size="small" />

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

สร้าง push notification ใหม่

#### เนื้อหาของคำขอ

| ชื่อ                                            | ประเภท   | คำอธิบาย                                                                |
| ----------------------------------------------- | ------ | -------------------------------------------------------------------------- |
| auth*          | string | [โทเค็นการเข้าถึง API](/th/developer/api-reference/api-identifiers/#api-access-token) จาก Pushwoosh Control Panel                             |
| application*   | string | [รหัสแอปพลิเคชัน Pushwoosh](/th/developer/api-reference/api-identifiers/#application-code)                                               |
| notifications* | array  | อาร์เรย์ JSON ของพารามิเตอร์ข้อความ ดูรายละเอียดในตัวอย่างคำขอด้านล่าง  |

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": {
    "Messages": [
      "C3F8-C3863ED4-334AD4F1"
    ]
  }
}
```
</TabItem>
</Tabs>

<Aside type="note">
เมธอด /createMessage รองรับเทมเพลตเนื้อหา หากต้องการเรียนรู้เพิ่มเติม โปรดดูที่ [คู่มือ Liquid Templates](/th/developer/guides/personalization/liquid-templates/)
</Aside>

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

```json title="ตัวอย่าง"
{
  "request": {
    "application": "XXXXX-XXXXX",       // จำเป็น รหัสแอปพลิเคชัน Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H",     // จำเป็น โทเค็นการเข้าถึง API จาก Pushwoosh Control Panel
    "notifications": [{
      "send_date": "now",               // ไม่บังคับ YYYY-MM-DD HH:mm หรือ 'now'
      "content": {                      // ไม่บังคับ อ็อบเจกต์หรือสตริง
        "en": "English",                //           ใช้ "wns_content" แทนสำหรับ Windows
        "fr": "French"
      },
      "title": {                        // ไม่บังคับ อ็อบเจกต์หรือสตริง 
        "en": "Title",                  //           จะถูกละเว้นหากมีการระบุชื่อเรื่องเฉพาะแพลตฟอร์ม
        "fr": "Titre"                   //           'ios_title', 'android_header', ฯลฯ
      },                                //           ดูตัวอย่างพารามิเตอร์เฉพาะแพลตฟอร์มด้านล่าง
      "subtitle":{                      // ไม่บังคับ อ็อบเจกต์หรือสตริง 
        "en": "Subtitle",               //           จะถูกละเว้นหากมีการระบุชื่อเรื่องเฉพาะแพลตฟอร์ม
        "fr": "Sous-titre"              //           'ios_subtitle', ฯลฯ
      },                                //           ดูตัวอย่างพารามิเตอร์เฉพาะแพลตฟอร์มด้านล่าง
      "ignore_user_timezone": true,     // ไม่บังคับ
      "timezone": "America/New_York",   // ไม่บังคับ หากละเว้น ค่าเริ่มต้นสำหรับ "send_date" คือ UTC-0
                                        //           ดู https://php.net/manual/timezones.php สำหรับ
                                        //           โซนเวลาที่รองรับ
      "campaign": "CAMPAIGN_CODE",      // ไม่บังคับ รหัสแคมเปญที่คุณต้องการกำหนดข้อความพุชนี้
      "geozone": {                      // ไม่บังคับ ส่งไปยัง Geozone
        "lat": 22.22,
        "lng": 33.33,
        "range": 110
      },
      "rich_media": "XXXXX-XXXXX",      // ไม่บังคับ คัดลอกรหัส Rich Media จากแถบ URL ของ
                                        //           หน้าแก้ไข Rich Media ใน Pushwoosh Control Panel
      "link": "https://google.com",     // ไม่บังคับ สำหรับ deeplinks ให้เพิ่ม "minimize_link": 0
      "minimize_link": 0,               // ไม่บังคับ 0 — ไม่ย่อ, 2 — bitly ค่าเริ่มต้น = 2
                                        //           โปรดทราบว่าตัวย่อลิงก์มีข้อจำกัด
                                        //           เกี่ยวกับจำนวนการเรียก
      "data": {                         // ไม่บังคับ สตริง JSON หรืออ็อบเจกต์ JSON จะถูกส่งเป็น
        "key": "value"                  //           พารามิเตอร์ "u" ใน payload (แปลงเป็นสตริง JSON)
      },
      "transactionId": "unique UUID",   // ไม่บังคับ ตัวระบุข้อความที่ไม่ซ้ำกันเพื่อป้องกันการซ้ำซ้อน
                                        //           ในกรณีที่เกิดปัญหาเครือข่าย จัดเก็บไว้ที่ฝั่ง
                                        //           Pushwoosh เป็นเวลา 5 นาที 
      "platforms": [                    // ไม่บังคับ 1 — iOS; 3 — Android; 7 — Mac OS X; 8 — Windows;
        1, 3, 7, 8, 9, 10,              //           9 — Amazon; 10 — Safari; 11 — Chrome;
        11, 12, 17                      //           12 — Firefox; 17 — Huawei
      ],
      "preset": "XXXXX-XXXXX",          // ไม่บังคับ รหัส Push Preset จาก Control Panel ของคุณ
                                        //           หากมีการส่งพารามิเตอร์เฉพาะในคำขอ
                                        //           พารามิเตอร์เหล่านั้นจะแทนที่พารามิเตอร์ของ preset
      "send_rate": 100,                 // ไม่บังคับ การควบคุมปริมาณ ค่าที่ถูกต้องคือตั้งแต่ 100 ถึง 1000 พุช/วินาที
      "send_rate_avoid": true,          // ไม่บังคับ หากตั้งค่าเป็น true ขีดจำกัดการควบคุมปริมาณจะไม่ถูกนำไปใช้กับ
                                        //           push notification เฉพาะนี้
      // เกี่ยวข้องกับการสร้างเทมเพลต โปรดดูคู่มือ Template Engine เพื่อเรียนรู้เพิ่มเติม
      "template_bindings": {            // ไม่บังคับ
        "TemplatePlaceholder": "Value"
      },
      "dynamic_content_placeholders": { // ไม่บังคับ ตัวยึดตำแหน่งสำหรับเนื้อหาแบบไดนามิกแทนแท็กของอุปกรณ์
        "firstname": "John",
        "lastname": "Doe"
      },
      "message_type": "marketing",       // ไม่บังคับ "marketing" หรือ "transactional"
                                         // หากละเว้น ผู้ใช้ที่มี PW_ControlGroup: true จะไม่ได้รับข้อความ

      // พารามิเตอร์การจำกัดความถี่ ตรวจสอบให้แน่ใจว่าได้กำหนดค่าการจำกัดความถี่ส่วนกลางใน Control Panel แล้ว
      // การจำกัดความถี่ไม่มีผลกับข้อความธุรกรรม
      // ในกรณีอื่นๆ ทั้งหมด รวมถึงการละเว้น "message_type" การจำกัดความถี่จะมีผล
      "capping_days": 30,               // ไม่บังคับ จำนวนวันสำหรับการจำกัดความถี่ (สูงสุด 30 วัน)
      "capping_count": 10,              // ไม่บังคับ จำนวนพุชสูงสุดที่สามารถส่งจาก
                                        //           แอปเฉพาะไปยังอุปกรณ์หนึ่งๆ ภายในระยะเวลา 'capping_days'
                                        //           ในกรณีที่ข้อความที่สร้างขึ้นเกิน
                                        //           ขีดจำกัด 'capping_count' สำหรับอุปกรณ์หนึ่งๆ ข้อความนั้นจะไม่
                                        //           ถูกส่งไปยังอุปกรณ์นั้น
      "capping_exclude": true,          // ไม่บังคับ หากตั้งค่าเป็น true push notification นี้จะไม่
                                        //           ถูกนับรวมในการจำกัดความถี่สำหรับพุชในอนาคต
      "capping_avoid": true,            // ไม่บังคับ หากตั้งค่าเป็น true การจำกัดความถี่จะไม่ถูกนำไปใช้กับ
                                        //           push notification เฉพาะนี้
        
      // หากต้องการบันทึกข้อความไปยัง Inbox ผ่าน API ให้ใช้ "inbox_date" หรือ "inbox_image"
      // ข้อความจะถูกบันทึกเมื่อมีการใช้พารามิเตอร์เหล่านี้อย่างน้อยหนึ่งตัว
      "inbox_date": "2017-02-02",       // ไม่บังคับ ระบุว่าจะลบข้อความออกจาก Inbox เมื่อใด
                                        //           ข้อความจะถูกลบออกจาก Inbox เวลา 00:00:01 UTC
                                        //           ของวันที่ระบุ ดังนั้นวันก่อนหน้าคือ
                                        //           วันสุดท้ายที่ผู้ใช้สามารถเห็นข้อความใน Inbox ของตนได้
                                        //           หากไม่ได้ระบุ วันที่ลบเริ่มต้นคือ
                                        //           วันถัดไปหลังจากวันที่ส่ง
      "inbox_image": "Inbox image URL", // ไม่บังคับ รูปภาพที่จะแสดงใกล้กับข้อความ 
	  "inbox_days": 5,                  // ไม่บังคับ ระบุว่าจะลบข้อความออกจาก
                                        //           Inbox เมื่อใด (อายุของข้อความใน inbox เป็นวัน) 
                                        //           สามารถใช้แทนพารามิเตอร์ "inbox_date" ได้
                                        //           สูงสุด 30 วัน
      
      "devices": [                      // ไม่บังคับ ระบุโทเค็นหรือ hwids เพื่อส่งพุชเป้าหมาย 
          "hwid_XXXX"                   //           notifications ไม่เกิน 1000 โทเค็น/hwids ใน
      ],                                //           อาร์เรย์ หากตั้งค่า ข้อความจะถูกส่งไปยัง
                                        //           อุปกรณ์ในรายการเท่านั้น ไม่อนุญาตให้ใช้ Application Group สำหรับรายการอุปกรณ์
                                        //           โทเค็นพุชของ iOS สามารถเป็นตัวพิมพ์เล็กเท่านั้น
      "to": [                           // ไม่บังคับ สำหรับอีเมล, SMS และช่องทางที่คล้ายกัน รายชื่อผู้รับ
          "email_1", "email_2"          //           (เช่น ที่อยู่อีเมล, หมายเลขโทรศัพท์) สูงสุด 1000 รายการ
      ],                                //           สำหรับพุช ให้ใช้ "devices" แทน
      // User-centric push notifications
      "users": [                        // ไม่บังคับ หากตั้งค่า ข้อความจะถูกส่งไปยัง
          "user_XXXX"                   //           User ID ที่ระบุเท่านั้น (ตั้งค่าผ่านการเรียก /registerUser) 
      ],                                //           หากระบุพร้อมกับ devices หรือ to
                                        //           อย่างหลังจะถูกละเว้น ไม่เกิน 1000 User
                                        //           ID ในอาร์เรย์ ไม่อนุญาตให้ใช้ Application Group สำหรับรายชื่อผู้ใช้

      // ฟิลเตอร์และเงื่อนไข
      "filter": "FILTER_NAME",          // ไม่บังคับ
      "conditions": [                   // ไม่บังคับ ดูหมายเหตุด้านล่าง
        ["Country", "EQ", "fr"],
        ["Language", "EQ", "en"]
      ],    
      "conditions_operator": "AND"      // ไม่บังคับ ตัวดำเนินการตรรกะสำหรับอาร์เรย์เงื่อนไข
                                        //           ค่าที่เป็นไปได้: AND | OR ค่าเริ่มต้นคือ AND
    }]
  }
}
```

### ตัวอย่างคำขอการแจ้งเตือน VoIP

Pushwoosh รองรับการแจ้งเตือนการโทรแบบ VoIP สำหรับ iOS และ Android \
ด้านล่างนี้คุณจะพบตัวอย่างคำขอ API `createMessage` สำหรับแต่ละแพลตฟอร์ม

#### iOS

```json title="ตัวอย่าง"
{
  "request": {
    "application": "XXXXX-XXXXX",     // จำเป็น รหัสแอปพลิเคชัน Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H",   // จำเป็น โทเค็นการเข้าถึง API จาก Pushwoosh Control Panel
    "notifications": [
      {
        "voip_push": true,            // จำเป็น พารามิเตอร์นี้จำเป็นสำหรับการส่ง push notification แบบ VoIP
        "ios_root_params": {
          "aps": {
            "mutable-content": 1      // จำเป็นสำหรับไฟล์แนบสื่อ iOS10+
          },
          "callerName": "CallerName", // ไม่บังคับ ชื่อผู้โทร หากไม่ระบุ จะแสดง "unknown caller"
          "video": true,              // ไม่บังคับ ระบุว่ารองรับการโทรวิดีโอหรือไม่
          "supportsHolding": true,    // ไม่บังคับ ระบุว่ารองรับฟังก์ชันการพักสายหรือไม่
          "supportsDTMF": false,      // ไม่บังคับ ควบคุมการรองรับสัญญาณ Dual-Tone Multi-Frequency
          "callId": "42",             // ไม่บังคับ ตัวระบุที่ไม่ซ้ำกันของการโทรที่จะยกเลิก
          "cancelCall": true          // ไม่บังคับ ตั้งค่าเป็น "true" เพื่อยกเลิกการโทรด้วย "callId" ที่ระบุ
        }
      }
    ]
  }
}
```

#### Android

```json title="ตัวอย่าง"
{
  "request": {
    "application": "XXXXX-XXXXX",   // จำเป็น รหัสแอปพลิเคชัน Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H", // จำเป็น โทเค็นการเข้าถึง API จาก Pushwoosh Control Panel
    "notifications": [
      {
      "voip_push": true,            // จำเป็น พารามิเตอร์นี้จำเป็นสำหรับการส่ง push notification แบบ VoIP
      "android_root_params": {
        "callerName": "callerName", // ไม่บังคับ ชื่อผู้โทร หากไม่ระบุ จะแสดง "unknown caller"
        "video": true,              // ไม่บังคับ ระบุว่ารองรับการโทรวิดีโอหรือไม่
        "callId": 42,               // ไม่บังคับ ตัวระบุที่ไม่ซ้ำกันของการโทรที่จะยกเลิก
        "cancelCall": true          // ไม่บังคับ ตั้งค่าเป็น "true" เพื่อยกเลิกการโทรด้วย "callId" ที่ระบุ
        }
      }
    ]
  }
}

```


### พารามิเตอร์เฉพาะแพลตฟอร์ม

#### พารามิเตอร์ iOS

```json title="ตัวอย่าง"
{
  "request": {
    "application": "12345-67891",         // จำเป็น รหัสแอปพลิเคชัน Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H",       // จำเป็น โทเค็นการเข้าถึง API จาก Pushwoosh Control Panel
    "notifications": [{
      "ios_title": {                      // ไม่บังคับ อ็อบเจกต์หรือสตริง เพิ่มชื่อเรื่องเฉพาะ iOS สำหรับ push notification
        "en": "title"
      },
      "ios_subtitle": {                   // ไม่บังคับ อ็อบเจกต์หรือสตริง เพิ่มคำบรรยายเฉพาะ iOS สำหรับ push notification
        "en": "subtitle"
      },
      "ios_content": {                    // ไม่บังคับ อ็อบเจกต์หรือสตริง เพิ่มเนื้อหาเฉพาะ iOS สำหรับ push notification
        "en": "content"
      },
      "ios_badges": 5,                    // ไม่บังคับ หมายเลขป้ายแอปพลิเคชัน iOS
                                          //           ใช้ "+n" หรือ "-n" เพื่อเพิ่ม/ลดค่าป้ายกำกับ n
      "ios_sound": "sound file.wav",      // ไม่บังคับ ชื่อไฟล์เสียงใน main bundle ของแอปพลิเคชัน
                                          //           หากเว้นว่างไว้ อุปกรณ์จะสร้างเสียงระบบเริ่มต้น
      "ios_sound_off": true,              // ไม่บังคับ เปิด/ปิดเสียงที่ตั้งค่าโดยฟิลด์ "ios_sound"
      "ios_ttl": 3600,                    // ไม่บังคับ พารามิเตอร์ Time to live - อายุการใช้งานสูงสุดของข้อความเป็นวินาที
      "ios_silent": 1,                    // ไม่บังคับ เปิดใช้งานการแจ้งเตือนแบบเงียบ (ไม่สนใจ "sound" และ "content")
      "ios_category_id": "1",             // ไม่บังคับ รหัสหมวดหมู่ iOS8 จาก Pushwoosh
      "ios_root_params": {                // ไม่บังคับ พารามิเตอร์ระดับรากของพจนานุกรม aps
        "aps": {
          "content-available": "0",       // ไม่บังคับ ตั้งค่า "1" เพื่อส่งพุชเงียบและ "0" สำหรับพุชปกติ
          "mutable-content": 1            // จำเป็นสำหรับไฟล์แนบสื่อ iOS10+
        },
        "callerName": "CallerName",       // ไม่บังคับ พารามิเตอร์ VoIP ชื่อผู้โทร หากไม่ระบุ จะแสดง "unknown caller"
        "video": true,                    // ไม่บังคับ พารามิเตอร์ VoIP ระบุว่ารองรับการโทรวิดีโอหรือไม่
        "supportsHolding": true,          // ไม่บังคับ พารามิเตอร์ VoIP ระบุว่ารองรับฟังก์ชันการพักสายหรือไม่
        "supportsDTMF": false,            // ไม่บังคับ พารามิเตอร์ VoIP ควบคุมการรองรับสัญญาณ Dual-Tone Multi-Frequency
        "data": {}                        // ไม่บังคับ ข้อมูลที่ผู้ใช้ให้มา สูงสุด 4KB
      },
      "ios_attachment": "URL",            // ไม่บังคับ แทรกเนื้อหาสื่อในการแจ้งเตือน
      "ios_thread_id": "some thread id",  // ไม่บังคับ ตัวระบุเพื่อจัดกลุ่มการแจ้งเตือนที่เกี่ยวข้อง
                                          //           ข้อความที่มี thread ID เดียวกันจะถูกจัดกลุ่ม
                                          //           บนหน้าจอล็อกและในศูนย์การแจ้งเตือน
      "ios_critical": true,               // ไม่บังคับ ทำเครื่องหมายการแจ้งเตือน iOS เป็นการแจ้งเตือนที่สำคัญ
                                          //           เล่นเสียงแม้ว่าอุปกรณ์จะปิดเสียงหรือ
                                          //           โหมดห้ามรบกวนเปิดอยู่
      "ios_category_custom": "category",  // ไม่บังคับ หมวดหมู่ APNS ที่กำหนดเอง
      "ios_interruption_level": "active", // ไม่บังคับ หนึ่งใน "passive", "active", "time-sensitive",
                                          //           "critical" ระบุความสำคัญและ
                                          //           เวลาในการส่งการแจ้งเตือน โปรดดู
                                          //           คู่มือพุชครั้งเดียวสำหรับรายละเอียด
      "apns_collapse_id": "promo",        // ไม่บังคับ ตัวระบุการยุบ APNs การแจ้งเตือนที่มี
                                          //           apns_collapse_id เดียวกันจะแทนที่กันบนอุปกรณ์
      "apns_trim_content": 1              // ไม่บังคับ (0|1) ตัดสตริงเนื้อหาที่เกินด้วยจุดไข่ปลา
    }]
  }
}
```

#### พารามิเตอร์ Android

```json title="ตัวอย่าง"
{
  "request": {
    "application": "12345-67891",            // จำเป็น รหัสแอปพลิเคชัน Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H",          // จำเป็น โทเค็นการเข้าถึง API จาก Pushwoosh Control Panel
    "notifications": [{
      "android_header": {                    // ไม่บังคับ ส่วนหัวการแจ้งเตือน Android
        "en": "header"
      },
      "android_content": {                   // ไม่บังคับ เนื้อหาการแจ้งเตือน Android
        "en": "content"
      },
      "android_root_params": {               // ไม่บังคับ อ็อบเจกต์ key-value ที่กำหนดเอง
        "key": "value",                      //           พารามิเตอร์ระดับรากสำหรับผู้รับ payload ของ android
        "CancelID": 12345678,                // ไม่บังคับ ยกเลิก push notification ด้วย
        "voip": true,                        // จำเป็น พารามิเตอร์ VoIP พารามิเตอร์นี้จำเป็นสำหรับการส่ง push notification แบบ VoIP
        "callerName": "callerName",          // ไม่บังคับ พารามิเตอร์ VoIP ชื่อผู้โทร หากไม่ระบุ จะแสดง "unknown caller"
        "video": true,                       // ไม่บังคับ พารามิเตอร์ VoIP ระบุว่ารองรับการโทรวิดีโอหรือไม่
      },                                     //           Message ID ที่ระบุ (รับ ID จากประวัติข้อความ)
      "android_sound": "soundfile",          // ไม่บังคับ ไม่มีนามสกุลไฟล์ หากเว้นว่างไว้
                                             //           อุปกรณ์จะสร้างเสียงระบบเริ่มต้น
      "android_sound_off": true,             // ไม่บังคับ เปิด/ปิดเสียงที่ตั้งค่าโดยฟิลด์ "android_sound"
      "android_icon": "icon.png",            // ไม่บังคับ
      "android_custom_icon": "URL.png",      // ไม่บังคับ URL แบบเต็มไปยังไฟล์รูปภาพ
      "android_banner": "URL.png",           // ไม่บังคับ URL แบบเต็มไปยังไฟล์รูปภาพ
      "android_badges": 5,                   // ไม่บังคับ หมายเลขป้ายไอคอนแอปพลิเคชัน Android
                                             //           ใช้ "+n" หรือ "-n" เพื่อเพิ่ม/ลดค่าป้ายกำกับ n
      "android_gcm_ttl": 3600,               // ไม่บังคับ พารามิเตอร์ Time to live — อายุการใช้งานสูงสุดของข้อความเป็นวินาที
      "android_vibration": 0,                // ไม่บังคับ การสั่นแบบบังคับของ Android สำหรับพุชที่มีลำดับความสำคัญสูง
      "android_led": "#rrggbb",              // ไม่บังคับ สี LED แบบ hex อุปกรณ์จะทำการประมาณค่าที่ดีที่สุด
      "android_priority": -1,                // ไม่บังคับ ตั้งค่าพารามิเตอร์ "importance" สำหรับอุปกรณ์ที่มี
                                             //           Android 8.0 ขึ้นไป รวมถึงพารามิเตอร์ "priority"
                                             //           สำหรับอุปกรณ์ที่มี Android 7.1 และต่ำกว่า กำหนด
                                             //           ระดับการขัดจังหวะของช่องทางการแจ้งเตือนหรือ
                                             //           การแจ้งเตือนเฉพาะ ค่าที่ถูกต้องคือ -2, -1, 0, 1, 2
      "android_delivery_priority": "normal", // ไม่บังคับ "normal" หรือ "high"
                                             //           เปิดใช้งานการส่งการแจ้งเตือนเมื่อ
                                             //           อุปกรณ์อยู่ในโหมดประหยัดพลังงาน
      "android_ibc": "#RRGGBB",              // ไม่บังคับ สีพื้นหลังไอคอนบน Lollipop, #RRGGBB,
                                             //           #AARRGGBB, "red", "black", "yellow", ฯลฯ
      "android_silent": 1,                   // ไม่บังคับ 0 หรือ 1 เปิดใช้งานการแจ้งเตือนแบบเงียบ
                                             //           ไม่สนใจเสียงและเนื้อหา
      "android_group_id": "123",             // ไม่บังคับ ตัวระบุเพื่อจัดกลุ่มการแจ้งเตือนที่เกี่ยวข้อง ข้อความที่มี
                                             //           thread ID เดียวกันจะถูกจัดกลุ่มใน
                                             //           ศูนย์การแจ้งเตือน
      "android_collapse_key": "promo"        // ไม่บังคับ คีย์การยุบ FCM การแจ้งเตือนที่มี
                                             //           คีย์การยุบเดียวกันจะแทนที่กันในขณะที่อุปกรณ์ออฟไลน์
    }]
  }
}
```

**พารามิเตอร์ Huawei**

```json title="Huawei"
{
  "request": {
    "application": "12345-67891",                   // จำเป็น รหัสแอปพลิเคชัน Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H",                 // จำเป็น โทเค็นการเข้าถึง API จาก Pushwoosh Control Panel
    "notifications": [{
      "huawei_android_header": {                    // ไม่บังคับ อ็อบเจกต์หรือสตริง ชื่อเรื่องการแจ้งเตือน
        "en": "header"
      },
      "huawei_android_content": {                   // ไม่บังคับ อ็อบเจกต์หรือสตริง เนื้อหาการแจ้งเตือน
        "en": "content"
      },
      "huawei_android_badges": true,                // ไม่บังคับ
      "huawei_android_silent": 0,                   // ไม่บังคับ 0 หรือ 1 เปิดใช้งานการแจ้งเตือนแบบเงียบ
                                                    //           ไม่สนใจเสียงและเนื้อหา
      "huawei_android_icon": "URL.png",             // ไม่บังคับ
      "huawei_android_led": "#FF0011",              // ไม่บังคับ สี LED แบบ hex อุปกรณ์จะทำการประมาณค่าที่ดีที่สุด
      "huawei_android_vibration": 1,                // ไม่บังคับ การสั่นแบบบังคับของ Huawei สำหรับพุชที่มีลำดับความสำคัญสูง
      "huawei_android_sound": "sound.wav",          // ไม่บังคับ หากเว้นว่างไว้ อุปกรณ์จะสร้าง
                                                    //           เสียงระบบเริ่มต้น
      "huawei_android_sound_off": true,             // ไม่บังคับ เปิด/ปิดเสียงที่ตั้งค่าโดย
                                                    //           ฟิลด์ "huawei_android_sound"
      "huawei_android_custom_icon": "URL.png",      // ไม่บังคับ
      "huawei_android_gcm_ttl": 2400,               // ไม่บังคับ พารามิเตอร์ Time to live - สูงสุด
                                                    //           อายุการใช้งานของข้อความเป็นวินาที
      "huawei_android_banner": "URL.png",           // ไม่บังคับ URL เส้นทางเต็มไปยังไฟล์รูปภาพ
      "huawei_android_root_params": {               // ไม่บังคับ อ็อบเจกต์ key-value ที่กำหนดเอง
        "key": "value"                              //           พารามิเตอร์ระดับรากสำหรับผู้รับ payload ของ Huawei
      },
      "huawei_android_priority": 0,                 // ไม่บังคับ ค่าที่ถูกต้อง: -2, -1, 0, 1, 2
      "huawei_android_ibc": "#0011AA",              // ไม่บังคับ สีพื้นหลังไอคอนบน Lollipop
      "huawei_android_lockscreen": 1,               // ไม่บังคับ
      "huawei_android_delivery_priority": "normal", // ไม่บังคับ "normal" หรือ "high" เปิดใช้งานการแจ้งเตือน
                                                    //           การส่งในโหมดประหยัดพลังงาน
      "huawei_android_group_id": "group_id"         // ไม่บังคับ ตัวระบุเพื่อจัดกลุ่มการแจ้งเตือนที่เกี่ยวข้อง
    }]
  }
}
```

#### พารามิเตอร์ Safari

```json title="Safari"
{
  "request": {
    "application": "12345-67891",    // จำเป็น รหัสแอปพลิเคชัน Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H",  // จำเป็น โทเค็นการเข้าถึง API จาก Pushwoosh Control Panel
    "notifications": [{
      "safari_url_args": [           // จำเป็น แต่ค่าอาจว่างเปล่า
        "firstArgument",
        "secondArgument"
      ],
      "safari_title": {              // ไม่บังคับ อ็อบเจกต์หรือสตริง ชื่อเรื่องของการแจ้งเตือน
        "en": "content"
      },
      "safari_content": {            // ไม่บังคับ อ็อบเจกต์หรือสตริง เนื้อหาของการแจ้งเตือน
        "en": "content"
      },
      "safari_action": "Click here", // ไม่บังคับ
      "safari_ttl": 3600             // ไม่บังคับ พารามิเตอร์ Time to live — สูงสุด
                                     //           อายุการใช้งานของข้อความเป็นวินาที
    }]
  }
}


```

#### พารามิเตอร์ Chrome

```json title="Chrome"
{
  "request": {
    "application": "12345-67891",          // จำเป็น รหัสแอปพลิเคชัน Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H",        // จำเป็น โทเค็นการเข้าถึง API จาก Pushwoosh Control Panel
    "notifications": [{
      "chrome_title": {                    // ไม่บังคับ อ็อบเจกต์หรือสตริง คุณสามารถระบุส่วนหัว 
        "en": "title"                      //           ของข้อความในพารามิเตอร์นี้
      },
      "chrome_content": {                  // ไม่บังคับ อ็อบเจกต์หรือสตริง คุณสามารถระบุเนื้อหา 
        "en": "content"                    //           ของข้อความในพารามิเตอร์นี้
      },
      "chrome_icon": "URL.png",            // ไม่บังคับ URL แบบเต็มไปยังไอคอนหรือเส้นทางไฟล์ทรัพยากรส่วนขยาย
      "chrome_gcm_ttl": 3600,              // ไม่บังคับ พารามิเตอร์ Time to live – อายุการใช้งานสูงสุดของข้อความเป็นวินาที
      "chrome_duration": 20,               // ไม่บังคับ สูงสุด 50 วินาที เปลี่ยนเวลาแสดงผลพุชของ chrome
                                           //           ตั้งค่าเป็น 0 เพื่อแสดงพุชจนกว่าผู้ใช้จะโต้ตอบกับมัน
      "chrome_image": "image_URL",         // ไม่บังคับ URL ไปยังรูปภาพขนาดใหญ่ 
      "chrome_root_params": {              // ไม่บังคับ ตั้งค่าพารามิเตอร์เฉพาะสำหรับข้อความที่ส่งไปยัง Chrome
        "key": "value"
      }, 
      "chrome_button_text1": "text1",      // ไม่บังคับ
      "chrome_button_url1": "button1_URL", // ไม่บังคับ จะถูกละเว้นหากไม่ได้ตั้งค่า chrome_button_text1
      "chrome_button_text2": "text2",      // ไม่บังคับ
      "chrome_button_url2": "button2_url"  // ไม่บังคับ จะถูกละเว้นหากไม่ได้ตั้งค่า chrome_button_text2 
    }]
  }
}
```

#### พารามิเตอร์ Firefox

```json title="Firefox"
{
  "request": {
    "application": "12345-67891",   // จำเป็น รหัสแอปพลิเคชัน Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H", // จำเป็น โทเค็นการเข้าถึง API จาก Pushwoosh Control Panel
    "notifications": [{
      "firefox_title": {            // ไม่บังคับ อ็อบเจกต์หรือสตริง คุณสามารถระบุส่วนหัวของข้อความได้ที่นี่
        "en": "title"
      },
      "firefox_content": {          // ไม่บังคับ อ็อบเจกต์หรือสตริง คุณสามารถระบุเนื้อหาของข้อความได้ที่นี่
        "en": "content"
      },
      "firefox_icon": "URL.png",    // ไม่บังคับ URL เส้นทางเต็มไปยังไอคอนหรือเส้นทางไปยัง
                                    //           ไฟล์ในทรัพยากรส่วนขยาย
      "firefox_root_params": {      // ไม่บังคับ ตั้งค่าพารามิเตอร์เฉพาะสำหรับข้อความที่ส่งไปยัง Firefox
        "key": "value"
      } 
    }]
  }
}
```

#### พารามิเตอร์ Amazon

```json title="Amazon"
{
  "request": {
    "application": "12345-67891",   // จำเป็น รหัสแอปพลิเคชัน Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H", // จำเป็น โทเค็นการเข้าถึง API จาก Pushwoosh Control Panel
    "notifications": [{
      "adm_header": {               // ไม่บังคับ อ็อบเจกต์หรือสตริง คุณสามารถระบุส่วนหัวของข้อความได้ที่นี่
        "en": "header"
      },
      "adm_content": {              // ไม่บังคับ อ็อบเจกต์หรือสตริง คุณสามารถระบุเนื้อหาของข้อความได้ที่นี่
        "en": "content"
      },
      "adm_root_params": {          // ไม่บังคับ อ็อบเจกต์ key-value ที่กำหนดเอง
        "key": "value"
      },
      "adm_sound": "push.mp3",      // ไม่บังคับ
      "adm_sound_off": true,        // ไม่บังคับ เปิด/ปิดเสียงที่ตั้งค่าโดยฟิลด์ "adm_sound"
      "adm_icon": "icon.png",       // ไม่บังคับ URL แบบเต็มไปยังไอคอน
      "adm_custom_icon": "URL.png", // ไม่บังคับ
      "adm_banner": "URL.png",      // ไม่บังคับ
      "adm_ttl": 3600,              // ไม่บังคับ พารามิเตอร์ Time to live — สูงสุด
                                    //           อายุการใช้งานของข้อความเป็นวินาที
      "adm_priority": -1            // ไม่บังคับ ลำดับความสำคัญของพุชในลิ้นชักพุชของ Amazon
                                    //           ค่าที่ถูกต้องคือ -2, -1, 0, 1 และ 2
    }]
  }
}
```

#### พารามิเตอร์ Mac OS X

```json title="Mac OS X"
{
  "request": {
    "application": "12345-67891",   // จำเป็น รหัสแอปพลิเคชัน Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H", // จำเป็น โทเค็นการเข้าถึง API จาก Pushwoosh Control Panel
    "notifications": [{
      "mac_title": {                // ไม่บังคับ อ็อบเจกต์หรือสตริง เพิ่มชื่อเรื่องสำหรับ push notification
        "en": "title"
      },
      "mac_subtitle": {             // ไม่บังคับ เพิ่มคำบรรยายสำหรับ push notification
        "en": "subtitle"
      },
      "mac_content": {              // ไม่บังคับ เพิ่มเนื้อหาสำหรับ push notification
        "en": "content"
      },
      "mac_badges": 3,              // ไม่บังคับ
      "mac_sound": "sound.caf",     // ไม่บังคับ
      "mac_sound_off": true,        // ไม่บังคับ เปิด/ปิดเสียงที่ตั้งค่าโดยฟิลด์ "mac_sound"
      "mac_root_params": {          // ไม่บังคับ
        "content-available": 1
      },
      "mac_ttl": 3600               // ไม่บังคับ พารามิเตอร์ Time to live — อายุการใช้งานสูงสุดของข้อความเป็นวินาที
    }]
  }
}
```

#### พารามิเตอร์ Windows

```json title="Windows"
{
  "request": {
    "application": "12345-67891",   // จำเป็น รหัสแอปพลิเคชัน Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H", // จำเป็น โทเค็นการเข้าถึง API จาก Pushwoosh Control Panel
    "notifications": [{
      "wns_content": {              // จำเป็น เนื้อหา (XML หรือ raw) ของการแจ้งเตือนที่เข้ารหัสใน base64 ของ MIME
                                    //           ในรูปแบบของอ็อบเจกต์หรือสตริง
        "en": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9ImF2YWlsYWJsZSIvPg==",
        "de": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9Im5ld01lc3NhZ2UiLz4="
      },
      "wns_type": "Badge",          // ไม่บังคับ 'Tile' | 'Toast' | 'Badge' | 'Raw'
      "wns_tag": "myTag",           // ไม่บังคับ ใช้ในนโยบายการแทนที่ Tile
                                    //           สตริงตัวอักษรและตัวเลขไม่เกิน 16 ตัวอักษร
      "wns_cache": 1,               // ไม่บังคับ (1|0) แปลเป็นค่า X-WNS-Cache-Policy
      "wns_ttl": 600                // ไม่บังคับ เวลาหมดอายุสำหรับการแจ้งเตือนเป็นวินาที
    }]
  }
}
```
<Aside>
เริ่มต้นอย่างรวดเร็ว! ลองดูไลบรารีของบุคคลที่สามที่น่าสนใจเหล่านี้!

ไลบรารี Python **โดย Pushwoosh**:
[https://github.com/makcyd/pushwoosh_api](https://github.com/makcyd/pushwoosh_api)

ไลบรารี Laravel:
[https://github.com/laravel-notification-channels/pushwoosh](https://github.com/laravel-notification-channels/pushwoosh)

ไคลเอนต์ Node JS
[https://github.com/vizeat/pushwoosh-node](https://github.com/vizeat/pushwoosh-node)

ไคลเอนต์ Meteor JS
[https://github.com/lpender/meteor-pushwoosh](https://github.com/lpender/meteor-pushwoosh)

ไลบรารี Rails
[https://github.com/iarie/pwush](https://github.com/iarie/pwush)

ไลบรารี Golang
[https://github.com/yyoshiki41/go-pushwoosh](https://github.com/yyoshiki41/go-pushwoosh)
</Aside>

<Aside type="caution">
#### การควบคุมปริมาณ /createMessage

โปรดทราบว่าบัญชีที่ไม่ใช่ระดับองค์กรไม่สามารถส่งคำขอ `/createMessage` และ/หรือ [`/createTargetedMessage`](/th/developer/api-reference/messages-api/#createtargetedmessage) ได้เกิน 600 คำขอต่อนาที

อย่างไรก็ตาม หากคุณส่งพุชผ่านพารามิเตอร์ **devices** ไปยัง **10 อุปกรณ์หรือน้อยกว่า** จะไม่มีข้อจำกัดสำหรับบัญชีประเภทใดๆ ตราบใดที่การติดตามข้อความ API ถูกปิดใช้งาน

โปรดทราบว่า **เราจะบันทึกพุชที่ตั้งเวลาไว้เสมอ** ไปยังประวัติข้อความ แม้ว่าคุณจะส่งไปยังอุปกรณ์น้อยกว่า 10 เครื่องผ่านพารามิเตอร์ devices ก็ตาม ดังนั้นพุชดังกล่าวจึงถูกควบคุมปริมาณด้วย
</Aside>

**การตอบกลับ**:

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

<Aside type="note">
ข้อผิดพลาดในอาร์เรย์ของการแจ้งเตือน

หากคำขอ `createMessage` มีหลายข้อความในอาร์เรย์ `notifications` ข้อความเหล่านั้นจะถูกประมวลผลและส่งทีละรายการ หากหนึ่งในข้อความไม่สามารถแยกวิเคราะห์ได้ API ของเราจะส่งคืน `"status_code":210` พร้อมรหัสของข้อความที่ส่งสำเร็จ กล่าวคือ ข้อความที่อยู่ก่อนหน้าข้อความที่ผิดพลาดในคำขอ
</Aside>

### การติดตามข้อความ API

เพื่อวัตถุประสงค์ในการปรับสมดุลภาระงาน _เราจะไม่จัดเก็บข้อความที่ส่งผ่าน API ด้วยพารามิเตอร์ "devices" ที่มีอุปกรณ์น้อยกว่า 10 เครื่องในอาร์เรย์_ ด้วยเหตุนี้ ข้อความดังกล่าวจะไม่แสดงในประวัติข้อความของคุณ

หากต้องการดูรายงานพุชในระหว่างขั้นตอนการทดสอบ ให้ใช้ **การติดตามข้อความ API** การเปิดตัวเลือกนี้ **ON** จะช่วยให้คุณ _สามารถลบล้างขีดจำกัดนี้เป็นเวลา 1 ชั่วโมงและบันทึกพุชดังกล่าวในประวัติข้อความได้_ การติดตามข้อความ API จะปิดโดยอัตโนมัติหลังจาก 1 ชั่วโมง

การติดตามข้อความ API สามารถเปิดใช้งานได้ที่หน้า [ประวัติข้อความ](/th/product/statistics-and-analytics/message-history/) โดยคลิก **เริ่มการติดตามข้อความ API** ที่มุมขวาบน

### เงื่อนไขแท็ก

แต่ละเงื่อนไขแท็กเป็นอาร์เรย์เช่น `[tagName, operator, operand]` โดยที่

* tagName: ชื่อของแท็ก
* operator: "EQ" | "IN" | "NOTEQ" | "NOTIN" | "LTE" | "GTE" | "BETWEEN" | "NOTSET" | "ANY"
* operand: string | integer | array | date

#### คำอธิบายตัวดำเนินการ

* EQ: ค่าแท็กเท่ากับ operand;
* IN: ค่าแท็กตัดกับ operand (operand ต้องเป็นอาร์เรย์เสมอ);
* NOTEQ: ค่าแท็กไม่เท่ากับ operand;
* NOTIN: ค่าแท็กไม่ตัดกับ operand (operand ต้องเป็นอาร์เรย์เสมอ);
* GTE: ค่าแท็กมากกว่าหรือเท่ากับ operand;
* LTE: ค่าแท็กน้อยกว่าหรือเท่ากับ operand;
* BETWEEN: ค่าแท็กมากกว่าหรือเท่ากับค่า operand ขั้นต่ำ แต่น้อยกว่าหรือเท่ากับค่า operand สูงสุด (operand ต้องเป็นอาร์เรย์เสมอ);
* NOTSET: ไม่ได้ตั้งค่าแท็ก ไม่พิจารณา Operand;
* ANY: แท็กมีค่าใดๆ ไม่พิจารณา Operand

#### แท็กสตริง

ตัวดำเนินการที่ถูกต้อง: EQ, IN, NOTEQ, NOTIN, NOTSET, ANY\
Operands ที่ถูกต้อง:

* EQ, NOTEQ: operand ต้องเป็นสตริง;
* IN, NOTIN: operand ต้องเป็นอาร์เรย์ของสตริงเช่น `["value 1", "value 2", "value N"]`;
* NOTSET: ไม่ได้ตั้งค่าแท็ก ไม่พิจารณา Operand;
* ANY: แท็กมีค่าใดๆ ไม่พิจารณา Operand

#### แท็กจำนวนเต็ม

ตัวดำเนินการที่ถูกต้อง: EQ, IN, NOTEQ, NOTIN, BETWEEN, GTE, LTE, NOTSET, ANY\
Operands ที่ถูกต้อง:

* EQ, NOTEQ, GTE, LTE: operand ต้องเป็นจำนวนเต็ม;
* IN, NOTIN: operand ต้องเป็นอาร์เรย์ของจำนวนเต็มเช่น `[value 1, value 2, value N]`;
* BETWEEN: operand ต้องเป็นอาร์เรย์ของจำนวนเต็มเช่น `[min_value, max_value]`;
* NOTSET: ไม่ได้ตั้งค่าแท็ก ไม่พิจารณา Operand;
* ANY: แท็กมีค่าใดๆ ไม่พิจารณา Operand

#### แท็กวันที่

ตัวดำเนินการที่ถูกต้อง: EQ, IN, NOTEQ, NOTIN, BETWEEN, GTE, LTE, NOTSET, ANY\
Operands ที่ถูกต้อง:

* `"YYYY-MM-DD 00:00"` (สตริง)
* unix timestamp `1234567890` (จำนวนเต็ม)
* `"N days ago"` (สตริง) สำหรับตัวดำเนินการ EQ, BETWEEN, GTE, LTE

#### แท็กบูลีน

ตัวดำเนินการที่ถูกต้อง: EQ, NOTSET, ANY\
Operands ที่ถูกต้อง: `0, 1, true, false`

#### แท็กรายการ

ตัวดำเนินการที่ถูกต้อง: IN, NOTIN, NOTSET, ANY\
Operands ที่ถูกต้อง: operand ต้องเป็นอาร์เรย์ของสตริงเช่น `["value 1", "value 2", "value N"]`

<Aside type="danger">
โปรดจำไว้ว่าพารามิเตอร์ "filter" และ "conditions" ไม่ควรใช้ร่วมกัน\
นอกจากนี้ ทั้งสองอย่าง **จะถูกละเว้น** หากมีการใช้พารามิเตอร์ "devices" ในคำขอเดียวกัน
</Aside>

<Aside type="note">
#### แท็กประเทศและภาษา

ค่าแท็กภาษาคือรหัสสองตัวอักษรตัวพิมพ์เล็กตาม [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)\
ค่าแท็กประเทศคือรหัสสองตัวอักษรตัวพิมพ์ใหญ่ตาม [ISO_3166-2](https://en.wikipedia.org/wiki/ISO_3166-2)\
ตัวอย่างเช่น หากต้องการส่ง push notification ไปยังผู้สมัครสมาชิกที่พูดภาษาโปรตุเกสในบราซิล คุณจะต้องระบุเงื่อนไขต่อไปนี้: `"conditions": [["Country", "EQ", "BR"],["Language", "EQ", "pt"]]`
</Aside>

### ตัวอย่างโค้ด /createMessage

<Aside type="caution" title="สำคัญ">
โปรดใช้ความระมัดระวังเมื่อใช้ตัวอย่างโค้ด จำกัดจำนวนผู้รับโดยระบุพารามิเตอร์ "users", "devices", "filter" หรือ "conditions" หากไม่ได้ระบุพารามิเตอร์เหล่านี้ ข้อความจะถูกส่ง **ไปยังทุกอุปกรณ์** ที่สมัครรับ push notifications จากแอปพลิเคชัน
</Aside>

ตัวอย่างคำขอ `/createMessage`:

<Tabs>
<TabItem label="Bash">
```bash
#!/bin/bash
 
#Usage
if [ ! -n "$1" ] || [ ! -n "$2" ]
then
  echo "`basename $0` usage: api_token appid message";
  exit 1;
fi;
MESSAGE="$3";
if [ -z "$3" ]
then
MESSAGE='One push to rule them all!'
fi;
 
echo -e "Response:"
curl --data-binary "
{\"request\":
    {\"application\":\"$2\",
     \"auth\":\"$1\",
     \"notifications\":
        [{
                        \"send_date\": \"now\",
            \"content\": \"$MESSAGE\"
        }]
    }
}" \
-H "Content-type: application/json" \
"https://api.pushwoosh.com/json/1.3/createMessage"
echo "";
exit 0;
```
</TabItem>

<TabItem label="PHP">
```php
<?php 
define('PW_AUTH', 'API TOKEN');
define('PW_APPLICATION', 'APPLICATION CODE');
define('PW_DEBUG', true);
 
function pwCall($method, $data) {
    $url = 'https://api.pushwoosh.com/json/1.3/' . $method;
    $request = json_encode(['request' => $data]);
 
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
 
    $response = curl_exec($ch);
    $info = curl_getinfo($ch);
    curl_close($ch);
 
    if (defined('PW_DEBUG') && PW_DEBUG) {
        print "[PW] request: $request
";
        print "[PW] response: $response
";
        print '[PW] info: ' . print_r($info, true);
    }
}
 
pwCall('createMessage', array(
    'application' => PW_APPLICATION,
    'auth' => PW_AUTH,
    'notifications' => array(
            array(
                'send_date' => 'now',
                'content' => 'test',
                'data' => array('custom' => 'json data'),
                'link' => 'https://pushwoosh.com/'
            )
        )
    )
);
```
</TabItem>

<TabItem label="Erlang">
```erlang
-module(pushwoosh).
-export([run/0, stop/0, sendMessage/1]).
%% sendMessage argument: message text %%
 
%% Authentication & App_id %%
-define(PW_AUTH, "YOUR_AUTH_TOKEN").
-define(PW_APPLICATION, "YOUR_PUSHWOOSH_APP_CODE").
 
%% KickStart %%
run() ->
    application:start(unicode),
    application:start(crypto),
    application:start(public_key),
    application:start(ssl),
    application:start(inets),
    %% HTTP Client verbosity options flase, verbose, debug
    httpc:set_options([{verbose, false}]).  
stop() ->
    application:stop(ssl),
    application:stop(public_key),       
    application:stop(crypto),
    application:stop(inets).
%% JSON Wars !
encode(S) -> encode(S, [$"]).
encode([], Acc) -> lists:reverse([$" | Acc]);
encode([C | Cs], Acc) ->
        Hex = lists:flatten(io_lib:format("~4.16.0b", [C])),
        encode(Cs, lists:reverse(Hex) ++ "u\" ++ Acc).
 
sendMessage(Message_text) ->
    %% URL to JSON API 1.3
    Url = "https://api.pushwoosh.com/json/1.3/createMessage",
    EncodedMessage = encode(Message_text),
    {ok, Response} = httpc:request(
        %%Method 
        post, 
        %%Request
        {Url, [{"User-Agent", "Erlang exemple"}], "application/json; charset=UTF-8", 
        "{\"request\":{
        \"application\": \""?PW_APPLICATION"\",
        \"auth\": \""?PW_AUTH"\",
        \"notifications\": [{
        \"send_date\": \"now\",
        \"content\": "++EncodedMessage++"
        }]}}"},
        %%HTTP options
        [{ssl,[{verify, verify_none}]}, {version, "HTTP/1.0"}],
        %%Options
        []),
    io:format("And received ~p", [Response]).
```
</TabItem>

<TabItem label="Ruby">
```ruby
class PushNotification
 
  #- PushWoosh API Documentation https://www.pushwoosh.com/programming-push-notification/pushwoosh-push-notification-remote-api/ 
  #- Two methods here:
  #     - PushNotification.new.notify_all(message) Notifies all with the same option
  #     - PushNotification.new.notify_devices(notification_options = {}) Notifies specific devices with custom options
 
  include HTTParty #Make sure to have the HTTParty gem declared in your gemfile https://github.com/jnunemaker/httparty
  default_params :output => 'json'
  format :json
 
  def initialize
    #- Change to your settings
    @auth = {:application  => "00000-00000",:auth => "auth_token"}
  end
 
  # PushNotification.new.notify_all("This is a test notification to all devices")
  def notify_all(message)
    notify_devices({:content  => message})
  end
 
  # PushNotification.new.notify_device({
  #  :content  => "TEST",
  #  :data  => {:custom_data  => value},
  #  :devices  => array_of_tokens
  #})
  def notify_devices(notification_options = {})
    #- Default options, uncomment :data or :devices if needed
    default_notification_options = {
                        # YYYY-MM-DD HH:mm  OR 'now'
                        :send_date  => "now",
                        # Object( language1: 'content1', language2: 'content2' ) OR string
                        :content  => {
                            :fr  => "Test",
                            :en  => "Test"
                        },
                        # JSON string or JSON object "custom": "json data"
                        #:data  => {
                        #    :custom_data  => value
                        #},
                        # omit this field (push notification will be delivered to all the devices for the application), or provide the list of devices IDs
                        #:devices  => {}
                      }
 
    #- Merging with specific options
    final_notification_options = default_notification_options.merge(notification_options)
 
    #- Constructing the final call
    options = @auth.merge({:notifications  => [final_notification_options]})
    options = {:request  => options}                                                                                                                             
    #- Executing the POST API Call with HTTPARTY - :body => options.to_json allows us to send the json as an object instead of a string
    response = self.class.post("https://api.pushwoosh.com/json/1.3/createMessage", :body  => options.to_json,:headers => { 'Content-Type' => 'application/json' })
  end
end
```
</TabItem>

<TabItem label="Java">
```java
// Uses JSON classes from https://json.org/java/

package com.arellomobile;
 
import org.json.*;
import java.io.*;
import java.net.*;
 
public class SendPushNotificationSample
{
    public static final String PUSHWOOSH_SERVICE_BASE_URL = "https://api.pushwoosh.com/json/1.3/";
    private static final String AUTH_TOKEN = "YOUR_AUTH_TOKEN";
    private static final String APPLICATION_CODE = "PW_APPLICATION_CODE";
 
    public static void main(String[] args) throws JSONException, MalformedURLException
    {
        String method = "createMessage";
        URL url = new URL(PUSHWOOSH_SERVICE_BASE_URL + method);
 
        JSONArray notificationsArray = new JSONArray()
                .put(new JSONObject().put("send_date", "now")
                                     .put("content", "test")
                                     .put("link", "https://pushwoosh.com/"));
 
        JSONObject requestObject = new JSONObject()
                .put("application", APPLICATION_CODE)
                .put("auth", AUTH_TOKEN)
                .put("notifications", notificationsArray);
 
        JSONObject mainRequest = new JSONObject().put("request", requestObject);
        JSONObject response = SendServerRequest.sendJSONRequest(url, mainRequest.toString());
 
        System.out.println("Response is: " + response);
    }
}
 
class SendServerRequest
{
    static JSONObject sendJSONRequest(URL url, String request)
    {
        HttpURLConnection connection = null;
        try
        {
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type", "application/json");
            connection.setDoInput(true);
            connection.setDoOutput(true);
 
            DataOutputStream writer = new DataOutputStream(connection.getOutputStream());
            writer.write(request.getBytes("UTF-8"));
            writer.flush();
            writer.close();
 
            return parseResponse(connection);
        }
        catch (Exception e)
        {
            System.out.println("An error occurred: " + e.getMessage());
            return null;
        }
        finally
        {
            if (connection != null)
            {
                connection.disconnect();
            }
        }
    }
 
    static JSONObject parseResponse(HttpURLConnection connection) throws IOException, JSONException
    {
        String line;
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        StringBuilder response = new StringBuilder();
 
        while ((line = reader.readLine()) != null)
        {
            response.append(line).append('
');
        }
        reader.close();
 
        return new JSONObject(response.toString());
    }
}
```
</TabItem>

<TabItem label="Python">
```python
import json
 
PW_AUTH = 'API TOKEN'
PW_APPLICATION_CODE = 'APPLICATION CODE'
 
try:
    # For Python 3.0 and later
    from urllib.request import urlopen
    from urllib.request import Request
except ImportError:
    # Fall back to Python 2's urllib2
    from urllib2 import urlopen
    from urllib2 import Request
 
def pw_call(method, data):
    url = 'https://api.pushwoosh.com/json/1.3/' + method
    data = json.dumps({'request': data})
    req = Request(url, data.encode('UTF-8'), {'Content-Type': 'application/json'})
    try:
        f = urlopen(req)
        response = f.read()
        f.close()
        print('Pushwoosh response: ' + str(response))
    except Exception as e:
        print ('Request error: ' + str(e))
 
if __name__ == '__main__':
    pw_call('createMessage', {
        'auth': PW_AUTH,
        'application': PW_APPLICATION_CODE,
        'notifications': [
            {
                'send_date': 'now',
                'content': 'test',
                'data': {"custom": "json data"},
                'link': 'https://pushwoosh.com'
            }
        ]
    }
    )
```
</TabItem>

<TabItem label=".NET">
```
using System;
using System.IO;
using System.Net;
using Newtonsoft.Json.Linq;

namespace WebApplication1
{
   public partial class Default : System.Web.UI.Page
   {
       protected void Page_Load(object sender, EventArgs e)
       {
           string pwAuth = "YOUR_AUTH_TOKEN";
           string pwApplication = "PW_APPLICATION_CODE";
           JObject json = new JObject(
               new JProperty("application", pwApplication),
               new JProperty("auth", pwAuth),
               new JProperty("notifications",
                   new JArray(
                       new JObject(
                           new JProperty("send_date", "now"),
                           new JProperty("content", "test"),
                           new JProperty("wp_type", "Toast"),
                           new JProperty("wp_count", 3),
                           new JProperty("data",
                               new JObject(
                                   new JProperty("custom", "json data"))),
                           new JProperty("link", "https://pushwoosh.com/"),
                           new JProperty("conditions",
                               new JArray(
                                   (object)new JArray("Color", "EQ", "black")))))));
           PWCall("createMessage", json);
       }
       private void PWCall(string action, JObject data)
       {
           Uri url = new Uri("https://api.pushwoosh.com/json/1.3/" + action);
           JObject json = new JObject(new JProperty("request", data));
           DoPostRequest(url, json);
       }
       private void DoPostRequest(Uri url, JObject data)
       {
           HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
           req.ContentType = "text/json";
           req.Method = "POST";
           using (var streamWriter = new StreamWriter(req.GetRequestStream()))
           {
               streamWriter.Write(data.ToString());
           }
           HttpWebResponse httpResponse;
           try
           {
               httpResponse = (HttpWebResponse)req.GetResponse();
           }
           catch (Exception exc)
           {
               throw new Exception(string.Format("Problem with {0}, {1}", url, exc.Message));
           }
           using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
           {
               var responseText = streamReader.ReadToEnd();
               Page.Response.Write(responseText);
           }
       }
   }
}
```
</TabItem>

<TabItem label="Go">
```go
package main

import
(
	"fmt"
	"encoding/json"
	"net/http"
	"bytes"
	"io/ioutil"
)

const (
	PW_APPLICATION = "APPLICATION CODE"
	PW_AUTH = "API TOKEN"
	PW_ENDPOINT = "https://api.pushwoosh.com/json/1.3/"
)

func pwCall(method string, data []byte) (bool) {
	url := PW_ENDPOINT + method
	request, err := http.NewRequest("POST", url, bytes.NewBuffer(data))
	request.Header.Set("Content-Type", "application/json")

	client := http.Client{}
	response, err := client.Do(request)
	if err != nil {
		fmt.Println("Error occur: " + err.Error())
		return false
	}
	defer response.Body.Close()

	fmt.Println("Response Status: ", response.Status)
	if (response.StatusCode == 200) {
		body, _ := ioutil.ReadAll(response.Body)
		fmt.Println("Response Body: ", string(body))
		return true
	}
	return false
}

func main() {
	requestData := map[string]interface{}{
		"request": map[string]interface{} {
			"auth": PW_AUTH,
			"application": PW_APPLICATION,
			"notifications": []interface{}{
				map[string]interface{} {
					"send_date": "now",
					"content": "test",
					"link": "https://pushwoosh.com",
				},
			},
		},
	}
	jsonRequest, _ := json.Marshal(requestData)
	requestString := string(jsonRequest)
	fmt.Println("Request body: " + requestString)

	pwCall("createMessage", jsonRequest)
}
```
</TabItem>

<TabItem label="JavaScript">
```javascript
$.ajax({
    type: "POST",
    url: "https://api.pushwoosh.com/json/1.3/createMessage",
    data: JSON.stringify({
        "request": {
            "application": "APPLICATION CODE",
            "auth": "API TOKEN",
            "notifications": [{
                "send_date": "now",
                "ignore_user_timezone": true,
                "content": "Hello world!"
            }]
        }
    }),
    dataType: "json"
}).done(function(data) {
    console.log(data);
});
```
</TabItem>
</Tabs>

## deleteMessage

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

ลบข้อความที่ตั้งเวลาไว้

#### เนื้อหาของคำขอ

| ชื่อ                                      | ประเภท   | คำอธิบาย                                      |
| ----------------------------------------- | ------ | ------------------------------------------------ |
| auth*    | string | [โทเค็นการเข้าถึง API](/th/developer/api-reference/api-identifiers/#api-access-token) จาก Pushwoosh Control Panel   |
| message* | string | [รหัสข้อความ](/th/developer/api-reference/api-identifiers/#message-code) ที่ได้รับในคำขอ `/createMessage` |

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

```json title="ตัวอย่าง"
{
  "request":{
    "auth": "yxoPUlwqm…………pIyEX4H",  // จำเป็น โทเค็นการเข้าถึง API จาก Pushwoosh Control Panel
    "message": "xxxx-xxxxxxx-xxxxxx" // จำเป็น รหัสข้อความที่ได้รับใน /createMessage
  }
}
```

<Aside type="danger">
คุณไม่สามารถลบข้อความที่ส่งออกไปแล้วได้
</Aside>

**รหัสสถานะ:**

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

```php
<?php
// see https://gomoob.github.io/php-pushwoosh/delete-message.html
use Gomoob\Pushwoosh\Model\Request\DeleteMessageRequest;

// creates request instance
$request = DeleteMessageRequest::create()->setMessage('MESSAGE_CODE');

// call '/deleteMessage' Web Service
$response = $pushwoosh->deleteMessage($request);

if($response->isOk()) {
    print 'Great, my message has been deleted !';
} else {
    print 'Oups, the deletion failed :-('; 
    print 'Status code : ' . $response->getStatusCode();
    print 'Status message : ' . $response->getStatusMessage();
}
```

## getMessageDetails

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

ดึงรายละเอียดข้อความ

#### เนื้อหาของคำขอ

| ชื่อ                                      | ประเภท   | คำอธิบาย                                    |
| ----------------------------------------- | ------ | ---------------------------------------------- |
| auth*    | string | [โทเค็นการเข้าถึง API](/th/developer/api-reference/api-identifiers/#api-access-token) จาก Pushwoosh Control Panel |
| message* | string | [รหัสข้อความ](/th/developer/api-reference/api-identifiers/#message-code) หรือ ID ข้อความ                    |

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": {
    "message": {
      "id": 2068991743,
      "created": "2016-09-14 17:19:42",
      "send_date": "2016-09-14 17:19:41",
      "status": "done",
      "content": {
        "en": "Hello {Name|CapitalizeFirst|friend}! 🚀"
      },
      "platforms": "[1]",
      "ignore_user_timezone": "1",
      "code": "XXXX-92B4C3C5-A7F5EF70",
      "data": {
        "key": "value"
      }
    }
  }
}
```
</TabItem>
</Tabs>

```json title="ตัวอย่าง"
{
  "request":{
    "auth": "yxoPUlwqm…………pIyEX4H",  // จำเป็น โทเค็นการเข้าถึง API จาก Pushwoosh Control Panel
    "message": "xxxx-xxxxxxx-xxxxxx" // จำเป็น รหัสข้อความหรือ ID ข้อความ
  }
}
```

## createTargetedMessage <Badge text="เลิกใช้แล้ว" variant="caution" size="small" />

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

สร้าง push notification แบบกำหนดเป้าหมายใหม่

#### เนื้อหาของคำขอ

| ชื่อ                                              | ประเภท    | คำอธิบาย                                                                                                                            |
| ------------------------------------------------- | ------- |----------------------------------------------------------------------------------------------------------------------------------------|
| auth*            | string  | [โทเค็นการเข้าถึง API](/th/developer/api-reference/api-identifiers/#api-access-token) จาก Pushwoosh Control Panel                                                                                         |
| devices_filter* | string  | ดูหมายเหตุด้านล่าง                                                                                                                      |
| send_date*      | string  | YYYY-MM-DD HH:mm หรือ 'now'                                                                                                             |
| ignore_user_timezone                            | boolean | หากละเว้น ค่าเริ่มต้นสำหรับ "send_date" คือ UTC-0                                                                                         |
| timezone                                          | string  | หากละเว้น ค่าเริ่มต้นสำหรับ "send_date" คือ UTC-0                                                                                         |
| campaign                                          | string  | [รหัสของแคมเปญ](/th/developer/api-reference/api-identifiers/#campaign-code) ที่คุณต้องการกำหนดข้อความพุชนี้                                                                      |
| content*         | string  | เนื้อหาการแจ้งเตือน ดูรายละเอียดในตัวอย่างคำขอ                                                                             |
| transactionId                                     | string  | ตัวระบุข้อความที่ไม่ซ้ำกันเพื่อป้องกันการทำซ้ำข้อความในกรณีที่เกิดปัญหาเครือข่าย จัดเก็บไว้ที่ฝั่ง Pushwoosh เป็นเวลา 5 นาที |
| link                                              | string  | ลิงก์ที่จะเปิดเมื่อผู้ใช้เปิดข้อความพุช                                                                                    |
| minimize_link                                    | integer | 0 - ไม่ย่อ, 2 - bit.ly ค่าเริ่มต้น = 2                                                                                          |
| data                                              | object  | สตริง JSON หรืออ็อบเจกต์ JSON จะถูกส่งเป็นพารามิเตอร์ "u" ใน payload (แปลงเป็นสตริง JSON)                                 |
| preset                                            | string  | [รหัส Preset](/th/developer/api-reference/api-identifiers/#preset-code)                                                                                                                           |
| send_rate                                        | integer | การควบคุมปริมาณ ค่าที่ถูกต้องคือตั้งแต่ 100 ถึง 1000 พุชต่อวินาที                                                                       |
| inbox_date                                       | string  | ระบุว่าจะลบข้อความออกจาก Inbox เมื่อใด                                                                                       |
| inbox_image                                      | string  | URL ของรูปภาพที่จะแสดงใกล้กับข้อความใน Inbox                                                                            |

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": {
    "messageCode": "97B0-C7473871-2FBDFDC6"
  }
}
```
</TabItem>

<TabItem label="400 ข้อผิดพลาดทางไวยากรณ์ JSON">
```
The request cannot be fulfilled due to bad syntax.
```
</TabItem>
</Tabs>

ตัวอย่างการตอบกลับเพิ่มเติม:

<Tabs>
<TabItem label="210 - ไวยากรณ์">
```json
{
  "status_code": 210,
  "status_message": "Errors occurred while compiling filter",
  "response": {
    "errors": [{
      "message": "Invalid tag set specification. \")\" expected.",
      "type": "syntax"
    }]
  }
}
```
</TabItem>

<TabItem label="210 - ความหมาย">
```json
{
  "status_code": 210,
  "status_message": "Errors occurred while compiling filter",
  "response": {
    "errors": [{
      "message": "Application \"11111-11111\" not found",
      "type": "semantic",
      "near": "\"11111-11111\""
    }]
  }
}

```
</TabItem>

<TabItem label="210 - คำศัพท์">
```json
{
  "status_code": 210,
  "status_message": "Errors occurred while compiling filter",
  "response": {
    "errors": [{
      "message": "Invalid character \"/\" at 1:19",
      "type": "lexical"
    }]
  }
}
```
</TabItem>
</Tabs>

<Aside type="danger" title="โหมดยาก">
คุณควรใช้ [`/createMessage`](#createmessage) แทนหรือไม่?
</Aside>


<Tabs>
<TabItem label="ตัวอย่าง">
```json title="ตัวอย่าง"
{
  "request": {
    "auth": "yxoPUlwqm…………pIyEX4H",    // จำเป็น โทเค็นการเข้าถึง API จาก Pushwoosh Control Panel
    "devices_filter": "A(\"XXXXX-XXXXX\") * T(\"City\", EQ, \"Name\")", // จำเป็น ไวยากรณ์อธิบายไว้ด้านล่าง
    "send_date": "now",                // ไม่บังคับ YYYY-MM-DD HH:mm หรือ 'now'
    "ignore_user_timezone": true,      // ไม่บังคับ
    "timezone": "America/New_York",    // ไม่บังคับ หากละเว้น ค่าเริ่มต้นสำหรับ "send_date" คือ UTC-0
                                       //           ข้อมูลเพิ่มเติม https://php.net/manual/timezones.php
    "campaign": "CAMPAIGN_CODE",       // ไม่บังคับ รหัสแคมเปญที่คุณต้องการกำหนดข้อความพุชนี้
    "content": {                       // ไม่บังคับ อ็อบเจกต์หรือสตริง ใช้ "wns_content" แทนสำหรับ Windows
      "en": "English",
      "de": "Deutsch"
    },
    "transactionId": "unique UUID",    // ไม่บังคับ ตัวระบุข้อความที่ไม่ซ้ำกันเพื่อป้องกันการทำซ้ำข้อความ
                                       //           ในกรณีที่เกิดปัญหาเครือข่าย จัดเก็บไว้ที่ฝั่ง
                                       //           Pushwoosh เป็นเวลา 5 นาที
    "rich_media": "XXXXX-XXXXX",       // ไม่บังคับ คัดลอกรหัส Rich Media จากแถบ URL ของ
                                       //           หน้าแก้ไข Rich Media ใน Pushwoosh Control Panel 
    "link": "https://google.com",      // ไม่บังคับ สำหรับ deeplinks ให้เพิ่ม "minimize_link": 0
    "minimize_link": 0,                // ไม่บังคับ 0 — ไม่ย่อ, 2 — bitly ค่าเริ่มต้น = 2
                                       //           ตัวย่อ URL ของ Google ถูกปิดใช้งานตั้งแต่วันที่ 30 มีนาคม 2019
                                       //           โปรดทราบว่าตัวย่อลิงก์มีข้อจำกัด
                                       //           เกี่ยวกับจำนวนการเรียก
    "data": {                          // ไม่บังคับ สตริง JSON หรืออ็อบเจกต์ JSON
      "key": "value"                   //           จะถูกส่งเป็นพารามิเตอร์ "u" ใน payload
    },                                 //           (แปลงเป็นสตริง JSON)
    "preset": "XXXXX-XXXXX",           // ไม่บังคับ รหัส Push Preset จาก Control Panel ของคุณ
    "send_rate": 100,                  // ไม่บังคับ การควบคุมปริมาณ ค่าที่ถูกต้องคือตั้งแต่ 100 ถึง 1000 พุช/วินาที
    "dynamic_content_placeholders": {  // ไม่บังคับ ตัวยึดตำแหน่งสำหรับเนื้อหาแบบไดนามิกแทนแท็กของอุปกรณ์
      "firstname": "John",
      "lastname": "Doe"
    },

    // หากต้องการบันทึกข้อความไปยัง Inbox ผ่าน API ให้ใช้ "inbox_date" หรือ "inbox_image"
    // ข้อความจะถูกบันทึกเมื่อมีการใช้พารามิเตอร์เหล่านี้อย่างน้อยหนึ่งตัว 
    "inbox_image": "Inbox image URL",  // ไม่บังคับ รูปภาพที่จะแสดงใกล้กับข้อความ
    "inbox_date": "2017-02-02"         // ไม่บังคับ ระบุว่าจะลบข้อความออกจาก Inbox เมื่อใด
                                       //           ข้อความจะถูกลบออกจาก Inbox เวลา 00:00:01 UTC ของ
                                       //           วันที่ระบุ ดังนั้นวันก่อนหน้าคือวันสุดท้าย
                                       //           ที่ผู้ใช้สามารถเห็นข้อความใน Inbox ของตนได้
                                       //           หากไม่ได้ระบุ วันที่ลบเริ่มต้นคือวันถัดไป
                                       //           หลังจากวันที่ส่ง
  }
}
```
</TabItem>

<TabItem label="พารามิเตอร์เฉพาะแพลตฟอร์ม">
```json title="พารามิเตอร์เฉพาะแพลตฟอร์ม"
{
  "request": {
    "auth": "yxoPUlwqm…………pIyEX4H",        // จำเป็น โทเค็นการเข้าถึง API จาก Pushwoosh Control Panel
    "devices_filter": "FILTER CONDITION",
    "send_date": "now",                    // ไม่บังคับ YYYY-MM-DD HH:mm หรือ 'now'
    "content": {                           // ไม่บังคับ อ็อบเจกต์หรือสตริง
      "en": "English",                     //           ใช้ "wns_content" แทนสำหรับ Windows
      "de": "Deutsch"
    },
    "ignore_user_timezone": true,          // ไม่บังคับ
    "timezone": "America/New_York",        // ไม่บังคับ หากละเว้น ค่าเริ่มต้นสำหรับ "send_date" คือ UTC-0
                                           //           ข้อมูลเพิ่มเติม https://php.net/manual/timezones.php
    "campaign": "CAMPAIGN_CODE",           // ไม่บังคับ รหัสแคมเปญที่คุณต้องการกำหนดข้อความพุชนี้
    
    // พารามิเตอร์ที่เกี่ยวข้องกับ iOS
    "ios_badges": 5,                       // ไม่บังคับ หมายเลขป้ายแอปพลิเคชัน iOS
                                           //           ใช้ "+n" หรือ "-n" เพื่อเพิ่ม/ลดค่าป้ายกำกับ n
    "ios_sound": "sound file.wav",         // ไม่บังคับ ชื่อไฟล์เสียงใน main bundle ของแอปพลิเคชัน
                                           //           หากเว้นว่างไว้ อุปกรณ์จะไม่ส่งเสียง
                                           //           เมื่อได้รับการพุช
    "ios_sound_off": true,                 // ไม่บังคับ เปิด/ปิดเสียงที่ตั้งค่าโดยฟิลด์ "ios_sound"
    "ios_ttl": 3600,                       // ไม่บังคับ พารามิเตอร์ Time to live — อายุการใช้งานสูงสุดของข้อความเป็นวินาที
    "ios_silent": 1,                       // ไม่บังคับ เปิดใช้งานการแจ้งเตือนแบบเงียบ (ไม่สนใจ "sound" และ "content")
    "ios_category_id": "1",                // ไม่บังคับ รหัสหมวดหมู่ iOS8 จาก Pushwoosh
    "ios_category_custom": "category",     // ไม่บังคับ หมวดหมู่ APNS ที่กำหนดเอง
    "ios_root_params": {                   // ไม่บังคับ พารามิเตอร์ระดับรากของพจนานุกรม aps
      "aps": {
        "content-available": "0",          // ไม่บังคับ ตั้งค่า "1" เพื่อส่งพุชเงียบและ "0" สำหรับพุชปกติ
        "mutable-content": 1               // จำเป็นสำหรับไฟล์แนบสื่อ iOS10+
      },
      "attachment": "YOUR_ATTACHMENT_URL", // URL ไฟล์แนบสื่อ iOS10+
      "data": {}                           // ไม่บังคับ ข้อมูลที่ผู้ใช้ให้มา สูงสุด 4KB
    },
    "apns_trim_content": 1,                // ไม่บังคับ (0|1) ตัดสตริงเนื้อหาที่เกินด้วยจุดไข่ปลา
    "ios_title": {                         // ไม่บังคับ เพิ่มชื่อเรื่องสำหรับ push notification ของ iOS
      "en": "title"
    },
    "ios_subtitle": {                      // ไม่บังคับ เพิ่มคำบรรยายสำหรับ push notification ของ iOS
      "en": "subTitle"
    },
    "ios_content": {                       // ไม่บังคับ เพิ่มเนื้อหาสำหรับ push notification ของ iOS
      "en": "content"
    },
    
    // พารามิเตอร์ที่เกี่ยวข้องกับ Android
    "android_root_params": {               // ไม่บังคับ อ็อบเจกต์ key-value ที่กำหนดเอง
      "key": "value"                       //           พารามิเตอร์ระดับรากสำหรับผู้รับ payload ของ android
    },
    "android_sound": "soundfile",          // ไม่บังคับ ไม่มีนามสกุลไฟล์ หากเว้นว่างไว้ อุปกรณ์
                                           //           จะไม่ส่งเสียงเมื่อได้รับการพุช
    "android_sound_off": true,             // ไม่บังคับ เปิด/ปิดเสียงที่ตั้งค่าโดยฟิลด์ "android_sound"
    "android_header": {                    // ไม่บังคับ อ็อบเจกต์หรือสตริง ส่วนหัวการแจ้งเตือน Android
      "en": "header" 
    },
    "android_content": {                   // ไม่บังคับ อ็อบเจกต์หรือสตริง เนื้อหาการแจ้งเตือน Android
      "en": "content"
    },
    "android_icon": "icon.png",  
    "android_custom_icon": "URL.png",      // ไม่บังคับ URL เส้นทางเต็มไปยังไฟล์รูปภาพ
    "android_banner": "URL.png",           // ไม่บังคับ URL เส้นทางเต็มไปยังไฟล์รูปภาพ
    "android_badges": 5,                   // ไม่บังคับ จำนวนเต็ม หมายเลขป้ายไอคอนแอปพลิเคชัน Android
                                           //           ใช้ "+n" หรือ "-n" เพื่อเพิ่ม/ลดค่าป้ายกำกับ n
    "android_gcm_ttl": 3600,               // ไม่บังคับ พารามิเตอร์ Time to live — อายุการใช้งานสูงสุดของข้อความเป็นวินาที
    "android_vibration": 0,                // ไม่บังคับ การสั่นแบบบังคับของ Android สำหรับพุชที่มีลำดับความสำคัญสูง
    "android_led": "#rrggbb",              // ไม่บังคับ สี LED แบบ hex อุปกรณ์จะทำการประมาณค่าที่ดีที่สุด
    "android_priority": -1,                // ไม่บังคับ ตั้งค่าพารามิเตอร์ "importance" สำหรับอุปกรณ์ที่มี Android 8.0
                                           //           ขึ้นไป รวมถึงพารามิเตอร์ "priority" สำหรับอุปกรณ์
                                           //           ที่มี Android 7.1 และต่ำกว่า กำหนดระดับการขัดจังหวะ
                                           //           ของช่องทางการแจ้งเตือนหรือการแจ้งเตือนเฉพาะ
                                           //           ค่าที่ถูกต้องคือ -2, -1, 0, 1, 2
    "android_delivery_priority": "normal", // ไม่บังคับ "normal" หรือ "high" เปิดใช้งานการส่งการแจ้งเตือน
                                           //           เมื่ออุปกรณ์อยู่ในโหมดประหยัดพลังงาน 
    "android_ibc": "#RRGGBB",              // ไม่บังคับ สีพื้นหลังไอคอนบน Lollipop, #RRGGBB,
                                           //           #AARRGGBB, "red", "black", "yellow", ฯลฯ
    "android_silent": 1,                   // ไม่บังคับ 0 หรือ 1 เปิดใช้งานการแจ้งเตือนแบบเงียบ
                                           //           ไม่สนใจเสียงและเนื้อหา
    
    // พารามิเตอร์ที่เกี่ยวข้องกับ Amazon
    "adm_root_params": {                   // ไม่บังคับ อ็อบเจกต์ key-value ที่กำหนดเอง
      "key": "value"
    },
    "adm_sound": "push.mp3",
    "adm_sound_off": true,                 // ไม่บังคับ เปิด/ปิดเสียงที่ตั้งค่าโดยฟิลด์ "adm_sound"
    "adm_header": {
      "en": "Header"
    },
    "adm_content": {
      "en": "content"
    },
    "adm_icon": "icon.png",
    "adm_custom_icon": "URL.png",
    "adm_banner": "URL.png",
    "adm_ttl": 3600,                       // ไม่บังคับ พารามิเตอร์ Time to live — อายุการใช้งานสูงสุดของข้อความ
                                           //           เป็นวินาที
    "adm_priority": -1,                    // ไม่บังคับ ลำดับความสำคัญของพุชในลิ้นชักพุชของ Amazon
                                           //           ค่าที่ถูกต้องคือ -2, -1, 0, 1 และ 2
    
    // พารามิเตอร์ที่เกี่ยวข้องกับ Mac OS X
    "mac_badges": 3,
    "mac_sound": "sound.caf",
    "mac_sound_off": true,
    "mac_root_params": {
      "content-available": 1
    },
    "mac_ttl": 3600,                       // ไม่บังคับ พารามิเตอร์ Time to live — อายุการใช้งานสูงสุดของข้อความเป็นวินาที
    "mac_title": {                         // ไม่บังคับ เพิ่มชื่อเรื่องสำหรับ push notification
      "en": "title"
    },
    "mac_subtitle": {                      // ไม่บังคับ เพิ่มคำบรรยายสำหรับ push notification ของ MacOS
      "en": "subtitle"
    },
    "mac_content": {                       // ไม่บังคับ เพิ่มเนื้อหาสำหรับ push notification ของ MacOS
      "en": "content"
    },
    
    // พารามิเตอร์ที่เกี่ยวข้องกับ Windows
    "wns_content": {                       // จำเป็น เนื้อหา (XML หรือ raw) ของการแจ้งเตือนที่เข้ารหัส
                                           //           ใน base64 ของ MIME ในรูปแบบของอ็อบเจกต์หรือสตริง
      "en": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9ImF2YWlsYWJsZSIvPg==",
      "de": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9Im5ld01lc3NhZ2UiLz4="
    },
    "wns_type": "Badge",                   // 'Tile' | 'Toast' | 'Badge' | 'Raw'
    "wns_tag": "myTag",                    // ไม่บังคับ ใช้ในนโยบายการแทนที่ Tile
                                           //           สตริงตัวอักษรและตัวเลขไม่เกิน 16 ตัวอักษร
    "wns_cache": 1,                        // ไม่บังคับ (1|0) แปลเป็นค่า X-WNS-Cache-Policy
    "wns_ttl": 600,                        // ไม่บังคับ เวลาหมดอายุสำหรับการแจ้งเตือนเป็นวินาที
    
    // พารามิเตอร์ที่เกี่ยวข้องกับ Safari
    "safari_title": {                      // ไม่บังคับ อ็อบเจกต์หรือสตริง ชื่อเรื่องของการแจ้งเตือน
      "en": "title"
    },
    "safari_content": {                    // ไม่บังคับ อ็อบเจกต์หรือสตริง เนื้อหาของการแจ้งเตือน
      "en": "content"
    },
    "safari_action": "Click here",         // ไม่บังคับ
    "safari_url_args": [                   // จำเป็น แต่ค่าอาจว่างเปล่า
      "firstArgument",
      "secondArgument"
    ],
    "safari_ttl": 3600,                    // ไม่บังคับ พารามิเตอร์ Time to live — สูงสุด
                                           //           อายุการใช้งานของข้อความเป็นวินาที
    
    // พารามิเตอร์ที่เกี่ยวข้องกับ Chrome
    "chrome_title": {                      // ไม่บังคับ คุณสามารถระบุส่วนหัวของข้อความในพารามิเตอร์นี้
      "en": "title"
    },
    "chrome_content": {                    // ไม่บังคับ คุณสามารถระบุเนื้อหาของข้อความในพารามิเตอร์นี้
      "en": "content"
    },
    "chrome_icon": "icon_URL",             // ไม่บังคับ URL เส้นทางเต็มไปยังไอคอนหรือเส้นทางไฟล์ทรัพยากรส่วนขยาย
    "chrome_gcm_ttl": 3600,                // ไม่บังคับ พารามิเตอร์ Time to live – อายุการใช้งานสูงสุดของข้อความเป็นวินาที
    "chrome_duration": 20,                 // ไม่บังคับ เปลี่ยนเวลาแสดงผลพุชของ chrome ตั้งค่าเป็น 0 เพื่อแสดงพุช
                                           //           จนกว่าผู้ใช้จะโต้ตอบกับมัน
    "chrome_image": "image_URL",           // ไม่บังคับ URL ไปยังรูปภาพขนาดใหญ่
    "chrome_root_params": {                // ไม่บังคับ ตั้งค่าพารามิเตอร์เฉพาะสำหรับข้อความที่ส่งไปยัง Chrome
      "key": "value"
    },
    "chrome_button_text1": "text1",        // ไม่บังคับ
    "chrome_button_url1": "button1_URL",   // ไม่บังคับ จะถูกละเว้นหากไม่ได้ตั้งค่า chrome_button_text1
    "chrome_button_text2": "text2",        // ไม่บังคับ
    "chrome_button_url2": "button2_url",   // ไม่บังคับ จะถูกละเว้นหากไม่ได้ตั้งค่า chrome_button_text2
    
    // พารามิเตอร์ที่เกี่ยวข้องกับ Firefox
    "firefox_title": {                     // ไม่บังคับ อ็อบเจกต์หรือสตริง คุณสามารถระบุส่วนหัวของข้อความได้ที่นี่
      "en": "title"
    },
    "firefox_content": {                   // ไม่บังคับ อ็อบเจกต์หรือสตริง คุณสามารถระบุเนื้อหาของข้อความได้ที่นี่
      "en": "content"
    },
    "firefox_icon": "icon_URL",            // ไม่บังคับ URL เส้นทางเต็มไปยังไอคอนหรือเส้นทาง
                                           //           ไปยังไฟล์ในทรัพยากรส่วนขยาย
    "firefox_root_params": {               // ไม่บังคับ ตั้งค่าพารามิเตอร์เฉพาะสำหรับข้อความที่ส่งไปยัง Firefox
      "key": "value"
    }
  }
}
```
</TabItem>
</Tabs>

พื้นฐานนั้นง่ายมาก – ตัวกรองทั้งหมดจะดำเนินการบน **ชุด** ของเอนทิตี

### ชุด

ชุดถูกกำหนดเป็น:

**1.** อุปกรณ์ที่สมัครรับแอปเฉพาะ (A);\
**2.** อุปกรณ์ที่ตรงกับค่าแท็กที่ระบุ (T) หรือค่าแท็กเฉพาะแอป (AT);\


### ไวยากรณ์

ลองดูตัวอย่างบางส่วนตามรายการด้านบน

#### การกำหนดเป้าหมายผู้สมัครสมาชิกแอป

ตัวกรอง "A" กำหนดชุดของอุปกรณ์ที่สมัครรับแอปเฉพาะ:

`A("XXXXX-XXXXX", ["iOS", "Android", "OsX", "Windows", "Amazon", "Safari", "Chrome", "Firefox"])`

โดยที่

* "XXXXX-XXXXX" – รหัสแอปพลิเคชัน Pushwoosh
* \["iOS", "Android", ...] – อาร์เรย์ของแพลตฟอร์มเป้าหมาย หากละเว้น ข้อความจะถูกส่งไปยังทุกแพลตฟอร์มที่มีสำหรับแอปนี้

#### การกรองตามค่าแท็ก

ตัวกรอง "T" กำหนดชุดของอุปกรณ์ที่มีค่าแท็กที่ระบุถูกกำหนดไว้

`T(\"Age\", IN, [17,20])`

กำหนดชุดของอุปกรณ์ที่มีแท็ก "age" ตั้งค่าเป็นหนึ่งในค่า: 17, 18, 19, 20

<Aside type="caution">
สำหรับ **แท็กเฉพาะแอป** จะใช้ตัวกรอง "AT" ตรวจสอบให้แน่ใจว่าได้ระบุรหัสแอปพลิเคชันที่สอดคล้องกันเป็นค่าแรกในชุด AT:

`AT(“XXXXX-XXXXX”, “TagName”, EQ, “VALUE”)`
</Aside>


### ประเภทแท็กและตัวดำเนินการ

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

แท็กอาจเป็นหนึ่งในสามประเภทที่แตกต่างกัน: **สตริง, จำนวนเต็ม, รายการ** ประเภทของแท็กจะกำหนดว่าคุณสามารถใช้ตัวดำเนินการใดสำหรับแท็กนั้นๆ

#### แท็กสตริง

**ตัวดำเนินการที่ใช้ได้:**

* **EQ** – กำหนดเป้าหมายอุปกรณ์ที่มีค่าแท็กที่ระบุ
* **IN** – กำหนดเป้าหมายอุปกรณ์ที่มีค่าแท็กใดๆ ที่ระบุ
* **NOTIN** – กำหนดเป้าหมายอุปกรณ์ที่ไม่มีค่าแท็กที่ระบุ
* **NOTEQ** – กำหนดเป้าหมายอุปกรณ์ที่มีค่าแท็กไม่เท่ากับค่าที่ระบุ
* **NOTSET** – กำหนดเป้าหมายอุปกรณ์ที่ไม่มีค่าสำหรับแท็กที่ระบุ
* **ANY** – กำหนดเป้าหมายอุปกรณ์ที่มีค่าใดๆ ที่ตั้งไว้สำหรับแท็กที่ระบุ

ตัวอย่าง:

`T (\"Age\", EQ, 30)` – กรองผู้ใช้ที่มีอายุ 30 ปี

`T (\"favorite_color\", IN, [\"red\",\"green\",\"blue\"])` – กรองผู้ใช้ที่เลือกสีแดง เขียว หรือน้ำเงินเป็นสีโปรด

`T (\"Name", NOTSET, \"\")` – กำหนดเป้าหมายอุปกรณ์ที่ไม่มีค่าสำหรับแท็ก Name

คุณสามารถใช้ค่าตัวเลขกับแท็กสตริงได้ แต่ค่าดังกล่าวจะถูกแปลงเป็นสตริง

#### แท็กจำนวนเต็ม

**ตัวดำเนินการที่ใช้ได้:**

* **GTE** – มากกว่าหรือเท่ากับค่าที่ระบุ
* **LTE**– น้อยกว่าหรือเท่ากับค่าที่ระบุ
* **EQ** – เท่ากับค่าที่ระบุ
* **BETWEEN** – ระหว่างค่าต่ำสุดและสูงสุดที่ระบุ
* **IN** – ค่าใดๆ ที่ระบุ
* **NOTIN** – ไม่มีค่าที่ระบุถูกกำหนดให้กับอุปกรณ์
* **NOTEQ** – อุปกรณ์ที่มีค่าแท็กไม่เท่ากับค่าที่ระบุ
* **NOTSET** – อุปกรณ์ที่ไม่มีค่าสำหรับแท็กที่ระบุ
* **ANY** – อุปกรณ์ที่มีค่าใดๆ ที่ตั้งไว้สำหรับแท็กที่ระบุ

ตัวอย่าง:

`T (\"Level\", EQ, 14)` – กรองผู้ใช้ที่อยู่ในระดับ 14 เท่านั้น

`T (\"Level\", BETWEEN, [1,5)` – กรองผู้ใช้ที่อยู่ในระดับ 1, 2, 3, 4 และ 5

`T (\"Level", GTE, 29)` – กำหนดเป้าหมายผู้ใช้ที่ไปถึงระดับอย่างน้อย 29 

#### แท็กรายการ

**ตัวดำเนินการที่ใช้ได้:**

* **IN** – อุปกรณ์ที่มีค่าแท็กใดๆ ที่ระบุ

ตัวอย่าง: `T("Category", IN, ["breaking_news","business","politics"])`

#### แท็กวันที่

**ตัวดำเนินการที่ใช้ได้:**

* **GTE** – มากกว่าหรือเท่ากับค่าที่ระบุ
* **LTE**– น้อยกว่าหรือเท่ากับค่าที่ระบุ
* **EQ** – เท่ากับค่าที่ระบุ
* **BETWEEN** – ระหว่างค่าต่ำสุดและสูงสุดที่ระบุ
* **NOTEQ** – อุปกรณ์ที่มีค่าแท็กไม่เท่ากับค่าที่ระบุ
* **NOTSET** – อุปกรณ์ที่ไม่มีค่าสำหรับแท็กที่ระบุ
* **ANY** – อุปกรณ์ที่มีค่าใดๆ ที่ตั้งไว้สำหรับแท็กที่ระบุ

ตัวอย่าง:

`AT("7777D-322A7","Last Application Open", BETWEEN, ["2022-02-28", "2022-03-02"])`

`AT("7777D-322A7","Last Application Open", GTE, "90 days ago")`

### การดำเนินการ

* “+” – รวมสองชุด (เท่ากับ OR)
* “\*” – ตัดกันสองชุด (เท่ากับ AND)
* “\” – ลบชุดหนึ่งออกจากอีกชุดหนึ่ง (เท่ากับ NOT)

การดำเนินการทั้งหมดเป็นแบบเชื่อมโยงซ้าย "+" และ "*" มีลำดับความสำคัญเท่ากัน "\" มีลำดับความสำคัญสูงกว่า คุณสามารถใช้วงเล็บเพื่อกำหนดลำดับความสำคัญของการคำนวณได้

โปรดทราบว่าการดำเนินการ "\" ไม่มีคุณสมบัติสลับที่ `A("12345-12345") \ A("67890-67890")` ไม่เหมือนกับ `A("67890-67890") \ A("12345-12345")`


<Aside type="note">
คุณไม่สามารถใช้พารามิเตอร์ที่เกี่ยวข้องกับการกำหนดเป้าหมายต่อไปนี้ในคำขอ /createTargetedMessage ได้:

* "application"
* "platforms"
* "devices"
* "filter"
* "conditions"

พารามิเตอร์อื่นๆ ทั้งหมดที่ระบุไว้ใน [`/createMessage`](#createmessage) ได้รับการสนับสนุน
</Aside>

<Aside type="caution" title="สำคัญ">
มีปัญหาที่ทราบเกี่ยวกับเมธอด `/createTargetedMessage`: หากคุณไม่ได้ระบุแอปพลิเคชันใดๆ ในส่วน "devices_filter" Pushwoosh จะไม่แสดงแอปพลิเคชันใดๆ ในรายละเอียดพุช
</Aside>

## getPushHistory <Badge text="เลิกใช้แล้ว" variant="caution" size="small" />

<Aside type="note">
ใช้ [**/messages:list**](/th/developer/api-reference/statistics-api/message-statistics-api/#messageslist) เพื่อดึงประวัติข้อความและข้อมูลที่ละเอียดมากขึ้นแทน
</Aside>

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

รับประวัติข้อความพร้อมรายละเอียดพุช

#### เนื้อหาของคำขอ

| ชื่อ                                   | ประเภท    | คำอธิบาย                                                                                                          |
| -------------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------- |
| auth* | string  | [โทเค็นการเข้าถึง API](/th/developer/api-reference/api-identifiers/#api-access-token) จาก Pushwoosh Control Panel                                                                       |
| limitMessages                          | integer | จำกัดจำนวนข้อความในการตอบกลับ ค่าที่เป็นไปได้ตั้งแต่ 10 ถึง 1000                                        |
| source                                 | string  | แหล่งที่มาของประวัติพุช อาจเป็น null หรือ: "CP", "API", "GeoZone", "RSS", "AutoPush", "A/B Test"       |
| searchBy                               | string  | ค่าที่เป็นไปได้ที่จะค้นหาโดย อาจเป็น null หรือ: "notificationID", "notificationCode", "applicationCode", "campaignCode" |
| value                                  | string  | ค่าค้นหาที่ตั้งค่าตามฟิลด์ "searchBy"                                                                  |
| lastNotificationID                     | string  | ใช้สำหรับการแบ่งหน้า messageId สุดท้ายจากการเรียก /getPushHistory ก่อนหน้า ดูรายละเอียดด้านล่าง                       |

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": {
    "rows": [{
      "id": 10191611434,
      "code": "8071-07AD1171-77238AD1",
      "createDate": "2020-09-14 12:26:21",
      "sendDate": "2020-09-14 12:26:21",
      "content": {
        "en": "Hello!"
      },
      "url": null,
      "ios_title": null,
      "ios_subtitle": null,
      "ios_root_params": null,
      "android_header": null,
      "android_root_params": null,
      "conditions": null,
      "conditions_operator": "AND",
      "filter_code": "E3A64-A5F3C",
      "filter_conditions": "#In-app Purchase(≠0)",
      "filter_name": "Purchased something",
      "geozone": null,
      "campaignId": "",
      "campaignName": "",
      "subscription_segments": null,
      "open": {
        "C90C0-0E786": {
          "IOS": 0
        }
      },
      "sent": {
        "C90C0-0E786": {
          "IOS": 1
        }
      },
      "ctr": {
        "C90C0-0E786": 0
      }
    }, {
      "id": 10191609202,
      "code": "41CA-83F8E0D7-7A63822B",
      "createDate": "2020-09-14 12:25:55",
      "sendDate": "2020-09-14 12:25:55",
      "content": {
        "en": "Hi!"
      },
      "url": null,
      "ios_title": null,
      "ios_subtitle": null,
      "ios_root_params": null,
      "android_header": null,
      "android_root_params": null,
      "conditions": null,
      "conditions_operator": "AND",
      "filter_code": null,
      "filter_conditions": null,
      "filter_name": null,
      "geozone": null,
      "campaignId": "",
      "campaignName": "",
      "subscription_segments": {
        "2D732-BB981": "News"
      },
      "open": {
        "C90C0-0E786": {
          "CHROME": 0,
          "IOS": 0
        }
      },
      "sent": {
        "C90C0-0E786": {
          "CHROME": 1,
          "IOS": 2
        }
      },
      "ctr": {
        "C90C0-0E786": 0
      }
    }]
  }
}
```
</TabItem>
</Tabs>



```json title="ตัวอย่าง"
{
  "request":{
    "auth": "yxoPUlwqm…………pIyEX4H",  // จำเป็น โทเค็นการเข้าถึง API จาก Pushwoosh Control Panel
    "source": null,                  // ไม่บังคับ ค่าที่เป็นไปได้คือ null, "CP", "API", "GeoZone",
                                     //           "RSS", "AutoPush", "A/B Test"
    "searchBy": "applicationCode",   // ไม่บังคับ ค่าที่เป็นไปได้คือ "", "notificationID",
                                     //           "notificationCode", "applicationCode", "campaignCode"
    "value": "C8717-703F2",          // ไม่บังคับ ค่าค้นหาที่ตั้งค่าตามฟิลด์ "searchBy"
    "lastNotificationID": 0,         // ไม่บังคับ ใช้สำหรับการแบ่งหน้า messageId สุดท้ายจาก
                                     //           การเรียก /getPushHistory ก่อนหน้า ดูรายละเอียดด้านล่าง
    "limitMessages": 1000            // ไม่บังคับ ค่าที่เป็นไปได้ตั้งแต่ 10 ถึง 1000
  }
}
```

เมธอดนี้จะส่งคืนข้อความ 1000 ข้อความจากบัญชีที่จัดเรียงตาม Id ข้อความ หากต้องการรับหน้าที่สอง ให้ระบุ Id ข้อความสุดท้ายของการตอบกลับก่อนหน้าในพารามิเตอร์ **lastNotificationId**

### ประเภทข้อมูลการตอบกลับ

```
id -- int | 0 
code -- string
createDate -- string  (date: %Y-%m-%d %H:%M:%S)
sendDate -- string  (date: %Y-%m-%d %H:%M:%S)
content -- array ( dict {lang: value} | list [])
title -- array ( dict {lang: value} | list [])
subtitle -- array ( dict {lang: value} | list [])
url -- string
ios_title -- string | array ( dict {lang: value} ) | null
ios_subtitle -- string | array ( dict {lang: value} ) | null
ios_root_params -- dict (JSON) | null
android_header -- string | array ( dict {lang: value} ) | null
android_root_params -- dict (JSON) | null
conditions -- list (JSON) | null
conditions_operator -- string | null
filter_code -- string | null
filter_name -- string | null
filter_conditions -- string | null
geozone -- string | null
campaignId -- string | ""
campaignName -- string | ""
subscription_segments (obsolete) -- list (JSON) | null
data -- dict (JSON) | null
open -- dict [dict [string: int]]  | ""   Example: 'open': {'AAAAA-BBBBB': {'IOS': 1, 'ANDROID': 1}}
sent -- dict [dict [string: int]]  | ""   Example: 'sent': {'AAAAA-BBBBB': {'IOS': 10, 'ANDROID': 10}}
ctr -- dict [string: int] | ""  Example: {'AAAAA-BBBBB': 1}
errors -- dict [string: int] | ""  Example: {'ANDROID': 1, 'IOS': 1}
```



## cancelMessage

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

ลบข้อความที่ตั้งเวลาไว้

#### เนื้อหาของคำขอ

| ชื่อ                                      | ประเภท   | คำอธิบาย                                           |
| ----------------------------------------- | ------ | ----------------------------------------------------- |
| auth*    | string | [โทเค็นการเข้าถึง API](/th/developer/api-reference/api-identifiers/#api-access-token) จาก Pushwoosh Control Panel        |
| message* | string | [รหัสข้อความ](/th/developer/api-reference/api-identifiers/#message-code) ที่ได้รับในการตอบกลับ `/createMessage` |

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

<Aside type="note">
เมธอดนี้อนุญาตให้ใช้กับข้อความที่อยู่ในสถานะรอดำเนินการ รอ หรือกำลังประมวลผลเท่านั้น
</Aside>

```json title="ตัวอย่าง"
{
  "request":{
    "auth": "yxoPUlwqm…………pIyEX4H",  // จำเป็น โทเค็นการเข้าถึง API จาก Pushwoosh Control Panel
    "message": "xxxx-xxxxxxx-xxxxxx" // จำเป็น รหัสข้อความที่ได้รับในการตอบกลับ /createMessage
  }
}
```

**รหัสสถานะ:**

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