RCS Business Messaging — saudara SMS yang lebih keren.
Rich cards, suggested replies, branded sender, read receipts. Fall back to SMS in one attribute. Same auth, same idempotency, same webhooks as every other Bird channel, because the same engineering team built them all.
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..."
5 menit dari npm install ke pengiriman pertama
Kirim rich message dari bahasa pemrograman yang sudah Anda gunakan.
SDKs in every major runtime. The first send goes to the sanctioned test number (+15005550006) and falls back to SMS automatically, so the CI check doesn't require an RCS-capable handset.
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();Sepuluh primitif antara "text" dan permukaan aplikasi nyata.
RCS adalah protokol yang lebih kaya dari SMS. Kami mengekspos kekayaan tersebut sebagai primitif, bukan sebagai kanvas desainer.
- 01
Rich card
Judul, subjudul, hero image, dan hingga 4 aksi per kartu. Carousel hingga 10 kartu dalam satu pesan.
- 02
Suggested reply
Chip tap-to-reply yang mengirim string yang diketahui kembali ke webhook Anda. Tidak perlu tebak-tebakan NLU di sisi Anda.
- 03
Pengirim bermerek
Identitas bisnis terverifikasi dengan logo, warna, dan deskripsi singkat di header chat perangkat.
- 04
Tanda dibaca dan mengetik
Delivery, read, and "is typing" states as webhooks, the same envelope shape as every other channel.
- 05
Fallback ke SMS dalam satu atribut
Kirim fallback: "sms". Jika perangkat tidak berkemampuan RCS, kami secara transparan mengirim varian teks.
- 06
Postback interaktif
Ketukan tombol kembali sebagai event rcs.replied dengan string postback yang Anda atur. Hubungkan ke state machine.
- 07
Lampiran media
Gambar, video hingga 100MB, audio, PDF, vCard. Kami menghosting aset dan menyajikan signed URL dengan TTL.
- 08
Percakapan dua arah
Balasan masuk dari pengguna tiba sebagai webhook bertanda tangan HMAC. Format yang sama seperti SMS dan WhatsApp masuk.
- 09
Gating operator dan perangkat
Kami memeriksa kemampuan RCS sebelum mengirim. Jika perangkat offline atau non-RCS, kami otomatis fallback.
- 10
Auth yang sama, envelope error yang sama
Satu API key untuk RCS, SMS, Email, WhatsApp, Voice. Satu registri tipe error untuk semuanya.
Mengapa kami membangun RCS
Karena di tahun 2026, channel termurah dan terkaya seharusnya dalam satu pengiriman yang sama.
Perangkat RCS mendapat rich card; yang lainnya mendapat varian SMS yang kami buat dari payload yang sama. Kami telah menjalankan SMS selama sepuluh tahun melalui 240 koneksi langsung ke operator; RCS adalah lapisan routing yang sama dengan tipe payload yang lebih kaya dan flag fallback. Jujur soal jangkauan: saat ini RCS tersedia di operator AS (T-Mobile, Verizon, AT&T) dan Brasil; EU dan APAC berkembang sepanjang 2026. Di luar jangkauan itu, flag fallback yang bekerja.
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..."
Setiap perubahan status adalah webhook.
HMAC-signed payloads, replay-protected, idempotent. The same envelope on every Bird channel: learn one, you've learned them all.
{
"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
}
}
Jadwal retry: 5d, 30d, 5m, 30m, 2j, 6j, 12j. Dead-letter setelah percobaan terakhir; setiap event dead-letter dapat di-replay dari dashboard atau API.
rcs.queuedDiterima oleh API dan diantrikan untuk pengiriman.rcs.sentDiserahkan ke gateway RBM operator.rcs.deliveredPerangkat mengonfirmasi penerimaan rich message.rcs.readPenerima membaca pesan (jika tanda dibaca diaktifkan).rcs.repliedPengguna mengetuk chip suggested-reply atau mengirim balasan bebas.rcs.fellbackPerangkat tidak berkemampuan RCS; varian SMS dikirim sebagai gantinya.rcs.failedKegagalan permanen sebelum pengiriman (penerima tidak valid, penolakan operator).
Jika Anda sudah mengintegrasikan SMS, Anda sudah mengintegrasikan RCS.
Same auth, same idempotency contract, same error envelope, same webhook shape. The difference is the payload, not how you call it.
RCS.
await bird.rcs.send({
to: "+15005550006",
card: { title: "Your code", subtitle: `Code: ${code}` },
fallback: "sms",
});
Kartu nyata di perangkat berkemampuan RCS. Di luar jangkauan, flag fallback mengarahkan payload yang sama melalui SMS.
SMS.
await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your code is ${code}.`,
category: "authentication",
});
Langsung ke jalur SMS ketika Anda menginginkannya secara eksplisit. Auth yang sama, webhook yang sama, idempotensi yang sama.