RCS is being upgraded

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.

rcs.ts
200 · 0.6s
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.

1
2
3
4
5
6
7
8
9
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.

  1. 01

    Rich card

    Judul, subjudul, hero image, dan hingga 4 aksi per kartu. Carousel hingga 10 kartu dalam satu pesan.

  2. 02

    Suggested reply

    Chip tap-to-reply yang mengirim string yang diketahui kembali ke webhook Anda. Tidak perlu tebak-tebakan NLU di sisi Anda.

  3. 03

    Pengirim bermerek

    Identitas bisnis terverifikasi dengan logo, warna, dan deskripsi singkat di header chat perangkat.

  4. 04

    Tanda dibaca dan mengetik

    Status terkirim, dibaca, dan "sedang mengetik" sebagai webhook — format envelope yang sama seperti setiap channel lainnya.

  5. 05

    Fallback ke SMS dalam satu atribut

    Kirim fallback: "sms". Jika perangkat tidak berkemampuan RCS, kami secara transparan mengirim varian teks.

  6. 06

    Postback interaktif

    Ketukan tombol kembali sebagai event rcs.replied dengan string postback yang Anda atur. Hubungkan ke state machine.

  7. 07

    Lampiran media

    Gambar, video hingga 100MB, audio, PDF, vCard. Kami menghosting aset dan menyajikan signed URL dengan TTL.

  8. 08

    Percakapan dua arah

    Balasan masuk dari pengguna tiba sebagai webhook bertanda tangan HMAC. Format yang sama seperti SMS dan WhatsApp masuk.

  9. 09

    Gating operator dan perangkat

    Kami memeriksa kemampuan RCS sebelum mengirim. Jika perangkat offline atau non-RCS, kami otomatis fallback.

  10. 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.

rcs.ts
200 · 0.6s
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.

POST /webhooks/bird
signed
{
  "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.

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.

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.

Mulai dari $0,005 per pesan + biaya operator.

Dihitung per pesan RCS yang terkirim. Biaya rich message operator bersifat pass-through dan ditampilkan per item di tagihan. Pengiriman fallback SMS ditagih sesuai tarif SMS untuk negara tujuan. Tanpa biaya platform, tanpa biaya per pengguna.

Mulai dengan satu channel.
Tambahkan yang lain saat Anda siap.

API key uji coba langsung tersedia untuk Anda. Akses produksi terbuka setelah Anda menambahkan metode pembayaran dan memverifikasi pengirim.

Mulai sekarangBaca dokumentasiatau

Using Claude Code, Cursor, or Codex? Point it at our MCP server — tools for every channel we expose, with scoped agent keys.

Cursor