Powiadomienia push dla iOS, Androida i przeglądarek.
Abstrakcja zarządzania tokenami, zgoda per urządzenie, natywne bogate payloady, targetowanie segmentów. Ta sama autoryzacja, ta sama idempotentność, te same webhooki co w każdym innym kanale Bird — bo ten sam zespół inżynierów zbudował je wszystkie.
import { BirdClient } from "@bird/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 minut od npm install do pierwszego wysłania
Wyślij powiadomienie w języku, którego już używasz.
SDK w każdym popularnym środowisku uruchomieniowym. Zarejestruj token z klienta mobilnego lub webowego; wysyłaj po tokenie lub user_id z backendu.
import { BirdClient } from "@bird/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();Dziesięć prymitywów, które zamieniają APNs i FCM w jeden endpoint.
Prawdziwe APNs i FCM pod spodem — żadnego zewnętrznego agregatora push pośrodku. Po prostu ukrywamy różnice między platformami za jednym interfejsem.
- 01
iOS, Android i przeglądarka w jednym wywołaniu
Jedno bird.push.send. Rozsyłamy do APNs, FCM i W3C Push Protocol dla każdego zarejestrowanego urządzenia.
- 02
Abstrakcja zarządzania tokenami
Zarejestruj token za pomocą bird.push.tokens.register. Śledzimy platformę, lokalizację i ostatnią aktywność, więc nie musisz.
- 03
Wysyłaj po tokenie lub po user_id
Address a single device, or pass
{ user_id }and we fan out to every opted-in device they own. - 04
Stan zgody per urządzenie
Każdy zarejestrowany token ma własny stan zgody. Cofnij jeden bez wpływu na pozostałe.
- 05
Natywne bogate payloady
Tytuł, treść, obraz, przyciski akcji, deep-link URL, dane niestandardowe — poprawnie mapowane na APNs alert i FCM notification.
- 06
Ciche / powiadomienia w tle
Przekaż content_available: true, a my prawidłowo kierujemy przez APNs background i FCM data-only dla każdej platformy.
- 07
Targetowanie segmentów
Taguj użytkowników przy rejestracji; adresuj po tagu z bird.push.send. Bez konieczności integracji z zewnętrznym CDP.
- 08
Potwierdzenia dostarczenia i otwarcia
Zdarzenia push.delivered, push.opened, push.dismissed. Ta sama koperta HMAC co w każdym innym kanale.
- 09
Cykl życia tokenów obsłużony
Gdy APNs / FCM zwróci niezarejestrowany token, oznaczamy go jako nieaktywny i przestajemy wysyłać. Bez ręcznego czyszczenia.
- 10
Ta sama autoryzacja, ta sama koperta błędów
Jeden klucz API dla Push, SMS, Email, WhatsApp, Voice. Jeden rejestr typów błędów dla wszystkich.
Dlaczego stworzyliśmy Push
Bo push nie powinien działać u innego dostawcy niż Twoje SMS-y, e-maile i weryfikacje.
Każdy zespół produktowy kończy z tym samym stosem: APNs dla iOS, FCM dla Androida, service worker dla przeglądarek i tabela w bazie danych śledząca, który użytkownik ma które tokeny z jakim stanem zgody. Zbudowaliśmy tę tabelę, potem zbudowaliśmy ją ponownie, a następnie udostępniliśmy jako bird.push.tokens.register i bird.push.send. Ta sama autoryzacja, ta sama idempotentność, ta sama koperta błędów co Email i SMS — więc OTP, które nie dotrze przez push, automatycznie przechodzi na SMS w tym samym żądaniu.
import { BirdClient } from "@bird/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..."Każda zmiana stanu to webhook.
Payloady podpisane HMAC, zabezpieczone przed powtórzeniem, idempotentne. Ta sama koperta w każdym kanale Bird — poznaj jeden, znasz je wszystkie.
{
"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
}
}Harmonogram ponowień: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-letter po ostatniej próbie; każde zdarzenie dead-letter można powtórzyć z dashboardu lub API.
push.queuedPrzyjęte przez API i umieszczone w kolejce do wysłania.push.sentPrzekazane do serwera APNs / FCM / W3C Push.push.deliveredDostawca potwierdził dostarczenie na urządzenie (jeśli dostępne — APNs działa w trybie best-effort).push.openedUżytkownik dotknął powiadomienia (jeśli Twoja aplikacja to instrumentuje).push.dismissedUżytkownik odrzucił bez otwierania (jeśli Twoja aplikacja to instrumentuje).push.failedTrwała awaria (token wyrejestrowany, aplikacja usunięta). Token jest automatycznie dezaktywowany.
Jeśli zintegrowałeś SMS, zintegrowałeś Push.
Ta sama autoryzacja, ten sam kontrakt idempotentności, ta sama koperta błędów, ten sam format webhooków. Różnica to transport — nie sposób wywołania.
Push.
await bird.push.send({
to: { user_id: "usr_4hQ2m" },
title: "Your code",
body: `Code: ${code}`,
});Jedno wywołanie. Rozsyłamy do każdego urządzenia z wyrażoną zgodą, jakie posiada użytkownik, przez APNs, FCM i przeglądarkę.
SMS.
await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your code is ${code}.`,
});Ta sama koperta, ten sam kontrakt idempotentności. Przełącz na SMS, gdy push zawiedzie — lub adresuj SMS bezpośrednio.
0,0005 $ za powiadomienie, każda platforma.
Rozliczenie za dostarczone powiadomienie. Ta sama stawka na iOS, Androidzie i w przeglądarce. APNs i FCM są darmowe po stronie dostawcy, więc pobieramy opłatę za routing i dashboard, a nie za transport. Zniżki ilościowe naliczają się automatycznie powyżej 10 mln/mies.