Libatkan pelanggan di seluruh dunia dengan WhatsApp API

Hubungkan tim pemasaran, layanan, dan operasional dengan pelanggan di aplikasi perpesanan paling populer di dunia.

send-notification.ts
202 · 480ms
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"
Reminder: you have an appointment on 3 Sep at 14:30. We look forward to seeing you.9:42 AM
Reschedule
Your order #4821 is out for delivery, arriving Wednesday. Thanks for shopping with us.9:43 AM
Your subscription renews on 3 Sep for €12.00. No action is needed.9:44 AM
View plan

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.

1
2
3
4
5
6
7
8
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.

  1. 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.

  2. 02

    Manajemen template

    Baca katalog dan keputusan Meta per bahasa dari CLI atau alat MCP. Pembuatan dan pengajuan dilakukan di dashboard.

  3. 03

    Template dalam setiap bahasa

    Satu slug, banyak bahasa. Tentukan satu saat mengirim, atau biarkan default template yang menentukan.

  4. 04

    Tombol dan carousel

    Tombol tautan, balasan cepat, nomor telepon, dan salin kode, serta carousel 2-10 kartu.

  5. 05

    Media dan konten kaya

    Gambar, video, audio, stiker, dokumen, dan lokasi, masing-masing dalam satu field pengiriman.

  6. 06

    Tag dan metadata di setiap pengiriman

    Tag menjadi dimensi filter dan analitik; metadata ikut kembali di setiap webhook.

  7. 07

    Webhook pesan masuk

    Event bertanda tangan HMAC untuk pesan masuk, tanda terima pengiriman, dan tanda terima dibaca.

  8. 08

    3M+ pengguna dalam satu endpoint

    Lebih dari tiga miliar pengguna WhatsApp bulanan yang 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 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.

send-notification.ts
202 · 480ms
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.

POST /webhooks/bird
signed
{
  "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.

WhatsApp

whatsapp
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

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.

Mulai dengan satu channel.
Tambahkan yang lain saat Anda siap.

API key uji coba langsung tersedia untuk Anda. Akses produksi terbuka setelah Anda menambahkan metode pembayaran dan memverifikasi pengirim.

Menggunakan Claude Code, Cursor, atau Codex? Salin prompt pengaturan dan agen Anda akan menginstal Bird CLI dan skill untuk Anda. Pilih milik Anda:

Cursor