BIRD Realtime

为您的应用打造的 Realtime API。订阅、发布、扩展。

配置时间:
Cursor

实时聊天、在线状态、应用内通知和实时仪表盘,无需自行运维 WebSocket 基础设施。

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

npm install 到首个事件仅需 5 分钟

用您已经在使用的语言发布您的第一个事件。

提供 TypeScript、Python、Go 和 PHP 的服务端 SDK,浏览器、Swift 和 Kotlin 的客户端用于订阅,以及纯 HTTP 方式——当您不想增加额外依赖时。频道无需预先配置:一旦有订阅者,频道即刻存在。

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

使用 Realtime 可以构建什么

为产品的每个角落带来实时更新——从聊天和仪表盘到物流追踪和游戏,全部通过一个简洁的 API 实现。

  1. 01

    实时比分和赛果

    比赛更新、投票结果、选举之夜:一次发布调用即可将最新数据同时推送到每个订阅屏幕。

  2. 02

    应用内聊天

    每个聊天室一个频道,在线状态显示谁在线,客户端事件实现输入指示器——无需服务器往返。

  3. 03

    在线协作

    客户端事件通过频道在用户之间传递光标位置、选区和协同编辑信号,无需经过后端中转。

  4. 04

    多人游戏

    在线状态填充大厅,客户端事件传递操作指令,每场比赛一个频道,确保每位玩家实时掌握游戏状态。

  5. 05

    实时图表和仪表盘

    指标变化时即时发布。缓存频道为每位后加入者提供当前值,图表永远不会空白渲染。

  6. 06

    在线状态指示器

    在线状态频道在成员加入和离开时进行追踪;Webhook 保持您后端的名单同步。

  7. 07

    实时位置追踪

    客户地图上的快递员、分享路线的好友、调度屏幕上的车队:发布坐标,每位观察者实时跟踪,最后已知位置为后加入者缓存。

  8. 08

    订单和配送状态

    每个订单一个缓存频道保存当前状态,订阅即等同于初始状态获取。

  9. 09

    拍卖和竞价

    每次出价同时出现在每位竞拍者的屏幕上,缓存频道为中途加入者提供当前最高出价。

  10. 10

    用户级通知推送

    每位用户一个私有频道,由您的后端签名订阅,确保只有正确的客户端可以监听。

为什么选择 Realtime

实时体验是您扩展时最先出问题的部分。我们已经运营了十多年。

连接状态、在线状态、消息扇出、重连退避,以及吸收流量峰值的能力——这些是实时功能中容易原型化但难以运维的部分。Realtime 作为 Bird API 内的托管服务运行,因此实时频道与您已用于邮件和 SMS 的认证、可观测性和 Webhook 共享同一套体系。

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);
});

每一次状态变更都是一个 Webhook。

客户端随时连接和断开,无需触及您的后端。以下是后端感知方式:当第一个订阅者到达时启动高开销任务,当最后一个离开时停止,并维护您自己对房间成员的视图。

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_occupied首个订阅者加入了一个此前为空的通道。
  • realtime.channel_vacated最后一个订阅者已离开;通道现在为空。
  • realtime.member_added一个成员加入了在线状态通道。
  • realtime.member_removed一个成员离开了在线状态通道。
  • realtime.connection_count频道的连接数发生了变化。

集成了邮件,就等于集成了 Realtime。

相同的认证、相同的幂等契约、相同的错误信封、相同的 webhook 结构。唯一的区别在于传输方式:长连接 WebSocket 替代一次性 REST 发送。

Realtime。

realtime
await bird.realtime.members.send(APP_ID, "usr_4hQ2m", {
  event: "order-shipped",
  data:  { status: "shipped" },
});

无论用户在哪里连接,都能触达——同时覆盖每个标签页和设备。无需指定频道,无需追踪连接。

SMS。

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

同样的调用,只是换了一个频道。适用于需要将更新发送到手机而非已连接客户端的场景。

Put it into practice.

Continue with the documentation, guides and examples for this topic. Resources are in English.

Try the practice and get an implementation brief

从一个渠道开始。
准备好后,再添加其他渠道。

测试 API 密钥即刻可用。添加支付方式并验证发送者身份后,即可解锁生产环境。

正在使用 Claude Code、Cursor 或 Codex?复制一条设置提示,您的智能代理即可自动安装 Bird CLI 和相关技能。选择您的工具:

Cursor