SMS senden
Eine API für jeden Text, den Sie senden.
Senden Sie eine Nachricht oder hundert über dieselbe SMS-API. Das SDK zählt Segmente vor dem Versand, wählt GSM-7 oder Unicode für Sie, und jeder Versand ist idempotent mit einem Webhook bei jedem Zustellungsstatus.
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
Senden Sie Ihre erste SMS in fünf Minuten.
Aus der Sprache, die Sie bereits verwenden.
Das Senden ist der Kern der Bird SMS-API. Der erste Versand geht an einen autorisierten Testempfänger (+15005550006), sodass Sie einen CI-Check ausliefern und Webhooks verdrahten können, bevor Sie eine Nummer bereitstellen.
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();Fünf Dinge, die Sie nicht selbst bauen.
Derselbe Vertrag auf jedem Bird-Kanal.
- 01
Segmentzählung vor dem Versand.
Das SDK misst die kodierte Länge und sagt Ihnen, wie viele Segmente eine Nachricht kostet, sodass ein verirrtes Zeichen nie stillschweigend einen Text in drei aufteilt.
- 02
GSM-7 und Unicode, für Sie entschieden.
Klartext fährt auf GSM-7; ein Emoji oder eine nicht-lateinische Schrift kippt die gesamte Nachricht auf UCS-2. Bird wählt die Kodierung und warnt Sie, wenn ein einzelnes Zeichen die Kosten ändert.
- 03
In einem Aufruf bündeln.
Senden Sie viele unabhängige Nachrichten in einer Anfrage, jede mit eigenem Empfänger und Text, als Einheit validiert, sodass Sie nie halb senden.
- 04
Idempotent per Vertrag.
Jeder Versand akzeptiert einen Idempotenz-Key, sodass eine erneut versuchte Anfrage nach einem Timeout das ursprüngliche Ergebnis liefert, statt jemandem zweimal zu schreiben.
- 05
Ein Webhook bei jeder Statusänderung.
In Warteschlange, gesendet, zugestellt, fehlgeschlagen. Jeder HMAC-signiert, replay-geschützt, idempotent, dasselbe Envelope auf jedem Kanal.
Senden Sie bereits anderswo? Wechseln Sie den Client, behalten Sie den Aufruf.
Die Struktur ändert sich kaum: Tauschen Sie den Client, behalten Sie Ihr from, to und text, richten Sie Ihre Webhooks auf einen Endpunkt. Dasselbe Auth-Modell wie bei Ihren E-Mail-, Voice- und WhatsApp-Sendungen.
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.",
});Kennen Sie die Kosten, bevor der Carrier sie kennt.
Eine GSM-7-Nachricht fasst 160 Zeichen pro Segment; ein einzelnes Emoji oder nicht-lateinisches Zeichen kippt die gesamte Nachricht auf UCS-2 und senkt das auf 70. Das SDK meldet die Kodierung und Segmentanzahl bei jedem Versand, sodass die Abrechnung nie eine Überraschung ist und eine verkettete Nachricht immer eine bewusste Wahl bleibt.
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); // → 1Eine Nachricht oder hundert, ein Aufruf.
Bündeln Sie unabhängige Nachrichten in einer Anfrage, jede mit eigenem Empfänger und Text. Der Batch wird als Einheit validiert: Eine fehlerhafte Nummer weist den Aufruf mit einem 422 ab, sodass Sie nie halb senden. Ein einzelner Idempotenz-Key macht die gesamte Anfrage sicher wiederholbar.
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`);Verfolgen Sie jede Nachricht durch ihr ganzes Leben.
Ein Versand liefert sofort 202 zurück; das Ergebnis trifft als Webhook ein. Verifizieren Sie eine Signatur, verzweigen Sie auf den Typ: dasselbe Envelope, das Sie bereits für E-Mail, Voice und WhatsApp behandeln.
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 });
}Fehlgeschlagene Sendungen und STOP-Antworten aktualisieren Ihre Sperrliste automatisch, sodass eine fehlerhafte Nummer Sie nie zweimal kostet.
sms.queuedVon der API akzeptiert und für die Carrier-Übergabe in die Warteschlange gestellt.sms.sentAn das SMSC des Ziel-Carriers übermittelt.sms.deliveredZustellbestätigung vom Carrier erhalten (DLR).sms.failedDauerhafter Fehler — Carrier-Ablehnung, ungültige Nummer oder Sperrtreffer.
Vertiefen Sie sich in der Dokumentation.
Verdrahten Sie Webhooks, machen Sie jeden Versand mit Idempotenz-Keys sicher wiederholbar und lesen Sie die Fehlerreferenz, damit Sie jeden Fehlschlag auf die richtige Weise behandeln.
SMS-Versand-FAQ
Wie lang darf eine SMS sein?+
Kann ich in einer Anfrage an viele Empfänger senden?+
Was passiert, wenn ich einen Versand nach einem Timeout erneut versuche?+
Woher weiß ich, ob eine Nachricht zugestellt wurde?+
Der Rest der SMS-Plattform
Eine API, ein Satz Keys. Entdecken Sie die anderen Funktionen.
Etwa 40% der weltweiten kommerziellen SMS laufen bereits über Bird.
Das Senden ist eine Funktion der Bird SMS-API: Nummern, eingehende Zwei-Wege-Kommunikation, Compliance, Routing und Analytics gehören dazu, auf einer Infrastruktur, die wir seit einem Jahrzehnt betreiben.