Wysyłaj SMS
Jedno API dla każdego tekstu, który wysyłasz.
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.
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const code = generateOtp();
const { data, error } = await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your Bird verification code is ${code}. Reply STOP to opt out.`,
}).safe();
if (error) throw error;
console.log(data.id);
// → "sms_4kT01Lq2m..."Today at 2:14 PM
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.
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: "Hello from Node.",
}).safe();Pięć rzeczy, których nie budujesz sam.
Ten sam kontrakt na każdym kanale Bird.
- 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.
- 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.
- 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.
- 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.
- 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.
import twilio from "twilio";
const client = twilio(accountSid, authToken);
await client.messages.create({
from: "+14155550172",
to: "+15005550006",
body: "Your code is 123456.",
});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.",
});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.
const { data } = await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: "Your code is 123456.",
}).safe();
console.log(data.encoding); // → "GSM-7"
console.log(data.segments); // → 1Jedna 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.
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.
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.queuedPrzyjęta przez API i zakolejkowana do przekazania operatorowi.sms.sentPrzekazana do SMSC operatora docelowego.sms.deliveredPotwierdzenie dostarczenia otrzymane od operatora (DLR).sms.failedTrwała awaria — odrzucenie przez operatora, nieprawidłowy numer lub trafienie na listę blokowanych.
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.
FAQ dotyczące wysyłania SMS
Jak długi może być SMS?+
Czy mogę wysłać do wielu odbiorców w jednym żądaniu?+
Co się dzieje, jeśli ponowię wysyłkę po przekroczeniu czasu?+
Skąd mam wiedzieć, czy wiadomość została dostarczona?+
Reszta platformy SMS
Jedno API, jeden zestaw kluczy. Poznaj pozostałe możliwości.
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.