L'API WhatsApp Business, sans les tracas des BSP.
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 minutes entre npm install et le premier envoi
Envoyez un WhatsApp dans le langage que vous utilisez déjà.
SDK disponibles dans tous les principaux environnements d'exécution. Le premier envoi est adressé à un destinataire de test autorisé (+15005550009) avec un modèle pré-approuvé, pour que vous puissiez intégrer une vérification CI avant même de soumettre votre premier modèle à approbation.
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();Dix choses que les BSP vous cachent. Pas nous.
WhatsApp est contrôlé par Meta. Le choix du BSP détermine si les contraintes apparaissent dans votre code ou sont dissimulées dans un tableau de bord. Nous avons choisi le code.
- 01
Fournisseur officiel de solutions Meta Business (BSP)
Relation directe avec Meta depuis la création de l'API. Aucun transit revendu, aucun intermédiaire tiers.
- 02
Gestion des modèles
Soumettez, suivez l'état d'approbation et recevez un webhook dès que Meta approuve ou rejette.
- 03
Gestion de la fenêtre de session
Le SDK vous indique si un message libre ou un modèle est autorisé avant l'envoi.
- 04
Messages interactifs
Buttons, lists, product cards, and WhatsApp Flows, declared in the same payload.
- 05
Médias et contenu enrichi
Images, vidéos, documents, localisation, contacts, aperçus de liens, réactions et réponses.
- 06
WhatsApp Flows
Formulaires multi-étapes intégrés à l'application avec validation backend, définis en JSON, exécutés par Meta.
- 07
Publicités Click-to-WhatsApp
Intégration avec Meta Ads Manager pour que les clics publicitaires ouvrent une conversation à laquelle vous pouvez répondre.
- 08
Basculement cross-canal
Add fallback: "sms" to any send. Session expiry routes through SMS automatically.
- 09
Webhooks de messages entrants
Événements signés HMAC pour les messages entrants, les accusés de lecture, les réactions et l'état des modèles.
- 10
2 Md+ d'utilisateurs sur un seul endpoint
Plus de deux milliards d'utilisateurs WhatsApp par mois accessibles via un seul appel bird.whatsapp.send.
Pourquoi nous développons WhatsApp
Nous avons été l'un des premiers BSP WhatsApp. Nous sommes toujours l'un des rares à coder avec vous.
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..."
Chaque changement d'état est un 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"
}
}
Calendrier de renvoi : 5s, 30s, 5m, 30m, 2h, 6h, 12h. Mise en dead-letter après la dernière tentative ; chaque événement en dead-letter est rejouable depuis le tableau de bord ou l'API.
whatsapp.queuedAccepté par l'API et mis en file d'attente pour envoi à Meta.whatsapp.sentTransmis à l'API Cloud de Meta.whatsapp.deliveredMeta confirme que le message est arrivé sur l'appareil du destinataire.whatsapp.readLe destinataire a ouvert le message (si les accusés de lecture sont activés).whatsapp.failedPermanent failure: reason code in the payload.whatsapp.receivedMessage entrant d'un utilisateur dans la fenêtre de session de 24 h.whatsapp.template.approvedMeta a approuvé un modèle que vous avez soumis.whatsapp.template.rejectedMeta rejected a template: rejection reason in the payload.
Le basculement vers SMS, c'est un attribut, pas une seconde intégration.
Si WhatsApp ne peut pas livrer — session expirée, destinataire sans opt-in, modèle pas encore approuvé — Bird achemine le même message par SMS dans la même requête. Même authentification, même contrat d'idempotence, même format de webhook de l'autre côté.
WhatsApp avec basculement.
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 direct.
await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your order BRD-49217 has shipped.`,
category: "transactional",
});
Les mêmes canaux, adressés directement. Utilisez-le quand vous voulez explicitement le chemin SMS.