WhatsApp wird aufgerüstet

Die WhatsApp Business API, ohne den BSP-Umweg.

Official Meta Business Solution Provider since the API existed. Template approval, session windows, media, interactive messages, all handled. Two billion-plus monthly WhatsApp users, addressable from a single endpoint that looks like every other Bird channel.

order-shipped.ts
200 · 480ms
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

const { data, error } = await bird.whatsapp.send({
  to:       "+15005550009",
  template: "order_shipped",
  locale:   "en_US",
  variables: {
    customer_name:   "Ada",
    order_id:        "BRD-49217",
    tracking_url:    "https://track.bird.dev/49217",
    eta:             "Thursday, May 21",
  },
}).safe();

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

5 Minuten von npm install bis zum ersten Versand

Senden Sie eine WhatsApp-Nachricht in der Sprache, die Sie bereits nutzen.

SDKs für jede gängige Runtime. Der erste Versand geht an einen freigegebenen Testempfänger (+15005550009) mit einem vorab genehmigten Template — so können Sie einen CI-Check ausliefern, bevor Sie Ihr erstes Template zur Genehmigung einreichen.

1
2
3
4
5
6
7
8
9
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

const { data, error } = await bird.whatsapp.send({
  to:       "+15005550009",
  template: "hello_world",
  locale:   "en_US",
}).safe();

Zehn Dinge, die das BSP-Gate vor Ihnen verbirgt. Wir nicht.

WhatsApp wird von Meta kontrolliert. Die Wahl des BSP entscheidet, ob die Gates in Ihrem Code auftauchen oder in einem Dashboard versteckt werden. Wir haben uns für Code entschieden.

  1. 01

    Offizieller Meta Business Solution Provider (BSP)

    Direkte Beziehung zu Meta, seit es die API gibt. Kein weiterverkaufter Transit, kein Drittanbieter-Hop.

  2. 02

    Template-Verwaltung

    Einreichen, Genehmigungsstatus verfolgen und einen Webhook erhalten, sobald Meta genehmigt oder ablehnt.

  3. 03

    Session-Fenster-Erkennung

    Das SDK sagt Ihnen vor dem Versand, ob Freitext oder Template erlaubt ist.

  4. 04

    Interaktive Nachrichten

    Buttons, lists, product cards, and WhatsApp Flows, declared in the same payload.

  5. 05

    Medien und Rich Content

    Bilder, Videos, Dokumente, Standort, Kontakte, Link-Vorschauen, Reaktionen und Antworten.

  6. 06

    WhatsApp Flows

    Mehrstufige In-App-Formulare mit Backend-Validierung, definiert als JSON, ausgeführt von Meta.

  7. 07

    Click-to-WhatsApp Ads

    Integration mit Meta Ads Manager, damit Anzeigenklicks in einer Konversation landen, die Sie beantworten können.

  8. 08

    Kanalübergreifender Fallback

    Add fallback: "sms" to any send. Session expiry routes through SMS automatically.

  9. 09

    Webhooks für eingehende Nachrichten

    HMAC-signierte Events für eingehende Nachrichten, Lesebestätigungen, Reaktionen und Template-Status.

  10. 10

    2 Mrd.+ Nutzer über einen Endpoint

    Über zwei Milliarden monatliche WhatsApp-Nutzer, erreichbar über einen einzigen bird.whatsapp.send-Aufruf.

Warum wir WhatsApp entwickeln

Wir waren einer der ersten WhatsApp-BSPs. Und wir sind immer noch einer der wenigen, die Code mit Ihnen ausliefern.

WhatsApp is gated. You need an approved template; you need an opted-in session window; you need a Meta business verification. That part doesn't change, and won't. What changes is whether your BSP makes those gates easier or harder to walk through: by exposing them in your code, on webhooks you can subscribe to, in errors that say exactly what's wrong. We chose the first.

order-shipped.ts
200 · 480ms
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

const { data, error } = await bird.whatsapp.send({
  to:       "+15005550009",
  template: "order_shipped",
  locale:   "en_US",
  variables: {
    customer_name:   "Ada",
    order_id:        "BRD-49217",
    tracking_url:    "https://track.bird.dev/49217",
    eta:             "Thursday, May 21",
  },
}).safe();

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

Jede Statusänderung ist ein Webhook.

HMAC-signed payloads, replay-protected, idempotent. The same envelope on every Bird channel: learn one, you've learned them all.

POST /webhooks/bird
signed
{
  "type": "whatsapp.read",
  "id":   "evt_7kQ02v...",
  "created_at": "2026-05-19T15:42:08.114Z",
  "data": {
    "wa_msg_id":   "wa_msg_8nB91Yk3p",
    "from":        "+15551234567",
    "to":          "+15005550009",
    "conversation_id": "wa_conv_3pX1g7t",
    "template":    "order_shipped",
    "delivered_at": "2026-05-19T15:42:01.802Z",
    "read_at":      "2026-05-19T15:42:08.020Z"
  }
}

Retry-Zeitplan: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-Letter nach dem letzten Versuch; jedes Dead-Letter-Event kann über das Dashboard oder die API erneut abgespielt werden.

  • whatsapp.queuedVon der API akzeptiert und für den Versand an Meta in die Warteschlange gestellt.
  • whatsapp.sentAn Metas Cloud API übergeben.
  • whatsapp.deliveredMeta meldet, dass die Nachricht auf dem Gerät des Empfängers angekommen ist.
  • whatsapp.readEmpfänger hat die Nachricht geöffnet (sofern Lesebestätigungen aktiviert sind).
  • whatsapp.failedPermanent failure: reason code in the payload.
  • whatsapp.receivedEingehende Nachricht eines Nutzers innerhalb des 24-Stunden-Session-Fensters.
  • whatsapp.template.approvedMeta hat ein von Ihnen eingereichtes Template genehmigt.
  • whatsapp.template.rejectedMeta rejected a template: rejection reason in the payload.

Fallback auf SMS ist ein Attribut, keine zweite Integration.

Wenn WhatsApp nicht zugestellt werden kann — Session abgelaufen, Empfänger hat nie zugestimmt, Template noch nicht genehmigt — routet Bird dieselbe Nachricht im selben Request über SMS. Gleiche Auth, gleicher Idempotency-Vertrag, gleiches Webhook-Format am anderen Ende.

WhatsApp mit Fallback.

whatsapp + fallback
await bird.whatsapp.send({
  to:       "+15005550009",
  template: "order_shipped",
  variables: { order_id: "BRD-49217" },
  fallback: "sms",
});

One payload, one auth. Session expiry, opt-in gap, unapproved template: all route through SMS automatically.

SMS direkt.

sms
await bird.sms.send({
  from:     "Bird",
  to:       "+15005550006",
  text:     `Your order BRD-49217 has shipped.`,
  category: "transactional",
});

Dieselben Leitungen, direkt adressiert. Verwenden Sie es, wenn Sie den SMS-Pfad explizit wollen.

Ein Preis pro Nachricht, inklusive Meta-Gebühr.

Nutzungsbasierte Preise. Jeder Preis deckt die Meta-Gebühr und unsere in einer einzigen Zahl ab und richtet sich nach Zielland und Nachrichtenkategorie. Keine Gebühr pro Nutzer und nichts, was eine Jahresbindung voraussetzt.

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