Jedno API do każdej
wysyłanej wiadomości.

Wysyłaj wiadomości transakcyjne i powiadomienia przez Bird. Podaj treść i nadawcę lub użyj szablonu; sprawdź kodowanie i liczbę segmentów w odpowiedzi. Dodaj klucz idempotentności, aby bezpiecznie ponawiać żądania, i śledź doręczenie przez podpisane webhooki.

Jedna wiadomość. Widoczny rezultat.

Przykładowe wysłanie

FNotatki
Twoje zamówienie #4821 jest gotowe do odbioru.
Status202 Accepted
KodowanieGSM-7
Segmenty1

Sprawdź akceptację i późniejsze potwierdzenie od operatora. Ten przykład nie wysyła wiadomości tekstowej; doręczenie nie oznacza, że ktoś ją przeczytał.

Przetestuj swoją pierwszą integrację z SMS.

Z języka, którego już używasz.

Wysyłanie to rdzeń Bird SMS API. Poniższy przykład pokazuje strukturę żądania. Aby przeprowadzić kontrolowany test, zastąp odbiorcę udokumentowanym numerem sandbox +15005550006. Skonfiguruj odpowiedniego nadawcę US i włącz miejsce docelowe, a następnie zweryfikuj zdarzenia akceptacji i doręczenia przed wysyłką do klientów.

1
2
3
4
5
6
7
const msg = await bird.sms.send({
  from: "+15557654321",
  to: "+14155550100",
  text: "Your verification code is 123456.",
  category: "authentication",
});
console.log(msg.id, msg.status);

Wysyłka SMS dostarcza podany przez Ciebie tekst. Do logowania i weryfikacji konta użyj Bird Verify, aby generować, wygaszać i sprawdzać kody w ramach procesu weryfikacji.

Buduj na przejrzystym kontrakcie wysyłki.

Przygotuj żądanie i śledź wynik.

  1. 01

    Zliczanie segmentów przed wysyłką.

    Bird zwraca obliczone kodowanie i liczbę segmentów w odpowiedzi. Użyj kalkulatora segmentów, aby sprawdzić wersję roboczą przed wysłaniem.

  2. 02

    GSM-7 i Unicode — wybrane za ciebie.

    Znaki determinują kodowanie. GSM-7 mieści 160 jednostek w jednym segmencie; Unicode mieści 70. Wiadomości wieloczęściowe rezerwują miejsce na składanie, a emoji mogą zajmować więcej niż jedną jednostkę.

  3. 03

    Cała paczka w jednym wywołaniu.

    Wyślij do 100 niezależnych wiadomości w jednym żądaniu wsadowym. Walidacja odbywa się przed umieszczeniem w kolejce; każda zaakceptowana wiadomość ma własny wynik.

  4. 04

    Ponawiaj z kluczem idempotentności.

    Używaj jednego klucza idempotentności na żądanie logiczne i wykorzystuj go ponownie przy identycznym powtórzeniu. Zachowana odpowiedź API może zostać odtworzona; nie gwarantuje to jednak doręczenia dokładnie raz przez operatora.

  5. 05

    Zdarzenia doręczenia dla Twojej aplikacji.

    Subskrybuj zdarzenia akceptacji, wysyłki i wyniku końcowego. Weryfikuj sygnatury, deduplikuj powtórzenia webhooków i korzystaj z odczytów wiadomości, aby badać brakujące lub opóźnione obserwacje.

Przenieś integrację za pomocą kontrolowanego testu.

Zmapuj obecne pola żądań, rejestracje nadawców i obsługę zdarzeń na Bird. Uzgodnij rezygnacje przed przeniesieniem ruchu, a następnie porównaj kontrolowany test przed zmianą routingu produkcyjnego.

twilio.ts
Twilio
import twilio from "twilio";

const client = twilio(accountSid, authToken);

await client.messages.create({
  from: "+14155550172",
  to:   "+15005550006",
  body: "Your code is 123456.",
});
bird.ts
Bird
import { BirdClient } from "@messagebird/sdk";

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

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

Poznaj liczbę segmentów przed wysłaniem.

GSM-7 mieści 160 septetów w jednym segmencie; UCS-2 mieści 70 jednostek kodowych. Pojemność wieloczęściowa to odpowiednio 153 lub 67. Rozszerzone znaki GSM-7 zajmują dwa septety, a emoji mogą zajmować dwie jednostki kodowe. Bird zwraca kodowanie i segmenty przy akceptacji; obowiązująca stawka i ewentualna opłata operatora są rozliczane osobno.

segments.ts
202 · 1 segment
const { data, error } = await bird.sms.send({
  from:     "Bird",
  to:       "+31612345678",
  text:     "Your code is 123456.",
  category: "authentication",
}).safe();
if (error) throw error;

