Push sedang ditingkatkan

Notifikasi push untuk iOS, Android, dan web.

Token-management abstraction, per-device opt-in, native rich payloads, segment targeting. Same auth, same idempotency, same webhooks as every other Bird channel, because the same engineering team built them all.

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

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

// Send by device token...
const { data, error } = await bird.push.send({
  to:    "token_aPa91Hb...XzQ",
  title: "Your driver is two minutes away",
  body:  "Tap to see the live map.",
  data:  { ride_id: "ride_2891" },
}).safe();

// ...or by user_id — we fan out to every opted-in device.
await bird.push.send({
  to:    { user_id: "usr_4hQ2m" },
  title: "Your code is 482917",
  body:  "Enter it on the login screen.",
  data:  { kind: "otp" },
});

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

5 menit dari npm install ke pengiriman pertama

Kirim notifikasi dari bahasa pemrograman yang sudah Anda gunakan.

SDK di setiap runtime utama. Daftarkan token dari klien mobile atau web Anda; kirim berdasarkan token atau user_id dari backend Anda.

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

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

const { data, error } = await bird.push.send({
  to:    "token_aPa91Hb",
  title: "Hello",
  body:  "From Bird Push",
  data:  { kind: "demo" },
}).safe();

Sepuluh primitif yang mengubah APNs dan FCM menjadi satu endpoint.

Real APNs and FCM under the hood. No third-party push aggregator in the middle. We just hide the platform quirks behind one shape.

  1. 01

    iOS, Android, dan web dari satu panggilan

    Satu bird.push.send. Kami fan out ke APNs, FCM, dan W3C Push Protocol per perangkat terdaftar.

  2. 02

    Abstraksi manajemen token

    Daftarkan token dengan bird.push.tokens.register. Kami melacak platform, locale, dan last-seen sehingga Anda tidak perlu melakukannya.

  3. 03

    Kirim berdasarkan token atau user_id

    Targetkan satu perangkat, atau kirim { user_id } dan kami akan meneruskan ke setiap perangkat opt-in yang mereka miliki.

  4. 04

    Status opt-in per perangkat

    Setiap token terdaftar memiliki status opt-in sendiri. Cabut satu tanpa memengaruhi yang lain.

  5. 05

    Payload kaya native

    Title, body, image, action buttons, deep-link URL, custom data: mapped to APNs alert and FCM notification correctly.

  6. 06

    Notifikasi senyap / latar belakang

    Kirim content_available: true dan kami merutekan melalui APNs background dan FCM data-only dengan benar per platform.

  7. 07

    Penargetan segmen

    Tag pengguna saat pendaftaran; targetkan berdasarkan tag dari bird.push.send. Tidak perlu integrasi CDP pihak ketiga.

  8. 08

    Tanda terima pengiriman dan pembukaan

    Event untuk push.delivered, push.opened, push.dismissed. Envelope HMAC yang sama seperti setiap channel lainnya.

  9. 09

    Siklus hidup token ditangani

    Ketika APNs / FCM mengembalikan token tidak terdaftar, kami menandainya mati dan berhenti mengirim. Tanpa pembersihan manual.

  10. 10

    Auth sama, envelope error sama

    Satu API key untuk Push, SMS, Email, WhatsApp, Voice. Satu registri tipe error untuk semuanya.

Mengapa kami membangun Push

Karena push seharusnya tidak berada di vendor yang berbeda dari SMS, email, dan verifikasi Anda.

Every product team ends up with the same stack: APNs for iOS, FCM for Android, a service worker for web, and a database table tracking which user has which tokens with which opt-in state. We built that table, then we built it again, then we exposed it as bird.push.tokens.register and bird.push.send. Same auth, same idempotency, same error envelope as Email and SMS, so the OTP that fails on push falls back to SMS in the same request.

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

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

// Send by device token...
const { data, error } = await bird.push.send({
  to:    "token_aPa91Hb...XzQ",
  title: "Your driver is two minutes away",
  body:  "Tap to see the live map.",
  data:  { ride_id: "ride_2891" },
}).safe();

// ...or by user_id — we fan out to every opted-in device.
await bird.push.send({
  to:    { user_id: "usr_4hQ2m" },
  title: "Your code is 482917",
  body:  "Enter it on the login screen.",
  data:  { kind: "otp" },
});

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

Setiap perubahan status adalah webhook.

HMAC-signed payloads, replay-protected, idempotent. The same envelope on every Bird channel: learn one, you've learned them all.

POST /webhooks/bird
signed
{
  "type": "push.delivered",
  "id":   "evt_9pT81y...",
  "created_at": "2026-05-19T15:42:01.221Z",
  "data": {
    "push_id":   "push_2nQ81oP3",
    "user_id":   "usr_4hQ2m",
    "platform":  "ios",
    "device":    "iPhone15,2",
    "latency_ms": 218
  }
}

Jadwal percobaan ulang: 5d, 30d, 5m, 30m, 2j, 6j, 12j. Dead-letter setelah percobaan terakhir; setiap event dead-letter dapat di-replay dari dashboard atau API.

  • push.queuedDiterima oleh API dan diantrikan untuk pengiriman.
  • push.sentDiserahkan ke server APNs / FCM / W3C Push.
  • push.deliveredProvider confirmed delivery to the device (when available: APNs is best-effort).
  • push.openedPengguna mengetuk notifikasi (jika aplikasi Anda menginstrumentasinya).
  • push.dismissedPengguna menutup tanpa membuka (jika aplikasi Anda menginstrumentasinya).
  • push.failedKegagalan permanen (token tidak terdaftar, aplikasi dihapus). Token otomatis dinonaktifkan.

Jika Anda sudah mengintegrasikan SMS, Anda sudah mengintegrasikan Push.

Same auth, same idempotency contract, same error envelope, same webhook shape. The difference is the transport, not how you call it.

Push.

push
await bird.push.send({
  to:    { user_id: "usr_4hQ2m" },
  title: "Your code",
  body:  `Code: ${code}`,
});

Satu panggilan. Kami fan out ke setiap perangkat opt-in yang dimiliki pengguna, melalui APNs, FCM, dan web.

SMS.

sms
await bird.sms.send({
  from:     "Bird",
  to:       "+15005550006",
  text:     `Your code is ${code}.`,
  category: "authentication",
});

Same envelope, same idempotency contract. Fall back when push fails, or address SMS directly.

$0,0005 per notifikasi, semua platform.

Harga per notifikasi terkirim. Tarif sama untuk iOS, Android, dan web. APNs dan FCM gratis di upstream, jadi kami mengenakan biaya untuk routing dan dashboard, bukan transportnya. Diskon volume otomatis berlaku di atas 10 juta/bulan.

Mulai dengan satu channel.
Tambahkan yang lain saat Anda siap.

API key uji coba langsung tersedia untuk Anda. Akses produksi terbuka setelah Anda menambahkan metode pembayaran dan memverifikasi pengirim.

Menggunakan Claude Code, Cursor, atau Codex? Salin prompt pengaturan dan agen Anda akan menginstal Bird CLI dan skill untuk Anda. Pilih milik Anda:

Cursor