Zwei-Wege

Nachrichten kommen zurück. Also verarbeiten Sie sie.

Eingerichtet in:
Cursor

Jede Nachricht, die jemand an Ihre bereitgestellte Nummer sendet, trifft als HMAC-signierter Webhook ein. Lesen Sie den Text, antworten Sie von derselben Nummer und lassen Sie Bird STOP und HELP für Sie übernehmen. Bauen Sie dialogorientierte Abläufe und automatische Antworten auf der API, mit der Sie bereits senden.

send-otp.ts
200 · 0.4s
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.`,
  category: "authentication",
}).safe();

if (error) throw error;
console.log(data.id);
// → "sms_4kT01Lq2m..."

Today at 2:14 PM

Hey Ada, your Bird sign-in code is 482917. It'll expire in 10 minutes. Don't share it with anyone.
482917
Delivered

Eingehend ist nur ein weiterer Webhook.

Two-Way ist Teil der Bird SMS API. Wenn jemand Ihre Nummer anschreibt, erhalten Sie ein sms.received-Event auf demselben signierten, replay-geschützten Endpoint, der bereits Ihre Zustellbestätigungen liefert. Keine zweite Integration, kein Polling: Signatur einmal verifizieren und nach Typ unterscheiden.

Hören Sie auf das, was zurückkommt.

Eine eingehende Nachricht und ein Opt-out sind Ereignisse, genau wie eine Zustellbestätigung. Verifizieren Sie eine Signatur, verzweigen Sie auf den Typ und behandeln Sie jedes im Handler, den Sie bereits geschrieben haben.

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.received":
      await handleInbound(event.data.from, event.data.text);
      break;
    case "sms.opted_out":
      await removeFromCampaigns(event.data.from);
      break;
  }

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

Die Payload ist dasselbe Envelope auf jedem Bird-Kanal: eine evt_-ID, eine HMAC-Signatur und ein replay-geschützter Zeitstempel.

  • sms.receivedEine eingehende Nachricht ist auf Ihrer Nummer eingegangen: enthält den Absender, Ihre Nummer und den Text.
  • sms.deliveredEine von Ihnen gesendete Antwort hat das Endgerät erreicht (Carrier-DLR).
  • sms.opted_outDer Absender hat STOP geschrieben: Bird hat ihn unterdrückt und blockiert künftige Nachrichten.

Eine signierte eingehende Nachricht, vollständig.

So sieht ein sms.received-Ereignis auf der Leitung aus. Das from ist, wer Ihnen geschrieben hat, das to ist Ihre bereitgestellte Nummer, und Segmente und Kodierung werden genauso gemeldet wie bei einem Versand, sodass eine lange eingehende Antwort nie eine Überraschung ist.

sms.received
evt_
{
  "id": "evt_7nQ9xLp2aR...",
  "type": "sms.received",
  "created_at": "2026-06-26T14:03:11Z",
  "data": {
    "id": "sms_5hV02Mr3n...",
    "from": "+15005550006",
    "to": "+14155550172",
    "text": "YES book me in for Thursday",
    "encoding": "GSM-7",
    "segments": 1
  }
}

Antworten Sie von derselben Nummer.

Eine Antwort ist ein Versand mit vertauschtem from und to. Setzen Sie from auf Ihre Nummer und to auf den ursprünglichen Absender, und die Konversation bleibt auf einer Nummer, sodass der Empfänger einen Thread statt jedes Mal eines neuen Absenders sieht. Bauen Sie darauf automatische Antworten, Bestätigungen oder einen vollständigen dialogorientierten Ablauf auf.

reply.ts
200 · reply
async function handleInbound(from: string, text: string) {
  if (/^yes\b/i.test(text)) {
    const { error } = await bird.sms.send({
      from:     "+14155550172", // your two-way number
      to:       from,           // reply to the sender
      text:     "Booked. See you Thursday at 10am.",
      category: "transactional",
    }).safe();

    if (error) throw error;
  }
}

STOP, HELP und START übernehmen wir für Sie.

Bird erkennt die reservierten Schlüsselwörter, bevor sie Ihren Handler erreichen: STOP setzt den Absender auf Ihre Sperrliste und löst sms.opted_out aus, HELP sendet eine automatische Hilfeantwort, und START meldet ihn wieder an. Spätere Sendungen an eine gesperrte Nummer werden automatisch blockiert. Eigene Schlüsselwörter für YES, BOOK oder was Ihr Flow sonst braucht, behalten Sie weiterhin. Die vollständigen Schlüsselwort- und Opt-out-Regeln finden Sie unter Opt-out-Handling.

Zwei Dinge, die Sie als Nächstes brauchen.

Für den Empfang eingehender Nachrichten benötigen Sie eine bidirektional nutzbare Nummer: Long Codes, Short Codes und gebührenfreie Nummern können empfangen, alphanumerische Absenderkennungen nicht. Für einen umfassenderen Dialog auf demselben Gerät (Tippanzeigen, Lesebestätigungen, Karussells) erweitert RCS die Konversation, sofern das Endgerät es unterstützt.

Vertiefen Sie sich in der Dokumentation.

Verdrahten Sie Webhooks für eingehende Ereignisse, lesen Sie die Fehlerreferenz für die Fehlschläge, die Sie behandeln werden, und prüfen Sie Missbrauch und Compliance für die Keyword- und Einwilligungsregeln.

Zwei-Wege-SMS-FAQ

Wie erreicht eine eingehende SMS meine App?
Jede Nachricht, die an Ihre bereitgestellte Nummer gesendet wird, kommt als HMAC-signierter sms.received-Webhook an. Sie verifizieren eine Signatur, lesen die Felder „from", „to" und „text
Kann ich auf eine eingehende Nachricht antworten?
Ja. Antworten Sie, indem Sie von derselben Nummer senden, auf der die Nachricht einging. Setzen Sie from auf Ihre Nummer und to auf den ursprünglichen Absender, und der Thread bleibt durchgehend auf einer Nummer.
Was passiert, wenn jemand STOP sendet?
Bird fügt den Absender Ihrer Sperrliste hinzu, löst sms.opted_out aus und blockiert künftige Nachrichten an diese Nummer automatisch. HELP liefert eine Hilfe-Antwort und START meldet den Empfänger wieder an – alles wird verarbeitet, bevor es Ihren Code erreicht. So bleiben Sie compliant, ohne die Keyword-Logik selbst schreiben zu müssen.
Benötige ich eine spezielle Nummer für Zwei-Wege?
Sie benötigen eine zweiseitig-fähige Nummer. Long Codes, Short Codes und Toll-Free-Nummern unterstützen eingehenden Traffic; alphanumerische Sender-IDs sind nur zum Senden und können keine Antworten empfangen.

Senden und empfangen auf einer Nummer, einer API.

Eingehende Zwei-Wege-Kommunikation ist eine Funktion der Bird SMS-API: Senden, Nummern, 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