BIRD Realtime
API Realtime pour vos apps. Abonnez-vous, publiez, passez à l'échelle.
Chat en direct, présence, notifications in-app et tableaux de bord en temps réel, sans gérer l'infrastructure WebSocket vous-même.
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 minutes entre npm install et le premier événement
Publiez votre premier événement dans le langage que vous utilisez déjà.
Des SDK serveur pour Node, Python et Go, un client navigateur pour les abonnements, et du HTTP brut quand vous préférez ne pas ajouter de dépendance. Un canal ne nécessite aucun provisionnement : il existe dès que quelque chose s'y abonne.
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 channelCe que vous pouvez construire avec Realtime
Apportez des mises à jour en direct à chaque recoin de votre produit, du chat aux tableaux de bord en passant par le suivi et les jeux, le tout via une seule API simple.
- 01
Scores et résultats en direct
Mises à jour de matchs, résultats de sondages, soirées électorales : un seul appel de publication diffuse le nouveau chiffre à tous les écrans abonnés simultanément.
- 02
Chat in-app
Un canal par salon, la présence pour savoir qui est en ligne, et des événements client pour les indicateurs de saisie, sans aller-retour serveur.
- 03
Collaboration en ligne
Les événements client diffusent les positions de curseur, les sélections et les signaux de co-édition entre pairs via le canal, sans passer par le backend.
- 04
Jeux multijoueurs
La présence remplit le lobby, les événements client transmettent les coups, et un canal par partie maintient l'état sous les yeux de chaque joueur.
- 05
Graphiques et tableaux de bord en direct
Publiez les métriques dès qu'elles changent. Un canal cache transmet la valeur actuelle à chaque retardataire, pour que les graphiques ne s'affichent jamais vides.
- 06
Indicateurs de présence
Les canaux de présence suivent les membres lorsqu'ils rejoignent ou quittent ; les webhooks synchronisent le registre de votre backend.
- 07
Suivi de localisation en direct
Un coursier sur la carte du client, des amis partageant un itinéraire, une flotte sur l'écran de dispatch : publiez les coordonnées et chaque observateur suit, avec la dernière position connue en cache pour les retardataires.
- 08
Statut de commande et de livraison
Un canal cache par commande contient le statut actuel, de sorte que l'abonnement fait aussi office de récupération de l'état initial.
- 09
Enchères et offres
Chaque enchère apparaît simultanément sur l'écran de tous les enchérisseurs, et un canal cache transmet l'enchère la plus haute à quiconque rejoint en cours d'enchère.
- 10
Fils de notifications par utilisateur
Un canal privé par utilisateur, des abonnements signés par votre backend, pour que seul le bon client puisse écouter.
Découvrir Realtime
Chaque fonctionnalité en détail. Une app, une paire de clés.
Canaux.
Publics, privés, de présence, chiffrés et mis en cache, tous définis par leur nom.
Présence.
Qui est dans le salon, qui vient de partir, et comment joindre une personne directement.
Sécurité.
Des abonnements signés par votre propre backend, des connexions autorisées et un chiffrement de bout en bout.
Webhooks.
Votre serveur est notifié quand un canal se remplit, se vide ou manque son cache.
Pourquoi Realtime
L'UX en temps réel est la première chose qui casse quand vous passez à l'échelle. Nous la gérons depuis plus de dix ans.
L'état de connexion, la présence, la diffusion, le backoff de reconnexion et la capacité à absorber un pic de trafic sont les aspects d'une fonctionnalité en temps réel faciles à prototyper mais difficiles à exploiter. Realtime les gère en tant que service managé au sein de l'API Bird, de sorte qu'un canal en direct partage l'authentification, l'observabilité et les webhooks que vous utilisez déjà pour l'e-mail et le SMS.
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);
});
Chaque changement d'état est un webhook.
Les clients vont et viennent sans jamais solliciter votre backend. Voici comment il est informé : lancez la tâche coûteuse quand le premier abonné arrive, arrêtez-la quand le dernier part, et maintenez votre propre vue de qui se trouve dans un salon.
{
"type": "realtime.member_added",
"timestamp": "2026-05-19T15:42:01.221Z",
"data": {
"channel": "presence-room-42",
"member_id": "usr_4hQ2m"
}
}
realtime.channel_occupiedLe premier abonné a rejoint un canal précédemment vide.realtime.channel_vacatedLe dernier abonné est parti ; le canal est désormais vide.realtime.member_addedUn membre a rejoint un canal de présence.realtime.member_removedUn membre a quitté un canal de présence.realtime.connection_countLe nombre de connexions d'un canal a changé.
Si vous avez intégré l'e-mail, vous avez intégré Realtime.
Même authentification, même contrat d'idempotence, même enveloppe d'erreur, même format de webhook. La différence, c'est le transport : une connexion WebSocket persistante au lieu d'un envoi REST ponctuel.
Realtime.
await bird.realtime.members.send(APP_ID, "usr_4hQ2m", {
event: "order-shipped",
data: { status: "shipped" },
});
Atteint la personne où qu'elle soit connectée, sur chaque onglet et chaque appareil simultanément. Aucun canal à nommer, aucune connexion à suivre.
SMS.
await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your order has shipped.`,
category: "transactional",
});
Le même appel, sur un autre canal. Pour quand la mise à jour doit arriver sur un téléphone plutôt que sur un client connecté.