Sign inGet Started

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

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

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

इवेंट्स कालानुक्रमिक क्रम में दिखते हैं। एक आउटबाउंड मैसेज whatsapp.failed या whatsapp.rejected पर रुक सकता है, और इसका whatsapp.read इवेंट तभी दिखता है जब प्राप्तकर्ता मैसेज खोलता है। इनबाउंड टाइमलाइन whatsapp.received से शुरू होती है और आपके वर्कस्पेस द्वारा मैसेज को रीड मार्क करने के बाद whatsapp.read रिकॉर्ड कर सकती है।
इवेंटअर्थ
whatsapp.acceptedBird ने send अनुरोध स्वीकार किया। 202 ने यही रिपोर्ट किया था।
whatsapp.sentBird ने मैसेज को WhatsApp नेटवर्क को सौंपा।
whatsapp.deliveredWhatsApp ने प्राप्तकर्ता के डिवाइस पर डिलीवरी की पुष्टि की।
whatsapp.readप्राप्तकर्ता ने मैसेज खोला।
whatsapp.failedमैसेज डिलीवर नहीं हुआ। error.code बताता है कि क्या रुकावट आई।
whatsapp.rejectedBird ने मैसेज भेजने से पहले अस्वीकार कर दिया। इसका शुल्क नहीं लगा।
whatsapp.receivedBird ने किसी कॉन्टैक्ट से इनबाउंड मैसेज प्राप्त किया।
लागू delivered या read कॉलबैक Meta की कीमत के हिस्से को ट्रिगर कर सकते हैं। WhatsApp इवेंट पेलोड में कोई लागत नहीं होती। मैसेज की लागत देखने के लिए उसे GET /v1/whatsapp/messages/{message_id} से वापस पढ़ें। लागत और बिलिंग देखें।
इनबाउंड मैसेज को रीड मार्क करना उसकी टाइमलाइन में 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 कंपोनेंट के मुफ़्त होने का मतलब नहीं है। लागत और बिलिंग देखें।
इवेंट टाइप की सूची खुली है: समय के साथ नए टाइप जोड़े जा सकते हैं, इसलिए किसी अपरिचित वैल्यू को एरर के बजाय भविष्य का इवेंट मानें।

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

whatsapp.failed और whatsapp.rejected टर्मिनल हैं। रिजेक्शन का मतलब है कि Bird ने मैसेज को WhatsApp पर भेजने से पहले रोक दिया, इसलिए इसका शुल्क नहीं लगा। कारणों में दबाया गया या ऑप्ट-आउट किया हुआ प्राप्तकर्ता, अपर्याप्त वॉलेट बैलेंस, या बिना कॉन्फ़िगर की गई कीमत वाला गंतव्य शामिल हैं। फ़ेलियर का मतलब है कि मैसेज डिलीवर नहीं हुआ, और 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 कुंजी आवश्यक है:
const { data } = await bird.whatsapp.listEvents("wa_abc123");
for (const event of data) console.log(event.type, event.occurred_at);
एक मैसेज जो स्वीकार, भेजा, डिलीवर और रीड किया गया, चार इवेंट्स लौटाता है:
कोड उदाहरण
{
  "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 लॉग पेज पर तब रेंडर होती है जब आप कोई मैसेज खोलते हैं।
Bird डैशबोर्ड में WhatsApp मैसेज विवरण शीट, एक डिलीवर हुए bird_delivery_update मैसेज के लिए खोली गई: Events टैब में प्रति-मैसेज लाइफसाइकल टाइमलाइन Accepted, Sent, Delivered, और Read दिख रही है, प्रत्येक अपने बीते समय और टाइमस्टैम्प के साथ, धुंधली मैसेज सूची के ऊपर

अगले कदम