BIRD Realtime

API Realtime pour vos apps. Abonnez-vous, publiez, passez à l'échelle.

Mise en place en :
Cursor

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.

app.ts
connected
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);
});
Order BRD-49217Placed
ETAThursday, May 22

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.

1
2
3
4
5
6
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 channel

Ce 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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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.

  9. 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. 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.

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.

presence.ts
18 members
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.

POST /webhooks/bird
signed
{
  "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.

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.

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é.

Commencez avec un seul canal.
Ajoutez les autres quand vous êtes prêt.

Une clé API de test est disponible immédiatement. L'accès production se débloque dès que vous ajoutez un moyen de paiement et vérifiez un expéditeur.

Vous utilisez Claude Code, Cursor ou Codex ? Copiez un prompt de configuration et votre agent installe la CLI Bird et les compétences pour vous. Choisissez le vôtre :

Cursor