RCS Business Messaging — SMS का ज्यादा खूबसूरत भाई।
Rich cards, सुझाए गए जवाब, ब्रांडेड सेंडर, read receipts। एक ही attribute में SMS पर fallback करें। हर दूसरे Bird चैनल जैसा ही auth, वही idempotency, वही webhooks — क्योंकि इन सबको एक ही इंजीनियरिंग टीम ने बनाया है।
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.rcs.send({
to: "+15005550006",
card: {
title: "Your order has shipped",
subtitle: "Arriving Friday, May 22",
image: "https://cdn.example.com/orders/2891.jpg",
buttons: [
{ type: "url", label: "Track package", url: "https://example.com/track/2891" },
{ type: "reply", label: "Reschedule", postback: "reschedule_2891" },
],
},
fallback: "sms",
}).safe();
if (error) throw error;
console.log(data.id);
// → "rcs_4mP82wQ9..."
npm install से पहले send तक 5 मिनट
जिस भाषा का आप पहले से इस्तेमाल करते हैं, उसी से एक rich message भेजें।
हर बड़े runtime में SDKs। पहला send अधिकृत टेस्ट नंबर (+15005550006) पर जाता है और अपने आप SMS पर fallback कर जाता है — इसलिए CI check के लिए RCS-सक्षम हैंडसेट की जरूरत नहीं पड़ती।
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.rcs.send({
to: "+15005550006",
card: { title: "Hello", subtitle: "From Bird RCS" },
fallback: "sms",
}).safe();"text" और एक असली app surface के बीच दस प्रिमिटिव।
RCS, SMS से ज्यादा समृद्ध प्रोटोकॉल है। हम इस समृद्धि को प्रिमिटिव के रूप में देते हैं, किसी डिजाइनर कैनवास के रूप में नहीं।
- 01
Rich cards
प्रति कार्ड टाइटल, सबटाइटल, हीरो इमेज, और 4 तक actions। एक ही message में 10 कार्ड तक का carousel।
- 02
सुझाए गए जवाब
टैप-टू-रिप्लाई चिप्स जो एक ज्ञात स्ट्रिंग आपके webhook पर वापस भेजते हैं। आपकी तरफ कोई NLU अनुमान लगाने की जरूरत नहीं।
- 03
ब्रांडेड सेंडर
हैंडसेट चैट हेडर में लोगो, रंग, और छोटे विवरण के साथ सत्यापित व्यावसायिक पहचान।
- 04
Read receipts और टाइपिंग
Delivery, read, और "is typing" स्टेट्स webhooks के रूप में — हर दूसरे चैनल जैसा ही envelope आकार।
- 05
एक ही attribute में SMS पर fallback
fallback: "sms" पास करें। अगर हैंडसेट RCS-सक्षम नहीं है, तो हम पारदर्शी तरीके से text वेरिएंट भेज देते हैं।
- 06
इंटरैक्टिव postbacks
बटन टैप rcs.replied events के रूप में वापस आते हैं, आपके सेट किए postback स्ट्रिंग के साथ। इसे एक state machine से जोड़ें।
- 07
मीडिया अटैचमेंट
इमेज, 100MB तक वीडियो, ऑडियो, PDF, vCard। हम एसेट होस्ट करते हैं और TTL के साथ एक signed URL सर्व करते हैं।
- 08
दोतरफा बातचीत
आने वाले यूजर जवाब HMAC-signed webhooks के रूप में आते हैं। आने वाले SMS और WhatsApp जैसा ही आकार।
- 09
कैरियर और डिवाइस गेटिंग
हम send से पहले RCS क्षमता जांचते हैं। अगर डिवाइस ऑफलाइन या non-RCS है, तो हम अपने आप fallback कर जाते हैं।
- 10
वही auth, वही error envelope
RCS, SMS, Email, WhatsApp, Voice के लिए एक API key। इन सबके लिए एक error type रजिस्ट्री।
हम RCS क्यों बनाते हैं
क्योंकि 2026 में सबसे सस्ता चैनल और सबसे समृद्ध चैनल एक ही send होना चाहिए।
RCS हैंडसेट को एक rich card मिलता है; बाकी सबको उसी payload से जनरेट किया गया SMS वेरिएंट मिलता है। हम दस साल से 240 direct-to-carrier कनेक्शन पर SMS चला रहे हैं; RCS वही routing लेयर है, बस एक समृद्ध payload टाइप और एक fallback फ्लैग के साथ। कवरेज के बारे में ईमानदारी से: आज RCS US कैरियर (T-Mobile, Verizon, AT&T) और ब्राज़ील पर पहुंचता है; EU और APAC 2026 के दौरान फैलेंगे। उस दायरे के बाहर, fallback फ्लैग काम संभाल लेता है।
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.rcs.send({
to: "+15005550006",
card: {
title: "Your order has shipped",
subtitle: "Arriving Friday, May 22",
image: "https://cdn.example.com/orders/2891.jpg",
buttons: [
{ type: "url", label: "Track package", url: "https://example.com/track/2891" },
{ type: "reply", label: "Reschedule", postback: "reschedule_2891" },
],
},
fallback: "sms",
}).safe();
if (error) throw error;
console.log(data.id);
// → "rcs_4mP82wQ9..."
हर स्टेट बदलाव एक webhook है।
HMAC-signed payloads, replay-protected, idempotent। हर Bird चैनल पर वही envelope — एक सीखो, तो सब सीख गए।
{
"type": "rcs.delivered",
"id": "evt_7nT91x...",
"created_at": "2026-05-19T15:42:01.221Z",
"data": {
"rcs_id": "rcs_4mP82wQ9",
"to": "+15005550006",
"carrier": "T-Mobile USA",
"rich": true,
"latency_ms": 612
}
}
रीट्राई शेड्यूल: 5s, 30s, 5m, 30m, 2h, 6h, 12h। अंतिम प्रयास के बाद dead-letter; हर dead-lettered event को dashboard या API से दोबारा चलाया जा सकता है।
rcs.queuedAPI ने स्वीकार किया और send के लिए कतारबद्ध किया।rcs.sentकैरियर RBM गेटवे को सौंप दिया गया।rcs.deliveredहैंडसेट ने rich message की प्राप्ति की पुष्टि की।rcs.readप्राप्तकर्ता ने message पढ़ा (अगर read receipts सक्षम हैं)।rcs.repliedयूजर ने एक सुझाए-गए-जवाब चिप को टैप किया या एक फ्री-फॉर्म जवाब भेजा।rcs.fellbackहैंडसेट RCS-सक्षम नहीं था; इसके बजाय SMS वेरिएंट भेजा गया।rcs.failedsend से पहले स्थायी विफलता (अमान्य प्राप्तकर्ता, कैरियर रिजेक्ट)।
अगर आपने SMS इंटीग्रेट किया है, तो आपने RCS इंटीग्रेट कर लिया है।
वही auth, वही idempotency कॉन्ट्रैक्ट, वही error envelope, वही webhook आकार। फर्क है तो payload में — इसे कॉल करने के तरीके में नहीं।
RCS.
await bird.rcs.send({
to: "+15005550006",
card: { title: "Your code", subtitle: `Code: ${code}` },
fallback: "sms",
});
RCS-सक्षम डिवाइसों पर एक असली कार्ड। दायरे के बाहर, fallback फ्लैग उसी payload को SMS के जरिए रूट कर देता है।
SMS.
await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your code is ${code}.`,
category: "authentication",
});
जब आप इसे स्पष्ट चाहते हैं तो सीधे SMS पाथ को एड्रेस करें। वही auth, वही webhooks, वही idempotency।