# মেসেজ এপিআই

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

<Aside type="caution" title="/createMessage এবং /createTargetedMessage অবচিত (deprecated) করা হয়েছে">
নতুন ইন্টিগ্রেশনের জন্য ইউনিফাইড [**মেসেজিং এপিআই v2**](/bn/developer/api-reference/messaging-api-v2/) ব্যবহার করা উচিত — একটি এন্ডপয়েন্ট পুরো `/create*Message` পরিবারকে প্রতিস্থাপন করে। ফিল্ড-বাই-ফিল্ড ম্যাপিংয়ের জন্য [মাইগ্রেশন গাইড](/bn/developer/api-reference/messaging-api-v2/migration-from-v1/) দেখুন।

নিচের লিগ্যাসি পদ্ধতিগুলো সম্পূর্ণ কার্যকর থাকবে। `/deleteMessage`, `/cancelMessage`, এবং `/getMessageDetails` অবচিত করা হয়নি — v1- বা v2-তৈরি করা মেসেজের বিরুদ্ধে এগুলো যথারীতি ব্যবহার করুন।
</Aside>

<Aside type="note">
শুরু করার জন্য, অনুগ্রহ করে [/createMessage অনুরোধের প্যারামিটারগুলির](/bn/developer/api-reference/messages-api/api-prerequisites) বর্ণনা দেখুন।
</Aside>

## createMessage <Badge text="Deprecated" variant="caution" size="small" />

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

একটি নতুন পুশ নোটিফিকেশন তৈরি করে।

#### অনুরোধের বডি (Request Body)

