Sign inGet Started

SMS भेजना

यह गाइड एक संदेश भेजने वाले एंडपॉइंट POST /v1/sms/messages के बारे में है। प्राप्तकर्ता, प्रेषक, संदेश का मुख्य भाग और श्रेणी के साथ एक JSON पेलोड बनाएँ। Bird संदेश ID के साथ 202 Accepted लौटाता है और संदेश को एसिंक्रोनस रूप से पहुँचाता है। हर अनुरोध एक प्राप्तकर्ता को एक संदेश भेजता है। एक साथ कई संदेश भेजने के लिए बैच में भेजना इस्तेमाल करें। अपने टेक्स्ट के बजाय टेम्पलेट भेजने के लिए text और category की जगह template ऑब्जेक्ट दें। बिल्ट-इन टेम्पलेट from को अस्वीकार करते हैं; वर्कस्पेस टेम्पलेट में यह ज़रूरी है।

भेजने से पहले: गंतव्य देश सक्षम करें

आपका वर्कस्पेस SMS केवल उन देशों में भेजता है जो उसकी गंतव्य अनुमति सूची में हैं। आपके संगठन का गृह देश उसकी व्यावसायिक प्रोफ़ाइल के पंजीकरण पते का देश होता है, या पंजीकरण पते में देश न होने पर बिलिंग पते का देश। आपका वर्कस्पेस खाली अनुमति सूची से शुरू होता है। जब भी गृह देश सेट किया जाता है या बदला जाता है, Bird उस देश को अनुमति सूची में जोड़ देता है। अनुमति सूची में न होने वाले देश को भेजे गए संदेश को Bird प्रेषक तय करने से पहले ही 422 SMSDestinationNotEnabled के साथ अस्वीकार कर देता है। जिन देशों में आप सेवा देते हैं, उन्हें डैशबोर्ड में SMS > Destinations के अंतर्गत सक्षम करें।

इसी पेज पर आप हर देश के लिए अपने वॉलेट की मुद्रा में दैनिक खर्च सीमा सेट कर सकते हैं। सीमा सेट करने के लिए संगठन का वॉलेट और उसे पढ़ने की अनुमति चाहिए; सीमा हटाने के लिए नहीं। सीमा लागू होती है, चाहे देश सक्षम हो या नहीं। उस देश पर आज का खर्च सीमा तक पहुँचते ही Bird वहाँ के नए संदेशों को UTC आधी रात तक 422 SMSDestinationDailySpendExceeded के साथ अस्वीकार करता है। सत्यापन संदेश भी अस्वीकार किए जाते हैं। खर्च तब गिना जाता है जब संदेश का शुल्क लगता है, इसलिए पहले से स्वीकार किए गए संदेश अपनी लागत जितना सीमा से आगे जा सकते हैं। सीमा में किया गया बदलाव भेजने की प्रक्रिया तक पहुँचने में एक मिनट तक लेता है।

न्यूनतम संदेश भेजना

सबसे छोटे मान्य फ़्री-टेक्स्ट पेलोड में एक to प्राप्तकर्ता, एक from प्रेषक, एक text मुख्य भाग और एक category होता है।

const msg = await bird.sms.send({
  from: "+15557654321",
  to: "+14155550100",
  text: "Your verification code is 123456.",
  category: "authentication",
});
console.log(msg.id, msg.status);

