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.
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.
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.
- 01
Offizieller Meta Business Solution Provider (BSP)
Direkte Beziehung zu Meta, seit es die API gibt. Kein weiterverkaufter Transit, kein Drittanbieter-Hop.
- 02
Template-Verwaltung
Einreichen, Genehmigungsstatus verfolgen und einen Webhook erhalten, sobald Meta genehmigt oder ablehnt.
- 03
Session-Fenster-Erkennung
Das SDK sagt Ihnen vor dem Versand, ob Freitext oder Template erlaubt ist.
- 04
Interaktive Nachrichten
Buttons, lists, product cards, and WhatsApp Flows, declared in the same payload.
- 05
Medien und Rich Content
Bilder, Videos, Dokumente, Standort, Kontakte, Link-Vorschauen, Reaktionen und Antworten.
- 06
WhatsApp Flows
Mehrstufige In-App-Formulare mit Backend-Validierung, definiert als JSON, ausgeführt von Meta.
- 07
Click-to-WhatsApp Ads
Integration mit Meta Ads Manager, damit Anzeigenklicks in einer Konversation landen, die Sie beantworten können.
- 08
Kanalübergreifender Fallback
Add fallback: "sms" to any send. Session expiry routes through SMS automatically.
- 09
Webhooks für eingehende Nachrichten
HMAC-signierte Events für eingehende Nachrichten, Lesebestätigungen, Reaktionen und Template-Status.
- 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.
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.
{
"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.
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.
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.