# WhatsApp संदेश स्थिति इवेंट

Bird इनबाउंड और आउटबाउंड WhatsApp मैसेज के लिए **इवेंट्स** रिकॉर्ड करता है। आउटबाउंड टाइमलाइन दिखाती है कि send द्वारा `202` लौटाने के बाद क्या हुआ: स्वीकृति, WhatsApp को हैंडऑफ़, डिलीवरी, रीडिंग, या फ़ेलियर। इनबाउंड टाइमलाइन रिकॉर्ड करती है कि Bird ने मैसेज कब प्राप्त किया।

यह पेज API के ज़रिए उस टाइमलाइन को पढ़ने के बारे में है। Bird से हर इवेंट होते ही आपके endpoint पर पुश करवाने के लिए, [संदेश स्थिति webhooks](/docs/guides/whatsapp/webhooks/message-status) देखें। Reactions का अपना अलग इतिहास है, जो [Reaction इवेंट](/docs/guides/whatsapp/events/reactions) में शामिल है।

## लाइफसाइकल इवेंट्स

इवेंट्स कालानुक्रमिक क्रम में दिखते हैं। एक आउटबाउंड मैसेज [`whatsapp.failed` या `whatsapp.rejected`](#फ़ेलियर-इवेंट्स) पर रुक सकता है, और इसका `whatsapp.read` इवेंट तभी दिखता है जब प्राप्तकर्ता मैसेज खोलता है। इनबाउंड टाइमलाइन `whatsapp.received` से शुरू होती है और आपके वर्कस्पेस द्वारा मैसेज को रीड मार्क करने के बाद `whatsapp.read` रिकॉर्ड कर सकती है।

| इवेंट                | अर्थ                                                               |
| -------------------- | ------------------------------------------------------------------ |
| `whatsapp.accepted`  | Bird ने send अनुरोध स्वीकार किया। `202` ने यही रिपोर्ट किया था।    |
| `whatsapp.sent`      | Bird ने मैसेज को WhatsApp नेटवर्क को सौंपा।                        |
| `whatsapp.delivered` | WhatsApp ने प्राप्तकर्ता के डिवाइस पर डिलीवरी की पुष्टि की।        |
| `whatsapp.read`      | प्राप्तकर्ता ने मैसेज खोला।                                        |
| `whatsapp.failed`    | मैसेज डिलीवर नहीं हुआ। `error.code` बताता है कि क्या रुकावट आई।    |
| `whatsapp.rejected`  | Bird ने मैसेज भेजने से पहले अस्वीकार कर दिया। इसका शुल्क नहीं लगा। |
| `whatsapp.received`  | Bird ने किसी कॉन्टैक्ट से इनबाउंड मैसेज प्राप्त किया।              |

लागू `delivered` या `read` कॉलबैक Meta की कीमत के हिस्से को ट्रिगर कर सकते हैं। WhatsApp इवेंट पेलोड में कोई लागत नहीं होती। मैसेज की लागत देखने के लिए उसे [`GET /v1/whatsapp/messages/{message_id}`](/docs/api/reference/get-whatsapp-message) से वापस पढ़ें। [लागत और बिलिंग](/docs/guides/whatsapp/sending-whatsapp#cost-and-billing) देखें।

[इनबाउंड मैसेज को रीड मार्क करना](/docs/guides/whatsapp/mark-message-as-read) उसकी टाइमलाइन में `whatsapp.read` रिकॉर्ड करता है लेकिन कोई read acknowledgement वेबहुक emit नहीं करता। इनबाउंड मैसेज अपना `received` स्टेटस बनाए रखता है और WhatsApp द्वारा acknowledgement स्वीकार करने के बाद `read_at` रिकॉर्ड करता है।

`whatsapp.read` मैसेज का `status` **नहीं** बदलता। एक डिलीवर हुआ मैसेज `delivered` रहता है; मैसेज `read_at` में भी रीड रिकॉर्ड करता है।

**`whatsapp.delivered` पूरी तरह स्किप हो सकता है।** जब प्राप्तकर्ता का चैट पहले से उनके डिवाइस पर खुला होता है, तो Meta बिना डिलीवरी रिपोर्ट किए सीधे रीड रिपोर्ट करता है, इसलिए टाइमलाइन `whatsapp.accepted` → `whatsapp.sent` → `whatsapp.read` पढ़ती है और बीच में कोई `whatsapp.delivered` नहीं होता। `read` को डिलीवरी का प्रमाण मानें: जो कंज़्यूमर मैसेज लैंड हुआ मानने से पहले `delivered` का इंतज़ार करता है, वह ठीक उन्हीं प्राप्तकर्ताओं पर अटक जाएगा जिन्होंने मैसेज सबसे तेज़ देखा, और जो केवल `delivered` से डिलीवरी रेट गिनता है, वह इसे कम रिपोर्ट करता है। इस स्थिति में मैसेज का `status` `sent` बना रहता है, क्योंकि केवल डिलीवरी रसीद ही इसे आगे बढ़ाती है।

केवल-रीड कॉलबैक भी लागू Meta शुल्क ट्रिगर कर सकता है। Bird delivered और read दोनों पाथ में एक ही शुल्क पहचान का उपयोग करता है; डिलीवरी इवेंट का न होना Meta कंपोनेंट के मुफ़्त होने का मतलब नहीं है। [लागत और बिलिंग](/docs/guides/whatsapp/sending-whatsapp#cost-and-billing) देखें।

इवेंट टाइप की सूची खुली है: समय के साथ नए टाइप जोड़े जा सकते हैं, इसलिए किसी अपरिचित वैल्यू को एरर के बजाय भविष्य का इवेंट मानें।

## फ़ेलियर इवेंट्स

`whatsapp.failed` और `whatsapp.rejected` टर्मिनल हैं। **रिजेक्शन** का मतलब है कि Bird ने मैसेज को WhatsApp पर भेजने से पहले रोक दिया, इसलिए इसका शुल्क नहीं लगा। कारणों में [दबाया गया या ऑप्ट-आउट किया हुआ प्राप्तकर्ता](/docs/guides/whatsapp/opt-outs), अपर्याप्त वॉलेट बैलेंस, या बिना कॉन्फ़िगर की गई कीमत वाला गंतव्य शामिल हैं। **फ़ेलियर** का मतलब है कि मैसेज डिलीवर नहीं हुआ, और `error.code` बताता है कि यह किसने तय किया। अधिकांश कोड WhatsApp का निर्णय दर्शाते हैं, जो उसके रिपोर्ट किए गए कोड से मैप किया गया है। `internal_error` अपवाद है: यह किसी उपयोग योग्य सेंडर क्रेडेंशियल की कमी या प्रोसेसिंग रीट्राई समाप्त होने को रिकॉर्ड करता है। एक अनिश्चित ट्रांसपोर्ट प्रयास यह साबित नहीं करता कि Meta ने अनुरोध कभी प्राप्त नहीं किया। `meta_error_code` में उपलब्ध होने पर WhatsApp का कोड होता है, और `internal_error` फ़ेलियर में स्वभाव से कोई कोड नहीं होता।

दोनों इवेंट्स में एक `error` ऑब्जेक्ट होता है जिसमें एक स्थिर Bird `code`, एक मानव-पठनीय `description`, एक वैकल्पिक `meta_error_code`, और `occurred_at` शामिल हैं। यह ऑब्जेक्ट API रिकॉर्ड और वेबहुक पेलोड में केवल इन्हीं इवेंट टाइप के लिए दिखता है।

## API से इवेंट्स पढ़ना

`GET /v1/whatsapp/messages/{message_id}/events` टाइमलाइन को कालानुक्रमिक क्रम में लौटाता है। सीमित सूची पेजिनेटेड नहीं है। इवेंट्स पढ़ने के लिए `whatsapp:read` के साथ एक API कुंजी आवश्यक है:

**TypeScript**

```typescript
const { data } = await bird.whatsapp.listEvents("wa_abc123");
for (const event of data) console.log(event.type, event.occurred_at);
```

Examples: [TypeScript](/hi-in/dastavez/guides/whatsapp/events/message-status.ts.md) · [Python](/hi-in/dastavez/guides/whatsapp/events/message-status.py.md) · [Go](/hi-in/dastavez/guides/whatsapp/events/message-status.go.md) · [PHP](/hi-in/dastavez/guides/whatsapp/events/message-status.php.md) · [CLI](/hi-in/dastavez/guides/whatsapp/events/message-status.cli.md) · [MCP](/hi-in/dastavez/guides/whatsapp/events/message-status.mcp.md) · [cURL](/hi-in/dastavez/guides/whatsapp/events/message-status.curl.md)

एक मैसेज जो स्वीकार, भेजा, डिलीवर और रीड किया गया, चार इवेंट्स लौटाता है:

```json
{
  "data": [
    {
      "id": "ev_01ky7q6a1fejfbvs0myn41hj41",
      "occurred_at": "2026-07-23T14:48:34.71Z",
      "type": "whatsapp.accepted"
    },
    {
      "id": "ev_01ky7q6a2denvtd6jg1vqwmg13",
      "occurred_at": "2026-07-23T14:48:35.671Z",
      "type": "whatsapp.sent"
    },
    {
      "id": "ev_01ky7q6a2zff9r2qm74mmg1g6z",
      "occurred_at": "2026-07-23T14:48:36.642Z",
      "type": "whatsapp.delivered"
    },
    {
      "id": "ev_01ky7q6c21frssf0vj8h50qysw",
      "occurred_at": "2026-07-23T14:48:38.65Z",
      "type": "whatsapp.read"
    }
  ]
}
```

एक सटीक पब्लिक इवेंट टाइप लौटाने के लिए `type` पास करें, जैसे `?type=whatsapp.failed` या `?type=whatsapp.read`। पूरी टाइमलाइन के लिए इसे छोड़ दें।

यही टाइमलाइन [WhatsApp लॉग](/docs/guides/whatsapp/message-log) पेज पर तब रेंडर होती है जब आप कोई मैसेज खोलते हैं।

![Bird डैशबोर्ड में WhatsApp मैसेज विवरण शीट, एक डिलीवर हुए bird_delivery_update मैसेज के लिए खोली गई: Events टैब में प्रति-मैसेज लाइफसाइकल टाइमलाइन Accepted, Sent, Delivered, और Read दिख रही है, प्रत्येक अपने बीते समय और टाइमस्टैम्प के साथ, धुंधली मैसेज सूची के ऊपर](/images/docs/dashboard-whatsapp-detail.png)

## अगले कदम

- [संदेश स्थिति webhooks](/docs/guides/whatsapp/webhooks/message-status): हर इवेंट होते ही प्राप्त करें
- [रिऐक्शन इवेंट्स](/docs/guides/whatsapp/events/reactions): वर्तमान रिऐक्शन और रिऐक्शन लॉग पढ़ें
- [मैसेज को रीड मार्क करें](/docs/guides/whatsapp/mark-message-as-read): इनबाउंड मैसेज को acknowledge करें और टाइपिंग दिखाएँ
- [WhatsApp लॉग](/docs/guides/whatsapp/message-log): प्रति-मैसेज व्यू जो यह टाइमलाइन रेंडर करता है
- [WhatsApp मैसेज भेजना](/docs/guides/whatsapp/sending-whatsapp): जहाँ से मैसेज का लाइफसाइकल शुरू होता है

## Related resources

- [Connecting WhatsApp to Bird: from buying a number to a live channel](/learn/whatsapp/connecting-whatsapp-to-bird) (video)
- [What is the 24-hour customer service window on WhatsApp?](/explained/whatsapp/what-is-the-24-hour-customer-service-window) (answer)
- [WhatsApp message builder](/tools/whatsapp-message-builder) (tool)
- [WhatsApp](/whatsapp-api) (product)

[Get an implementation brief](/learn/workspace?topic=whatsapp)
