BIRD Realtime
Realtime API für Ihre Apps. Abonnieren, veröffentlichen, skalieren.
Live-Chat, Präsenz, In-App-Benachrichtigungen und Echtzeit-Dashboards – ohne die WebSocket-Infrastruktur selbst betreiben zu müssen.
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 von npm install bis zum ersten Event
Publizieren Sie Ihr erstes Event in der Sprache, die Sie bereits nutzen.
Server-SDKs für Node, Python und Go, ein Browser-Client für die Empfangsseite und einfaches HTTP, wenn Sie lieber keine Abhängigkeit hinzufügen möchten. Ein Channel muss nicht provisioniert werden: Er existiert, sobald etwas ihn abonniert.
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 channelWas Sie mit Realtime entwickeln können
Bringen Sie Live-Updates in jeden Bereich Ihres Produkts – von Chat und Dashboards bis hin zu Tracking und Spielen – alles über eine einzige, einfache API.
- 01
Live-Ergebnisse und Spielstände
Spielstände, Umfrageergebnisse, Wahlabende: Ein einziger Publish-Aufruf verteilt die neue Zahl gleichzeitig an jeden abonnierten Bildschirm.
- 02
In-App-Chat
Ein Channel pro Raum, Präsenz für Online-Status und Client-Events für Tipp-Indikatoren – ohne Server-Roundtrip.
- 03
Online-Zusammenarbeit
Client-Events verteilen Cursorpositionen, Markierungen und Co-Editing-Signale zwischen Teilnehmern über den Channel – ohne Umweg über das Backend.
- 04
Multiplayer-Spiele
Präsenz füllt die Lobby, Client-Events übertragen die Züge, und ein Channel pro Match hält den Spielstand für jeden Spieler aktuell.
- 05
Live-Charts und Dashboards
Veröffentlichen Sie Metriken, sobald sie sich ändern. Ein Cache-Channel übergibt den aktuellen Wert an jeden Nachzügler, sodass Charts nie leer gerendert werden.
- 06
Präsenz-Indikatoren
Präsenz-Channels verfolgen Mitglieder beim Beitreten und Verlassen; Webhooks halten die Teilnehmerliste Ihres Backends synchron.
- 07
Live-Standortverfolgung
Ein Kurier auf der Karte des Kunden, Freunde, die eine Route teilen, eine Flotte auf dem Disposition-Bildschirm: Veröffentlichen Sie Koordinaten, und jeder Beobachter folgt – mit der letzten bekannten Position im Cache für Nachzügler.
- 08
Bestell- und Lieferstatus
Ein Cache-Channel pro Bestellung hält den aktuellen Status bereit, sodass das Abonnement gleichzeitig als initialer Statusabruf dient.
- 09
Auktionen und Gebote
Jedes Gebot erscheint gleichzeitig auf dem Bildschirm aller Bieter, und ein Cache-Channel übergibt das aktuelle Höchstgebot an jeden, der mitten in der Auktion beitritt.
- 10
Benachrichtigungs-Feeds pro Nutzer
Ein privater Channel pro Nutzer, Abonnements von Ihrem Backend signiert – so kann nur der richtige Client zuhören.
Warum Realtime
Live-UX ist der Teil, der beim Skalieren zuerst ausfällt. Wir betreiben ihn seit über einem Jahrzehnt.
Verbindungsstatus, Präsenz, Fan-out, Reconnection-Backoff und die Kapazität, Lastspitzen abzufangen – das sind die Teile eines Live-Features, die leicht zu prototypisieren, aber schwer zu betreiben sind. Realtime führt sie als Managed Service innerhalb der Bird API aus, sodass ein Live-Channel dieselbe Authentifizierung, Observability und Webhooks nutzt, die Sie bereits für E-Mail und SMS verwenden.
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);
});
Jede Statusänderung ist ein Webhook.
Clients kommen und gehen, ohne je Ihr Backend zu berühren. So erfährt es davon: Starten Sie den aufwändigen Job, wenn der erste Subscriber eintrifft, stoppen Sie ihn, wenn der letzte geht, und behalten Sie Ihre eigene Übersicht darüber, wer sich in einem Raum befindet.
{
"type": "realtime.member_added",
"timestamp": "2026-05-19T15:42:01.221Z",
"data": {
"channel": "presence-room-42",
"member_id": "usr_4hQ2m"
}
}
realtime.channel_occupiedErster Subscriber hat einen zuvor leeren Channel betreten.realtime.channel_vacatedDer letzte Subscriber hat den Channel verlassen; der Channel ist jetzt leer.realtime.member_addedEin Mitglied ist einem Presence-Channel beigetreten.realtime.member_removedEin Mitglied hat einen Presence-Channel verlassen.realtime.connection_countDie Verbindungsanzahl eines Channels hat sich geändert.
Wenn Sie E-Mail integriert haben, haben Sie auch Realtime integriert.
Dieselbe Authentifizierung, derselbe Idempotenz-Vertrag, dasselbe Fehler-Envelope, dasselbe Webhook-Format. Der Unterschied ist der Transport: eine langlebige WebSocket-Verbindung statt eines einmaligen REST-Sends.
Realtime.
await bird.realtime.members.send(APP_ID, "usr_4hQ2m", {
event: "order-shipped",
data: { status: "shipped" },
});
Erreicht die Person überall dort, wo sie verbunden ist – auf jedem Tab und jedem Gerät gleichzeitig. Kein Channel-Name, keine Verbindung zum Nachverfolgen.
SMS.
await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your order has shipped.`,
category: "transactional",
});
Derselbe Aufruf, nur ein anderer Kanal. Für den Fall, dass das Update auf einem Telefon statt auf einem verbundenen Client ankommen soll.