Libatkan pelanggan di seluruh dunia dengan WhatsApp API
Hubungkan tim pemasaran, layanan, dan operasional dengan pelanggan di aplikasi perpesanan paling populer di dunia.
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({
apiKey: process.env.BIRD_API_KEY!,
});
const msg = await bird.whatsapp.send({
to: "+15551234567",
template: {
slug: "bird_delivery_update",
components: [{ type: "body", parameters: [
{ type: "text", name: "ref", text: "#4821" },
{ type: "text", name: "date", text: "Wednesday" },
] }],
},
});
console.log(msg.id, msg.status);
// → "wam_01krdgeqcxet5s7t44vh8rt9mg", "accepted"5 menit dari npm install hingga pengiriman pertama
Kirim WhatsApp dari bahasa pemrograman yang sudah Anda gunakan.
SDK di setiap runtime utama. Pengiriman pertama menggunakan template yang dikelola Bird seperti bird_delivery_update, sudah disetujui oleh Meta dan memilih pengirimnya sendiri, sehingga Anda bisa melihat pesan nyata terkirim sebelum membuat template Anda sendiri.
const msg = await bird.whatsapp.send({
to: "+15551234567",
template: {
slug: "bird_otp",
components: [{ type: "body", parameters: [{ type: "text", text: "123456" }] }],
},
});
console.log(msg.id, msg.status);Delapan hal yang kami tangani antara Anda dan Meta.
WhatsApp memiliki gerbang: template yang disetujui, penerima yang sudah opt-in, bisnis yang terverifikasi. Gerbang-gerbang itu tidak bergeser. Penyedia Anda yang menentukan apakah gerbang tersebut muncul di kode Anda atau tersembunyi di dashboard.
- 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
Baca katalog dan keputusan Meta per bahasa dari CLI atau alat MCP. Pembuatan dan pengajuan dilakukan di dashboard.
- 03
Template dalam setiap bahasa
Satu slug, banyak bahasa. Tentukan satu saat mengirim, atau biarkan default template yang menentukan.
- 04
Tombol dan carousel
Tombol tautan, balasan cepat, nomor telepon, dan salin kode, serta carousel 2-10 kartu.
- 05
Media dan konten kaya
Gambar, video, audio, stiker, dokumen, dan lokasi, masing-masing dalam satu field pengiriman.
- 06
Tag dan metadata di setiap pengiriman
Tag menjadi dimensi filter dan analitik; metadata ikut kembali di setiap webhook.
- 07
Webhook pesan masuk
Event bertanda tangan HMAC untuk pesan masuk, tanda terima pengiriman, dan tanda terima dibaca.
- 08
3M+ pengguna dalam satu endpoint
Lebih dari tiga miliar pengguna WhatsApp bulanan yang dapat dijangkau dari satu panggilan bird.whatsapp.send.
Jelajahi platform WhatsApp
Setiap kemampuan secara mendalam. Satu API, satu set kunci.
Template.
Kategori, persetujuan per bahasa, dan placeholder yang diisi saat pengiriman.
Pengiriman.
Satu jenis konten per permintaan, kunci idempotensi, tag, dan metadata.
Dua arah.
Pesan masuk, jendela layanan pelanggan 24 jam, dan balasan.
Nomor.
Pengirim yang dikelola Bird, menggunakan nomor Anda sendiri, dan akun bisnis.
Harga.
Satu tarif all-in per pesan, berdasarkan negara tujuan dan kategori.
FAQ.
Semua pertanyaan tentang WhatsApp dalam satu tempat, dari pengiriman pertama hingga analitik.
Mengapa kami membangun WhatsApp
Kami adalah salah satu BSP WhatsApp pertama. Kami masih salah satu dari sedikit yang menulis kode bersama Anda.
WhatsApp memiliki gerbang. Anda butuh template yang disetujui; Anda butuh jendela layanan pelanggan yang terbuka untuk mengirim apa pun selain template; Anda butuh verifikasi bisnis Meta. Bagian itu tidak berubah, dan tidak akan berubah. Yang berubah adalah apakah BSP Anda membuat gerbang tersebut lebih mudah atau lebih sulit untuk dilalui: dengan mengeksposnya di kode Anda, di webhook yang bisa Anda subscribe, di error yang menyebutkan persis apa masalahnya. Kami memilih yang pertama.
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({
apiKey: process.env.BIRD_API_KEY!,
});
const msg = await bird.whatsapp.send({
to: "+15551234567",
template: {
slug: "bird_delivery_update",
components: [{ type: "body", parameters: [
{ type: "text", name: "ref", text: "#4821" },
{ type: "text", name: "date", text: "Wednesday" },
] }],
},
});
console.log(msg.id, msg.status);
// → "wam_01krdgeqcxet5s7t44vh8rt9mg", "accepted"Setiap perubahan status adalah webhook.
Payload ditandatangani HMAC, dilindungi dari replay, idempoten. Envelope yang sama di setiap channel Bird: pelajari satu, Anda sudah mempelajari semuanya.
{
"type": "whatsapp.read",
"timestamp": "2026-05-19T15:42:08.114Z",
"data": {
"whatsapp_id": "wam_01krdgeqcxet5s7t44vh8rt9mg",
"workspace_id": "ws_01krdgeqcxet5s7t44vh8rt9mg",
"direction": "outbound",
"from": { "phone_number": "+15557654321" },
"to": { "phone_number": "+15551234567" },
"tags": [{ "name": "campaign", "value": "order-updates" }],
"metadata": { "order_id": "BRD-49217" }
}
}Jadwal percobaan ulang: 5d, 5m, 30m, 2j, 5j, lalu 10j dua kali. Setelah yang terakhir, pengiriman gagal secara permanen, dan replay memulihkannya dari dashboard atau API.
whatsapp.acceptedDiterima 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.rejectedDitolak sebelum dikirim, dan tidak dikenakan biaya: kode alasan ada di payload.whatsapp.failedKegagalan permanen: kode alasan ada di payload.whatsapp.receivedPesan masuk dari pengguna WhatsApp.
Menjangkau pelanggan yang sama via SMS adalah panggilan yang sama, hanya beda satu field.
Client yang sama, auth yang sama, format error yang sama, bentuk webhook yang sama. Yang berubah adalah payload: WhatsApp membawa template yang disetujui Meta, SMS membawa teks. Tag dan metadata ikut di keduanya, jadi satu set dashboard mencakup keduanya.
await bird.whatsapp.send({
to: "+15551234567",
template: {
slug: "bird_delivery_update",
language: "en",
components: [{ type: "body", parameters: [
{ type: "text", name: "ref", text: "BRD-49217" },
{ type: "text", name: "date", text: "10 Jul 2026" },
] }],
},
});Template yang dikelola Bird: disetujui oleh Meta, tersedia dalam 70+ bahasa, dan memilih pengirimnya sendiri. Nilai placeholder masuk sebagai komponen.
SMS
await bird.sms.send({
from: "Bird",
to: "+15551234567",
text: `Your order BRD-49217 has shipped.`,
category: "transactional",
});Verb yang sama di channel lain: teks bebas plus kategori, tanpa perlu persetujuan template.
Satu tarif per pesan, biaya Meta sudah termasuk.
Harga berdasarkan penggunaan. Setiap tarif mencakup biaya Meta dan biaya kami dalam satu angka, dan mengikuti negara tujuan serta kategori pesan. Tanpa biaya per pengguna dan tanpa apa pun yang mengharuskan komitmen tahunan.