RCS si sta evolvendo

RCS Business Messaging — il fratello più elegante degli SMS.

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.

rcs.ts
200 · 0.6s
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 minuti da npm install al primo invio

Invia un messaggio rich dal linguaggio che già utilizzi.

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.

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

Dieci primitive tra "text" e una vera interfaccia applicativa.

RCS è un protocollo più ricco degli SMS. Esponiamo questa ricchezza come primitive, non come un canvas per designer.

  1. 01

    Rich card

    Titolo, sottotitolo, immagine hero e fino a 4 azioni per card. Carosello fino a 10 card in un unico messaggio.

  2. 02

    Risposte suggerite

    Chip tap-to-reply che inviano una stringa nota al vostro webhook. Nessuna interpretazione NLU da parte vostra.

  3. 03

    Mittente brandizzato

    Identità aziendale verificata con logo, colore e breve descrizione nell'intestazione della chat sul dispositivo.

  4. 04

    Conferme di lettura e digitazione

    Delivery, read, and "is typing" states as webhooks, the same envelope shape as every other channel.

  5. 05

    Fallback su SMS con un solo attributo

    Passate fallback: "sms". Se il dispositivo non è compatibile con RCS, inviamo in modo trasparente la variante testuale.

  6. 06

    Postback interattivi

    I tap sui pulsanti tornano come eventi rcs.replied con la stringa di postback impostata. Collegateli a una macchina a stati.

  7. 07

    Allegati multimediali

    Immagini, video fino a 100 MB, audio, PDF, vCard. Noi ospitiamo l'asset e forniamo un URL firmato con TTL.

  8. 08

    Conversazione bidirezionale

    Le risposte in entrata degli utenti arrivano come webhook firmati con HMAC. Stesso formato degli SMS e WhatsApp in entrata.

  9. 09

    Gating per operatore e dispositivo

    Verifichiamo la compatibilità RCS prima dell'invio. Se il dispositivo è offline o non supporta RCS, il fallback è automatico.

  10. 10

    Stessa autenticazione, stesso formato di errore

    Una sola chiave API per RCS, SMS, Email, WhatsApp, Voice. Un unico registro dei tipi di errore per tutti.

Perché sviluppiamo RCS

Perché nel 2026 il canale più economico e il più ricco dovrebbero essere lo stesso invio.

I dispositivi RCS ricevono una rich card; tutti gli altri ricevono la variante SMS generata dallo stesso payload. Gestiamo SMS da dieci anni su 240 connessioni dirette con gli operatori; RCS è lo stesso livello di routing con un tipo di payload più ricco e un flag di fallback. Onesti sulla copertura: oggi RCS funziona sugli operatori statunitensi (T-Mobile, Verizon, AT&T) e in Brasile; UE e APAC si espandono nel corso del 2026. Al di fuori di questa copertura, il flag di fallback fa il lavoro.

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

Ogni cambio di stato è un webhook.

HMAC-signed payloads, replay-protected, idempotent. The same envelope on every Bird channel: learn one, you've learned them all.

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
  }
}

Programmazione dei tentativi: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-letter dopo l'ultimo tentativo; ogni evento in dead-letter è riproducibile dalla dashboard o via API.

  • rcs.queuedAccettato dall'API e messo in coda per l'invio.
  • rcs.sentConsegnato al gateway RBM dell'operatore.
  • rcs.deliveredIl dispositivo ha confermato la ricezione del messaggio rich.
  • rcs.readIl destinatario ha letto il messaggio (se le conferme di lettura sono abilitate).
  • rcs.repliedL'utente ha toccato un chip di risposta suggerita o ha inviato una risposta libera.
  • rcs.fellbackIl dispositivo non era compatibile con RCS; è stata inviata la variante SMS.
  • rcs.failedErrore permanente prima dell'invio (destinatario non valido, rifiuto dell'operatore).

Se avete integrato gli SMS, avete integrato RCS.

Same auth, same idempotency contract, same error envelope, same webhook shape. The difference is the payload, not how you call it.

RCS.

rcs
await bird.rcs.send({
  to:       "+15005550006",
  card:     { title: "Your code", subtitle: `Code: ${code}` },
  fallback: "sms",
});

Una vera card sui dispositivi compatibili con RCS. Al di fuori della copertura, il flag di fallback instrada lo stesso payload via SMS.

SMS.

sms
await bird.sms.send({
  from:     "Bird",
  to:       "+15005550006",
  text:     `Your code is ${code}.`,
  category: "authentication",
});

Indirizzate il percorso SMS direttamente quando volete essere espliciti. Stessa autenticazione, stessi webhook, stessa idempotenza.

Da $0,005 per messaggio + tariffe operatore.

Prezzo per messaggio RCS consegnato. Le tariffe rich-message dell'operatore sono passanti e indicate come voce separata in fattura. Gli SMS di fallback sono fatturati alla tariffa SMS del paese di destinazione. Nessun costo di piattaforma, nessun costo per utenza.

Inizia con un canale.
Aggiungi gli altri quando sei pronto.

Una chiave API di test è subito tua. La produzione si sblocca quando aggiungi un metodo di pagamento e verifichi un mittente.

Usi Claude Code, Cursor o Codex? Copia un prompt di configurazione e il tuo agente installerà la CLI e le skill di Bird per te. Scegli il tuo:

Cursor