SMS senden

Eine API für jeden Text, den Sie senden.

Eingerichtet in:
Cursor

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.

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:       "+31612345678",
  text:     "Your order #4821 has shipped. Track it: bird.ly/t/4821x",
  category: "transactional",
}).safe();

if (error) throw error;
console.log(data.id);
// → "sms_01m11jw130e7svjzv70kgqr38w"
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

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.

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

Fünf Dinge, die Sie nicht selbst bauen.

Derselbe Vertrag auf jedem Bird-Kanal.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

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",
});

Kennen Sie die Kosten, bevor der Carrier sie kennt.

A GSM-7 message fits 160 characters per segment; a single emoji or non-Latin character flips the whole message to UCS-2 and drops that to 70. Bird counts the segments when it accepts the send and returns the breakdown in the response, so the number you are billed on is in hand before the carrier ever sees the message, and a concatenated message is always a deliberate choice.

segments.ts
200 · 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" }

Eine 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.

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

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.

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

Fehlgeschlagene Sendungen und STOP-Antworten aktualisieren Ihre Sperrliste automatisch, sodass eine fehlerhafte Nummer Sie nie zweimal kostet.

  • sms.acceptedVon 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.failedPermanenter Fehler: Carrier-Ablehnung, ungültige Nummer oder Unterdrückungstreffer.

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.

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.

Starten Sie mit einem Kanal.
Fügen Sie die anderen hinzu, wenn Sie bereit sind.

Ein Test-API-Key steht Ihnen sofort zur Verfügung. Der Produktivzugang wird freigeschaltet, sobald Sie eine Zahlungsmethode hinzufügen und einen Absender verifizieren.

Sie nutzen Claude Code, Cursor oder Codex? Kopieren Sie einen Setup-Prompt und Ihr Agent installiert die Bird CLI und Skills für Sie. Wählen Sie Ihren:

Cursor