WhatsApp Business API, tanpa ribet urusan 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 menit dari npm install ke pengiriman pertama
Kirim WhatsApp dari bahasa pemrograman yang sudah Anda gunakan.
SDK di setiap runtime utama. Pengiriman pertama ditujukan ke penerima uji coba resmi (+15005550009) dengan template yang sudah disetujui, sehingga Anda bisa menjalankan CI check sebelum mengajukan template pertama untuk persetujuan.
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();Sepuluh hal yang disembunyikan gerbang BSP dari Anda. Kami tidak.
WhatsApp dibatasi oleh Meta. Pilihan BSP menentukan apakah batasan itu muncul di kode Anda atau disembunyikan di balik dashboard. Kami memilih kode.
- 01
Penyedia Solusi Bisnis Meta (BSP) Resmi
Hubungan langsung dengan Meta sejak API ini pertama kali ada. Tanpa transit dijual ulang, tanpa perantara pihak ketiga.
- 02
Manajemen template
Ajukan, lacak status persetujuan, dan dapatkan webhook begitu Meta menyetujui atau menolak.
- 03
Kesadaran jendela sesi
SDK memberi tahu Anda apakah pesan bebas atau template yang diizinkan sebelum Anda mengirim.
- 04
Pesan interaktif
Buttons, lists, product cards, and WhatsApp Flows, declared in the same payload.
- 05
Media dan konten kaya
Gambar, video, dokumen, lokasi, kontak, pratinjau tautan, reaksi, dan balasan.
- 06
WhatsApp Flows
Formulir multi-langkah dalam aplikasi dengan validasi backend, didefinisikan sebagai JSON, dieksekusi oleh Meta.
- 07
Iklan Click-to-WhatsApp
Integrasi dengan Meta Ads Manager sehingga klik iklan masuk ke percakapan yang bisa Anda jawab.
- 08
Fallback lintas kanal
Add fallback: "sms" to any send. Session expiry routes through SMS automatically.
- 09
Webhook pesan masuk
Event bertanda tangan HMAC untuk pesan masuk, tanda terima baca, reaksi, dan status template.
- 10
2M+ pengguna di satu endpoint
Lebih dari dua miliar pengguna WhatsApp bulanan dapat dijangkau dari satu panggilan bird.whatsapp.send.
Mengapa kami membangun WhatsApp
Kami adalah salah satu BSP WhatsApp pertama. Kami masih salah satu dari sedikit yang menulis kode bersama Anda.
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..."
Setiap perubahan status adalah 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"
}
}
Jadwal percobaan ulang: 5d, 30d, 5m, 30m, 2j, 6j, 12j. Dead-letter setelah percobaan terakhir; setiap event dead-letter dapat di-replay dari dashboard atau API.
whatsapp.queuedDiterima oleh API dan diantrikan untuk dikirim ke Meta.whatsapp.sentDiserahkan ke Cloud API Meta.whatsapp.deliveredMeta melaporkan pesan berhasil sampai di perangkat penerima.whatsapp.readPenerima membuka pesan (jika tanda terima baca aktif).whatsapp.failedPermanent failure: reason code in the payload.whatsapp.receivedPesan masuk dari pengguna dalam jendela sesi 24 jam.whatsapp.template.approvedMeta menyetujui template yang Anda ajukan.whatsapp.template.rejectedMeta rejected a template: rejection reason in the payload.
Fallback ke SMS hanya satu atribut, bukan integrasi kedua.
Jika WhatsApp tidak bisa mengirim — sesi kedaluwarsa, penerima belum opt-in, template belum disetujui — Bird mengalihkan pesan yang sama melalui SMS dalam request yang sama. Auth yang sama, kontrak idempotensi yang sama, bentuk webhook yang sama di ujung lainnya.
WhatsApp dengan 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 langsung.
await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your order BRD-49217 has shipped.`,
category: "transactional",
});
Jalur yang sama, ditujukan langsung. Gunakan saat Anda ingin jalur SMS secara eksplisit.