हर सेंड एक कैरियर डिलीवरी रसीद पैदा करता है। Bird उन रसीदों को country, carrier और sender के हिसाब से बाँटकर डिलीवरी, फेल्योर और लेटेंसी मेट्रिक्स में बदल देता है — dashboard में और एक stats API के ज़रिए जिसे आप अपने कोड से क्वेरी कर सकते हैं।
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.sms.send({
from: "Bird",
to: "+31612345678",
text: "Your order #4821 has shipped. Track it: bird.ly/t/4821x",
category: "transactional",
}).safe();
if (error) throw error;
console.log(data.id);
// → "sms_01m11jw130e7svjzv70kgqr38w"
उसी API का रिपोर्टिंग वाला पहलू।
इंस्ट्रुमेंट करने के लिए कुछ नया नहीं।
Analytics Bird SMS API का रिपोर्टिंग वाला पहलू है। आप पहले से ही इसके ज़रिए भेजते हैं और हर स्टेट बदलाव पर पहले से ही डिलीवरी webhook पाते हैं; analytics यानी Bird आपके लिए काउंट रखता है, ताकि इवेंट्स को पहले रखने के लिए वेयरहाउस खड़ा किए बिना आप पूछ सकें कि कोई कैंपेन कैसे डिलीवर हुआ।
डिलीवरी रसीद आपको क्या बताती है।
कैरियर से मापा गया, अनुमान से नहीं।
- 01
डिलीवरी रेट।
जितने सबमिट हुए, उनमें से जितने सेंड कैरियर ने डिलीवर होने की पुष्टि की, उनका हिस्सा। इसे हर country और हर sender के हिसाब से ट्रैक करें, न कि सिर्फ़ एक साइट-वाइड आँकड़े के रूप में जो उस रूट को छिपा देता है जो चुपचाप ड्रॉप हो रहा है।
- 02
कैरियर के हिसाब से फेल्योर के कारण।
फेल हुए सेंड में कैरियर का रीज़न कोड होता है, जो डेस्टिनेशन कैरियर (MCC/MNC) के हिसाब से समूहबद्ध होता है। कोई स्पाइक आमतौर पर एक ऑपरेटर द्वारा एक sender ID को अस्वीकार करने की वजह से होता है, जो एक रजिस्ट्रेशन फिक्स है, न कि प्लेटफ़ॉर्म आउटेज।
- 03
सेगमेंट और लागत।
हर मैसेज अपनी encoding और segment count रिपोर्ट करता है, इसलिए वॉल्यूम उन सेगमेंट्स में जुड़ जाता है जिनके लिए आपसे असल में बिल लिया गया। जो रन Unicode में गया और उसके सेगमेंट दोगुने हो गए, वह यहाँ दिखता है, इनवॉइस पर नहीं।
- 04
डिलीवरी तक की लेटेंसी।
सबमिशन से डिलीवरी रसीद तक का समय, औसत के बजाय एक डिस्ट्रिब्यूशन के रूप में। दुनिया भर में लगभग 95% मैसेज 2.5 सेकंड से कम में कन्फर्म होते हैं; टेल वही जगह है जहाँ कोई खराब रूट अपना पता देता है।
अपने खुद के कोड से आँकड़े क्वेरी करें।
The stats API takes a time range and returns the rolled-up counts, one endpoint per dimension: by carrier to find the route that's underperforming, by originator to see which of your senders a carrier trusts, by country, category, status, error code, or tag. Each row carries its own dimension, so crossing two of them is two calls. The same aggregation backs the dashboard charts, so a number you screenshot matches a number you can pull on a schedule.
// One endpoint per dimension, and one dimension per row: "by country and
// carrier" is two calls, not one grouped query.
const { data: byCarrier, error } = await bird.sms.stats
.byCarrier({ from: "2026-06-01", to: "2026-06-26" })
.safe();
if (error) throw error;
console.log(byCarrier.data[0]);
// → {
// carrier: "Vivo",
// delivery: {
// accepted: 14820,
// sent: 14810,
// delivered: 14720,
// undelivered: 60,
// failed: 25,
// delivery_rate: 0.9932,
// },
// latency: { processing: { p50_ms: 480, p95_ms: 2310, p99_ms: 4100 } },
// }
किसी एक मैसेज की टाइमलाइन खींचें।
Aggregates answer how a campaign did; a support ticket asks about one text. Pass a single message ID to the events endpoint and you get its whole life in order: queued, sent, the carrier delivery receipt or the failure, each stamped with a time and, when it failed, the carrier's own reason code.
const { data: events, error } = await bird.sms
.listEvents("sms_01m11jw130e7svjzv70kgqr38w")
.safe();
if (error) throw error;
console.log(events.data);
// → [
// { id: "evt_01m11jw196...", type: "sms.accepted", occurred_at: "2026-06-26T10:00:00.110Z" },
// { id: "evt_01m11jw19h...", type: "sms.sent", occurred_at: "2026-06-26T10:00:00.640Z" },
// { id: "evt_01m11jx4c2...", type: "sms.delivered", occurred_at: "2026-06-26T10:00:02.300Z" },
// ]
जैसे भी सवाल हो, उसी सेंड्स को उसी हिसाब से स्लाइस करें।
Every breakdown reads from the same delivery receipts; the endpoint you call just changes the lens.
| आयाम | यह आपको क्या बताता है |
|---|---|
| Country | कहाँ डिलीवरी टिकी रहती है और कहाँ कोई डेस्टिनेशन ग्लोबल रेट को नीचे खींच रहा है। |
| Carrier (MCC/MNC) | किसी country के अंदर कौन-सा ऑपरेटर ट्रैफ़िक अस्वीकार कर रहा है, नेटवर्क कोड तक। |
| Sender | आपकी हर sender ID या नंबर पर कितना भरोसा है, क्योंकि रेपुटेशन प्रति-sender होती है। |
| Time bucket | कोई रेट कब बदला, ताकि कोई गिरावट किसी deploy, रजिस्ट्रेशन बदलाव, या आउटेज के साथ मेल खाए। |
डॉक्स में और गहराई से जानें।
डिलीवरी webhooks से अपना खुद का स्टोर बनाएँ, फेल्योर कोड का क्या मतलब है इसके लिए deliverability गाइड पढ़ें, और बिलिंग और उपयोग के साथ काउंट का मिलान करें।
रसीदें रूटिंग लेयर से आती हैं।
डिलीवरी रसीद उतनी ही अच्छी होती है जितना उसे पैदा करने वाला रास्ता: routing यह चुनता है कि हर मैसेज किस कैरियर लिंक से जाएगा और वह DLR वापस देता है जिससे ये मेट्रिक्स बनते हैं। अगर आप two-way नंबर चलाते हैं, तो इनबाउंड मैसेज भी यहीं गिने जाते हैं, इसलिए रिप्लाई वॉल्यूम उसी डिलीवरी रेट के बगल में बैठता है जिसने उसे कमाया।
Put it into practice.
Continue with the documentation, guides and examples for this topic. Resources are in English.
बाकी SMS प्लेटफ़ॉर्म
एक API, चाबियों का एक सेट। बाकी क्षमताओं को एक्सप्लोर करें।
मेट्रिक्स उसी API के साथ आते हैं जो उन्हें पैदा करती है।
Analytics कोई अलग खरीदने वाला प्रोडक्ट नहीं है। Bird SMS API के ज़रिए भेजें और डिलीवरी, फेल्योर और लेटेंसी की रिपोर्टिंग पहले से ही मौजूद है, उस इन्फ्रास्ट्रक्चर पर जो दुनिया के लगभग 40% कमर्शियल SMS को ढोता है।