एक ही SMS API के जरिए एक मैसेज भेजें या सौ। SDK भेजने से पहले सेगमेंट गिनता है, आपके लिए GSM-7 या Unicode चुनता है, और हर सेंड idempotent होता है, हर डिलीवरी स्टेट पर एक webhook के साथ।
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const code = generateOtp();
const { data, error } = await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your Bird verification code is ${code}. Reply STOP to opt out.`,
category: "authentication",
}).safe();
if (error) throw error;
console.log(data.id);
// → "sms_4kT01Lq2m..."
Today at 2:14 PM
पांच मिनट में अपना पहला SMS भेजें।
उसी भाषा से जो आप पहले से इस्तेमाल करते हैं।
भेजना Bird SMS API का मूल है। पहला सेंड एक स्वीकृत टेस्ट रिसीपिएंट (+15005550006) पर जाता है, ताकि आप नंबर प्रोविज़न करने से पहले एक CI जांच शिप कर सकें और webhooks वायर कर सकें।
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.sms.send({
to: "+15005550006",
text: "Hello from Node.",
category: "transactional",
}).safe();पांच चीज़ें जो आप खुद नहीं बनाते।
हर Bird चैनल पर वही कॉन्ट्रैक्ट।
- 01
भेजने से पहले सेगमेंट गिनना।
SDK एन्कोड की गई लंबाई मापता है और बताता है कि एक मैसेज कितने सेगमेंट में पड़ता है, ताकि कोई भटका हुआ वर्ण चुपचाप एक टेक्स्ट को तीन में न बांट दे।
- 02
GSM-7 और Unicode, आपके लिए तय किया गया।
सादा टेक्स्ट GSM-7 पर चलता है; एक emoji या गैर-Latin स्क्रिप्ट पूरे मैसेज को UCS-2 में बदल देती है। Bird एन्कोडिंग चुनता है और तब चेतावनी देता है जब एक अकेला वर्ण लागत बदल देता है।
- 03
एक कॉल में बैच करें।
एक रिक्वेस्ट में कई स्वतंत्र मैसेज भेजें, हर एक का अपना रिसीपिएंट और टेक्स्ट, जो एक इकाई के रूप में वैलिडेट होते हैं ताकि आप कभी आधा-अधूरा न भेजें।
- 04
कॉन्ट्रैक्ट के हिसाब से idempotent।
हर सेंड एक idempotency key स्वीकार करता है, ताकि टाइमआउट के बाद रिट्राई की गई रिक्वेस्ट किसी को दो बार टेक्स्ट करने के बजाय मूल परिणाम लौटा दे।
- 05
हर स्टेट बदलाव पर एक webhook।
Queued, sent, delivered, failed. हर एक HMAC-signed, replay-protected, idempotent, हर चैनल पर वही envelope।
पहले से कहीं और भेज रहे हैं? क्लाइंट बदलें, कॉल वही रखें।
आकार में मुश्किल से बदलाव आता है: क्लाइंट स्वैप करें, अपना from, to, और text रखें, अपने webhooks को एक endpoint पर पॉइंट करें। आपके email, voice, और WhatsApp सेंड जैसा ही auth मॉडल।
import twilio from "twilio";
const client = twilio(accountSid, authToken);
await client.messages.create({
from: "+14155550172",
to: "+15005550006",
body: "Your code is 123456.",
});import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: "Your code is 123456.",
category: "authentication",
});कैरियर से पहले लागत जान लें।
एक GSM-7 मैसेज में हर सेगमेंट में 160 वर्ण आते हैं; एक अकेला emoji या गैर-Latin वर्ण पूरे मैसेज को UCS-2 में बदल देता है और यह घटकर 70 रह जाता है। SDK हर सेंड पर एन्कोडिंग और सेगमेंट काउंट बताता है, ताकि बिलिंग कभी हैरानी न बने और जोड़ा हुआ मैसेज हमेशा एक सोचा-समझा फैसला हो।
const { data } = await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: "Your code is 123456.",
category: "authentication",
}).safe();
console.log(data.encoding); // → "GSM-7"
console.log(data.segments); // → 1एक मैसेज या सौ, एक कॉल।
एक रिक्वेस्ट में स्वतंत्र मैसेज बैच करें, हर एक का अपना रिसीपिएंट और टेक्स्ट। बैच एक इकाई के रूप में वैलिडेट होता है: एक गलत नंबर 422 के साथ कॉल को रिजेक्ट कर देता है, ताकि आप कभी आधा-अधूरा न भेजें। एक अकेली idempotency key पूरी रिक्वेस्ट को रिट्राई के लिए सुरक्षित बना देती है।
const { data: batch, error } = await bird.sms
.sendBatch(
users.map((u) => ({
from: "Bird",
to: u.phone,
text: `Hi ${u.name}, your appointment is tomorrow at ${u.time}.`,
})),
{ idempotencyKey: `reminders-${runId}` },
)
.safe();
if (error) throw error;
console.log(`queued ${batch.data.length} messages`);हर मैसेज को उसके पूरे जीवन में देखें।
एक सेंड तुरंत 202 लौटाता है; परिणाम एक webhook के रूप में आता है। एक signature वेरिफाई करें, type पर स्विच करें: वही envelope जो आप email, voice, और WhatsApp के लिए पहले से संभालते हैं।
import { bird } from "@/lib/bird";
export async function POST(req: Request) {
const event = bird.webhooks.unwrap(
await req.text(),
Object.fromEntries(req.headers),
);
switch (event.type) {
case "sms.delivered":
await markDelivered(event.data.sms_id);
break;
case "sms.failed":
await flag(event.data.to, event.data.reason);
break;
}
return new Response(null, { status: 204 });
}विफल सेंड और STOP रिप्लाई आपकी suppression लिस्ट को अपने आप अपडेट कर देते हैं, ताकि एक गलत नंबर आपको दो बार महंगा न पड़े।
sms.acceptedAPI द्वारा स्वीकृत और कैरियर हैंड-ऑफ के लिए queued।sms.sentगंतव्य कैरियर के SMSC को सबमिट किया गया।sms.deliveredकैरियर से डिलीवरी रसीद प्राप्त (DLR)।sms.failedस्थायी विफलता — कैरियर रिजेक्शन, अमान्य नंबर, या suppression हिट।
डॉक्यूमेंटेशन में और गहराई से जाएं।
webhooks वायर करें, idempotency keys से हर सेंड को रिट्राई के लिए सुरक्षित बनाएं, और error reference पढ़ें ताकि आप हर विफलता को सही तरीके से संभालें।
SMS भेजने से जुड़े सामान्य सवाल
एक SMS कितना लंबा हो सकता है?+
क्या मैं एक ही रिक्वेस्ट में कई रिसीपिएंट को भेज सकता हूं?+
टाइमआउट के बाद कोई सेंड रिट्राई करूं तो क्या होता है?+
मुझे कैसे पता चलेगा कि कोई मैसेज डिलीवर हुआ या नहीं?+
बाकी का SMS प्लेटफॉर्म
एक API, keys का एक सेट। बाकी क्षमताओं को एक्सप्लोर करें।
दुनिया का लगभग 40% कमर्शियल SMS पहले से ही Bird पर चलता है।
भेजना Bird SMS API की एक क्षमता है: नंबर, दो-तरफा इनबाउंड, कंप्लायंस, रूटिंग, और एनालिटिक्स इसके साथ आते हैं, उस इंफ्रास्ट्रक्चर पर जिसे हमने एक दशक से चलाया है।