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.
Explore Realtime
Each capability in depth. One app, one key pair.
Channels.
Public, private, presence, encrypted, and cached, all chosen by the name.
Presence.
Who is in the room, who just left, and how to reach one person directly.
Security.
Subscriptions your own backend signs, authorized connections, and end-to-end encryption.
Webhooks.
Your server hears when a channel fills, empties, or misses its cache.
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.
import type { Member } from "@messagebird/realtime";
const room = bird.subscribe("presence-room-42");
room.bind("bird:subscription_succeeded", () => {
const members = [...room.members.values()];
render({ me: room.myId, members });
});
room.bind<Member>("bird:member_added", (member) => {
addToRoster(member.member_id);
});
room.bind<Member>("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.