console.log(data.segments);
// → { characters: 20, count: 1, encoding: "GSM_7BIT" }

Jedna wiadomość albo sto — jedno wywołanie.

Wyślij wsadowo do 100 niezależnych wiadomości, każdą z własnym odbiorcą i treścią. Nieprawidłowe dane odrzucają żądanie przed umieszczeniem w kolejce. Po pomyślnej odpowiedzi 202 przetwarzanie i doręczenie mogą zakończyć się sukcesem lub porażką osobno dla każdego SMS. Użyj ponownie tego samego żądania i klucza idempotentności przy ponawianiu w udokumentowanym oknie retencji.

reminders.ts
202 · batch
const { data: batch, error } = await bird.sms
  .sendBatch(
    users.map((u) => ({
      from: "Bird",
      to:   u.phone,
      text: `Hi ${u.name}, your appointment is tomorrow at ${u.time}.`,
    })),
  )
  .safe();

if (error) throw error;
console.log(`queued ${batch.data.length} messages`);

Śledź akceptację aż do zgłoszonego wyniku.

Pomyślne żądanie zwraca 202 Accepted. Naliczanie opłat i przekazanie do operatora następują później i nadal mogą się nie powieść. Konsumuj podpisane zdarzenia doręczenia i sprawdzaj rekord wiadomości podczas badania wyniku.

app/api/webhooks/bird/route.ts
signed
import { bird } from "@/lib/bird";

export async function POST(req: Request) {
  const event = bird.webhooks.unwrap(
    await req.text(),
    Object.fromEntries(req.headers),
  );

  switch (event.type) {
    case "sms.delivered":
      await markDelivered(event.data.sms_id);
      break;
    case "sms.failed":
      await flag(event.data.to, event.data.error?.description);
      break;
  }

  return new Response(null, { status: 204 });
}

Sprawdzaj awarie po zgłoszonym powodzie. Obsługiwane słowa kluczowe STOP i rezygnacje operatora tworzą supresje; inne awarie doręczenia nie stają się automatycznie rezygnacją.

  • sms.acceptedPrzyjęta przez API i umieszczona w kolejce do przekazania operatorowi.
  • sms.sentPrzesłana do SMSC operatora docelowego.
  • sms.deliveredPotwierdzenie dostarczenia odebrane od operatora (DLR).
  • sms.failedKońcowa awaria dla tej próby SMS. Sprawdź zgłoszony błąd i oś czasu wiadomości.

Dowiedz się więcej w dokumentacji.

Skonfiguruj webhooki, zabezpiecz każdą wysyłkę przed powtórzeniem dzięki kluczom idempotentności i przeczytaj dokumentację błędów, żeby prawidłowo obsłużyć każdą awarię.

Pytania przed rozpoczęciem budowy

Czy sam wybieram nadawcę?
Przy wysyłce z dowolnym tekstem podaj nadawcę, którego Twój obszar roboczy może użyć w danym kraju docelowym, oraz odpowiednią kategorię wiadomości. Wysyłka z szablonu systemowego rozwiązuje kategorię i nadawcę na podstawie szablonu.
Jak ponowne próby unikają duplikatu wiadomości?
Podaj klucz idempotentności i użyj go ponownie przy ponawianiu tego samego żądania. Wysyłka bez tego klucza może zostać potraktowana jako nowa wiadomość.
Czy zaakceptowane oznacza doręczone?
Nie. Odpowiedź 202 oznacza, że API przyjęło żądanie. Śledź rekord wiadomości i podpisane zdarzenia, aby poznać wynik zgłoszony przez operatora. Potwierdzenie doręczenia nie oznacza, że odbiorca przeczytał wiadomość.
Czy batch to to samo co broadcast?
Batch zawiera do 100 niezależnych wiadomości, każda z własnym odbiorcą i treścią. Broadcast to kampania na grupę odbiorców ze wspólną treścią i zarządzanym cyklem wysyłki. Wybierz schemat odpowiadający Twojemu zadaniu.

Skaluj bez
utraty kontroli.

Organizuj zespoły w obszarach roboczych, kontroluj dostęp do API i śledź zmiany w logach audytu.

BirdHarborOrganizacja
Przestrzenie roboczeProdukcjaSandbox

Agent wysyłki

Klucz API · Zespół operacji klienta
Aktywne
UprawnieniaDostęp
EmailOdczyt i zapis
SMSOdczyt i zapis
ALAlex Lee AdministratorZaktualizowano uprawnienia

Dziennik audytu

Produkcja
Przestrzeń robocza
Produkcja
Zasób
Agent wysyłki
WhatsApp
Dostęp do odczytuOdczyt i zapis
Powodzenie

Zacznij z SMS.
Twórz na wielu kanałach z Bird.

Twój kolejny pomysł.
Gotowy do połączenia.