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.`,
}).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.

Zwei-Wege ist Teil der Bird SMS-API. Wenn jemand an Ihre Nummer schreibt, erhalten Sie ein sms.received-Ereignis auf demselben signierten, replay-geschützten Endpunkt, der bereits Ihre Zustellbestätigungen trägt. Es gibt keine zweite Integration und kein Polling — verifizieren Sie die Signatur einmal und verzweigen Sie auf den Typ.

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 eingetroffen — trägt 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 gesendet — Bird hat ihn gesperrt und blockiert künftige Sendungen.

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

Eingehend erfordert eine zweiseitig-fähige Nummer — Long Codes, Short Codes und Toll-Free können empfangen, alphanumerische Sender-IDs nicht. Für reichhaltigeres Hin und Her auf demselben Endgerät (Tippanzeigen, Lesebestätigungen, Karussells) wertet RCS die Konversation dort auf, wo das Gerä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, trifft als HMAC-signierter sms.received-Webhook ein. Sie verifizieren eine Signatur, lesen from, to und text und routen sie in Ihre eigene Logik — dasselbe Envelope, das Sie bereits für Zustellbestätigungen behandeln.
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 setzt den Absender auf Ihre Sperrliste, löst sms.opted_out aus und blockiert spätere Sendungen an diese Nummer automatisch. HELP sendet eine Hilfeantwort und START meldet ihn wieder an – alles erledigt, bevor es Ihren Code erreicht, sodass Sie konform bleiben, ohne die Schlüsselwortlogik selbst zu schreiben.
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