# ইমেল API

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

<Aside type="caution" title="/createEmailMessage is deprecated">
নতুন ইন্টিগ্রেশনের জন্য [Messaging API v2](/bn/developer/api-reference/messaging-api-v2/) ব্যবহার করা উচিত — `Notify`-তে `platforms: ["EMAIL"]` এবং একটি [`email_payload`](/bn/developer/api-reference/messaging-api-v2/email-payload-reference/) ব্লক পাস করুন। [মাইগ্রেশন গাইড](/bn/developer/api-reference/messaging-api-v2/migration-from-v1/#from-createemailmessage) দেখুন।
</Aside>

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

একটি ইমেল মেসেজ তৈরি করে।

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

### রিকোয়েস্ট বডি প্যারামিটার

| নাম | টাইপ <div style="width:80px"></div> | প্রয়োজনীয় | বিবরণ |
|------|--------|:--------:|-------------|
| 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 অ্যারে। নিচের **নোটিফিকেশন প্যারামিটার** টেবিলটি দেখুন। |

#### নোটিফিকেশন প্যারামিটার

| নাম | টাইপ <div style="width:50px"></div> | প্রয়োজনীয় | বিবরণ |
|------|------|:--------:|-------------|
| send_date | `string` | হ্যাঁ | কখন ইমেল পাঠাতে হবে তা নির্ধারণ করে। ফরম্যাট: `YYYY-MM-DD HH:mm` অথবা `"now"`। |
| preset | `string` | হ্যাঁ | [ইমেল প্রিসেট কোড](/bn/developer/api-reference/api-identifiers/#email-content-code)। Pushwoosh কন্ট্রোল প্যানেলের **ইমেল কনটেন্ট এডিটর**-এর URL বার থেকে কপি করুন। |
| subject | `string` বা `object` | না | ইমেলের সাবজেক্ট লাইন। ইমেলটি সর্বদা কনটেন্টের ভাষায় থাকবে। যদি `subject`-এ `content`-এর জন্য কোনো ম্যাচিং ভাষা না থাকে, তাহলে সাবজেক্ট খালি থাকবে। |
| content | `string` বা `object` | না | ইমেলের বডি কনটেন্ট। এটি প্লেইন HTML কনটেন্টের জন্য একটি স্ট্রিং অথবা স্থানীয় সংস্করণগুলির জন্য একটি অবজেক্ট হতে পারে। |
| attachments | `array` | না | ইমেল অ্যাটাচমেন্ট। শুধুমাত্র দুটি অ্যাটাচমেন্ট উপলব্ধ। প্রতিটি অ্যাটাচমেন্ট 1MB (base64 এনকোডেড) এর বেশি হওয়া উচিত নয়। |
| list_unsubscribe | `string` | না | "Link-Unsubscribe" হেডারের জন্য কাস্টম URL সেট করার অনুমতি দেয়। |
| campaign | `string` | না | একটি নির্দিষ্ট ক্যাম্পেইনের সাথে ইমেলটি যুক্ত করার জন্য [ক্যাম্পেইন কোড](/bn/developer/api-reference/api-identifiers/#campaign-code)। |
| ignore_user_timezone | `boolean` | না | যদি `true` হয়, তাহলে ব্যবহারকারীর টাইমজোন উপেক্ষা করে অবিলম্বে ইমেল পাঠায়। |
| timezone | `string` | না | ব্যবহারকারীর টাইমজোন অনুযায়ী ইমেল পাঠায়। উদাহরণ: `"America/New_York"`। |
| filter | `string` | না | একটি [নির্দিষ্ট ফিল্টার শর্ত](/bn/developer/api-reference/api-identifiers/#segment--filter-name) পূরণকারী ব্যবহারকারীদের কাছে ইমেল পাঠায়। |
| devices | `array` | না | টার্গেটেড ইমেল পাঠানোর জন্য ইমেল অ্যাড্রেসের তালিকা (সর্বোচ্চ 1000)। যদি ব্যবহার করা হয়, মেসেজটি শুধুমাত্র এই অ্যাড্রেসগুলিতে পাঠানো হবে। অ্যাপ্লিকেশন গ্রুপ ব্যবহার করা হলে এটি উপেক্ষা করা হয়। |
| use_auto_registration | `boolean` | না | যদি `true` হয়, তাহলে `devices` প্যারামিটার থেকে ইমেলগুলি স্বয়ংক্রিয়ভাবে রেজিস্টার করে। |
| users | `array` | না | যদি সেট করা হয়, ইমেল মেসেজটি শুধুমাত্র নির্দিষ্ট [User ID](/bn/developer/api-reference/api-identifiers/#user-id)-গুলিতে ডেলিভার করা হবে (/registerEmail কলের মাধ্যমে রেজিস্টার করা)। একটি অ্যারেতে 1000-এর বেশি User ID থাকবে না। যদি "devices" প্যারামিটার নির্দিষ্ট করা থাকে, তাহলে "users" প্যারামিটার উপেক্ষা করা হবে। |
| dynamic_content_placeholders | `object` | না | ডিভাইস ট্যাগ ভ্যালুর পরিবর্তে ডাইনামিক কনটেন্টের জন্য প্লেসহোল্ডার। |
| conditions | `array` | না | ট্যাগ ব্যবহার করে সেগমেন্টেশন শর্ত। উদাহরণ: `[["Country", "EQ", "BR"]]`। |
| from | `object` | না | অ্যাপ্লিকেশন প্রোপার্টিজে ডিফল্টকে ওভাররাইড করে একটি কাস্টম প্রেরকের নাম এবং ইমেল নির্দিষ্ট করুন। |
| reply-to | `object` | না | অ্যাপ্লিকেশন প্রোপার্টিজে ডিফল্টকে ওভাররাইড করে একটি কাস্টম রিপ্লাই-টু ইমেল নির্দিষ্ট করুন। |
| bcc | `array` | না | BCC (ব্লাইন্ড কার্বন কপি): ইমেল অ্যাড্রেসের অ্যারে যারা অন্য প্রাপকদের না দেখিয়ে ইমেলের একটি কপি পায়। |
| email_type | `string` | না | ইমেলের ধরন নির্দিষ্ট করুন: `"marketing"` বা `"transactional"`। যদি বাদ দেওয়া হয়, তাহলে `PW_ControlGroup: true` সহ ব্যবহারকারীরা মেসেজটি পাবেন না। |
| email_category | `string` | `email_type` যখন `"marketing"` হয় তখন প্রয়োজনীয়। | [সাবস্ক্রিপশন প্রেফারেন্স সেন্টারে](/bn/product/messaging-channels/emails/email-preferences/) কনফিগার করা ক্যাটাগরির নামগুলির মধ্যে একটি নির্দিষ্ট করুন (যেমন নিউজলেটার, প্রোমোশনাল, প্রোডাক্ট আপডেট)। |
| transactionId | `string` | না | নেটওয়ার্ক সমস্যার ক্ষেত্রে পুনরায় পাঠানো রোধ করার জন্য ইউনিক মেসেজ আইডেন্টিফায়ার। Pushwoosh-এর সাইডে 5 মিনিটের জন্য স্টোর করা হয়।|
| capping\_days | `integer` | না | প্রতি ডিভাইসে ফ্রিকোয়েন্সি ক্যাপিং প্রয়োগ করার জন্য দিনের সংখ্যা (সর্বোচ্চ 30)। **দ্রষ্টব্য:** নিশ্চিত করুন যে কন্ট্রোল প্যানেলে [গ্লোবাল ফ্রিকোয়েন্সি ক্যাপিং](/bn/product/messaging-channels/global-frequency-capping/) কনফিগার করা আছে। |
| capping\_count | `integer` | না | একটি নির্দিষ্ট অ্যাপ থেকে একটি নির্দিষ্ট ডিভাইসে `capping_days` সময়ের মধ্যে পাঠানো যেতে পারে এমন সর্বোচ্চ ইমেলের সংখ্যা। যদি তৈরি করা মেসেজটি একটি ডিভাইসের জন্য `capping_count` সীমা অতিক্রম করে, তবে এটি সেই ডিভাইসে পাঠানো হবে না। |
| capping\_exclude | `boolean` | না | যদি `true` সেট করা হয়, তাহলে এই ইমেলটি ভবিষ্যতের ইমেলগুলির জন্য ক্যাপিং-এর দিকে গণনা করা হবে না। |
| capping\_avoid | `boolean` | না | যদি `true` সেট করা হয়, তাহলে এই নির্দিষ্ট ইমেলের জন্য ক্যাপিং প্রয়োগ করা হবে না। |
| send\_rate | `integer` | না | সমস্ত ব্যবহারকারী জুড়ে প্রতি সেকেন্ডে কতগুলি মেসেজ পাঠানো যাবে তা সীমিত করুন। উচ্চ-ভলিউম পাঠানোর সময় ব্যাকএন্ড ওভারলোড প্রতিরোধে সহায়তা করে। |
| send\_rate\_avoid | `boolean` | না | যদি true সেট করা হয়, তাহলে এই নির্দিষ্ট ইমেলের জন্য থ্রটলিং সীমা প্রয়োগ করা হবে না। |
### রিকোয়েস্টের উদাহরণ
```json 
{
  "request": {
    "auth": "API_ACCESS_TOKEN",         // প্রয়োজনীয়। Pushwoosh কন্ট্রোল প্যানেল থেকে API অ্যাক্সেস টোকেন
    "application": "APPLICATION_CODE",  // প্রয়োজনীয়। Pushwoosh অ্যাপ্লিকেশন কোড।
    "notifications": [{
      "send_date": "now",               // প্রয়োজনীয়। YYYY-MM-DD HH:mm অথবা 'now'
      "preset": "ERXXX-32XXX",          // প্রয়োজনীয়। Pushwoosh কন্ট্রোল প্যানেলের
                                        //           ইমেল কনটেন্ট এডিটর পেজের URL বার থেকে ইমেল প্রিসেট কোড কপি করুন।
      "subject": {                      // ঐচ্ছিক। ইমেল মেসেজের সাবজেক্ট লাইন।
        "de": "subject de",
        "en": "subject en"
      },
      "content": {                      // ঐচ্ছিক। ইমেল বডি কনটেন্ট।
        "de": "<html><body>de Hello, moto</body></html>",
        "default": "<html><body>default Hello, moto</body></html>"
      },
      "attachments": [{                 // ঐচ্ছিক। ইমেল অ্যাটাচমেন্ট
        "name": "image.png",            //           "name" - ফাইলের নাম
        "content": "iVBANA...AFTkuQmwC" //           "content" - ফাইলের বেস64 এনকোডেড কনটেন্ট
      }, {
        "name": "file.pdf",
        "content": "JVBERi...AFTarEGC"
      }],
      "list_unsubscribe": "URL",        // ঐচ্ছিক। "Link-Unsubscribe" হেডারের জন্য কাস্টম URL সেট করার অনুমতি দিন
      "campaign": "CAMPAIGN_CODE",      // ঐচ্ছিক। এই ইমেল মেসেজটিকে একটি নির্দিষ্ট ক্যাম্পেইনে অ্যাসাইন করতে,
                                        //           এখানে একটি ক্যাম্পেইন কোড যোগ করুন।
      "ignore_user_timezone": true,     // ঐচ্ছিক।
      "timezone": "America/New_York",   // ঐচ্ছিক। ব্যবহারকারীর ডিভাইসে সেট করা টাইমজোন অনুযায়ী
                                        //           মেসেজ পাঠাতে নির্দিষ্ট করুন।
      "filter": "FILTER_NAME",          // ঐচ্ছিক। ফিল্টার শর্ত পূরণকারী নির্দিষ্ট ব্যবহারকারীদের কাছে মেসেজ পাঠান।
      "devices": [                      // ঐচ্ছিক। টার্গেটেড ইমেল মেসেজ পাঠানোর জন্য ইমেল অ্যাড্রেস নির্দিষ্ট করুন।
        "email_address1",               //           একটি অ্যারেতে 1000-এর বেশি অ্যাড্রেস নয়।
        "email_address2"                //           যদি সেট করা হয়, মেসেজটি শুধুমাত্র তালিকার
      ],                                //           অ্যাড্রেসগুলিতে পাঠানো হবে। অ্যাপ্লিকেশন গ্রুপ ব্যবহার করা হলে উপেক্ষা করা হয়।
      "use_auto_registration": true,    // ঐচ্ছিক। "devices" প্যারামিটারে নির্দিষ্ট করা ইমেলগুলি স্বয়ংক্রিয়ভাবে রেজিস্টার করুন
      "users": [                        // ঐচ্ছিক। যদি সেট করা হয়, ইমেল মেসেজটি শুধুমাত্র নির্দিষ্ট
        "userId1",                      //           ইউজার আইডিগুলিতে ডেলিভার করা হবে (/registerEmail কলের মাধ্যমে রেজিস্টার করা)।
        "userId2"                       //           একটি অ্যারেতে 1000-এর বেশি ইউজার আইডি নয়।
      ],                                //           যদি "devices" প্যারামিটার নির্দিষ্ট করা থাকে,
                                        //           তাহলে "users" প্যারামিটার উপেক্ষা করা হবে।
      "dynamic_content_placeholders": { // ঐচ্ছিক। ডিভাইস ট্যাগ ভ্যালুর পরিবর্তে ডাইনামিক কনটেন্টের জন্য প্লেসহোল্ডার।
        "firstname": "John",
        "firstname_en": "John"
      }, 
      "conditions": [                   // ঐচ্ছিক। সেগমেন্টেশন শর্ত, নীচের মন্তব্য দেখুন।
        ["Country", "EQ", "BR"],
        ["Language", "EQ", "pt"]
      ], 
      "from": {                         // ঐচ্ছিক। একটি প্রেরকের নাম এবং প্রেরকের ইমেল অ্যাড্রেস নির্দিষ্ট করুন
        "name": "alias from",           //           অ্যাপ্লিকেশন প্রোপার্টিজে সেট করা ডিফল্ট "From name" এবং "From email"
        "email": "from-email@email.com" //           প্রতিস্থাপন করতে।
      },
      "reply-to": {                     // ঐচ্ছিক। অ্যাপ্লিকেশন প্রোপার্টিজে সেট করা ডিফল্ট
        "name": "alias reply to ",      //           "Reply to" প্রতিস্থাপন করতে একটি ইমেল অ্যাড্রেস নির্দিষ্ট করুন।
        "email": "reply-to@email.com"
      },
      "bcc": [                          // ঐচ্ছিক। BCC: ইমেল অ্যাড্রেসের অ্যারে যারা অন্য প্রাপকদের না দেখিয়ে একটি কপি পায়।
        "bcc1@example.com",
        "bcc2@example.com"
      ],
      "email_type": "marketing",        // ঐচ্ছিক। "marketing" বা "transactional"।
                                        // যদি বাদ দেওয়া হয়, PW_ControlGroup: true সহ ব্যবহারকারীরা মেসেজটি পাবেন না।
      "email_category": "category name",// email_type "marketing" হলে প্রয়োজনীয়। ক্যাটাগরির নাম।
      "transactionId": "unique UUID",   // ঐচ্ছিক। নেটওয়ার্ক সমস্যার ক্ষেত্রে পুনরায় পাঠানো রোধ করার জন্য
                                        //           ইউনিক মেসেজ আইডেন্টিফায়ার। Pushwoosh-এর সাইডে
                                        //           5 মিনিটের জন্য স্টোর করা হয়।
      // ফ্রিকোয়েন্সি ক্যাপিং প্যারামিটার। নিশ্চিত করুন যে কন্ট্রোল প্যানেলে গ্লোবাল ফ্রিকোয়েন্সি ক্যাপিং কনফিগার করা আছে।
      // ফ্রিকোয়েন্সি ক্যাপিং ট্রানজ্যাকশনাল মেসেজের জন্য প্রযোজ্য নয়।
      // অন্য সব ক্ষেত্রে, "email_type" বাদ দেওয়া সহ, ফ্রিকোয়েন্সি ক্যাপিং প্রযোজ্য।
      "capping_days": 30,               // ঐচ্ছিক। ফ্রিকোয়েন্সি ক্যাপিংয়ের জন্য দিনের সংখ্যা (সর্বোচ্চ 30 দিন)
      "capping_count": 10,              // ঐচ্ছিক। একটি নির্দিষ্ট অ্যাপ থেকে একটি নির্দিষ্ট ডিভাইসে 'capping_days'
                                        //           সময়ের মধ্যে পাঠানো যেতে পারে এমন সর্বোচ্চ ইমেলের সংখ্যা।
                                        //           যদি তৈরি করা মেসেজটি একটি ডিভাইসের জন্য 'capping_count'
                                        //           সীমা অতিক্রম করে, তবে এটি সেই ডিভাইসে পাঠানো হবে না।
      "capping_exclude": true,          // ঐচ্ছিক। যদি true সেট করা হয়, তাহলে এই ইমেলটি ভবিষ্যতের
                                        //           ইমেলগুলির জন্য ক্যাপিংয়ের দিকে গণনা করা হবে না।
      "capping_avoid": true,            // ঐচ্ছিক। যদি true সেট করা হয়, তাহলে এই নির্দিষ্ট ইমেলের
                                        //           জন্য ক্যাপিং প্রয়োগ করা হবে না।
      "send_rate": 100,                 // ঐচ্ছিক। থ্রটলিং সীমা।
                                        //           সমস্ত ব্যবহারকারী জুড়ে প্রতি সেকেন্ডে কতগুলি মেসেজ পাঠানো যাবে তা সীমিত করুন।
                                        //           উচ্চ-ভলিউম পাঠানোর সময় ব্যাকএন্ড ওভারলোড প্রতিরোধে সহায়তা করে।
      "send_rate_avoid": true,          // ঐচ্ছিক। যদি true সেট করা হয়, তাহলে এই নির্দিষ্ট ইমেলের জন্য
                                        //           থ্রটলিং সীমা প্রয়োগ করা হবে না।
    }]
  }
}
```

### রেসপন্সের উদাহরণ
<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": null
}
```
</TabItem>

<TabItem label="403">
```json
{
  "status_code": 403,
  "status_message": "Token restrictions forbid this operation",
  "response": null
}
```
</TabItem>
</Tabs>

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

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

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

#### অপারেন্ডের বিবরণ

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

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

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

* EQ, NOTEQ: অপারেন্ড একটি স্ট্রিং হতে হবে;
* IN, NOTIN: অপারেন্ড স্ট্রিংগুলির একটি অ্যারে হতে হবে যেমন `["value 1", "value 2", "value N"]`;

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

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

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

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

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

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

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

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

#### লিস্ট ট্যাগ

বৈধ অপারেটর: IN\
বৈধ অপারেন্ড: অপারেন্ড স্ট্রিংগুলির একটি অ্যারে হতে হবে যেমন `["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>

## registerEmail

অ্যাপের জন্য ইমেল অ্যাড্রেস রেজিস্টার করে।

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

#### রিকোয়েস্ট হেডার

| নাম | প্রয়োজনীয় | মান | বিবরণ |
|---------------|----------|---------------|------------------------------------------------------------|
| Authorization | হ্যাঁ | Token `XXXX` | ডিভাইস API অ্যাক্সেস করার জন্য [API ডিভাইস টোকেন](/bn/developer/api-reference/api-access-token/#device-api-token)। `XXXX` কে আপনার আসল ডিভাইস API টোকেন দিয়ে প্রতিস্থাপন করুন। |


#### রিকোয়েস্ট বডি

| নাম | টাইপ | বিবরণ |
| --------------------------------------------- | ------- | --------------------------------------------------------------------------------------------------- |
| application\* | string | [Pushwoosh অ্যাপ্লিকেশন কোড](/bn/developer/api-reference/api-identifiers/#application-code) |
| email\* | string | ইমেল অ্যাড্রেস। |
| language | string | ডিভাইসের ভাষা লোকেল। ISO-639-1 স্ট্যান্ডার্ড অনুযায়ী একটি ছোট হাতের দুই-অক্ষরের কোড হতে হবে। |
| userId | string | ইমেল অ্যাড্রেসের সাথে যুক্ত করার জন্য [User ID](/bn/developer/api-reference/api-identifiers/#user-id)। |
| tz\_offset | integer | সেকেন্ডে টাইমজোন অফসেট। |
| tags | object | রেজিস্টার করা ডিভাইসে অ্যাসাইন করার জন্য ট্যাগ ভ্যালু। |

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": null
}
```
</TabItem>
<TabItem label="210">
```json
{
  "status_code": 210,
  "status_message": "this hwid (email) is blacklisted",
  "response": null
}
```
</TabItem>
<TabItem label="400">
```json
{
  "status_code": 400,
  "status_message": "Missing required argument: email",
  "response": null
}
```
</TabItem>
<TabItem label="403">
```json
{
  "status_code": 403,
  "status_message": "Token restrictions forbid this operation",
  "response": null
}
```
</TabItem>
<TabItem label="500">
```json
{
  "status_code": 500,
  "status_message": "Internal server error",
  "response": null
}
```
</TabItem>
</Tabs>

```json title="উদাহরণ"
{
  "request": {
    "application": "APPLICATION_CODE",   // প্রয়োজনীয়। Pushwoosh অ্যাপ্লিকেশন কোড।
    "email":"email@domain.com",          // প্রয়োজনীয়। রেজিস্টার করার জন্য ইমেল অ্যাড্রেস।
    "language": "en",                    // ঐচ্ছিক। ভাষা লোকেল।
    "userId": "userId",                  // ঐচ্ছিক। ইমেল অ্যাড্রেসের সাথে যুক্ত করার জন্য User ID।
    "tz_offset": 3600,                   // ঐচ্ছিক। সেকেন্ডে টাইমজোন অফসেট।
    "tags": {                            // ঐচ্ছিক। রেজিস্টার করা ডিভাইসের জন্য সেট করার ট্যাগ ভ্যালু।
       "StringTag": "string value",
       "IntegerTag": 42,
       "ListTag": ["string1","string2"], // লিস্ট টাইপের ট্যাগের জন্য মানের তালিকা সেট করে
       "DateTag": "2024-10-02 22:11",    // মনে রাখবেন সময় UTC-তে হওয়া উচিত
       "BooleanTag": true                // বৈধ মানগুলি হল: true, false
    }
  }
}
```

#### রেসপন্স কোড

পাবলিক API `status_code`-এ ফলাফল প্রদান করে। একটি ব্যর্থ কল পুনরায় চেষ্টা করা উচিত কিনা তা নির্ধারণ করতে নীচের টেবিলটি ব্যবহার করুন।

| `status_code` | অর্থ | পুনরায় চেষ্টা করবেন? |
| ------------- | ------- | ------ |
| `200` | সফল — ইমেল অ্যাড্রেস রেজিস্টার করা হয়েছে। | না — সম্পন্ন। |
| `210` | আর্গুমেন্ট/ভ্যালিডেশন ত্রুটি — রিকোয়েস্টটি বোঝা গেছে কিন্তু প্রত্যাখ্যান করা হয়েছে (ব্ল্যাকলিস্টেড অ্যাড্রেস, অবৈধ বা ডিসপোজেবল ইমেল, অ্যাকাউন্টের প্ল্যানের জন্য ভুল প্ল্যাটফর্ম)। নীচের [210 ত্রুটির মেসেজ](#210-error-messages) দেখুন। | **না** — একই রিকোয়েস্ট একই `210` ফেরত দেয়। অ্যাড্রেসটি লগ করুন এবং এটি এড়িয়ে যান। |
| `400` | ভুল ফরম্যাটের রিকোয়েস্ট — অবৈধ JSON বা একটি প্রয়োজনীয় ফিল্ড অনুপস্থিত। | না — রিকোয়েস্টটি ঠিক করুন, এটির পুনরাবৃত্তি করবেন না। |
| `403` | নিষিদ্ধ — অবৈধ বা সীমাবদ্ধ ডিভাইস API টোকেন। | না — অনুমোদন ঠিক করুন। |
| `500` | অভ্যন্তরীণ সার্ভার ত্রুটি — অস্থায়ী অবকাঠামোগত সমস্যা বা টাইমআউট। | **হ্যাঁ**, এক্সপোনেনশিয়াল ব্যাকঅফ সহ — এটিই একমাত্র ক্ষণস্থায়ী কেস। |

<Aside type="tip">
শুধুমাত্র `500` রেসপন্সগুলির জন্য এক্সপোনেনশিয়াল ব্যাকঅফ ব্যবহার করে পুনরায় চেষ্টা করুন — এটিই একমাত্র ক্ষণস্থায়ী কেস। একটি `210`, `400`, বা `403` চূড়ান্ত: সার্ভার আপনার রিকোয়েস্টটি বুঝেছে এবং এটি প্রত্যাখ্যান করেছে, তাই অপরিবর্তিতভাবে এটির পুনরাবৃত্তি করলে একই ফলাফল আসবে। এর পরিবর্তে অ্যাড্রেসটি লগ করুন (`210`-এর জন্য) অথবা রিকোয়েস্ট/টোকেন ঠিক করুন (`400`/`403`-এর জন্য)।
</Aside>

#### 210 ত্রুটির মেসেজ

একটি `210` রেসপন্স `status_message`-এ নির্দিষ্ট কারণ বহন করে।

| `status_message` | অর্থ |
| ---------------- | ------- |
| `this hwid (email) is blacklisted` | একটি স্থায়ী (হার্ড) বাউন্সের পরে অ্যাড্রেসটি সাপ্রেশন লিস্টে রয়েছে এবং পুনরায় রেজিস্টার করা হবে না। |
| `hwid (email) is invalid` / `has invalid semantic` | অ্যাড্রেসটি ভ্যালিডেশনে ব্যর্থ হয়েছে। |
| `hwid (email) is empty` | কোনো অ্যাড্রেস প্রদান করা হয়নি। |
| `hwid (email) has invalid count of parts` | অনুপস্থিত বা অতিরিক্ত `@`। |
| `hwid (email) has invalid local part` | `@`-এর আগের অংশটি অবৈধ। |
| `hwid (email) has invalid domain part` | ডোমেন অংশটি অবৈধ। |
| `hwid (email) has disposable domain` | অ্যাড্রেসটি একটি ডিসপোজেবল/অস্থায়ী ইমেল ডোমেন ব্যবহার করে (যেমন 10minutemail)। |
| `hwid is not valid` | `hwid` নিজেই ভুল ফরম্যাটের। |
| `only email platform allowed for Email Only subscription` | অ্যাকাউন্টটি একটি ইমেল অনলি প্ল্যানে রয়েছে এবং নন-ইমেল ডিভাইস রেজিস্টার করতে পারে না। |

<Aside type="note">
শুধুমাত্র **স্থায়ী (হার্ড) বাউন্স** একটি অ্যাড্রেসকে ব্ল্যাকলিস্টে যুক্ত করে। সফট বাউন্স এবং স্প্যাম অভিযোগ `registerEmail` ব্লক করে **না** — শুধুমাত্র `this hwid (email) is blacklisted` দমন প্রতিফলিত করে।
</Aside>

## deleteEmail

আপনার ইউজার বেস থেকে ইমেল অ্যাড্রেস মুছে ফেলে।

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

#### রিকোয়েস্ট হেডার

| নাম | প্রয়োজনীয় | মান | বিবরণ |
|---------------|----------|---------------|------------------------------------------------------------|
| Authorization | হ্যাঁ | Token `XXXX` | ডিভাইস API অ্যাক্সেস করার জন্য [API ডিভাইস টোকেন](/bn/developer/api-reference/api-access-token/#device-api-token)। `XXXX` কে আপনার আসল ডিভাইস API টোকেন দিয়ে প্রতিস্থাপন করুন। |


#### রিকোয়েস্ট বডি

| নাম | টাইপ | বিবরণ |
| ----------- | ------ | --------------------------------------------- |
| application | string | [Pushwoosh অ্যাপ্লিকেশন কোড](/bn/developer/api-reference/api-identifiers/#application-code) |
| email | string | [`/registerEmail`](/bn/developer/api-reference/email-api/#registeremail) রিকোয়েস্টে ব্যবহৃত ইমেল অ্যাড্রেস। |

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

```json title="উদাহরণ"
{
  "request": {
    "application": "APPLICATION_CODE",  // প্রয়োজনীয়। Pushwoosh অ্যাপ্লিকেশন কোড
    "email": "email@domain.com"         // প্রয়োজনীয়। অ্যাপ সাবস্ক্রাইবারদের থেকে মুছে ফেলার জন্য ইমেল।
  }
}
```

## setEmailTags

ইমেল অ্যাড্রেসের জন্য ট্যাগ ভ্যালু সেট করে।

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

#### রিকোয়েস্ট হেডার

| নাম | প্রয়োজনীয় | মান | বিবরণ |
|---------------|----------|---------------|------------------------------------------------------------|
| Authorization | হ্যাঁ | Token `XXXX` | ডিভাইস API অ্যাক্সেস করার জন্য [API ডিভাইস টোকেন](/bn/developer/api-reference/api-access-token/#device-api-token)। `XXXX` কে আপনার আসল ডিভাইস API টোকেন দিয়ে প্রতিস্থাপন করুন। |

#### রিকোয়েস্ট বডি

| নাম | টাইপ | বিবরণ |
| ----------- | ------ | ------------------------------------------------------------- |
| application | string | [Pushwoosh অ্যাপ্লিকেশন কোড](/bn/developer/api-reference/api-identifiers/#application-code) |
| email | string | ইমেল অ্যাড্রেস। |
| tags | object | সেট করার জন্য ট্যাগের JSON অবজেক্ট, মান মুছে ফেলার জন্য 'null' পাঠান। |
| userId | string | ইমেল অ্যাড্রেসের সাথে যুক্ত [User ID](/bn/developer/api-reference/api-identifiers/#user-id)। |

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

```json title="উদাহরণ"
{
  "request": {
    "email": "email@domain.com",                  // প্রয়োজনীয়। ট্যাগ সেট করার জন্য ইমেল অ্যাড্রেস।
    "application": "APPLICATION_CODE",            // প্রয়োজনীয়। Pushwoosh অ্যাপ্লিকেশন কোড।
    "tags": { 
      "StringTag": "string value",
      "IntegerTag": 42,
      "ListTag": ["string1", "string2"],
      "DateTag": "2024-10-02 22:11",              // UTC-তে সময়
      "BooleanTag": true                          // বৈধ মানগুলি হল: true, false
    },
    "userId": "userId"                            // ঐচ্ছিক। ইমেল অ্যাড্রেসের সাথে যুক্ত User ID।
  }
}
```

<Aside type="note">
অন্যান্য ডিভাইসের প্রকারের জন্য 200 OK ফেরত দেওয়া হবে, যদিও ট্যাগগুলি সেভ করা হবে না।
</Aside>

<Aside type="caution">
অনুগ্রহ করে একটি একক `/setEmailTags` রিকোয়েস্টে 50টির বেশি ট্যাগ ভ্যালু সেট করা থেকে বিরত থাকুন।
</Aside>

## registerEmailUser

একটি নির্দিষ্ট ইমেল অ্যাড্রেসের সাথে একটি এক্সটার্নাল [User ID](/bn/developer/api-reference/api-identifiers/#user-id) যুক্ত করে।

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



<Aside type="note">
অনুগ্রহ করে মনে রাখবেন যে এই মেথডটি আপনার ইউজার বেসে **একটি ইমেল অ্যাড্রেস রেজিস্টার করে না**; এটি শুধুমাত্র `/registerEmail` রিকোয়েস্ট দ্বারা ইতিমধ্যে রেজিস্টার করা ইমেল অ্যাড্রেসগুলিতে ইউজার আইডি অ্যাসাইন করার জন্য ব্যবহার করা উচিত।
</Aside>

`/createEmailMessage` API কলে ব্যবহার করা যেতে পারে ('users' প্যারামিটার)।

#### রিকোয়েস্ট হেডার

| নাম | প্রয়োজনীয় | মান | বিবরণ |
|---------------|----------|---------------|------------------------------------------------------------|
| Authorization | হ্যাঁ | Token `XXXX` | ডিভাইস API অ্যাক্সেস করার জন্য [API ডিভাইস টোকেন](/bn/developer/api-reference/api-access-token/#device-api-token)। `XXXX` কে আপনার আসল ডিভাইস API টোকেন দিয়ে প্রতিস্থাপন করুন। |


#### রিকোয়েস্ট বডি

| নাম | টাইপ | বিবরণ |
| --------------------------------------------- | ------- | ---------------------------------------------- |
| application\* | string | [Pushwoosh অ্যাপ্লিকেশন কোড](/bn/developer/api-reference/api-identifiers/#application-code) |
| email\* | string | ইমেল অ্যাড্রেস। |
| userId\* | string | ইমেল অ্যাড্রেসের সাথে যুক্ত করার জন্য [User ID](/bn/developer/api-reference/api-identifiers/#user-id)। |
| tz\_offset | integer | সেকেন্ডে টাইমজোন অফসেট। |

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

<TabItem label="400">
```json
{
  "status_code": 400,
  "status_message": "Request format is not valid."
}
```
</TabItem>

<TabItem label="403">
```json
{
  "status_code": 403,
  "status_message": "Forbidden."
}
```
</TabItem>
</Tabs>

```json title="উদাহরণ"
{
  "request": {
    "application": "APPLICATION_CODE", // প্রয়োজনীয়। Pushwoosh অ্যাপ্লিকেশন কোড।
    "email": "email@domain.com",       // প্রয়োজনীয়। ব্যবহারকারীর ইমেল অ্যাড্রেস।
    "userId": "userId",                // প্রয়োজনীয়। ইমেল অ্যাড্রেসের সাথে যুক্ত করার জন্য User ID।
    "tz_offset": 3600                  // ঐচ্ছিক। সেকেন্ডে টাইমজোন অফসেট।
  }
}
```

<Aside type="note">
সফট বাউন্স, হার্ড বাউন্স, এবং ইমেল অভিযোগের ডেটা পুনরুদ্ধার করতে, যার মধ্যে তারিখ, ইমেল অ্যাড্রেস, এবং প্রতিটি বাউন্সের কারণ অন্তর্ভুক্ত, [BouncedEmails](/bn/developer/api-reference/statistics-api/message-statistics-api/#bouncedemails) মেথডটি ব্যবহার করুন।
</Aside>