Push sedang ditingkatkan

Notifikasi push untuk iOS, Android, dan web.

Abstraksi manajemen token, opt-in per perangkat, payload kaya native, penargetan segmen. Auth sama, idempotensi sama, webhook sama seperti setiap channel Bird lainnya, karena tim engineering yang sama yang membangun semuanya.

push.ts
Coming soon
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.

Code samples arrive when this API ships. The SDKs already cover the live channels.

Sepuluh primitif yang mengubah APNs dan FCM menjadi satu endpoint.

APNs dan FCM asli di balik layar. Tanpa agregator push pihak ketiga di tengah. Kami hanya menyembunyikan keunikan tiap platform di balik satu format.

  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

    Judul, isi, gambar, tombol aksi, URL deep-link, data kustom: dipetakan dengan benar ke APNs alert dan FCM notification.

  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.

Setiap tim produk akhirnya memiliki stack yang sama: APNs untuk iOS, FCM untuk Android, service worker untuk web, dan tabel database yang melacak pengguna mana memiliki token mana dengan status opt-in apa. Kami membangun tabel itu, lalu membangunnya lagi, lalu mengeksposnya sebagai bird.push.tokens.register dan bird.push.send. Auth sama, idempotensi sama, format error sama seperti Email dan SMS, sehingga OTP yang gagal via push bisa fallback ke SMS dalam request yang sama.

push.ts
Coming soon
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.

Payload ditandatangani HMAC, dilindungi dari replay, idempoten. Format yang sama di setiap channel Bird: pelajari satu, Anda sudah memahami semuanya.

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 mengonfirmasi pengiriman ke perangkat (jika tersedia: APNs bersifat 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.

Auth sama, kontrak idempotensi sama, format error sama, format webhook sama. Yang berbeda adalah transportnya, bukan cara Anda memanggilnya.

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

Format sama, kontrak idempotensi sama. Fallback saat push gagal, atau kirim SMS secara langsung.

$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