Gehoste pub/sub via WebSocket. Abonneren, publiceren, schalen.
Live chat, aanwezigheid, in-app-meldingen, realtime dashboards — zonder zelf de WebSocket-infrastructuur te beheren. Gebouwd op dezelfde technologie die Pusher Channels tien jaar lang aandreef. Dezelfde authenticatie, dezelfde idempotentie, hetzelfde webhook-contract als elk ander Bird-kanaal.
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
// On your server: publish an event to a channel.
const { data, error } = await bird.realtime.publish({
channel: "orders:BRD-49217",
event: "order.shipped",
data: { status: "shipped", eta: "Thursday, May 22" },
}).safe();
// In your client: subscribe and receive it live.
const channel = bird.realtime.subscribe("orders:BRD-49217");
channel.on("order.shipped", (event) => render(event.data));
if (error) throw error;
console.log(data.id);
// → "evt_2nQ81oP3..."
5 minuten van npm install tot eerste event
Publiceer uw eerste event in de taal die u al gebruikt.
SDK's in elke grote runtime. De eerste publish landt op een goedgekeurd testkanaal (bird-test:realtime), zodat u een CI-check kunt uitvoeren voordat u een productiekanaal inricht.
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.realtime.publish({
channel: "bird-test:realtime",
event: "ping",
data: { hello: "world" },
}).safe();Tien stappen tussen "uw server publiceert" en "uw client ontvangt het event."
Gehoste pub/sub-primitieven, benoemd en auditeerbaar. Geen WebSocket-infrastructuur om zelf te beheren.
- 01
Abonneer op benoemde kanalen
Clients openen een verbinding, abonneren op een of meer kanalen en ontvangen events zodra ze worden gepubliceerd.
- 02
Publiceer vanuit elke omgeving
Vanuit uw backend, uw CLI, uw CI of een MCP-aware agent — dezelfde bird.realtime.publish-aanroep.
- 03
Aanwezigheidskanalen
Weet wie er in een kanaal zit, wie er bijkwam, wie er vertrok. Webhook-events bij elke wijziging.
- 04
Privékanalen met authenticatie
Auth-handshake aan de clientzijde; uw backend ondertekent het abonnementsverzoek.
- 05
Versleutelde kanalen
End-to-end-versleuteling voor kanalen die gevoelige payloads bevatten.
- 06
Herstel van verbindingsstatus
Clients maken opnieuw verbinding en herspelen events die gemist zijn tijdens de onderbreking, tot een configureerbaar tijdvenster.
- 07
Rate limits op kanaalniveau
Configureerbare publish-limieten per kanaal. Het dashboard toont de limiet en het huidige tempo.
- 08
Cross-regio routering
Verbindingen worden automatisch naar het dichtstbijzijnde edge-knooppunt gerouteerd. Latenties blijven laag in elke regio.
- 09
Webhooks bij kanaalstatus
realtime.channel.occupied, realtime.channel.vacated, realtime.member.added, realtime.member.removed. Dezelfde HMAC-envelope als elk ander Bird-kanaal.
- 10
Dezelfde auth, dezelfde error-envelope
Eén API-key voor Realtime, SMS, Email, WhatsApp, Voice. Eén error-typeregister voor allemaal.
Waarom wij Realtime bouwen
Live UX is het eerste dat breekt bij schaalvergroting. Wij beheren het al tien jaar.
Bird Realtime is de WebSocket-infrastructuur die Pusher Channels aandreef — de dienst waartegen velen van u al jaren ontwikkelen. We integreren het in de nieuwe Bird API, zodat het authenticatie, observability en facturering deelt met alles wat u op Bird doet. Als u vandaag al Pusher gebruikt, blijft uw dienst op dezelfde infrastructuur draaien; de nieuwe SDK is de zichtbare verandering voor ontwikkelaars.
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
// On your server: publish an event to a channel.
const { data, error } = await bird.realtime.publish({
channel: "orders:BRD-49217",
event: "order.shipped",
data: { status: "shipped", eta: "Thursday, May 22" },
}).safe();
// In your client: subscribe and receive it live.
const channel = bird.realtime.subscribe("orders:BRD-49217");
channel.on("order.shipped", (event) => render(event.data));
if (error) throw error;
console.log(data.id);
// → "evt_2nQ81oP3..."
Elke statuswijziging is een webhook.
HMAC-ondertekende payloads, replay-beschermd, idempotent. Dezelfde envelope op elk Bird-kanaal — leer er één, en u kent ze allemaal.
{
"type": "realtime.member.added",
"id": "evt_3pX1g7t...",
"created_at": "2026-05-19T15:42:01.221Z",
"data": {
"channel": "presence:room-42",
"member_id": "usr_4hQ2m",
"members": 18,
"region": "us-east"
}
}
Retry-schema: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-letter na de laatste poging; elk dead-lettered event is opnieuw afspeelbaar vanuit het dashboard of de API.
realtime.channel.occupiedEerste abonnee heeft zich aangesloten bij een eerder leeg kanaal.realtime.channel.vacatedDe laatste abonnee is vertrokken; het kanaal is nu leeg.realtime.member.addedEen lid is toegetreden tot een aanwezigheidskanaal.realtime.member.removedEen lid heeft een aanwezigheidskanaal verlaten.realtime.message.publishedEen event is gepubliceerd naar een kanaal.
Als u e-mail hebt geïntegreerd, hebt u Realtime geïntegreerd.
Dezelfde auth, hetzelfde idempotency-contract, dezelfde error-envelope, dezelfde webhook-structuur. Het verschil is het transport — een langlevende WebSocket-verbinding in plaats van een eenmalige REST-verzending.
Realtime.
const channel = bird.realtime.subscribe("orders:BRD-49217");
channel.on("order.shipped", (event) => {
render(event.data);
});
Open een verbinding, abonneer u op een kanaal en ontvang events zodra ze plaatsvinden. Dezelfde auth als uw transactionele verzendingen.
SMS.
await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your order has shipped.`,
category: "transactional",
});
Dezelfde envelope, dezelfde idempotency. Voor wanneer het event op een telefoon moet landen, niet in een verbonden client.
Prijzen worden binnenkort aangekondigd.
De prijzen voor Realtime worden afgerond. Als u een bestaande Pusher Channels-klant bent, blijft uw dienst op het huidige abonnement. Voor een offerte voor de nieuwe Bird Realtime SDK kunt u contact met ons opnemen.