RCS Business Messaging — saudara SMS yang lebih keren.
Rich card, suggested reply, pengirim bermerek, tanda dibaca. Fallback ke SMS dalam satu atribut. Auth yang sama, idempotensi yang sama, webhook yang sama seperti setiap channel Bird lainnya — karena tim engineering yang sama membangun semuanya.
import { BirdClient } from "@bird/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.
SDK di setiap runtime utama. Pengiriman pertama menuju nomor uji coba resmi (+15005550006) dan otomatis fallback ke SMS — jadi pengecekan CI tidak memerlukan perangkat berkemampuan RCS.
import { BirdClient } from "@bird/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
Status terkirim, dibaca, dan "sedang mengetik" sebagai webhook — format envelope yang sama seperti setiap channel lainnya.
- 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.
Why we build 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 "@bird/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.
Payload bertanda tangan HMAC, terlindungi dari replay, idempoten. Envelope yang sama di setiap channel Bird — pelajari satu, Anda sudah mempelajari semuanya.
{
"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.
Auth yang sama, kontrak idempotensi yang sama, envelope error yang sama, format webhook yang sama. Perbedaannya ada di payload — bukan cara Anda memanggilnya.
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}.`,
});Langsung ke jalur SMS ketika Anda menginginkannya secara eksplisit. Auth yang sama, webhook yang sama, idempotensi yang sama.