Realtime jest w trakcie aktualizacji

Hostowany pub/sub przez WebSocket. Subskrybuj, publikuj, skaluj.

Czat na żywo, obecność, powiadomienia w aplikacji, dashboardy w czasie rzeczywistym — bez samodzielnego zarządzania infrastrukturą WebSocket. Zbudowane na tej samej technologii, która przez dekadę napędzała Pusher Channels. Ta sama autoryzacja, ta sama idempotentność, ten sam kontrakt webhooków co w każdym innym kanale Bird.

realtime.ts
200 · 0.2s
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

// On your server: publish an event to a channel.
const { data, error } = await bird.realtime.publish({
  channel: "orders:BRD-49217",
  event:   "order.shipped",
  data:    { status: "shipped", eta: "Thursday, May 22" },
}).safe();

// In your client: subscribe and receive it live.
const channel = bird.realtime.subscribe("orders:BRD-49217");
channel.on("order.shipped", (event) => render(event.data));

if (error) throw error;
console.log(data.id);
// → "evt_2nQ81oP3..."

5 minut od npm install do pierwszego zdarzenia

Opublikuj swoje pierwsze zdarzenie w języku, którego już używasz.

SDK dla każdego popularnego środowiska uruchomieniowego. Pierwsza publikacja trafia na dedykowany kanał testowy (bird-test:realtime), więc możesz dodać test CI, zanim uruchomisz kanał produkcyjny.

1
2
3
4
5
6
7
8
9
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

const { data, error } = await bird.realtime.publish({
  channel: "bird-test:realtime",
  event:   "ping",
  data:    { hello: "world" },
}).safe();

Dziesięć kroków między "Twój serwer publikuje" a "Twój klient otrzymuje zdarzenie".

Hostowane mechanizmy pub/sub — nazwane i audytowalne. Żadnej infrastruktury WebSocket do samodzielnego zarządzania.

  1. 01

    Subskrybuj nazwane kanały

    Klienci otwierają połączenie, subskrybują jeden lub więcej kanałów i otrzymują zdarzenia w momencie ich publikacji.

  2. 02

    Publikuj z dowolnego miejsca

    Z Twojego backendu, CLI, CI lub agenta obsługującego MCP — to samo wywołanie bird.realtime.publish.

  3. 03

    Kanały obecności

    Wiedz, kto jest na kanale, kto dołączył, kto wyszedł. Zdarzenia webhook przy każdej zmianie.

  4. 04

    Kanały prywatne z autoryzacją

    Handshake autoryzacyjny po stronie klienta; Twój backend podpisuje żądanie subskrypcji.

  5. 05

    Kanały szyfrowane

    Szyfrowanie end-to-end dla kanałów przesyłających wrażliwe dane.

  6. 06

    Odzyskiwanie stanu połączenia

    Klienci ponownie łączą się i odtwarzają zdarzenia utracone podczas rozłączenia — w ramach konfigurowalnego okna czasowego.

  7. 07

    Limity częstotliwości na poziomie kanału

    Konfigurowalne limity publikacji per kanał. Dashboard pokazuje limit i aktualną częstotliwość.

  8. 08

    Routing międzyregionalny

    Połączenia automatycznie kierowane do najbliższego węzła brzegowego. Niskie opóźnienia w każdym regionie.

  9. 09

    Webhooki na zmianę stanu kanału

    realtime.channel.occupied, realtime.channel.vacated, realtime.member.added, realtime.member.removed. Ta sama koperta HMAC co w każdym innym kanale Bird.

  10. 10

    Ta sama autoryzacja, ta sama struktura błędów

    Jeden klucz API dla Realtime, SMS, Email, WhatsApp, Voice. Jeden rejestr typów błędów dla nich wszystkich.

Dlaczego budujemy Realtime

UX w czasie rzeczywistym to element, który psuje się pierwszy przy skalowaniu. My zajmujemy się tym od dekady.