अपना क्षेत्रीय होस्ट (https://us1.platform.bird.com या https://eu1.platform.bird.com) उससे मेल खाती bk_{region}_... कुंजी के साथ इस्तेमाल करें। प्रतिक्रिया में स्वीकार किया गया संदेश मिलता है:

कोड उदाहरण
{
  "id": "sms_01ky7qmwgpfkybj9ecrnwjx714",
  "direction": "outbound",
  "status": "accepted",
  "to": "+31612345678",
  "from": "Bird",
  "text": "Your Bird verification code is 481920. It expires in 10 minutes.",
  "category": "authentication",
  "segments": { "count": 1, "encoding": "GSM_7BIT", "characters": 64 },
  "cost": null,
  "carrier": null,
  "mcc_mnc": null,
  "sent_at": null,
  "delivered_at": null,
  "created_at": "2026-07-23T14:56:34.326Z"
}

status: accepted का अर्थ है कि संदेश Bird के पास है और उस पर काम हो रहा है; cost का मान null है, क्योंकि मूल्य निर्धारण प्रोसेसिंग के दौरान होता है। आगे क्या होता है, यह एसिंक्रोनस मॉडल में बताया गया है।

पेलोड तैयार करना

प्राप्तकर्ता

to एक प्राप्तकर्ता है, जो E.164 फ़ॉर्मेट में होता है: शुरू में +, फिर देश कोड और सब्सक्राइबर नंबर, जैसे +31612345678। एक संदेश एक ही प्राप्तकर्ता को जाता है; cc, bcc या प्राप्तकर्ताओं की ऐरे नहीं होती। कई लोगों तक पहुँचने के लिए बैच भेजें।

प्रेषक

from वह प्रेषक है जो प्राप्तकर्ता को दिखता है। फ़्री-टेक्स्ट भेजने पर यह ज़रूरी है, जब तक messaging_profile_id किसी ऐसे मैसेजिंग प्रोफ़ाइल का नाम न दे जिसमें गंतव्य देश के लिए प्रेषक या डिफ़ॉल्ट प्रेषक हो। इसके दो रूप होते हैं, और कौन-सा रूप काम करेगा यह गंतव्य देश पर निर्भर करता है:

  • अल्फ़ान्यूमेरिक प्रेषक ID: 3 से 11 अक्षर, अंक, स्पेस, डैश, अंडरस्कोर या बिंदु, जिनमें कम से कम एक अक्षर हो और दोनों सिरों पर कोई विभाजक न हो, जैसे Bird या Acme-Co। इसमें अक्षर होना ज़रूरी है, इसलिए विराम चिह्नों वाली अंकों की स्ट्रिंग, जैसे 555 555, अस्वीकार कर दी जाती है। कुछ देशों में पंजीकरण ज़रूरी है, और कुछ देश, जिनमें US भी शामिल है, अल्फ़ान्यूमेरिक प्रेषकों का समर्थन नहीं करते। प्राप्तकर्ता इन्हें जवाब नहीं दे सकते।
  • आपके वर्कस्पेस का अपना नंबर, E.164 में या केवल अंकों के रूप में। केवल अंकों वाला कोई भी from संख्यात्मक माना जाता है और आपके प्रेषकों में खोजा जाता है, इसलिए कोई ऐसा मनमाना नंबर अस्वीकार हो जाता है जो आपका नहीं है। यह लॉन्ग कोड, टोल-फ़्री नंबर या शॉर्ट कोड की तरह काम करेगा, यह नंबर से ही तय होता है, न कि इससे कि आपने कितने अंक लिखे। 6 अंकों वाला from केवल 6 अंक होने से शॉर्ट कोड नहीं बनता; वह तभी शॉर्ट कोड है जब आपका नंबर शॉर्ट कोड हो।

जो प्रेषक गंतव्य के लिए मान्य नहीं है, उसे 422 के साथ अस्वीकार किया जाता है, जिसमें कारण बताया जाता है (उदाहरण के लिए, जहाँ अल्फ़ान्यूमेरिक प्रेषक उपलब्ध नहीं हैं वहाँ SMSAlphaNotSupported)। बिल्ट-इन टेम्पलेट भेजने पर from स्वीकार नहीं होता: Bird गंतव्य और श्रेणी के अनुसार प्रेषक चुनता है। वर्कस्पेस टेम्पलेट के लिए आपका अपना from प्रेषक, या उसे देने वाला मैसेजिंग प्रोफ़ाइल, ज़रूरी है।

प्रेषक ID लेने, हर देश की उसके लिए शर्तें जानने और हर देश में उसका पंजीकरण करने की जानकारी SMS प्रेषक ID में है।

किसी एक प्रोग्राम के प्रेषक और डिफ़ॉल्ट एक जगह रखने के लिए मैसेजिंग प्रोफ़ाइल बनाएँ और उसका नाम messaging_profile_id में दें। from छोड़ने पर Bird गंतव्य देश के लिए प्रोफ़ाइल के प्रेषक से, या उसके डिफ़ॉल्ट प्रेषक से भेजता है। छोड़ा गया category प्रोफ़ाइल की डिफ़ॉल्ट श्रेणी लेता है, और options.smart_encoding, cost_center, validity_period और options.callback_url प्रोफ़ाइल की सेटिंग लेते हैं। संदेश पर आपके सेट किए गए मान प्राथमिकता पाते हैं।

मुख्य भाग और श्रेणी

text संदेश का मुख्य भाग है, कम से कम एक अक्षर का। इसका बिल और डिलीवरी सेगमेंट में होती है; एक बार भेजने की सीमा 12 सेगमेंट है (लगभग 1,836 GSM-7 अक्षर, या मुख्य भाग में विस्तारित UCS-2 एन्कोडिंग होने पर 804)। सीमा से लंबा मुख्य भाग काटा नहीं जाता, बल्कि 422 के साथ अस्वीकार कर दिया जाता है।

फ़्री-टेक्स्ट भेजने पर category ज़रूरी है, जब तक messaging_profile_id में दिया मैसेजिंग प्रोफ़ाइल डिफ़ॉल्ट श्रेणी सेट न करे। यह संदेश को transactional, marketing, authentication या service में वर्गीकृत करता है, जिससे Bird और कैरियर को पता चलता है कि आप क्यों भेज रहे हैं। एक बार इस्तेमाल होने वाला सत्यापन कोड authentication का उपयोग करता है; प्रमोशन marketing का। वह श्रेणी चुनें जो संदेश के उद्देश्य से मेल खाती हो।

टैग और मेटाडेटा

ये दोनों किसी भेजे गए संदेश के साथ आपका अपना डेटा जोड़ते हैं, लेकिन इनका काम अलग-अलग है:

  • tags संरचित {name, value} जोड़े होते हैं (एक बार भेजने में अधिकतम 20; नाम 1 से 32 वर्ण, मान 1 से 64 वर्ण, केवल ASCII [A-Za-z0-9_-], केस-संवेदी, और एक बार भेजने में नाम अद्वितीय)। ये सीधे फ़िल्टर के आयाम हैं: संदेश सूची को टैग के अनुसार फ़िल्टर करें। इनका उपयोग campaign या experiment_variant जैसे कम संख्या वाले लेबल के लिए करें।
  • metadata एक मनमाना JSON ऑब्जेक्ट है (सीरियलाइज़ करने के बाद अधिकतम 2 KB)। यह संग्रहीत होता है, API पढ़ने पर लौटाया जाता है और हर वेबहुक इवेंट में वापस भेजा जाता है, लेकिन यह फ़िल्टर का आयाम नहीं है। इसका उपयोग उस संदर्भ के लिए करें जो आपको वापस चाहिए: आंतरिक ID, फ़ॉरेन कुंजियाँ, या कुछ भी जो आप हर इवेंट के साथ वापस पाना चाहते हैं।
  • reference 1 से 255 वर्णों की एक स्ट्रिंग है, जिससे आप संदेश को खोजना चाहते हैं, जैसे ऑर्डर या टिकट नंबर। संदेश सूची पर ?reference= इसका सटीक और केस-संवेदी मिलान करता है, और कई संदेशों का एक ही मान हो सकता है। यह पढ़ने पर लौटाया जाता है और हर वेबहुक इवेंट में वापस भेजा जाता है। इसे केवल तभी सेट करें जब आपको इससे खोजना हो, और बाकी सारा डेटा metadata में रखें।
कोड उदाहरण
{
  "tags": [{ "name": "campaign", "value": "spring-2026" }],
  "metadata": { "user_id": "usr_12345", "order_id": "ord_98765" },
  "reference": "ord_98765"
}

फ़ील्ड संदर्भ

फ़ील्डप्रकारआवश्यकसीमाएँ / टिप्पणियाँ
toस्ट्रिंग (E.164)हाँप्रति संदेश एक प्राप्तकर्ता
fromस्ट्रिंगहाँ*आपके स्वामित्व वाला E.164 नंबर, अल्फ़ान्यूमेरिक सेंडर आईडी (3–11 वर्ण, कम से कम एक अक्षर), या शॉर्ट कोड (5–6 अंक)
textस्ट्रिंगहाँ*कम से कम 1 वर्ण; अधिकतम 12 सेगमेंट
categoryस्ट्रिंगहाँ*transactional, marketing, authentication या service
templateऑब्जेक्टहाँ*बिल्ट-इन या वर्कस्पेस टेम्पलेट के लिए {slug, parameters?, language?}
tags{name, value}[]नहींअधिकतम 20; नाम 1–32 वर्ण, मान 1–64 वर्ण; केवल [A-Za-z0-9_-]
metadataऑब्जेक्टनहींकोई भी JSON, सीरियलाइज़ होने पर अधिकतम 2 KB
referenceस्ट्रिंगनहीं1–255 अक्षर; संदेश सूची पर ?reference= के लिए सटीक मिलान
messaging_profile_idस्ट्रिंगनहींएक मैसेजिंग प्रोफ़ाइल जो प्रेषक और डिफ़ॉल्ट मान देती है; संदेश पर दिए गए मान प्राथमिकता पाते हैं
validity_periodपूर्णांकनहींस्वीकृति से 60–1,72,800 सेकंड; मैसेजिंग प्रोफ़ाइल का मान या कैरियर के अपने नियम इस्तेमाल करने के लिए इसे छोड़ दें
optionsऑब्जेक्टनहींप्रति संदेश प्रोसेसिंग सेटिंग, जैसे smart_encoding (देखें सेगमेंट और एन्कोडिंग) और callback_url (देखें कॉलबैक URL)

* फ़्री-टेक्स्ट भेजने के लिए from, text और category ज़रूरी हैं, सिवाय इसके कि मैसेजिंग प्रोफ़ाइल from और category दे सकती है। टेम्पलेट से भेजने में text और category के बजाय template ज़रूरी है (और ये दोनों अस्वीकार किए जाते हैं)। बिल्ट-इन टेम्पलेट from को अस्वीकार करते हैं; वर्कस्पेस टेम्पलेट में यह ज़रूरी है।

टेम्पलेट से भेजना

बिल्ट-इन टेम्पलेट या प्रकाशित वर्कस्पेस टेम्पलेट भेजने के लिए template सेट करें। वर्कस्पेस टेम्पलेट बनाने की सुविधा API प्रीव्यू में है। कैटलॉग, वैरिएबल और प्रेषक के नियम SMS टेम्पलेट में दिए गए हैं।

सेगमेंट और एन्कोडिंग

SMS का बिल प्रति सेगमेंट बनता है। जो संदेश GSM-7 एन्कोडिंग में समा जाता है, उसे एक सेगमेंट में 160 अक्षर मिलते हैं; UCS-2 (जो इमोजी, CJK या अन्य गैर-GSM अक्षरों से लागू होता है) में यह सीमा 70 रह जाती है। लंबे संदेश कई हिस्सों वाले सेगमेंट में बँट जाते हैं, जिनमें प्रति सेगमेंट सीमा थोड़ी कम होती है। हर प्रतिक्रिया लागू हुआ segments बताती है: बिल योग्य count, encoding और अक्षरों की संख्या। आपका बिल सेगमेंट के आधार पर बनता है; देखें लागत।

जब किसी संदेश के GSM-7 से बाहर जाने का एकमात्र कारण टाइपोग्राफ़िक अक्षर हों, तो स्मार्ट एन्कोडिंग उसके सेगमेंट की संख्या घटा सकती है। options.smart_encoding को true पर सेट करें, तब Bird भेजने से पहले घुमावदार उद्धरण चिह्नों, डैश, एलिप्सिस और ऐसे ही अक्षरों को उनके GSM-7 समकक्षों से बदल देता है। यह डिफ़ॉल्ट रूप से बंद रहती है, क्योंकि यह आपका लिखा संदेश बदल देती है।

पूरे वर्ण सेट, दो स्थान लेने वाले एक्सटेंशन-टेबल वर्णों, इमोजी के आकार, smart encoding किन वर्णों को बदलता है और सेगमेंट की गणना के लिए वर्ण सीमाएँ देखें।

बैच में भेजना

POST /v1/sms/batches एक अनुरोध में अधिकतम 100 स्वतंत्र संदेश भेजता है। यह बल्क SMS का तरीका है, जिसमें कई प्राप्तकर्ताओं के लिए एक ही API कॉल होती है। बैच अनुरोध sms_batch दर-सीमा नीति का उपयोग करते हैं, जो एकल भेजने की sms_send नीति से अलग है। बॉडी एक JSON ऑब्जेक्ट है, जिसकी messages सरणी में पेलोड बनाना में बताए गए संदेश ऑब्जेक्ट होते हैं:

const result = await bird.sms.sendBatch({
  messages: [
    {
      from: "+15557654321",
      to: "+15551111111",
      text: "Hi Alice!",
      category: "marketing",
    },
    {
      from: "+15557654321",
      to: "+15552222222",
      text: "Hi Bob!",
      category: "marketing",
    },
  ],
});

सत्यापन सब-या-कुछ-नहीं के आधार पर होता है: यदि बैच का कोई भी संदेश अमान्य है, तो पूरा अनुरोध 422 के साथ अस्वीकार हो जाता है और कुछ भी नहीं भेजा जाता। इसलिए कोई बैच कभी आंशिक रूप से लागू नहीं होता। सफल होने पर 202 प्रतिक्रिया में हर स्वीकृत संदेश जमा करने के क्रम में data के अंतर्गत आता है, साथ में accepted_count वाला एक summary भी। इसके बाद हर संदेश स्वतंत्र होता है: एक प्राप्तकर्ता की विफलता दूसरों पर कभी असर नहीं डालती।

एसिंक्रोनस मॉडल: 202 का अर्थ

सफलतापूर्वक भेजने पर 202 Accepted एक संदेश ID और status: accepted के साथ लौटता है। अनुरोध की विफलताएँ तुरंत लौटती हैं: अमान्य फ़ील्ड, सेगमेंट सीमा से लंबी बॉडी, ऐसा गंतव्य देश जिसे आपने सक्षम नहीं किया है या अमान्य प्रेषक होने पर 422 लौटता है। जिस वर्कस्पेस के वॉलेट में बैलेंस नहीं है, उसे 402 मिलता है।

डिलीवरी एसिंक्रोनस रूप से होती है। जब Bird संदेश को कैरियर को सौंपता है, तो संदेश sent स्थिति में चला जाता है। इसके बाद डिलीवरी रसीद इवेंट और वेबहुक और पढ़ने वाले एंडपॉइंट के ज़रिए delivered, undelivered, failed या expired सेट करती है। इस डिज़ाइन के तीन परिणाम हैं:

  • लागत स्वीकृति के बाद तय होती है। स्वीकृति के समय संदेश का cost null होता है, और प्रोसेसिंग के दौरान Bird द्वारा कीमत तय करने पर भरा जाता है। अब तक तय शुल्क देखने के लिए संदेश को दोबारा पढ़ें या डिलीवरी इवेंट की प्रतीक्षा करें। लागत और बिलिंग में घटक और किसी घटक की कीमत तय न होने की स्थिति बताई गई है।
  • 202 के बाद भी संदेश अस्वीकार हो सकता है। यदि प्रोसेसिंग के दौरान शुल्क विफल होता है, तो संदेश sms.rejected वेबहुक के साथ rejected स्थिति में समाप्त होता है और आपसे शुल्क नहीं लिया जाता। खाली वॉलेट last_error.code: insufficient_balance के रूप में दिखता है।
  • पढ़ने वाले एंडपॉइंट 202 से थोड़ा पीछे रह सकते हैं। संदेश 202 के कुछ ही देर बाद पढ़ने वाले एंडपॉइंट पर दिखने लगता है, इसलिए भेजने के तुरंत बाद मिला 404 कुछ ही पलों में अपने आप ठीक हो जाता है।

आरक्षित फ़ील्ड

Bird निम्नलिखित अनुरोध फ़ील्ड को 422 SMSUnsupportedFeature के साथ अस्वीकार करता है:

scheduled_at, media_urls, broadcast_id, campaign_id, audience_id, contact_id, topic_id, personalization, options.max_price_per_segment, options.track_clicks (जब true हो)

किसी भेजने के अनुरोध में ये फ़ील्ड शामिल न करें।

सुरक्षित रूप से फिर से प्रयास करना

हर तार्किक भेजने के लिए एक अद्वितीय मान के साथ Idempotency-Key हेडर भेजें। यदि कोई अनुरोध सफल हो जाता है पर प्रतिक्रिया नहीं लौटाता, तो वही अनुरोध उसी कुंजी के साथ दोबारा भेजें। Bird डुप्लिकेट संदेश भेजने के बजाय मूल परिणाम लौटाता है। कुंजी के प्रारूप और उसे कितने समय तक रखा जाता है, यह जानने के लिए आइडेम्पोटेंसी देखें।

लागत और बिलिंग

आउटबाउंड SMS का बिल प्रति सेगमेंट बनता है। आपको कितना भुगतान करना होगा, यह गंतव्य देश और कैरियर पर निर्भर करता है। कुछ रूट तृतीय-पक्ष सरचार्ज जोड़ते हैं, जैसे US 10DLC कैरियर शुल्क।

किसी संदेश का cost शुल्क को नामित घटकों में बाँटता है। transaction_amount वह राशि है जो Bird ने संदेश पहुँचाने के लिए ली, passthrough_amount आगे बढ़ाया गया कोई भी तृतीय-पक्ष शुल्क है, और amount उन घटकों का योग है जिनकी कीमत तय हो चुकी है, जो currency_code में दर्शाया जाता है। जिस घटक की कीमत तय नहीं हुई है, वह "0.00000" के बजाय null होता है। इसलिए जिस संदेश का सरचार्ज कभी तय नहीं हुआ, वह amount को केवल पहुँचाने के शुल्क के रूप में बताता है। संदेश संदर्भ में हर फ़ील्ड का विवरण है।

सरचार्ज सर्वोत्तम प्रयास के आधार पर तय होता है। Bird डिलीवरी रसीद दर्ज करते समय एक सीमित अवधि के भीतर इसे तय करता है। यदि उस अवधि में यह तय नहीं होता, तो passthrough_amount स्थायी रूप से null रहता है: Bird इसके लिए फिर से प्रयास नहीं करता, और amount केवल पहुँचाने का शुल्क बना रहता है।

इनबाउंड SMS का बिल दो पंक्तियों में बनता है: प्रति-सेगमेंट इनबाउंड दर, और जहाँ लागू हो वहाँ इनबाउंड कैरियर सरचार्ज। दोनों प्राप्त संदेश के अपने cost पर दिखाए जाते हैं: दर transaction_amount के रूप में और सरचार्ज passthrough_amount के रूप में। आउटबाउंड सरचार्ज के विपरीत, इनबाउंड सरचार्ज की कीमत डिलीवरी पर नहीं, बल्कि संदेश स्वीकार होते ही तय होती है, इसलिए इसे बाद में कभी नहीं भरा जाता।

हर संदेश की लागत और सेगमेंट SMS लॉग में देखें।

अगले कदम

  • SMS टेम्पलेट: कोई बिल्ट-इन टेम्पलेट भेजें और प्रेषक Bird को चुनने दें।
  • SMS लॉग: कोई संदेश खोजें और उसका जीवनचक्र, सेगमेंट और लागत देखें।
  • इवेंट: अपने सिस्टम में डिलीवरी इवेंट प्राप्त करें।
  • SMS कॉलबैक URL: किसी एक संदेश या एक प्रोफ़ाइल के इवेंट उनके अपने HTTPS एंडपॉइंट पर भेजें।
  • SMS मेट्रिक्स: डिलीवरी दर, विफलता दर और स्वीकृत संदेशों की संख्या पर नज़र रखें।
  • आइडेम्पोटेंसी: Idempotency-Key हेडर के साथ सुरक्षित रूप से फिर से प्रयास करें।
  • अपना पहला SMS भेजना: एक वीडियो जो डैशबोर्ड में यही सेटअप चरण-दर-चरण दिखाता है

इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।