BIRD Realtime
Realtime API per le tue app. Sottoscrivi, pubblica, scala.
Live chat, presenza, notifiche in-app e dashboard in tempo reale, senza gestire l'infrastruttura WebSocket in autonomia.
import { BirdRealtime } from "@messagebird/realtime";
const bird = new BirdRealtime({
appKey: APP_KEY,
region: "us1",
});
const channel = bird.subscribe("orders-42");
channel.bind("order-shipped", (data) => {
render(data);
});
5 minuti da npm install al primo evento
Pubblica il tuo primo evento nel linguaggio che già utilizzi.
SDK server per Node, Python e Go, un client browser per il lato sottoscrizione e semplice HTTP quando preferite non aggiungere una dipendenza. Un canale non richiede provisioning: esiste nel momento in cui qualcosa vi si sottoscrive.
const result = await bird.realtime.publish("rap_01krdgeqcxet5s7t44vh8rt9mg", {
event: "order.updated",
channels: ["orders", "presence-lobby"],
data: { order_id: "ord_123", status: "shipped" },
});
console.log(result.data?.length); // one entry per channelCosa puoi costruire con Realtime
Porta aggiornamenti live in ogni angolo del tuo prodotto, dalla chat ai dashboard, dal tracking ai giochi, tutto attraverso un'unica semplice API.
- 01
Punteggi e risultati live
Aggiornamenti delle partite, risultati dei sondaggi, notti elettorali: una singola chiamata di pubblicazione distribuisce il nuovo dato a ogni schermo sottoscritto contemporaneamente.
- 02
Chat in-app
Un canale per stanza, presenza per chi è online ed eventi client per gli indicatori di digitazione, senza round-trip verso il server.
- 03
Collaborazione online
Gli eventi client distribuiscono posizioni del cursore, selezioni e segnali di co-editing tra i peer attraverso il canale, senza passaggi dal backend.
- 04
Giochi multiplayer
La presenza riempie la lobby, gli eventi client trasportano le mosse e un canale per partita mantiene lo stato visibile a ogni giocatore.
- 05
Grafici e dashboard live
Pubblica le metriche appena cambiano. Un canale con cache consegna il valore corrente a ogni nuovo arrivato, così i grafici non si caricano mai vuoti.
- 06
Indicatori di presenza
I canali di presenza tracciano i membri quando entrano e escono; i webhook mantengono sincronizzato il registro del tuo backend.
- 07
Tracciamento posizione live
Un corriere sulla mappa del cliente, amici che condividono un percorso, una flotta sulla schermata di dispatching: pubblica le coordinate e ogni osservatore segue, con l'ultima posizione nota nella cache per chi arriva dopo.
- 08
Stato ordini e consegne
Un canale con cache per ordine conserva lo stato corrente, così la sottoscrizione funge anche da caricamento dello stato iniziale.
- 09
Aste e offerte
Ogni offerta arriva sullo schermo di tutti gli offerenti simultaneamente, e un canale con cache consegna l'offerta più alta corrente a chiunque si unisca a metà asta.
- 10
Feed di notifiche per utente
Un canale privato per utente, sottoscrizioni firmate dal tuo backend, così solo il client autorizzato può ascoltare.
Perché Realtime
L'esperienza live è la prima cosa che si rompe quando scali. Noi la gestiamo da oltre un decennio.
Stato della connessione, presenza, fan-out, backoff di riconnessione e capacità di assorbire picchi di traffico sono le parti di una funzionalità live facili da prototipare ma difficili da gestire in produzione. Realtime le esegue come servizio gestito all'interno dell'API Bird, così un canale live condivide autenticazione, osservabilità e webhook che già utilizzi per email e SMS.
const room = bird.subscribe("presence-room-42");
room.bind("bird:subscription_succeeded", () => {
const members = [...room.members.values()];
render({ me: room.myId, members });
});
room.bind("bird:member_added", (member) => {
addToRoster(member.member_id);
});
room.bind("bird:member_removed", (member) => {
removeFromRoster(member.member_id);
});
Ogni cambio di stato è un webhook.
I client vanno e vengono senza mai toccare il tuo backend. Ecco come ne viene informato: avvia il processo oneroso quando arriva il primo sottoscrittore, fermalo quando se ne va l'ultimo e mantieni la tua vista di chi è presente in una stanza.
{
"type": "realtime.member_added",
"timestamp": "2026-05-19T15:42:01.221Z",
"data": {
"channel": "presence-room-42",
"member_id": "usr_4hQ2m"
}
}
realtime.channel_occupiedIl primo sottoscrittore si è unito a un canale precedentemente vuoto.realtime.channel_vacatedL'ultimo sottoscrittore è uscito; il canale è ora vuoto.realtime.member_addedUn membro si è unito a un canale di presenza.realtime.member_removedUn membro ha lasciato un canale di presenza.realtime.connection_countIl conteggio delle connessioni di un canale è cambiato.
Se hai integrato l'email, hai già integrato Realtime.
Stessa autenticazione, stesso contratto di idempotenza, stesso formato di errore, stessa struttura webhook. La differenza è il trasporto: una connessione WebSocket persistente anziché un singolo invio REST.
Realtime.
await bird.realtime.members.send(APP_ID, "usr_4hQ2m", {
event: "order-shipped",
data: { status: "shipped" },
});
Raggiunge la persona ovunque sia connessa, su ogni scheda e dispositivo contemporaneamente. Nessun canale da specificare, nessuna connessione da tracciare.
SMS.
await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your order has shipped.`,
category: "transactional",
});
La stessa chiamata, su un altro canale. Per quando l'aggiornamento deve arrivare su un telefono anziché su un client connesso.