# অ্যাসিঙ্ক্রোনাস মেসেজ পরিসংখ্যান এক্সপোর্ট

`exportMessagesStatistics` সার্ভারে মেসেজ হিস্ট্রি এবং পরিসংখ্যান একটি CSV ফাইলে এক্সপোর্ট করে। এটি বড় বা সম্পূর্ণ অ্যাকাউন্টের ডেটা আনার জন্য ব্যবহার করুন যা [`messages:list`](/bn/developer/api-reference/statistics-api/message-statistics-api/#messageslist) হ্যান্ডেল করতে পারে না।

## কখন messages:list এর পরিবর্তে এক্সপোর্ট ব্যবহার করবেন

একটি নির্দিষ্ট সময়ের লাইভ, পেজিনেটেড লুকআপের জন্য `messages:list` ব্যবহার করুন। `exportMessagesStatistics` ব্যবহার করুন যখন ফলাফল `messages:list`-এর ডিপ-পেজিনেশন সীমা (`page × per_page > 100000`) অতিক্রম করবে, অথবা যখন লক্ষ্য পেজ করা JSON-এর পরিবর্তে একটি একক ডাউনলোডযোগ্য ফাইল হবে। এক্সপোর্টের `date_range` বা সারির সংখ্যার উপর কোনো সীমা নেই, কারণ এটি ফলাফলটি একটি প্রতিক্রিয়াতে ধরে রাখার পরিবর্তে ডিস্কের একটি ফাইলে স্ট্রিম করে।

## এক্সপোর্ট ফ্লো কীভাবে কাজ করে

১. `messages:list`-এর মতো একই ফিল্টার ব্যবহার করে [`export`](#export) কল করুন। ফাইল তৈরি হওয়ার আগেই প্রতিক্রিয়াটি অবিলম্বে একটি `uid` টাস্ক আইডেন্টিফায়ার ফেরত দেয়।
২. সেই `uid` দিয়ে [`status`](#status) পোল করুন যতক্ষণ না এটি `STATUS_SUCCESS` (বা `STATUS_FAILED`) রিপোর্ট করে।
৩. জেনারেট করা ফাইলের নাম পেতে একই `uid` দিয়ে [`result`](#result) কল করুন।
৪. নাম দিয়ে ফাইলটি [ডাউনলোড](#download) করুন।

একটি অ্যাপ্লিকেশনের জন্য সাম্প্রতিক এক্সপোর্ট টাস্কগুলি খুঁজতে [`lastTasks`](#lasttasks) ব্যবহার করুন, এবং একটি টাস্ক বাতিল করতে বা তার ফাইলটি আগে সরিয়ে ফেলতে [`delete`](#delete) ব্যবহার করুন।

## মেথড

এক্সপোর্ট লাইফসাইকেলে পাঁচটি মেথড রয়েছে, সাথে একটি সাধারণ ডাউনলোড এন্ডপয়েন্ট:

| মেথড | বিবরণ |
|--------|--------------|
| [`exportMessagesStatistics/export`](#export) | একটি এক্সপোর্ট কিউতে যোগ করে এবং একটি টাস্ক `uid` ফেরত দেয়। |
| [`exportMessagesStatistics/status`](#status) | টাস্কের অগ্রগতি পরীক্ষা করে। |
| [`exportMessagesStatistics/result`](#result) | টাস্ক শেষ হয়ে গেলে জেনারেট করা ফাইলের নাম ফেরত দেয়। |
| [`exportMessagesStatistics/lastTasks`](#lasttasks) | একটি অ্যাপ্লিকেশনের জন্য সাম্প্রতিক এক্সপোর্ট টাস্ক তালিকাভুক্ত করে। |
| [`exportMessagesStatistics/delete`](#delete) | রিটেনশন উইন্ডো শেষ হওয়ার আগে একটি টাস্ক বাতিল করে বা তার ফাইল সরিয়ে দেয়। |
| [ডাউনলোড](#download) | নাম দিয়ে জেনারেট করা CSV ফাইল ডাউনলোড করে। |

### export

একটি মেসেজ হিস্ট্রি এক্সপোর্ট কিউতে যোগ করে এবং সাথে সাথে একটি টাস্ক আইডেন্টিফায়ার ফেরত দেয়।

`POST` `https://api.pushwoosh.com/api/v2/statistics/exportMessagesStatistics/export`

##### হেডার

রিকোয়েস্টের জন্য একটি সার্ভার API টোকেন প্রয়োজন:

| নাম | প্রয়োজনীয় | বিবরণ |
|------------------|----------|---------------------------------------------------------------------------------------------------------|
| `Authorization` | হ্যাঁ | [সার্ভার API টোকেন](/bn/developer/api-reference/api-access-token/#server-api-token)। অবশ্যই নিম্নলিখিত ফরম্যাটে প্রদান করতে হবে: `Authorization: Api <Server Key>`। |

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

রিকোয়েস্ট বডি নিম্নলিখিত ফিল্ডগুলি গ্রহণ করে:

| নাম | প্রয়োজনীয় | টাইপ | বিবরণ |
|----------------------------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------|
| `type` | হ্যাঁ | স্ট্রিং | অবশ্যই <code>"TASK_TYPE_EXPORT<wbr/>_MESSAGES_V2"</code> হতে হবে। |
| <code>export_messages<wbr/>_v2</code> | হ্যাঁ | অবজেক্ট | এক্সপোর্ট প্যারামিটার, নিচে বর্ণিত। |
| <code>export_messages<wbr/>_v2.application<wbr/>_code</code> | নোট দেখুন | স্ট্রিং | [Pushwoosh অ্যাপ্লিকেশন কোড](/bn/developer/api-reference/api-identifiers/#application-code)। `app_group_code` সেট করা না থাকলে এটি প্রয়োজনীয়। |
| <code>export_messages<wbr/>_v2.app<wbr/>_group_code</code> | নোট দেখুন | স্ট্রিং | অ্যাপ্লিকেশন গ্রুপ কোড, গ্রুপের প্রতিটি অ্যাপ জুড়ে এক্সপোর্ট করে। `application_code` সেট করা না থাকলে এটি প্রয়োজনীয়। |
| <code>export_messages<wbr/>_v2.search</code> | না | স্ট্রিং | মেসেজের শিরোনাম এবং বিষয়বস্তুর উপর ফ্রি-টেক্সট সার্চ। |
| <code>export_messages<wbr/>_v2.filters</code> | না | অবজেক্ট | মেসেজ ফিল্টার, নিচে বর্ণিত। সম্পূর্ণ অ্যাকাউন্ট হিস্ট্রি এক্সপোর্ট করতে এটি বাদ দিন। |
| <code>export_messages<wbr/>_v2.properties</code> | না | অ্যারে | CSV-তে অন্তর্ভুক্ত করার জন্য কলাম, নিচে বর্ণিত। |

`export_messages_v2.filters` গ্রহণ করে:

| নাম <div style="width:150px"></div> | টাইপ | বিবরণ |
|---------------------------------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------|
| `statuses` | অ্যারে | অন্তর্ভুক্ত করার জন্য মেসেজের স্ট্যাটাস। <details><summary>সম্ভাব্য মান</summary><ul><li><code>"MESSAGE_STATUS_CANCELED"</code></li><li><code>"MESSAGE_STATUS_CREATING"</code></li><li><code>"MESSAGE_STATUS_DONE"</code></li><li><code>"MESSAGE_STATUS_FAIL"</code></li><li><code>"MESSAGE_STATUS_PENDING"</code></li><li><code>"MESSAGE_STATUS_PROCESSING"</code></li><li><code>"MESSAGE_STATUS_WAITING"</code></li></ul></details> |
| `platforms` | অ্যারে | [প্ল্যাটফর্ম কোড](/bn/developer/api-reference/messages-api/api-prerequisites/#platforms) (সংখ্যাসূচক, যেমন iOS-এর জন্য `1`), `messages:list` দ্বারা ব্যবহৃত প্ল্যাটফর্মের নামের স্ট্রিং নয়। |
| `sent_date` | অবজেক্ট | প্রেরণের তারিখের উপর ভিত্তি করে রিপোর্টিং সময়কাল ফিল্টার করা হয়েছে: `{"date_from": "YYYY-MM-DD", "date_to": "YYYY-MM-DD"}`। |
| `created_date` | অবজেক্ট | মেসেজ তৈরির তারিখের উপর ভিত্তি করে রিপোর্টিং সময়কাল ফিল্টার করা হয়েছে, `sent_date`-এর মতো একই ফরম্যাট। |
| `created_via` | অ্যারে | মেসেজের উৎস। <details><summary>সম্ভাব্য মান</summary><ul><li><code>"AB_TEST"</code></li><li><code>"API"</code></li><li><code>"AUTO_PUSH"</code></li><li><code>"CP"</code></li><li><code>"CSV"</code></li><li><code>"CUSTOMER_JOURNEY"</code></li><li><code>"EMAIL_API"</code></li><li><code>"EMAIL_CP"</code></li><li><code>"GEO_ZONE"</code></li><li><code>"PUSH_ON_EVENT"</code></li><li><code>"RSS"</code></li><li><code>"SYSTEM"</code></li></ul></details> |
| `segments` | অ্যারে | মেসেজটি যে [ফিল্টার কোড](/bn/developer/api-reference/api-identifiers/#segment--filter-code)-এ পাঠানো হয়েছিল। |
| `campaigns` | অ্যারে | [ক্যাম্পেইন কোড](/bn/developer/api-reference/api-identifiers/#campaign-code)। `messages:list`-এর মতো নয়, এটি একটি তালিকা নেয়, একটি একক কোড নয়। |
| `message_id` | স্ট্রিং (uint64) | একটি একক সংখ্যাসূচক মেসেজ আইডি, কোট করা। `messages:list`-এর মতো নয়, এক্সপোর্ট একটি আইডি নেয়, একটি অ্যারে নয়। |
| `message_code` | স্ট্রিং | একটি একক [মেসেজ কোড](/bn/developer/api-reference/api-identifiers/#message-code)। |

`export_messages_v2.properties` নির্বাচন করে যে CSV-তে কোন কলামগুলি থাকবে।

<details>
<summary>সম্ভাব্য মান</summary>

- `"EXPORT_MESSAGE_PROPERTY_ID"`
- `"EXPORT_MESSAGE_PROPERTY_TIMESTAMP"`
- `"EXPORT_MESSAGE_PROPERTY_CONTENT"`
- `"EXPORT_MESSAGE_PROPERTY_TITLE"`
- `"EXPORT_MESSAGE_PROPERTY_APPLICATIONS"`
- `"EXPORT_MESSAGE_PROPERTY_STATUS"`
- `"EXPORT_MESSAGE_PROPERTY_PLATFORMS"`
- `"EXPORT_MESSAGE_PROPERTY_SOURCE"`
- `"EXPORT_MESSAGE_PROPERTY_FILTER"`
- `"EXPORT_MESSAGE_PROPERTY_SUBSCRIPTION_SEGMENTS"`
- `"EXPORT_MESSAGE_PROPERTY_SENT"`
- `"EXPORT_MESSAGE_PROPERTY_OPENED"`
- `"EXPORT_MESSAGE_PROPERTY_ERRORS"`
- `"EXPORT_MESSAGE_PROPERTY_RECIPIENTS"`
- `"EXPORT_MESSAGE_PROPERTY_DELIVERED"`
- `"EXPORT_MESSAGE_PROPERTY_TOTAL_DELIVERED"`
- `"EXPORT_MESSAGE_PROPERTY_TOTAL_OPENED"`
- `"EXPORT_MESSAGE_PROPERTY_TOTAL_CLICKS"`
- `"EXPORT_MESSAGE_PROPERTY_CLICKS"`
- `"EXPORT_MESSAGE_PROPERTY_UNSUBSCRIBED"`

</details>

<Aside type="caution" title="properties শুধু একটি ফিল্টার নয়">
`properties`-এ তালিকাভুক্ত নয় এমন কোনো প্রপার্টি ফাইলে আদৌ প্রদর্শিত হবে না, বেস কলামগুলি (ID, পাঠানোর তারিখ, বিষয়বস্তু, স্ট্যাটাস) সহ। `properties` খালি রাখলে কোনো কলাম ছাড়াই একটি CSV তৈরি হয়। এক্সপোর্টে থাকা উচিত এমন প্রতিটি কলাম তালিকাভুক্ত করুন, শুধুমাত্র ডিফল্ট সেটের উপরে আপনি যে মেট্রিকগুলি যোগ করতে চান তা নয়।
</Aside>

##### উদাহরণ রিকোয়েস্ট

```json
{
  "type": "TASK_TYPE_EXPORT_MESSAGES_V2",
  "export_messages_v2": {
    "application_code": "XXXXX-XXXXX",
    "filters": {
      "created_date": {
        "date_from": "2026-01-01",
        "date_to": "2026-06-30"
      },
      "statuses": ["MESSAGE_STATUS_DONE"],
      "platforms": [1, 3]
    },
    "properties": [
      "EXPORT_MESSAGE_PROPERTY_ID",
      "EXPORT_MESSAGE_PROPERTY_TIMESTAMP",
      "EXPORT_MESSAGE_PROPERTY_STATUS",
      "EXPORT_MESSAGE_PROPERTY_PLATFORMS",
      "EXPORT_MESSAGE_PROPERTY_SENT",
      "EXPORT_MESSAGE_PROPERTY_OPENED"
    ]
  }
}
```

<Tabs>
<TabItem label="200: ওকে">
```json
{
  "uid": "177458"
}
```
</TabItem>
<TabItem label="401: ভুল API অ্যাক্সেস টোকেন">
```json
{
  "error": "account not found"
}
```
</TabItem>
</Tabs>

### status

একটি এক্সপোর্ট টাস্কের অগ্রগতি ফেরত দেয়।

`POST` `https://api.pushwoosh.com/api/v2/statistics/exportMessagesStatistics/status`

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

`export` দ্বারা ফেরত দেওয়া টাস্ক আইডেন্টিফায়ারটি পাস করুন:

| নাম | প্রয়োজনীয় | টাইপ | বিবরণ |
|-------|----------|---------|--------------------------------------------------|
| `uid` | হ্যাঁ | স্ট্রিং (int64) | `export` প্রতিক্রিয়া থেকে প্রাপ্ত টাস্ক আইডেন্টিফায়ার, যেমন `"177458"`। |

##### উদাহরণ রিকোয়েস্ট

```json
{
  "uid": "177458"
}
```

<Tabs>
<TabItem label="200: ওকে">
```json
{
  "status": "STATUS_SUCCESS",
  "progress": 1
}
```
</TabItem>
</Tabs>

`status` হল `"STATUS_PENDING"`, `"STATUS_SUCCESS"`, বা `"STATUS_FAILED"`-এর মধ্যে একটি। `progress` হল `0` এবং `1`-এর মধ্যে একটি ভগ্নাংশ; `result` কল করার আগে `status` পোল করুন যতক্ষণ না এটি `"STATUS_SUCCESS"`-এ পৌঁছায়।

### result

টাস্ক সম্পন্ন হয়ে গেলে জেনারেট করা ফাইলের নাম ফেরত দেয়।

`POST` `https://api.pushwoosh.com/api/v2/statistics/exportMessagesStatistics/result`

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

`export` দ্বারা ফেরত দেওয়া একই টাস্ক আইডেন্টিফায়ারটি পাস করুন:

| নাম | প্রয়োজনীয় | টাইপ | বিবরণ |
|-------|----------|---------|--------------------------------------------------|
| `uid` | হ্যাঁ | স্ট্রিং (int64) | `export` প্রতিক্রিয়া থেকে প্রাপ্ত টাস্ক আইডেন্টিফায়ার, যেমন `"177458"`। |

##### উদাহরণ রিকোয়েস্ট

```json
{
  "uid": "177458"
}
```

<Tabs>
<TabItem label="200: ওকে">
```json
{
  "export_messages_v2_result": {
    "file": "Export_Messages_v2_12345_20260813120000-a1b2c3d4.csv"
  }
}
```
</TabItem>
</Tabs>

`status` `"STATUS_SUCCESS"` রিপোর্ট করার আগে `result` কল করলে একটি খালি ফলাফল ফেরত আসে। `file` মানটি যেমন আছে তেমনই [ডাউনলোড এন্ডপয়েন্টে](#download) পাস করুন।

### lastTasks

একটি অ্যাপ্লিকেশনের জন্য সাম্প্রতিক এক্সপোর্ট টাস্ক তালিকাভুক্ত করে, সবচেয়ে সাম্প্রতিকটি প্রথমে।

`POST` `https://api.pushwoosh.com/api/v2/statistics/exportMessagesStatistics/lastTasks`

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

প্রতিটি প্যারামিটার একটি ঐচ্ছিক ফিল্টার; টোকেনের অ্যাক্সেস আছে এমন প্রতিটি টাস্ক তালিকাভুক্ত করতে সেগুলি সব বাদ দিন:

| নাম | প্রয়োজনীয় | টাইপ | বিবরণ |
|------------------|----------|---------|---------------------------------------------------------------------------------------|
| `application` | না | স্ট্রিং | [Pushwoosh অ্যাপ্লিকেশন কোড](/bn/developer/api-reference/api-identifiers/#application-code)। টোকেনের অ্যাক্সেস আছে এমন সমস্ত অ্যাপ্লিকেশন জুড়ে টাস্ক তালিকাভুক্ত করতে এটি বাদ দিন। |
| `types` | না | অ্যারে | নির্দিষ্ট টাস্ক টাইপের মধ্যে সীমাবদ্ধ করুন। শুধুমাত্র মেসেজ এক্সপোর্ট দেখতে <code>["TASK_TYPE_EXPORT<wbr/>_MESSAGES_V2"]</code> ব্যবহার করুন। |
| `campaign` | না | স্ট্রিং | [ক্যাম্পেইন কোড](/bn/developer/api-reference/api-identifiers/#campaign-code) দ্বারা ফিল্টার করুন। |
| `message_id` | না | স্ট্রিং (uint64) | একটি একক সংখ্যাসূচক মেসেজ আইডি দ্বারা ফিল্টার করুন, কোট করা। |
| `message_code` | না | স্ট্রিং | একটি একক [মেসেজ কোড](/bn/developer/api-reference/api-identifiers/#message-code) দ্বারা ফিল্টার করুন। |
| `limit` | না | ইন্টিজার | ফেরত দেওয়ার জন্য সর্বোচ্চ টাস্কের সংখ্যা। |
| `timestamp_from` | না | স্ট্রিং | শুধুমাত্র এই টাইমস্ট্যাম্পের (RFC 3339) পরে তৈরি করা টাস্কগুলি ফেরত দিন। |

<Aside type="note">
টাস্কগুলি 30 দিনের জন্য রাখা হয়, তাদের ফাইল 7-দিনের ফাইল রিটেনশন উইন্ডোর পরে মুছে ফেলা হয়েছে কিনা তা নির্বিশেষে। `lastTasks` এখনও এমন একটি টাস্ক দেখাতে পারে যার `result` আর ডাউনলোডযোগ্য ফাইলে সমাধান হয় না।
</Aside>

##### উদাহরণ রিকোয়েস্ট

```json
{
  "application": "XXXXX-XXXXX",
  "types": ["TASK_TYPE_EXPORT_MESSAGES_V2"],
  "limit": 10
}
```

<Tabs>
<TabItem label="200: ওকে">
```json
{
  "tasks": [
    {
      "id": "177458",
      "timestamp": "2026-08-13T12:00:00Z",
      "status": "STATUS_SUCCESS",
      "requested_by_user": "user@example.com",
      "export_messages_v2": {
        "application_code": "XXXXX-XXXXX"
      },
      "export_messages_v2_result": {
        "file": "Export_Messages_v2_12345_20260813120000-a1b2c3d4.csv"
      }
    }
  ]
}
```
</TabItem>
</Tabs>

### delete

7-দিনের রিটেনশন উইন্ডো শেষ হওয়ার আগে একটি টাস্ক এবং তার ফাইল মুছে ফেলে।

`POST` `https://api.pushwoosh.com/api/v2/statistics/exportMessagesStatistics/delete`

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

`export` দ্বারা ফেরত দেওয়া টাস্ক আইডেন্টিফায়ারটি পাস করুন:

| নাম | প্রয়োজনীয় | টাইপ | বিবরণ |
|-------|----------|---------|--------------------------------------------------|
| `uid` | হ্যাঁ | স্ট্রিং (int64) | `export` প্রতিক্রিয়া থেকে প্রাপ্ত টাস্ক আইডেন্টিফায়ার, যেমন `"177458"`। |

##### উদাহরণ রিকোয়েস্ট

```json
{
  "uid": "177458"
}
```

<Tabs>
<TabItem label="200: ওকে">
```json
{}
```
</TabItem>
</Tabs>

### ডাউনলোড

`result` দ্বারা জেনারেট করা CSV ফাইলটি নাম দিয়ে ডাউনলোড করে।

`GET` `https://api.pushwoosh.com/api/v2/statistics/exportMessagesStatistics/download/<file>`

##### হেডার

অন্যান্য মেথডগুলির মতো একই উপায়ে প্রমাণীকরণ করুন, অথবা একটি সক্রিয় কন্ট্রোল প্যানেল সেশনের উপর নির্ভর করুন:

| নাম | প্রয়োজনীয় | বিবরণ |
|------------------|----------|-----------------------------------------------------------------------------------------------------|
| `Authorization`| হ্যাঁ | [সার্ভার API টোকেন](/bn/developer/api-reference/api-access-token/#server-api-token), অন্যান্য `exportMessagesStatistics` মেথডগুলির মতো একই ফরম্যাটে: `Authorization: Api <Server Key>` (`Api` স্কিমটি কেস-ইনসেনসিটিভ)। `Authorization` হেডার ছাড়া এবং কোনো লগ-ইন করা কন্ট্রোল প্যানেল সেশন ছাড়া একটি রিকোয়েস্ট `401 Unauthorized` পায়। |

`<file>`-কে `result` প্রতিক্রিয়া থেকে প্রাপ্ত সঠিক `file` মান দিয়ে প্রতিস্থাপন করুন, উদাহরণস্বরূপ:

```
https://api.pushwoosh.com/api/v2/statistics/exportMessagesStatistics/download/Export_Messages_v2_12345_20260813120000-a1b2c3d4.csv
```

ফাইলটি একটি CSV যা `properties`-এ নির্বাচিত কলামগুলি ধারণ করে। এক্সপোর্ট শেষ হওয়ার পর এটি 7 দিনের জন্য উপলব্ধ থাকে, তারপর ক্লিনআপ জব এটি সরিয়ে দেয় এবং URLটি আর কাজ করে না।