Bird Realtime to infrastruktura WebSocket, która napędzała Pusher Channels — usługę, z którą wielu z Was pracuje od lat. Włączamy ją do nowego API Bird, aby współdzieliła autoryzację, obserwowalność i rozliczenia ze wszystkim, co robicie na Bird. Jeśli już korzystacie z Pusher, Wasza usługa działa na tych samych połączeniach; nowe SDK to zmiana widoczna po stronie programisty.

realtime.ts
200 · 0.2s
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

// On your server: publish an event to a channel.
const { data, error } = await bird.realtime.publish({
  channel: "orders:BRD-49217",
  event:   "order.shipped",
  data:    { status: "shipped", eta: "Thursday, May 22" },
}).safe();

// In your client: subscribe and receive it live.
const channel = bird.realtime.subscribe("orders:BRD-49217");
channel.on("order.shipped", (event) => render(event.data));

if (error) throw error;
console.log(data.id);
// → "evt_2nQ81oP3..."

Każda zmiana stanu to webhook.

Ładunki podpisane HMAC, zabezpieczone przed powtórzeniem, idempotentne. Ta sama koperta w każdym kanale Bird — poznaj jedną, znasz je wszystkie.

POST /webhooks/bird
signed
{
  "type": "realtime.member.added",
  "id":   "evt_3pX1g7t...",
  "created_at": "2026-05-19T15:42:01.221Z",
  "data": {
    "channel":   "presence:room-42",
    "member_id": "usr_4hQ2m",
    "members":   18,
    "region":    "us-east"
  }
}

Harmonogram ponownych prób: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Po ostatniej próbie zdarzenie trafia do kolejki dead-letter; każde takie zdarzenie można odtworzyć z poziomu dashboardu lub API.

  • realtime.channel.occupiedPierwszy subskrybent dołączył do wcześniej pustego kanału.
  • realtime.channel.vacatedOstatni subskrybent opuścił kanał; kanał jest teraz pusty.
  • realtime.member.addedCzłonek dołączył do kanału obecności.
  • realtime.member.removedCzłonek opuścił kanał obecności.
  • realtime.message.publishedZdarzenie zostało opublikowane na kanale.

Jeśli zintegrowałeś e-mail, to zintegrowałeś już Realtime.

To samo uwierzytelnianie, ten sam kontrakt idempotentności, ta sama struktura błędów, ten sam format webhooka. Różnica to transport — trwałe połączenie WebSocket zamiast jednorazowego wywołania REST.

Realtime.

realtime
const channel = bird.realtime.subscribe("orders:BRD-49217");

channel.on("order.shipped", (event) => {
  render(event.data);
});

Otwórz połączenie, zasubskrybuj kanał, odbieraj zdarzenia w czasie rzeczywistym. To samo uwierzytelnianie co przy wysyłkach transakcyjnych.

SMS.

sms
await bird.sms.send({
  from:     "Bird",
  to:       "+15005550006",
  text:     `Your order has shipped.`,
  category: "transactional",
});

Ta sama struktura, ta sama idempotentność. Na wypadek, gdy zdarzenie ma trafić na telefon, a nie do podłączonego klienta.

Cennik wkrótce.

Cennik Bird Realtime jest w trakcie finalizacji. Jeśli korzystasz już z Pusher Channels, Twoja usługa pozostaje na dotychczasowym planie. Aby uzyskać wycenę nowego Bird Realtime SDK, napisz do nas.

Zacznij od jednego kanału.
Dodaj kolejne, gdy będziesz gotowy.

Testowy klucz API otrzymasz od razu. Dostęp produkcyjny odblokujesz po dodaniu metody płatności i weryfikacji nadawcy.

Używasz Claude Code, Cursor lub Codex? Skopiuj prompt konfiguracyjny, a Twój agent zainstaluje za Ciebie Bird CLI i umiejętności. Wybierz swój:

Cursor