BIRD Realtime
Realtime API voor uw apps. Abonneren, publiceren, schalen.
Livechat, aanwezigheid, in-app-notificaties en realtime dashboards, zonder zelf de WebSocket-infrastructuur te beheren.
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 minuten van npm install tot eerste event
Publiceer uw eerste event in de taal die u al gebruikt.
Server-SDK's voor Node, Python en Go, een browserclient voor de abonneerzijde, en gewone HTTP als u liever geen dependency toevoegt. Een kanaal hoeft niet aangemaakt te worden: het bestaat zodra iets zich erop abonneert.
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 channelWat u kunt bouwen met Realtime
Breng live updates naar elk onderdeel van uw product — van chat en dashboards tot tracking en games — allemaal via één simpele API.
- 01
Live scores en uitslagen
Wedstrijdupdates, peilingresultaten, verkiezingsavonden: één publish-aanroep stuurt het nieuwe cijfer direct naar elk geabonneerd scherm.
- 02
In-app-chat
Een kanaal per ruimte, aanwezigheid voor wie online is, en client events voor typindicatoren — zonder server-roundtrip.
- 03
Online samenwerking
Client events verspreiden cursorposities, selecties en co-editing-signalen tussen peers via het kanaal, zonder omweg via de backend.
- 04
Multiplayergames
Aanwezigheid vult de lobby, client events dragen de zetten over, en een kanaal per wedstrijd houdt de status zichtbaar voor elke speler.
- 05
Live grafieken en dashboards
Publiceer metrics zodra ze veranderen. Een cache-kanaal geeft de huidige waarde aan elke late deelnemer, zodat grafieken nooit leeg weergeven.
- 06
Aanwezigheidsindicatoren
Aanwezigheidskanalen volgen leden wanneer ze deelnemen en vertrekken; webhooks houden de lijst in uw backend gesynchroniseerd.
- 07
Live locatietracking
Een koerier op de kaart van de klant, vrienden die een route delen, een vloot op het dispatchscherm: publiceer coördinaten en elke kijker volgt mee, met de laatst bekende positie gecachet voor late deelnemers.
- 08
Bestel- en bezorgstatus
Een cache-kanaal per bestelling bevat de huidige status, zodat het abonnement tevens dient als initiële statusophaling.
- 09
Veilingen en biedingen
Elk bod verschijnt gelijktijdig op het scherm van elke bieder, en een cache-kanaal geeft het huidige hoogste bod aan iedereen die halverwege de veiling deelneemt.
- 10
Notificatiefeeds per gebruiker
Eén privékanaal per gebruiker, abonnementen ondertekend door uw backend, zodat alleen de juiste client kan meeluisteren.
Waarom Realtime
Live UX is het onderdeel dat als eerste faalt bij opschaling. Wij draaien het al meer dan tien jaar.
Verbindingsstatus, aanwezigheid, fan-out, reconnectie-backoff en de capaciteit om een verkeerspiek op te vangen zijn de onderdelen van een live feature die makkelijk te prototypen maar moeilijk te beheren zijn. Realtime draait ze als managed service binnen de Bird API, zodat een live kanaal dezelfde authenticatie, observability en webhooks deelt die u al gebruikt voor e-mail en 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);
});
Elke statuswijziging is een webhook.
Clients komen en gaan zonder ooit uw backend aan te raken. Zo komt die erachter: start de zware taak wanneer de eerste abonnee arriveert, stop wanneer de laatste vertrekt, en houd uw eigen overzicht bij van wie er in een ruimte is.
{
"type": "realtime.member_added",
"timestamp": "2026-05-19T15:42:01.221Z",
"data": {
"channel": "presence-room-42",
"member_id": "usr_4hQ2m"
}
}
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.connection_countHet aantal verbindingen van een kanaal is gewijzigd.
Als u e-mail hebt geïntegreerd, hebt u Realtime geïntegreerd.
Dezelfde authenticatie, hetzelfde idempotentiecontract, dezelfde fout-envelope, dezelfde webhook-structuur. Het verschil zit in het transport: een persistente WebSocket-verbinding in plaats van een eenmalige REST-aanroep.
Realtime.
await bird.realtime.members.send(APP_ID, "usr_4hQ2m", {
event: "order-shipped",
data: { status: "shipped" },
});
Bereikt de persoon waar ze ook verbonden zijn, op elk tabblad en apparaat tegelijk. Geen kanaal om te benoemen, geen verbinding om te volgen.
SMS.
await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your order has shipped.`,
category: "transactional",
});
Dezelfde aanroep, één kanaal verder. Voor wanneer de update op een telefoon moet aankomen in plaats van een verbonden client.