Wysyłaj SMS

Jedno API dla każdego tekstu, który wysyłasz.

Skonfiguruj w:
Cursor

Wyślij jedną wiadomość albo sto przez to samo API SMS. SDK liczy segmenty przed wysyłką, wybiera za Ciebie GSM-7 lub Unicode, a każda wysyłka jest idempotentna z webhookiem na każdym stanie dostarczenia.

send-notification.ts
202 · 0.4s
import { BirdClient } from "@messagebird/sdk";

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

const { data, error } = await bird.sms.send({
  from:     "Bird",
  to:       "+15005550006",
  text:     "Your order #4821 has shipped. Track it: bird.ly/t/4821x",
  category: "transactional",
}).safe();

if (error) throw error;
console.log(data.id);
// → "sms_4kT01Lq2m..."
Hi Ada, reminder of your appointment tomorrow at 14:30 with Dr. Kowalski.
Your order #4821 has shipped. Track it: bird.ly/t/4821x
Your subscription renews on 3 Sep for €12/mo. Manage it here: bird.ly/account

Wyślij swój pierwszy SMS w pięć minut.

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

Wysyłanie to rdzeń API SMS od Bird. Pierwsza wysyłka trafia do dopuszczonego odbiorcy testowego (+15005550006), więc możesz dostarczyć test CI i podłączyć webhooki, zanim udostępnisz numer.

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

Pięć rzeczy, których nie budujesz sam.

Ten sam kontrakt na każdym kanale Bird.

  1. 01

    Liczenie segmentów przed wysyłką.

    SDK mierzy zakodowaną długość i mówi Ci, ile segmentów kosztuje wiadomość, więc zabłąkany znak nigdy po cichu nie rozdzieli jednego tekstu na trzy.

  2. 02

    GSM-7 i Unicode, rozstrzygane za Ciebie.

    Zwykły tekst jedzie na GSM-7; emoji lub pismo niełacińskie przerzuca całą wiadomość na UCS-2. Bird wybiera kodowanie i ostrzega Cię, gdy pojedynczy znak zmienia koszt.

  3. 03

    Wsad w jednym wywołaniu.

    Wyślij wiele niezależnych wiadomości w jednym żądaniu, każda z własnym odbiorcą i tekstem, walidowanych jako całość, więc nigdy nie wysyłasz połowicznie.

  4. 04

    Idempotentne z kontraktu.

    Każda wysyłka przyjmuje klucz idempotencji, więc ponowione żądanie po przekroczeniu czasu zwraca oryginalny wynik zamiast wysłać do kogoś SMS dwa razy.

  5. 05

    Webhook na każdej zmianie stanu.

    Queued, sent, delivered, failed. Każdy podpisany HMAC, chroniony przed powtórzeniem, idempotentny, ta sama koperta na każdym kanale.

Już wysyłasz gdzie indziej? Zmień klienta, zachowaj wywołanie.

Kształt prawie się nie zmienia: podmień klienta, zachowaj pola from, to i text, skieruj swoje webhooki na jeden endpoint. Ten sam model uwierzytelniania co Twoje wysyłki e-mail, głosowe i WhatsApp.

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:     "Bird",
  to:       "+15005550006",
  text:     "Your code is 123456.",
  category: "authentication",
});

Poznaj koszt, zanim pozna go operator.

Wiadomość GSM-7 mieści 160 znaków na segment; pojedyncze emoji lub znak niełaciński przerzuca całą wiadomość na UCS-2 i obniża to do 70. SDK raportuje kodowanie i liczbę segmentów przy każdej wysyłce, więc rozliczenie nigdy nie jest niespodzianką, a połączona wiadomość jest zawsze świadomym wyborem.

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

console.log(data.encoding); // → "GSM-7"
console.log(data.segments); // → 1

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

Połącz wsadowo niezależne wiadomości w jednym żądaniu, każda z własnym odbiorcą i tekstem. Wsad jest walidowany jako całość: jeden zły numer odrzuca wywołanie z kodem 422, więc nigdy nie wysyłasz połowicznie. Pojedynczy klucz idempotencji sprawia, że całe żądanie jest bezpieczne do ponowienia.

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}.`,
    })),
    { idempotencyKey: `reminders-${runId}` },
  )
  .safe();

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

Obserwuj każdą wiadomość przez całe jej życie.

Wysyłka zwraca 202 natychmiast; wynik przychodzi jako webhook. Zweryfikuj jeden podpis, rozgałęź na typie: ta sama koperta, którą już obsługujesz dla e-maila, głosu i WhatsApp.

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.reason);
      break;
  }

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

Nieudane wysyłki i odpowiedzi STOP aktualizują Twoją listę blokowanych automatycznie, więc zły numer nigdy nie kosztuje Cię dwa razy.

  • sms.acceptedPrzyjęta przez API i zakolejkowana do przekazania operatorowi.
  • sms.sentPrzekazana do SMSC operatora docelowego.
  • sms.deliveredPotwierdzenie dostarczenia otrzymane od operatora (DLR).
  • sms.failedTrwały błąd: odrzucenie przez operatora, nieprawidłowy numer lub trafienie na listę blokad.

Zagłęb się w dokumentacji.

Podłącz webhooki, uczyń każdą wysyłkę bezpieczną do ponowienia za pomocą kluczy idempotencji i przeczytaj opis błędów, abyś obsłużył każdą awarię we właściwy sposób.

Około 40% komercyjnego ruchu SMS na świecie już działa na Bird.

Wysyłanie to jedna z możliwości API SMS od Bird: numery, ruch przychodzący dwukierunkowy, zgodność, routing i analityka są dostarczane wraz z nim, na infrastrukturze, którą prowadzimy od dekady.

Zacznij od jednego kanału.
Dodaj kolejne, gdy będziesz gotowy.

Testowy klucz API otrzymasz od razu. Dostęp produkcyjny odblokujesz po dodaniu metody płatności i weryfikacji nadawcy.

Używasz Claude Code, Cursor lub Codex? Skopiuj prompt konfiguracyjny, a Twój agent zainstaluje za Ciebie Bird CLI i umiejętności. Wybierz swój:

Cursor