| নাম                                            | টাইপ   | বর্ণনা                                                                |
| ----------------------------------------------- | ------ | -------------------------------------------------------------------------- |
| auth*          | string | Pushwoosh কন্ট্রোল প্যানেল থেকে [API অ্যাক্সেস টোকেন](/bn/developer/api-reference/api-identifiers/#api-access-token)।                             |
| application*   | string | [Pushwoosh অ্যাপ্লিকেশন কোড](/bn/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 গাইড](/bn/developer/guides/personalization/liquid-templates/) দেখুন।
</Aside>

### অনুরোধের উদাহরণ

```json title="Example"
{
  "request": {
    "application": "XXXXX-XXXXX",       // আবশ্যক। Pushwoosh অ্যাপ্লিকেশন কোড।
    "auth": "yxoPUlwqm…………pIyEX4H",     // আবশ্যক। Pushwoosh কন্ট্রোল প্যানেল থেকে API অ্যাক্সেস টোকেন।
    "notifications": [{
      "send_date": "now",               // ঐচ্ছিক। YYYY-MM-DD HH:mm অথবা 'now'
      "content": {                      // ঐচ্ছিক। অবজেক্ট অথবা স্ট্রিং।
        "en": "English",                //           Windows-এর জন্য এর পরিবর্তে "wns_content" ব্যবহার করুন।
        "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": {                      // ঐচ্ছিক। জিওজোনে পাঠান
        "lat": 22.22,
        "lng": 33.33,
        "range": 110
      },
      "rich_media": "XXXXX-XXXXX",      // ঐচ্ছিক। Pushwoosh কন্ট্রোল প্যানেলের রিচ মিডিয়া এডিটর পেজের URL বার থেকে রিচ মিডিয়া কোড কপি করুন।
      "link": "https://google.com",     // ঐচ্ছিক। ডীপলিংকের জন্য "minimize_link": 0 যোগ করুন
      "minimize_link": 0,               // ঐচ্ছিক। 0 — ছোট করবেন না, 2 — bitly। ডিফল্ট = 2।
                                        //           দয়া করে মনে রাখবেন যে শর্টনারগুলির কলের সংখ্যার উপর সীমাবদ্ধতা রয়েছে।
      "data": {                         // ঐচ্ছিক। JSON স্ট্রিং বা JSON অবজেক্ট, পেলোডে "u" প্যারামিটার হিসাবে পাস করা হবে (JSON স্ট্রিং-এ রূপান্তরিত)।
        "key": "value"                  
      },
      "transactionId": "unique UUID",   // ঐচ্ছিক। নেটওয়ার্ক সমস্যার ক্ষেত্রে ডুপ্লিকেট হওয়া রোধ করতে অনন্য মেসেজ শনাক্তকারী। Pushwoosh-এর দিকে ৫ মিনিটের জন্য সংরক্ষণ করা হয়। 
      "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",          // ঐচ্ছিক। আপনার কন্ট্রোল প্যানেল থেকে পুশ প্রিসেট কোড।
                                        //           অনুরোধে নির্দিষ্ট প্যারামিটার পাঠানো হলে,
                                        //           তারা প্রিসেটের প্যারামিটারগুলিকে ওভাররাইড করে।
      "send_rate": 100,                 // ঐচ্ছিক। থ্রটলিং। বৈধ মানগুলি 100 থেকে 1000 পুশ/সেকেন্ড পর্যন্ত।
      "send_rate_avoid": true,          // ঐচ্ছিক। যদি true সেট করা হয়, থ্রটলিং সীমা এই নির্দিষ্ট পুশ নোটিফিকেশনে প্রয়োগ করা হবে না।
      // টেমপ্লেটিং সম্পর্কিত, আরও জানতে অনুগ্রহ করে টেমপ্লেট ইঞ্জিন গাইড দেখুন
      "template_bindings": {            // ঐচ্ছিক।
        "TemplatePlaceholder": "Value"
      },
      "dynamic_content_placeholders": { // ঐচ্ছিক। ডিভাইস ট্যাগের পরিবর্তে ডাইনামিক কন্টেন্টের জন্য প্লেসহোল্ডার।
        "firstname": "John",
        "lastname": "Doe"
      },
      "message_type": "marketing",       // ঐচ্ছিক। "marketing" বা "transactional"।
                                         // যদি বাদ দেওয়া হয়, PW_ControlGroup: true সহ ব্যবহারকারীরা মেসেজটি পাবেন না।

      // ফ্রিকোয়েন্সি ক্যাপিং প্যারামিটার। নিশ্চিত করুন যে কন্ট্রোল প্যানেলে গ্লোবাল ফ্রিকোয়েন্সি ক্যাপিং কনফিগার করা আছে।
      // ফ্রিকোয়েন্সি ক্যাপিং লেনদেনমূলক মেসেজের ক্ষেত্রে প্রযোজ্য নয়।
      // অন্য সব ক্ষেত্রে, "message_type" বাদ দেওয়া সহ, ফ্রিকোয়েন্সি ক্যাপিং প্রযোজ্য।
      "capping_days": 30,               // ঐচ্ছিক। ফ্রিকোয়েন্সি ক্যাপিংয়ের জন্য দিনের পরিমাণ (সর্বোচ্চ ৩০ দিন)
      "capping_count": 10,              // ঐচ্ছিক। একটি নির্দিষ্ট অ্যাপ থেকে একটি নির্দিষ্ট ডিভাইসে 'capping_days' সময়ের মধ্যে পাঠানো যেতে পারে এমন সর্বোচ্চ পুশের সংখ্যা। যদি তৈরি করা মেসেজটি একটি ডিভাইসের জন্য 'capping_count' সীমা অতিক্রম করে, তবে এটি সেই ডিভাইসে পাঠানো হবে না।
      "capping_exclude": true,          // ঐচ্ছিক। যদি true সেট করা হয়, এই পুশ নোটিফিকেশনটি ভবিষ্যতের পুশের জন্য ক্যাপিংয়ের দিকে গণনা করা হবে না।
      "capping_avoid": true,            // ঐচ্ছিক। যদি true সেট করা হয়, ক্যাপিং এই নির্দিষ্ট পুশ নোটিফিকেশনে প্রয়োগ করা হবে না।
        
      // API এর মাধ্যমে ইনবক্সে মেসেজ সংরক্ষণ করতে, "inbox_date" বা "inbox_image" ব্যবহার করুন।
      // এই প্যারামিটারগুলির মধ্যে অন্তত একটি ব্যবহার করা হলে মেসেজটি সংরক্ষিত হয়।
      "inbox_date": "2017-02-02",       // ঐচ্ছিক। ইনবক্স থেকে একটি মেসেজ কখন সরানো হবে তা উল্লেখ করুন।
                                        //           নির্দিষ্ট তারিখের 00:00:01 UTC-তে মেসেজটি ইনবক্স থেকে সরানো হবে, তাই আগের তারিখটি ব্যবহারকারীর ইনবক্সে মেসেজটি দেখার শেষ দিন।
                                        //           যদি উল্লেখ না করা হয়, ডিফল্ট অপসারণের তারিখ পাঠানোর তারিখের পরের দিন।
      "inbox_image": "Inbox image URL", // ঐচ্ছিক। মেসেজের পাশে দেখানো হবে এমন ছবি। 
	  "inbox_days": 5,                  // ঐচ্ছিক। ইনবক্স থেকে একটি মেসেজ কখন সরানো হবে তা উল্লেখ করুন (ইনবক্স মেসেজের জীবনকাল দিনে)। 
                                        //           "inbox_date" প্যারামিটারের পরিবর্তে ব্যবহার করা যেতে পারে।
                                        //           সর্বোচ্চ ৩০ দিন পর্যন্ত।
      
      "devices": [                      // ঐচ্ছিক। টার্গেটেড পুশ পাঠানোর জন্য টোকেন বা hwid উল্লেখ করুন 
          "hwid_XXXX"                   //           নোটিফিকেশন। একটি অ্যারেতে ১০০০০ এর বেশি টোকেন/hwid নয়।
      ],                                //           যদি সেট করা হয়, মেসেজটি শুধুমাত্র তালিকার ডিভাইসগুলিতে পাঠানো হবে। ডিভাইস তালিকার জন্য অ্যাপ্লিকেশন গ্রুপ অনুমোদিত নয়। iOS পুশ টোকেন শুধুমাত্র ছোট হাতের হতে পারে।
      "to": [                           // ঐচ্ছিক। ইমেল, এসএমএস এবং অনুরূপ চ্যানেলগুলির জন্য। প্রাপকদের তালিকা
          "email_1", "email_2"          //           (যেমন ইমেল ঠিকানা, ফোন নম্বর)। সর্বোচ্চ ১০০০ আইটেম।
      ],                                //           পুশের জন্য, এর পরিবর্তে "devices" ব্যবহার করুন।
      // ব্যবহারকারী-কেন্দ্রিক পুশ নোটিফিকেশন
      "users": [                        // ঐচ্ছিক। যদি সেট করা হয়, মেসেজটি শুধুমাত্র নির্দিষ্ট ব্যবহারকারী আইডিগুলিতে সরবরাহ করা হবে (/registerUser কলের মাধ্যমে সেট করা)। 
          "user_XXXX"                   
      ],                                //           যদি ডিভাইস বা to এর সাথে একসাথে উল্লেখ করা হয়,
                                        //           পরেরটি উপেক্ষা করা হবে। একটি অ্যারেতে ১০০০ এর বেশি ব্যবহারকারী আইডি নয়। ব্যবহারকারী তালিকার জন্য অ্যাপ্লিকেশন গ্রুপ অনুমোদিত নয়।

      // ফিল্টার এবং শর্তাবলী
      "filter": "FILTER_NAME",          // ঐচ্ছিক।
      "conditions": [                   // ঐচ্ছিক। নিচের মন্তব্য দেখুন।
        ["Country", "EQ", "fr"],
        ["Language", "EQ", "en"]
      ],    
      "conditions_operator": "AND"      // ঐচ্ছিক। শর্তাবলী অ্যারের জন্য লজিক্যাল অপারেটর।
                                        //           সম্ভাব্য মান: AND | OR। AND ডিফল্ট।
    }]
  }
}
```

### VoIP নোটিফিকেশন অনুরোধের উদাহরণ

Pushwoosh iOS এবং Android এর জন্য VoIP-স্টাইল কল নোটিফিকেশন সমর্থন করে। \
নিচে আপনি প্রতিটি প্ল্যাটফর্মের জন্য API `createMessage` অনুরোধের উদাহরণ খুঁজে পেতে পারেন।

#### iOS

```json title="Example"
{
  "request": {
    "application": "XXXXX-XXXXX",     // আবশ্যক। Pushwoosh অ্যাপ্লিকেশন কোড।
    "auth": "yxoPUlwqm…………pIyEX4H",   // আবশ্যক। Pushwoosh কন্ট্রোল প্যানেল থেকে API অ্যাক্সেস টোকেন।
    "notifications": [
      {
        "voip_push": true,            // আবশ্যক। একটি VoIP পুশ নোটিফিকেশন পাঠানোর জন্য প্যারামিটারটি আবশ্যক।
        "ios_root_params": {
          "aps": {
            "mutable-content": 1      // iOS10+ মিডিয়া অ্যাটাচমেন্টের জন্য আবশ্যক।
          },
          "callerName": "CallerName", // ঐচ্ছিক। কলারের নাম। যদি উল্লেখ না করা হয়, "unknown caller" দেখানো হয়।
          "video": true,              // ঐচ্ছিক। ভিডিও কল সমর্থিত কিনা তা নির্দেশ করে।
          "supportsHolding": true,    // ঐচ্ছিক। কল হোল্ডিং কার্যকারিতা সমর্থিত কিনা তা নির্দেশ করে।
          "supportsDTMF": false,      // ঐচ্ছিক। ডুয়াল-টোন মাল্টি-ফ্রিকোয়েন্সি সিগন্যাল সমর্থন নিয়ন্ত্রণ করে।
          "callId": "42",             // ঐচ্ছিক। বাতিল করার জন্য কলের অনন্য শনাক্তকারী।
          "cancelCall": true          // ঐচ্ছিক। নির্দিষ্ট "callId" সহ কলটি বাতিল করতে "true" সেট করুন।
        }
      }
    ]
  }
}
```

#### Android

```json title="Example"
{
  "request": {
    "application": "XXXXX-XXXXX",   // আবশ্যক। Pushwoosh অ্যাপ্লিকেশন কোড।
    "auth": "yxoPUlwqm…………pIyEX4H", // আবশ্যক। Pushwoosh কন্ট্রোল প্যানেল থেকে API অ্যাক্সেস টোকেন।
    "notifications": [
      {
      "voip_push": true,            // আবশ্যক। একটি VoIP পুশ নোটিফিকেশন পাঠানোর জন্য প্যারামিটারটি আবশ্যক।
      "android_root_params": {
        "callerName": "callerName", // ঐচ্ছিক। কলারের নাম। যদি উল্লেখ না করা হয়, "unknown caller" দেখানো হয়।
        "video": true,              // ঐচ্ছিক। ভিডিও কল সমর্থিত কিনা তা নির্দেশ করে।
        "callId": 42,               // ঐচ্ছিক। বাতিল করার জন্য কলের অনন্য শনাক্তকারী।
        "cancelCall": true          // ঐচ্ছিক। নির্দিষ্ট "callId" সহ কলটি বাতিল করতে "true" সেট করুন।
        }
      }
    ]
  }
}

```


### প্ল্যাটফর্ম-নির্দিষ্ট প্যারামিটার

#### iOS প্যারামিটার

```json title="Example"
{
  "request": {
    "application": "12345-67891",         // আবশ্যক। Pushwoosh অ্যাপ্লিকেশন কোড
    "auth": "yxoPUlwqm…………pIyEX4H",       // আবশ্যক। Pushwoosh কন্ট্রোল প্যানেল থেকে API অ্যাক্সেস টোকেন
    "notifications": [{
      "ios_title": {                      // ঐচ্ছিক। অবজেক্ট অথবা স্ট্রিং। পুশ নোটিফিকেশনের জন্য iOS নির্দিষ্ট শিরোনাম যোগ করে।
        "en": "title"
      },
      "ios_subtitle": {                   // ঐচ্ছিক। অবজেক্ট অথবা স্ট্রিং। পুশ নোটিফিকেশনের জন্য iOS নির্দিষ্ট সাবটাইটেল যোগ করে।
        "en": "subtitle"
      },
      "ios_content": {                    // ঐচ্ছিক। অবজেক্ট অথবা স্ট্রিং। পুশ নোটিফিকেশনের জন্য iOS নির্দিষ্ট কন্টেন্ট যোগ করে।
        "en": "content"
      },
      "ios_badges": 5,                    // ঐচ্ছিক। iOS অ্যাপ্লিকেশন ব্যাজ নম্বর।
                                          //           ব্যাজ মান n দ্বারা বৃদ্ধি/হ্রাস করতে "+n" বা "-n" ব্যবহার করুন।
      "ios_sound": "sound file.wav",      // ঐচ্ছিক। অ্যাপ্লিকেশনের প্রধান বান্ডেলে সাউন্ড ফাইলের নাম।
                                          //           খালি রাখলে, ডিভাইস একটি ডিফল্ট সিস্টেম সাউন্ড তৈরি করবে।
      "ios_sound_off": true,              // ঐচ্ছিক। "ios_sound" ফিল্ড দ্বারা সেট করা সাউন্ড সক্রিয়/নিষ্ক্রিয় করুন।
      "ios_ttl": 3600,                    // ঐচ্ছিক। টাইম টু লিভ প্যারামিটার - সেকেন্ডে সর্বোচ্চ মেসেজ জীবনকাল।
      "ios_silent": 1,                    // ঐচ্ছিক। সাইলেন্ট নোটিফিকেশন সক্রিয় করে ("sound" এবং "content" উপেক্ষা করে)।
      "ios_category_id": "1",             // ঐচ্ছিক। Pushwoosh থেকে iOS8 ক্যাটাগরি আইডি।
      "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 প্যারামিটার। ডুয়াল-টোন মাল্টি-ফ্রিকোয়েন্সি সিগন্যাল সমর্থন নিয়ন্ত্রণ করে।
        "data": {}                        // ঐচ্ছিক ব্যবহারকারী সরবরাহকৃত ডেটা, সর্বোচ্চ 4KB
      },
      "ios_attachment": "URL",            // ঐচ্ছিক। নোটিফিকেশনে মিডিয়া কন্টেন্ট প্রবেশ করান।
      "ios_thread_id": "some 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="Example"
{
  "request": {
    "application": "12345-67891",            // আবশ্যক। Pushwoosh অ্যাপ্লিকেশন কোড
    "auth": "yxoPUlwqm…………pIyEX4H",          // আবশ্যক। Pushwoosh কন্ট্রোল প্যানেল থেকে API অ্যাক্সেস টোকেন
    "notifications": [{
      "android_header": {                    // ঐচ্ছিক। Android নোটিফিকেশন হেডার।
        "en": "header"
      },
      "android_content": {                   // ঐচ্ছিক। Android নোটিফিকেশন কন্টেন্ট।
        "en": "content"
      },
      "android_root_params": {               // ঐচ্ছিক। কাস্টম কী-ভ্যালু অবজেক্ট।
        "key": "value",                      //           অ্যান্ড্রয়েড পেলোড প্রাপকদের জন্য রুট লেভেল প্যারামিটার।
        "CancelID": 12345678,                // ঐচ্ছিক। নির্দিষ্ট মেসেজ আইডি সহ পুশ নোটিফিকেশন বাতিল করে (মেসেজ হিস্ট্রি থেকে আইডি পান)
        "voip": true,                        // আবশ্যক VoIP প্যারামিটার। VoIP পুশ নোটিফিকেশন পাঠানোর জন্য প্যারামিটারটি আবশ্যক।
        "callerName": "callerName",          // ঐচ্ছিক VoIP প্যারামিটার। কলারের নাম। যদি উল্লেখ না করা হয়, "unknown caller" দেখানো হয়।
        "video": true,                       // ঐচ্ছিক VoIP প্যারামিটার। ভিডিও কল সমর্থিত কিনা তা নির্দেশ করে।
      },                                     
      "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,               // ঐচ্ছিক। টাইম টু লিভ প্যারামিটার — সেকেন্ডে সর্বোচ্চ মেসেজ জীবনকাল।
      "android_vibration": 0,                // ঐচ্ছিক। উচ্চ-অগ্রাধিকার পুশের জন্য Android ফোর্স-ভাইব্রেশন।
      "android_led": "#rrggbb",              // ঐচ্ছিক। LED হেক্স রঙ, ডিভাইস তার সেরা অনুমান করবে।
      "android_priority": -1,                // ঐচ্ছিক। Android 8.0 এবং উচ্চতর ডিভাইসগুলির জন্য "importance" প্যারামিটার এবং Android 7.1 এবং নিম্নতর ডিভাইসগুলির জন্য "priority" প্যারামিটার সেট করে। একটি নোটিফিকেশন চ্যানেল বা একটি নির্দিষ্ট নোটিফিকেশনের ইন্টারাপশন লেভেল স্থাপন করে। বৈধ মানগুলি হল -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",             // ঐচ্ছিক। সম্পর্কিত নোটিফিকেশন গ্রুপ করার জন্য শনাক্তকারী। একই থ্রেড আইডি সহ মেসেজগুলি নোটিফিকেশন সেন্টারে গ্রুপ করা হবে।
      "android_collapse_key": "promo"        // ঐচ্ছিক। FCM কলাপ্স কী। ডিভাইস অফলাইন থাকাকালীন একই কলাপ্স কী সহ নোটিফিকেশনগুলি একে অপরকে প্রতিস্থাপন করে।
    }]
  }
}
```

**Huawei প্যারামিটার**

```json title="Huawei"
{
  "request": {
    "application": "12345-67891",                   // আবশ্যক। Pushwoosh অ্যাপ্লিকেশন কোড
    "auth": "yxoPUlwqm…………pIyEX4H",                 // আবশ্যক। Pushwoosh কন্ট্রোল প্যানেল থেকে API অ্যাক্সেস টোকেন
    "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 হেক্স রঙ, ডিভাইস তার সেরা অনুমান করবে
      "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,               // ঐচ্ছিক। টাইম টু লিভ প্যারামিটার - সেকেন্ডে সর্বোচ্চ মেসেজ জীবনকাল
      "huawei_android_banner": "URL.png",           // ঐচ্ছিক। ইমেজ ফাইলের সম্পূর্ণ পাথ URL
      "huawei_android_root_params": {               // ঐচ্ছিক। কাস্টম কী-ভ্যালু অবজেক্ট।
        "key": "value"                              //           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",  // আবশ্যক। Pushwoosh কন্ট্রোল প্যানেল থেকে API অ্যাক্সেস টোকেন
    "notifications": [{
      "safari_url_args": [           // আবশ্যক, কিন্তু মান খালি হতে পারে
        "firstArgument",
        "secondArgument"
      ],
      "safari_title": {              // ঐচ্ছিক। অবজেক্ট অথবা স্ট্রিং। নোটিফিকেশনের শিরোনাম।
        "en": "content"
      },
      "safari_content": {            // ঐচ্ছিক। অবজেক্ট অথবা স্ট্রিং। নোটিফিকেশনের কন্টেন্ট।
        "en": "content"
      },
      "safari_action": "Click here", // ঐচ্ছিক।
      "safari_ttl": 3600             // ঐচ্ছিক। টাইম টু লিভ প্যারামিটার — সেকেন্ডে একটি মেসেজের সর্বোচ্চ জীবনকাল।
    }]
  }
}


```

#### Chrome প্যারামিটার

```json title="Chrome"
{
  "request": {
    "application": "12345-67891",          // আবশ্যক। Pushwoosh অ্যাপ্লিকেশন কোড
    "auth": "yxoPUlwqm…………pIyEX4H",        // আবশ্যক। Pushwoosh কন্ট্রোল প্যানেল থেকে API অ্যাক্সেস টোকেন
    "notifications": [{
      "chrome_title": {                    // ঐচ্ছিক। অবজেক্ট অথবা স্ট্রিং। আপনি এই প্যারামিটারে মেসেজের হেডার উল্লেখ করতে পারেন। 
        "en": "title"                      
      },
      "chrome_content": {                  // ঐচ্ছিক। অবজেক্ট অথবা স্ট্রিং। আপনি এই প্যারামিটারে মেসেজের কন্টেন্ট উল্লেখ করতে পারেন। 
        "en": "content"                    
      },
      "chrome_icon": "URL.png",            // ঐচ্ছিক। আইকনের সম্পূর্ণ URL বা এক্সটেনশন রিসোর্স ফাইল পাথ
      "chrome_gcm_ttl": 3600,              // ঐচ্ছিক। টাইম টু লিভ প্যারামিটার – সেকেন্ডে সর্বোচ্চ মেসেজ জীবনকাল।
      "chrome_duration": 20,               // ঐচ্ছিক। সর্বোচ্চ ৫০ সেকেন্ড। ক্রোম পুশ প্রদর্শনের সময় পরিবর্তন করে।
                                           //           ব্যবহারকারী ইন্টারঅ্যাক্ট না করা পর্যন্ত পুশ প্রদর্শন করতে 0 সেট করুন।
      "chrome_image": "image_URL",         // ঐচ্ছিক। বড় ইমেজের URL। 
      "chrome_root_params": {              // ঐচ্ছিক। ক্রোমে পাঠানো মেসেজের জন্য নির্দিষ্ট প্যারামিটার সেট করুন।
        "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", // আবশ্যক। Pushwoosh কন্ট্রোল প্যানেল থেকে API অ্যাক্সেস টোকেন
    "notifications": [{
      "firefox_title": {            // ঐচ্ছিক। অবজেক্ট অথবা স্ট্রিং। আপনি এখানে মেসেজ হেডার উল্লেখ করতে পারেন।
        "en": "title"
      },
      "firefox_content": {          // ঐচ্ছিক। অবজেক্ট অথবা স্ট্রিং। আপনি এখানে মেসেজ কন্টেন্ট উল্লেখ করতে পারেন।
        "en": "content"
      },
      "firefox_icon": "URL.png",    // ঐচ্ছিক। আইকনের সম্পূর্ণ পাথ URL বা এক্সটেনশন রিসোর্সে ফাইলের পাথ।
      "firefox_root_params": {      // ঐচ্ছিক। ফায়ারফক্সে পাঠানো মেসেজের জন্য নির্দিষ্ট প্যারামিটার সেট করুন।
        "key": "value"
      } 
    }]
  }
}
```

#### Amazon প্যারামিটার

```json title="Amazon"
{
  "request": {
    "application": "12345-67891",   // আবশ্যক। Pushwoosh অ্যাপ্লিকেশন কোড
    "auth": "yxoPUlwqm…………pIyEX4H", // আবশ্যক। Pushwoosh কন্ট্রোল প্যানেল থেকে API অ্যাক্সেস টোকেন
    "notifications": [{
      "adm_header": {               // ঐচ্ছিক। অবজেক্ট অথবা স্ট্রিং। আপনি এখানে মেসেজ হেডার উল্লেখ করতে পারেন।
        "en": "header"
      },
      "adm_content": {              // ঐচ্ছিক। অবজেক্ট অথবা স্ট্রিং। আপনি এখানে মেসেজ কন্টেন্ট উল্লেখ করতে পারেন।
        "en": "content"
      },
      "adm_root_params": {          // ঐচ্ছিক। কাস্টম কী-ভ্যালু অবজেক্ট
        "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,              // ঐচ্ছিক। টাইম টু লিভ প্যারামিটার — সেকেন্ডে সর্বোচ্চ মেসেজ জীবনকাল।
      "adm_priority": -1            // ঐচ্ছিক। অ্যামাজন পুশ ড্রয়ারে পুশের অগ্রাধিকার,
                                    //           বৈধ মানগুলি হল -2, -1, 0, 1 এবং 2।
    }]
  }
}
```

#### Mac OS X প্যারামিটার

```json title="Mac OS X"
{
  "request": {
    "application": "12345-67891",   // আবশ্যক। Pushwoosh অ্যাপ্লিকেশন কোড
    "auth": "yxoPUlwqm…………pIyEX4H", // আবশ্যক। Pushwoosh কন্ট্রোল প্যানেল থেকে API অ্যাক্সেস টোকেন
    "notifications": [{
      "mac_title": {                // ঐচ্ছিক। অবজেক্ট অথবা স্ট্রিং। পুশ নোটিফিকেশনের জন্য শিরোনাম যোগ করে।
        "en": "title"
      },
      "mac_subtitle": {             // ঐচ্ছিক। পুশ নোটিফিকেশনের জন্য সাবটাইটেল যোগ করে।
        "en": "subtitle"
      },
      "mac_content": {              // ঐচ্ছিক। পুশ নোটিফিকেশনের জন্য কন্টেন্ট যোগ করে।
        "en": "content"
      },
      "mac_badges": 3,              // ঐচ্ছিক।
      "mac_sound": "sound.caf",     // ঐচ্ছিক।
      "mac_sound_off": true,        // ঐচ্ছিক। "mac_sound" ফিল্ড দ্বারা সেট করা সাউন্ড সক্রিয়/নিষ্ক্রিয় করুন
      "mac_root_params": {          // ঐচ্ছিক।
        "content-available": 1
      },
      "mac_ttl": 3600               // ঐচ্ছিক। টাইম টু লিভ প্যারামিটার — সেকেন্ডে সর্বোচ্চ মেসেজ জীবনকাল।
    }]
  }
}
```

#### Windows প্যারামিটার

```json title="Windows"
{
  "request": {
    "application": "12345-67891",   // আবশ্যক। Pushwoosh অ্যাপ্লিকেশন কোড
    "auth": "yxoPUlwqm…………pIyEX4H", // আবশ্যক। Pushwoosh কন্ট্রোল প্যানেল থেকে API অ্যাক্সেস টোকেন
    "notifications": [{
      "wns_content": {              // আবশ্যক। MIME-এর base64-এ এনকোড করা নোটিফিকেশনের কন্টেন্ট (XML বা raw)
                                    //           অবজেক্ট অথবা স্ট্রিং আকারে
        "en": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9ImF2YWlsYWJsZSIvPg==",
        "de": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9Im5ld01lc3NhZ2UiLz4="
      },
      "wns_type": "Badge",          // ঐচ্ছিক। 'Tile' | 'Toast' | 'Badge' | 'Raw'
      "wns_tag": "myTag",           // ঐচ্ছিক। টাইল প্রতিস্থাপন নীতিতে ব্যবহৃত হয়।
                                    //           ১৬ অক্ষরের বেশি নয় এমন একটি আলফানিউমেরিক স্ট্রিং।
      "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`](/bn/developer/api-reference/messages-api/#createtargetedmessage) অনুরোধ পাঠাতে পারে না।

তবে, যদি আপনি **devices** প্যারামিটারের মাধ্যমে **১০টি বা তার কম ডিভাইসে** পুশ পাঠান, তাহলে API মেসেজিং ট্রেসিং নিষ্ক্রিয় থাকা অবস্থায় যেকোনো ধরনের অ্যাকাউন্টের জন্য কোনো বিধিনিষেধ নেই।

মনে রাখবেন যে **আমরা সবসময় নির্ধারিত পুশগুলি** মেসেজ হিস্ট্রিতে সংরক্ষণ করি, এমনকি যদি আপনি সেগুলি devices প্যারামিটারের মাধ্যমে ১০টির কম ডিভাইসে পাঠান। তাই, এই ধরনের পুশগুলিও থ্রটল করা হয়।
</Aside>

**প্রতিক্রিয়া (Response)**:

| 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 মেসেজিং ট্রেসিং

লোড ব্যালেন্সিংয়ের উদ্দেশ্যে, _আমরা "devices" প্যারামিটার সহ API এর মাধ্যমে পাঠানো মেসেজগুলি সংরক্ষণ করি না যা একটি অ্যারেতে ১০টির কম ডিভাইস ধারণ করে_। এই কারণে, এই ধরনের মেসেজগুলি আপনার মেসেজ হিস্ট্রিতে প্রদর্শিত হবে না।

পরীক্ষার পর্যায়ে পুশ রিপোর্ট দেখতে, **API মেসেজিং ট্রেসিং** ব্যবহার করুন। এই বিকল্পটি **চালু** করলে আপনি _১ ঘন্টার জন্য এই সীমাটি ওভাররাইড করতে পারবেন এবং এই ধরনের পুশগুলি মেসেজ হিস্ট্রিতে সংরক্ষণ করতে পারবেন_। API মেসেজিং ট্রেসিং ১ ঘন্টা পরে স্বয়ংক্রিয়ভাবে **বন্ধ** হয়ে যায়।

API মেসেজিং ট্রেসিং [মেসেজ হিস্ট্রি](/bn/product/statistics-and-analytics/message-history/) পৃষ্ঠা থেকে উপরের ডান কোণায় **Start API messaging tracing** ক্লিক করে সক্রিয় করা যেতে পারে।

### ট্যাগ শর্তাবলী

প্রতিটি ট্যাগ শর্ত একটি অ্যারে যেমন `[tagName, operator, operand]` যেখানে

* tagName: একটি ট্যাগের নাম
* operator: "EQ" | "IN" | "NOTEQ" | "NOTIN" | "LTE" | "GTE" | "BETWEEN" | "NOTSET" | "ANY"
* operand: string | integer | array | date

#### অপারেটরের বর্ণনা

* EQ: ট্যাগ মান অপারেন্ডের সমান;
* IN: ট্যাগ মান অপারেন্ডের সাথে ছেদ করে (অপারেন্ড অবশ্যই একটি অ্যারে হতে হবে);
* NOTEQ: ট্যাগ মান একটি অপারেন্ডের সমান নয়;
* NOTIN: ট্যাগ মান অপারেন্ডের সাথে ছেদ করে না (অপারেন্ড অবশ্যই একটি অ্যারে হতে হবে);
* GTE: ট্যাগ মান অপারেন্ডের চেয়ে বড় বা সমান;
* LTE: ট্যাগ মান অপারেন্ডের চেয়ে ছোট বা সমান;
* BETWEEN: ট্যাগ মান সর্বনিম্ন অপারেন্ড মানের চেয়ে বড় বা সমান কিন্তু সর্বোচ্চ অপারেন্ড মানের চেয়ে ছোট বা সমান (অপারেন্ড অবশ্যই একটি অ্যারে হতে হবে);
* NOTSET: ট্যাগ সেট করা নেই। অপারেন্ড বিবেচনা করা হয় না;
* ANY: ট্যাগের যেকোনো মান আছে। অপারেন্ড বিবেচনা করা হয় না।

#### স্ট্রিং ট্যাগ

বৈধ অপারেটর: EQ, IN, NOTEQ, NOTIN, NOTSET, ANY\
বৈধ অপারেন্ড:

* EQ, NOTEQ: অপারেন্ড অবশ্যই একটি স্ট্রিং হতে হবে;
* IN, NOTIN: অপারেন্ড অবশ্যই স্ট্রিংগুলির একটি অ্যারে হতে হবে যেমন `["value 1", "value 2", "value N"]`;
* NOTSET: ট্যাগ সেট করা নেই। অপারেন্ড বিবেচনা করা হয় না;
* ANY: ট্যাগের যেকোনো মান আছে। অপারেন্ড বিবেচনা করা হয় না।

#### পূর্ণসংখ্যা ট্যাগ

বৈধ অপারেটর: EQ, IN, NOTEQ, NOTIN, BETWEEN, GTE, LTE, NOTSET, ANY\
বৈধ অপারেন্ড:

* EQ, NOTEQ, GTE, LTE: অপারেন্ড অবশ্যই একটি পূর্ণসংখ্যা হতে হবে;
* IN, NOTIN: অপারেন্ড অবশ্যই পূর্ণসংখ্যার একটি অ্যারে হতে হবে যেমন `[value 1, value 2, value N]`;
* BETWEEN: অপারেন্ড অবশ্যই পূর্ণসংখ্যার একটি অ্যারে হতে হবে যেমন `[min_value, max_value]`;
* NOTSET: ট্যাগ সেট করা নেই। অপারেন্ড বিবেচনা করা হয় না;
* ANY: ট্যাগের যেকোনো মান আছে। অপারেন্ড বিবেচনা করা হয় না।

#### তারিখ ট্যাগ

বৈধ অপারেটর: EQ, IN, NOTEQ, NOTIN, BETWEEN, GTE, LTE, NOTSET, ANY\
বৈধ অপারেন্ড:

* `"YYYY-MM-DD 00:00"` (স্ট্রিং)
* unix টাইমস্ট্যাম্প `1234567890` (পূর্ণসংখ্যা)
* `"N days ago"` (স্ট্রিং) অপারেটর EQ, BETWEEN, GTE, LTE এর জন্য

#### বুলিয়ান ট্যাগ

বৈধ অপারেটর: EQ, NOTSET, ANY\
বৈধ অপারেন্ড: `0, 1, true, false`

#### তালিকা ট্যাগ

বৈধ অপারেটর: IN, NOTIN, NOTSET, ANY\
বৈধ অপারেন্ড: অপারেন্ড অবশ্যই স্ট্রিংগুলির একটি অ্যারে হতে হবে যেমন `["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) অনুযায়ী একটি বড় হাতের দুই-অক্ষরের কোড\
উদাহরণস্বরূপ, ব্রাজিলে পর্তুগিজ-ভাষী গ্রাহকদের কাছে পুশ নোটিফিকেশন পাঠাতে, আপনাকে নিম্নলিখিত শর্তটি উল্লেখ করতে হবে: `"conditions": [["Country", "EQ", "BR"],["Language", "EQ", "pt"]]`
</Aside>

### /createMessage স্নিপেট

<Aside type="caution" title="Important">
অনুগ্রহ করে স্নিপেটগুলি ব্যবহার করার সময় সতর্ক থাকুন। "users", "devices", "filter", বা "conditions" প্যারামিটার উল্লেখ করে প্রাপকদের সংখ্যা সীমিত করুন। যদি এই প্যারামিটারগুলির কোনোটিই উল্লেখ না করা হয়, তবে মেসেজটি অ্যাপ্লিকেশনের পুশ নোটিফিকেশনে সাবস্ক্রাইব করা **প্রতিটি ডিভাইসে** পাঠানো হবে।
</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`

একটি নির্ধারিত মেসেজ ডিলিট করে।

#### অনুরোধের বডি (Request Body)

| নাম                                      | টাইপ   | বর্ণনা                                      |
| ----------------------------------------- | ------ | ------------------------------------------------ |
| auth*    | string | Pushwoosh কন্ট্রোল প্যানেল থেকে [API অ্যাক্সেস টোকেন](/bn/developer/api-reference/api-identifiers/#api-access-token)।   |
| message* | string | `/createMessage` অনুরোধে প্রাপ্ত [মেসেজ কোড](/bn/developer/api-reference/api-identifiers/#message-code)। |

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

```json title="Example"
{
  "request":{
    "auth": "yxoPUlwqm…………pIyEX4H",  // আবশ্যক। Pushwoosh কন্ট্রোল প্যানেল থেকে API অ্যাক্সেস টোকেন
    "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`

মেসেজের বিস্তারিত তথ্য পুনরুদ্ধার করে।

#### অনুরোধের বডি (Request Body)

| নাম                                      | টাইপ   | বর্ণনা                                    |
| ----------------------------------------- | ------ | ---------------------------------------------- |
| auth*    | string | Pushwoosh কন্ট্রোল প্যানেল থেকে [API অ্যাক্সেস টোকেন](/bn/developer/api-reference/api-identifiers/#api-access-token)। |
| message* | string | [মেসেজ কোড](/bn/developer/api-reference/api-identifiers/#message-code) বা মেসেজ আইডি।                    |

<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="Example"
{
  "request":{
    "auth": "yxoPUlwqm…………pIyEX4H",  // আবশ্যক। Pushwoosh কন্ট্রোল প্যানেল থেকে API অ্যাক্সেস টোকেন
    "message": "xxxx-xxxxxxx-xxxxxx" // আবশ্যক। মেসেজ কোড বা মেসেজ আইডি
  }
}
```

## createTargetedMessage <Badge text="Deprecated" variant="caution" size="small" />

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

একটি নতুন টার্গেটেড পুশ নোটিফিকেশন তৈরি করে।

#### অনুরোধের বডি (Request Body)

| নাম                                              | টাইপ    | বর্ণনা                                                                                                                            |
| ------------------------------------------------- | ------- |----------------------------------------------------------------------------------------------------------------------------------------|
| auth*            | string  | Pushwoosh কন্ট্রোল প্যানেল থেকে [API অ্যাক্সেস টোকেন](/bn/developer/api-reference/api-identifiers/#api-access-token)।                                                                                         |
| 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  | [একটি ক্যাম্পেইনের কোড](/bn/developer/api-reference/api-identifiers/#campaign-code) যেখানে আপনি এই পুশ মেসেজটি বরাদ্দ করতে চান।                                                                      |
| content*         | string  | নোটিফিকেশন কন্টেন্ট। বিস্তারিত জানতে অনুরোধের উদাহরণ দেখুন।                                                                             |
| transactionId                                     | string  | নেটওয়ার্ক সমস্যার ক্ষেত্রে মেসেজ ডুপ্লিকেট হওয়া রোধ করতে অনন্য মেসেজ শনাক্তকারী। Pushwoosh-এর দিকে ৫ মিনিটের জন্য সংরক্ষণ করা হয়। |
| link                                              | string  | ব্যবহারকারী পুশ মেসেজ খুললে যে লিঙ্কটি খোলা হবে।                                                                                    |
| minimize_link                                    | integer | 0 - ছোট করবেন না, 2 - bit.ly। ডিফল্ট = 2।                                                                                          |
| data                                              | object  | JSON স্ট্রিং বা JSON অবজেক্ট। পেলোডে "u" প্যারামিটার হিসাবে পাস করা হবে (JSON স্ট্রিং-এ রূপান্তরিত)।                                 |
| preset                                            | string  | [প্রিসেট কোড](/bn/developer/api-reference/api-identifiers/#preset-code)।                                                                                                                           |
| send_rate                                        | integer | থ্রটলিং। বৈধ মানগুলি 100 থেকে 1000 পুশ প্রতি সেকেন্ড।                                                                       |
| inbox_date                                       | string  | ইনবক্স থেকে একটি মেসেজ কখন সরানো হবে তা উল্লেখ করুন।                                                                                       |
| inbox_image                                      | string  | ইনবক্সে মেসেজের পাশে দেখানো হবে এমন ছবির URL।                                                                            |

<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="Hard mode">
আপনার কি এর পরিবর্তে [`/createMessage`](#createmessage) ব্যবহার করা উচিত?
</Aside>


<Tabs>
<TabItem label="Example">
```json title="Example"
{
  "request": {
    "auth": "yxoPUlwqm…………pIyEX4H",    // আবশ্যক। Pushwoosh কন্ট্রোল প্যানেল থেকে API অ্যাক্সেস টোকেন
    "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": {                       // ঐচ্ছিক। অবজেক্ট অথবা স্ট্রিং। Windows-এর জন্য এর পরিবর্তে "wns_content" ব্যবহার করুন।
      "en": "English",
      "de": "Deutsch"
    },
    "transactionId": "unique UUID",    // ঐচ্ছিক। নেটওয়ার্ক সমস্যার ক্ষেত্রে মেসেজ ডুপ্লিকেট হওয়া রোধ করতে অনন্য মেসেজ শনাক্তকারী। Pushwoosh-এর দিকে ৫ মিনিটের জন্য সংরক্ষণ করা হয়।
    "rich_media": "XXXXX-XXXXX",       // ঐচ্ছিক। Pushwoosh কন্ট্রোল প্যানেলের রিচ মিডিয়া এডিটর পেজের URL বার থেকে রিচ মিডিয়া কোড কপি করুন। 
    "link": "https://google.com",      // ঐচ্ছিক। ডীপলিংকের জন্য "minimize_link": 0 যোগ করুন
    "minimize_link": 0,                // ঐচ্ছিক। 0 — ছোট করবেন না, 2 — bitly। ডিফল্ট = 2।
                                       //           Google URL শর্টনার মার্চ ৩০, ২০১৯ থেকে নিষ্ক্রিয়।
                                       //           দয়া করে মনে রাখবেন যে শর্টনারগুলির কলের সংখ্যার উপর সীমাবদ্ধতা রয়েছে।
    "data": {                          // ঐচ্ছিক। JSON স্ট্রিং বা JSON অবজেক্ট।
      "key": "value"                   //           পেলোডে "u" প্যারামিটার হিসাবে পাস করা হবে
    },                                 //           (JSON স্ট্রিং-এ রূপান্তরিত)।
    "preset": "XXXXX-XXXXX",           // ঐচ্ছিক। আপনার কন্ট্রোল প্যানেল থেকে পুশ প্রিসেট কোড।
    "send_rate": 100,                  // ঐচ্ছিক। থ্রটলিং। বৈধ মানগুলি 100 থেকে 1000 পুশ/সেকেন্ড পর্যন্ত।
    "dynamic_content_placeholders": {  // ঐচ্ছিক। ডিভাইস ট্যাগের পরিবর্তে ডাইনামিক কন্টেন্টের জন্য প্লেসহোল্ডার।
      "firstname": "John",
      "lastname": "Doe"
    },

    // API এর মাধ্যমে ইনবক্সে মেসেজ সংরক্ষণ করতে, "inbox_date" বা "inbox_image" ব্যবহার করুন।
    // এই প্যারামিটারগুলির মধ্যে অন্তত একটি ব্যবহার করা হলে মেসেজটি সংরক্ষিত হয়। 
    "inbox_image": "Inbox image URL",  // ঐচ্ছিক। মেসেজের পাশে দেখানো হবে এমন ছবি।
    "inbox_date": "2017-02-02"         // ঐচ্ছিক। ইনবক্স থেকে একটি মেসেজ কখন সরানো হবে তা উল্লেখ করুন।
                                       //           নির্দিষ্ট তারিখের 00:00:01 UTC-তে মেসেজটি ইনবক্স থেকে সরানো হবে, তাই আগের তারিখটি ব্যবহারকারীর ইনবক্সে মেসেজটি দেখার শেষ দিন।
                                       //           যদি উল্লেখ না করা হয়, ডিফল্ট অপসারণের তারিখ পাঠানোর তারিখের পরের দিন।
  }
}
```
</TabItem>

<TabItem label="প্ল্যাটফর্ম-নির্দিষ্ট প্যারামিটার">
```json title="Platform-specific parameters"
{
  "request": {
    "auth": "yxoPUlwqm…………pIyEX4H",        // আবশ্যক। Pushwoosh কন্ট্রোল প্যানেল থেকে API অ্যাক্সেস টোকেন
    "devices_filter": "FILTER CONDITION",
    "send_date": "now",                    // ঐচ্ছিক। YYYY-MM-DD HH:mm অথবা 'now'
    "content": {                           // ঐচ্ছিক। অবজেক্ট অথবা স্ট্রিং।
      "en": "English",                     //           Windows-এর জন্য এর পরিবর্তে "wns_content" ব্যবহার করুন।
      "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",         // ঐচ্ছিক। অ্যাপ্লিকেশনের প্রধান বান্ডেলে সাউন্ড ফাইলের নাম।
                                           //           খালি রাখলে, ডিভাইস পুশ পাওয়ার সময় কোনো সাউন্ড তৈরি করবে না।
    "ios_sound_off": true,                 // ঐচ্ছিক। "ios_sound" ফিল্ড দ্বারা সেট করা সাউন্ড সক্রিয়/নিষ্ক্রিয় করুন।
    "ios_ttl": 3600,                       // ঐচ্ছিক। টাইম টু লিভ প্যারামিটার — সেকেন্ডে সর্বোচ্চ মেসেজ জীবনকাল।
    "ios_silent": 1,                       // ঐচ্ছিক। সাইলেন্ট নোটিফিকেশন সক্রিয় করে ("sound" এবং "content" উপেক্ষা করে)।
    "ios_category_id": "1",                // ঐচ্ছিক। Pushwoosh থেকে iOS8 ক্যাটাগরি আইডি।
    "ios_category_custom": "category",     // ঐচ্ছিক। কাস্টম APNS ক্যাটাগরি।
    "ios_root_params": {                   // ঐচ্ছিক। aps ডিকশনারিতে রুট লেভেল প্যারামিটার।
      "aps": {
        "content-available": "0",          // ঐচ্ছিক। সাইলেন্ট পুশ পাঠাতে "1" এবং নিয়মিত পুশের জন্য "0" সেট করুন।
        "mutable-content": 1               // iOS10+ মিডিয়া অ্যাটাচমেন্টের জন্য আবশ্যক।
      },
      "attachment": "YOUR_ATTACHMENT_URL", // iOS10+ মিডিয়া অ্যাটাচমেন্ট URL।
      "data": {}                           // ঐচ্ছিক। ব্যবহারকারী সরবরাহকৃত ডেটা, সর্বোচ্চ 4KB
    },
    "apns_trim_content": 1,                // ঐচ্ছিক। (0|1) অতিরিক্ত কন্টেন্ট স্ট্রিংগুলিকে এলিপসিস দিয়ে ছোট করে।
    "ios_title": {                         // ঐচ্ছিক। iOS পুশ নোটিফিকেশনের জন্য শিরোনাম যোগ করে।
      "en": "title"
    },
    "ios_subtitle": {                      // ঐচ্ছিক। iOS পুশ নোটিফিকেশনের জন্য সাবটাইটেল যোগ করে।
      "en": "subTitle"
    },
    "ios_content": {                       // ঐচ্ছিক। iOS পুশ নোটিফিকেশনের জন্য কন্টেন্ট যোগ করে।
      "en": "content"
    },
    
    // Android সম্পর্কিত প্যারামিটার
    "android_root_params": {               // ঐচ্ছিক। কাস্টম কী-ভ্যালু অবজেক্ট।
      "key": "value"                       //           অ্যান্ড্রয়েড পেলোড প্রাপকদের জন্য রুট লেভেল প্যারামিটার।
    },
    "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,               // ঐচ্ছিক। টাইম টু লিভ প্যারামিটার — সেকেন্ডে সর্বোচ্চ মেসেজ জীবনকাল।
    "android_vibration": 0,                // ঐচ্ছিক। উচ্চ-অগ্রাধিকার পুশের জন্য Android ফোর্স-ভাইব্রেশন।
    "android_led": "#rrggbb",              // ঐচ্ছিক। LED হেক্স রঙ, ডিভাইস তার সেরা অনুমান করবে।
    "android_priority": -1,                // ঐচ্ছিক। Android 8.0 এবং উচ্চতর ডিভাইসগুলির জন্য "importance" প্যারামিটার এবং Android 7.1 এবং নিম্নতর ডিভাইসগুলির জন্য "priority" প্যারামিটার সেট করে। একটি নোটিফিকেশন চ্যানেল বা একটি নির্দিষ্ট নোটিফিকেশনের ইন্টারাপশন লেভেল স্থাপন করে। বৈধ মানগুলি হল -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"
    },
    "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,                       // ঐচ্ছিক। টাইম টু লিভ প্যারামিটার — সেকেন্ডে সর্বোচ্চ মেসেজ জীবনকাল।
    "adm_priority": -1,                    // ঐচ্ছিক। অ্যামাজন পুশ ড্রয়ারে পুশের অগ্রাধিকার,
                                           //           বৈধ মানগুলি হল -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,                       // ঐচ্ছিক। টাইম টু লিভ প্যারামিটার — সেকেন্ডে সর্বোচ্চ মেসেজ জীবনকাল।
    "mac_title": {                         // ঐচ্ছিক। পুশ নোটিফিকেশনের জন্য শিরোনাম যোগ করে।
      "en": "title"
    },
    "mac_subtitle": {                      // ঐচ্ছিক। MacOS পুশ নোটিফিকেশনের জন্য সাবটাইটেল যোগ করে।
      "en": "subtitle"
    },
    "mac_content": {                       // ঐচ্ছিক। MacOS পুশ নোটিফিকেশনের জন্য কন্টেন্ট যোগ করে।
      "en": "content"
    },
    
    // Windows সম্পর্কিত প্যারামিটার
    "wns_content": {                       // আবশ্যক। MIME-এর base64-এ এনকোড করা নোটিফিকেশনের কন্টেন্ট (XML বা raw)
                                           //           অবজেক্ট অথবা স্ট্রিং আকারে
      "en": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9ImF2YWlsYWJsZSIvPg==",
      "de": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9Im5ld01lc3NhZ2UiLz4="
    },
    "wns_type": "Badge",                   // 'Tile' | 'Toast' | 'Badge' | 'Raw'
    "wns_tag": "myTag",                    // ঐচ্ছিক। টাইল প্রতিস্থাপন নীতিতে ব্যবহৃত হয়।
                                           //           ১৬ অক্ষরের বেশি নয় এমন একটি আলফানিউমেরিক স্ট্রিং।
    "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,                    // ঐচ্ছিক। টাইম টু লিভ প্যারামিটার — সেকেন্ডে একটি মেসেজের সর্বোচ্চ জীবনকাল।
    
    // Chrome সম্পর্কিত প্যারামিটার
    "chrome_title": {                      // ঐচ্ছিক। আপনি এই প্যারামিটারে মেসেজের হেডার উল্লেখ করতে পারেন।
      "en": "title"
    },
    "chrome_content": {                    // ঐচ্ছিক। আপনি এই প্যারামিটারে মেসেজের কন্টেন্ট উল্লেখ করতে পারেন।
      "en": "content"
    },
    "chrome_icon": "icon_URL",             // ঐচ্ছিক। আইকনের সম্পূর্ণ পাথ URL বা এক্সটেনশন রিসোর্স ফাইল পাথ
    "chrome_gcm_ttl": 3600,                // ঐচ্ছিক। টাইম টু লিভ প্যারামিটার – সেকেন্ডে সর্বোচ্চ মেসেজ জীবনকাল।
    "chrome_duration": 20,                 // ঐচ্ছিক। ক্রোম পুশ প্রদর্শনের সময় পরিবর্তন করে। ব্যবহারকারী ইন্টারঅ্যাক্ট না করা পর্যন্ত পুশ প্রদর্শন করতে 0 সেট করুন।
    "chrome_image": "image_URL",           // ঐচ্ছিক। বড় ইমেজের URL
    "chrome_root_params": {                // ঐচ্ছিক। ক্রোমে পাঠানো মেসেজের জন্য নির্দিষ্ট প্যারামিটার সেট করুন।
      "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": {               // ঐচ্ছিক। ফায়ারফক্সে পাঠানো মেসেজের জন্য নির্দিষ্ট প্যারামিটার সেট করুন।
      "key": "value"
    }
  }
}
```
</TabItem>
</Tabs>

মৌলিক বিষয়গুলি খুব সহজ – সমস্ত ফিল্টার সত্তার **সেট** এর উপর সঞ্চালিত হয়।

### সেট

সেটগুলি সংজ্ঞায়িত করা হয়েছে:

**১.** নির্দিষ্ট অ্যাপে সাবস্ক্রাইব করা ডিভাইস (A);\
**২.** নির্দিষ্ট ট্যাগ মান (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" ট্যাগটি ১৭, ১৮, ১৯, ২০ মানগুলির মধ্যে একটিতে সেট করা আছে।

<Aside type="caution">
**অ্যাপ-নির্দিষ্ট ট্যাগগুলির** জন্য, "AT" ফিল্টার প্রয়োগ করা হয়। একটি AT সেটে প্রথম মান হিসাবে সংশ্লিষ্ট অ্যাপ্লিকেশন কোড উল্লেখ করতে ভুলবেন না:

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


### ট্যাগের প্রকার এবং অপারেটর

সবচেয়ে গুরুত্বপূর্ণ বিষয় হল ট্যাগগুলি অ্যাপগুলির মধ্যে শেয়ার করা হয়, এবং এটি একটি নির্দিষ্ট অ্যাপের সাথে নিজেকে আবদ্ধ না করে আপনার টার্গেট ব্যবহারকারীদের সেগমেন্ট এবং ফিল্টার করার জন্য একটি খুব শক্তিশালী উপকরণ উপস্থাপন করে।

ট্যাগটি তিনটি ভিন্ন ধরনের হতে পারে: **স্ট্রিং, পূর্ণসংখ্যা, তালিকা**। ট্যাগের প্রকার নির্ধারণ করে যে আপনি একটি নির্দিষ্ট ট্যাগের জন্য কোন অপারেটর ব্যবহার করতে পারেন।

#### স্ট্রিং ট্যাগ

**প্রযোজ্য অপারেটর:**

* **EQ** – একটি নির্দিষ্ট ট্যাগ মান সহ ডিভাইসগুলিকে টার্গেট করে
* **IN** – নির্দিষ্ট ট্যাগ মানগুলির যেকোনো একটি সহ ডিভাইসগুলিকে টার্গেট করে
* **NOTIN** – কোনো নির্দিষ্ট ট্যাগ মান ছাড়া ডিভাইসগুলিকে টার্গেট করে
* **NOTEQ** – একটি নির্দিষ্ট মানের সমান নয় এমন ট্যাগ মান সহ ডিভাইসগুলিকে টার্গেট করে
* **NOTSET** – একটি নির্দিষ্ট ট্যাগের জন্য কোনো মান ছাড়া ডিভাইসগুলিকে টার্গেট করে
* **ANY** – একটি নির্দিষ্ট ট্যাগের জন্য যেকোনো মান সেট করা ডিভাইসগুলিকে টার্গেট করে

উদাহরণ:

`T (\"Age\", EQ, 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)` – শুধুমাত্র ১৪ লেভেলের ব্যবহারকারীদের ফিল্টার করে।

`T (\"Level\", BETWEEN, [1,5)` – ১, ২, ৩, ৪, এবং ৫ লেভেলের ব্যবহারকারীদের ফিল্টার করে।

`T (\"Level", GTE, 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="Important">
`/createTargetedMessage` পদ্ধতিতে একটি পরিচিত সমস্যা রয়েছে: যদি আপনি "devices_filter" বিভাগে কোনো অ্যাপ্লিকেশন উল্লেখ না করেন, Pushwoosh পুশ বিস্তারিততে কোনো অ্যাপ্লিকেশন প্রদর্শন করে না।
</Aside>

## getPushHistory <Badge text="Deprecated" variant="caution" size="small" />

<Aside type="note">
মেসেজ হিস্ট্রি এবং আরও বিস্তারিত ডেটা পুনরুদ্ধার করতে এর পরিবর্তে [**/messages:list**](/bn/developer/api-reference/statistics-api/message-statistics-api/#messageslist) ব্যবহার করুন।
</Aside>

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

পুশ বিস্তারিত সহ মেসেজ হিস্ট্রি পায়।

#### অনুরোধের বডি (Request Body)

| নাম                                   | টাইপ    | বর্ণনা                                                                                                          |
| -------------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------- |
| auth* | string  | Pushwoosh কন্ট্রোল প্যানেল থেকে [API অ্যাক্সেস টোকেন](/bn/developer/api-reference/api-identifiers/#api-access-token)।                                                                       |
| 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  | পেজিনেশনের জন্য ব্যবহৃত হয়। পূর্ববর্তী /getPushHistory কল থেকে শেষ messageId। নিচে বিস্তারিত দেখুন।                       |

<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="Example"
{
  "request":{
    "auth": "yxoPUlwqm…………pIyEX4H",  // আবশ্যক। Pushwoosh কন্ট্রোল প্যানেল থেকে API অ্যাক্সেস টোকেন
    "source": null,                  // ঐচ্ছিক। সম্ভাব্য মানগুলি হল null, "CP", "API", "GeoZone",
                                     //           "RSS", "AutoPush", "A/B Test"
    "searchBy": "applicationCode",   // ঐচ্ছিক। সম্ভাব্য মানগুলি হল "", "notificationID",
                                     //           "notificationCode", "applicationCode", "campaignCode"
    "value": "C8717-703F2",          // ঐচ্ছিক। "searchBy" ফিল্ড অনুযায়ী সেট করা অনুসন্ধান মান।
    "lastNotificationID": 0,         // ঐচ্ছিক। পেজিনেশনের জন্য ব্যবহৃত হয়। পূর্ববর্তী /getPushHistory কল থেকে শেষ messageId। নিচে বিস্তারিত দেখুন।
    "limitMessages": 1000            // ঐচ্ছিক। সম্ভাব্য মান 10 থেকে 1000 পর্যন্ত।
  }
}
```

এই পদ্ধতিটি অ্যাকাউন্ট থেকে মেসেজ আইডি দ্বারা সাজানো ১০০০টি মেসেজ ফিরিয়ে দেবে। দ্বিতীয় পৃষ্ঠা পেতে, **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`

একটি নির্ধারিত মেসেজ ডিলিট করে।

#### অনুরোধের বডি (Request Body)

| নাম                                      | টাইপ   | বর্ণনা                                           |
| ----------------------------------------- | ------ | ----------------------------------------------------- |
| auth*    | string | Pushwoosh কন্ট্রোল প্যানেল থেকে [API অ্যাক্সেস টোকেন](/bn/developer/api-reference/api-identifiers/#api-access-token)।        |
| message* | string | `/createMessage` প্রতিক্রিয়ায় প্রাপ্ত [মেসেজ কোড](/bn/developer/api-reference/api-identifiers/#message-code)। |

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

<Aside type="note">
এই পদ্ধতিটি শুধুমাত্র সেই মেসেজগুলির জন্য অনুমোদিত যেগুলি পেন্ডিং, ওয়েটিং বা প্রসেসিং অবস্থায় আছে।
</Aside>

```json title="Example"
{
  "request":{
    "auth": "yxoPUlwqm…………pIyEX4H",  // আবশ্যক। Pushwoosh কন্ট্রোল প্যানেল থেকে API অ্যাক্সেস টোকেন
    "message": "xxxx-xxxxxxx-xxxxxx" // আবশ্যক। /createMessage প্রতিক্রিয়ায় প্রাপ্ত মেসেজ কোড
  }
}
```

**স্ট্যাটাস কোড:**

| HTTP স্ট্যাটাস কোড | status_code | বর্ণনা                                         |
| ---------------- | ------------ | --------------------------------------------------- |
| 200              | 200          | মেসেজ সফলভাবে বাতিল করা হয়েছে                       |
| 200              | 210          | আর্গুমেন্ট ত্রুটি। আরও তথ্যের জন্য status_message দেখুন।  |
| 400              | N/A          | ত্রুটিপূর্ণ অনুরোধ স্ট্রিং                            |
| 500              | 500          | অভ্যন্তরীণ ত্রুটি                                      |