# বাতিল করুন

`POST` `https://api.pushwoosh.com/messaging/v2/cancel`

পূর্বে তৈরি করা একটি মেসেজ বাতিল করে, যা তার `message_code` দ্বারা চিহ্নিত করা হয়। বাতিলকরণ শুধুমাত্র তখনই সম্ভব যখন মেসেজটি এই অবস্থাগুলির মধ্যে একটিতে থাকে:

-   **pending:** তৈরি করা হয়েছে কিন্তু এখনও পাঠানোর জন্য গ্রহণ করা হয়নি।
-   **waiting:** ভবিষ্যতের কোনো সময়ে পাঠানোর জন্য নির্ধারিত।
-   **processing:** বর্তমানে ডেলিভারির জন্য প্রস্তুত করা হচ্ছে।

<Aside type="caution" title="গুরুত্বপূর্ণ">

-   যদি মেসেজটি `processing` অবস্থায় থাকে, তাহলে বাতিলকরণ শুধুমাত্র সেই ডেলিভারিগুলি বন্ধ করে যা এখনও পাঠানো হয়নি। যারা ইতিমধ্যে মেসেজটি পেয়েছেন, তাদের কাছে এটি থাকতে পারে।

-   যদি মেসেজটি ইতিমধ্যে বাতিল করা হয়ে থাকে বা পাঠানো শেষ হয়ে গিয়ে থাকে, তাহলে API `400` রিটার্ন করে। এই কলটি আইডেম্পোটেন্ট (idempotent) নয়। পুনরায় চেষ্টা করার আগে মেসেজের স্ট্যাটাস পরীক্ষা করুন।
</Aside>

একটি মেসেজ এখনও বাতিলযোগ্য অবস্থায় আছে কিনা তা পরীক্ষা করতে, দেখুন [মেসেজের স্ট্যাটাস পরীক্ষা করা](#checking-message-status)।


## অনুরোধ

`Authorization: Token <API_TOKEN>` হেডারে আপনার [সার্ভার API টোকেন](/bn/developer/api-reference/api-access-token/#server-api-token) দিয়ে প্রমাণীকরণ করুন।

| ফিল্ড | টাইপ | প্রয়োজনীয় | বর্ণনা |
|---|---|---|---|
| `message_code` | string | হ্যাঁ | বাতিল করার জন্য মেসেজের [মেসেজ কোড](/bn/developer/api-reference/api-identifiers/#message-code), যা [`Notify`](/bn/developer/api-reference/messaging-api-v2/notify/) দ্বারা `result.message_code`-এ রিটার্ন করা হয়। |

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

```bash
curl -X POST https://api.pushwoosh.com/messaging/v2/cancel \
  -H "Authorization: Token YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "message_code": "XXXX-XXXXXXXX-XXXXXXXX"
  }'
```

## প্রতিক্রিয়া

সফল হলে, একটি খালি JSON বডি সহ HTTP 200 রিটার্ন করে।

```json
{}
```

## ত্রুটি

ত্রুটিগুলি স্ট্যান্ডার্ড gRPC-Gateway এরর এনভেলপ ব্যবহার করে: `{ "code": ..., "message": ..., "details": [...] }`।

| HTTP স্ট্যাটাস | শর্ত |
|---|---|
| `400` | `message_code` অনুপস্থিত। |
| `400` | মেসেজটি বাতিলযোগ্য অবস্থায় নেই (এটি আর `pending`, `waiting`, বা `processing` অবস্থায় নেই)। |
| `403` | মেসেজটি অন্য অ্যাকাউন্টের। |
| `404` | প্রদত্ত `message_code`-এর জন্য কোনো মেসেজ বিদ্যমান নেই। |
| `500` | মেসেজ লোড করার সময় বা বাতিলকরণ প্রকাশ করার সময় একটি অভ্যন্তরীণ ত্রুটি ঘটেছে। অনুরোধটি পুনরায় চেষ্টা করুন। |


**উদাহরণ**

এমন একটি মেসেজ বাতিল করা যা আর বিদ্যমান নেই, HTTP `404` রিটার্ন করে:

```json
{
  "code": 5,
  "message": "message not found",
  "details": []
}
```

## মেসেজের স্ট্যাটাস পরীক্ষা করা

বাতিল করার আগে, আপনি যাচাই করতে পারেন যে একটি মেসেজ এখনও বাতিলযোগ্য অবস্থায় আছে কিনা। কন্ট্রোল প্যানেলের মেসেজ টেবিলে ([**Campaigns → One-time messages**](/bn/product/statistics-and-analytics/message-history/)) **স্ট্যাটাস** কলামটি পড়া ছাড়াও, আপনি [`messages:list`](/bn/developer/api-reference/statistics-api/message-statistics-api/#messageslist) ব্যবহার করে প্রোগ্রাম্যাটিকভাবে স্ট্যাটাস জিজ্ঞাসা করতে পারেন:

-   `filters.messages_codes` অ্যারেতে `message_code` পাস করুন (প্রয়োজনীয় `filters.application`-এর পাশাপাশি)।
-   `items[]`-এর মধ্যে ম্যাচিং এন্ট্রির `status` ফিল্ডটি পড়ুন।

<Aside type="note">
`messages:list` স্ট্যাটিস্টিকস API-এর একটি অংশ এবং এই এন্ডপয়েন্টের চেয়ে ভিন্ন একটি অথ হেডার ব্যবহার করে: `Authorization: Api <Server Key>`।
</Aside>

## সম্পর্কিত

<CardGrid>
  <LinkCard title="নোটিফাই" href="/developer/api-reference/messaging-api-v2/notify/" />
  <LinkCard title="আপডেট" href="/developer/api-reference/messaging-api-v2/update/" />
  <LinkCard title="মেসেজ পরিসংখ্যান" href="/developer/api-reference/statistics-api/message-statistics-api/#messageslist" />
  <LinkCard title="মেসেজিং API v2 ওভারভিউ" href="/developer/api-reference/messaging-api-v2/" />
  <LinkCard title="v1 থেকে মাইগ্রেশন" href="/developer/api-reference/messaging-api-v2/migration-from-v1/" />
</CardGrid>