Kirim pesan WhatsApp pertama Anda
Kirim pesan WhatsApp ke ponsel Anda sendiri dengan Bird WhatsApp, lalu baca kembali pesan tersebut untuk memastikan pengirimannya. Pesan yang dimulai oleh bisnis menggunakan template yang sudah disetujui. Panduan cepat ini mengirim dari katalog template terkelola milik Bird (seperti bird_delivery_update atau bird_otp), yang menggunakan pengirim WhatsApp bersama yang dikelola Bird. Anda tidak perlu menghubungkan WhatsApp Business Account atau mendaftarkan nomor terlebih dahulu.
Sebelum memulai, pastikan wallet organisasi Anda memiliki saldo. Pengiriman template WhatsApp memotong saldo wallet, dan Bird menolak pengiriman yang tidak tercukupi oleh saldo dengan 402 WalletInsufficientBalance. Metode pembayaran dan wallet menjelaskan cara mengisi saldo.
1. Buat kunci API
Di dashboard, buka Platform tools > API keys dan buat kunci dengan cakupan whatsapp:write, yang mencakup pengiriman dan pembacaan pesan. Setiap kunci terikat pada satu region dan berbentuk seperti bk_us1_... atau bk_eu1_.... Region pada prefiks menunjukkan host API yang harus Anda panggil: https://us1.platform.bird.com atau https://eu1.platform.bird.com.

Kunci lengkap hanya ditampilkan sekali, saat dibuat. Salin ke tempat yang aman, lalu ekspor untuk contoh cURL:
export BIRD_API_KEY="bk_us1_..."2. Kirim pesan template
Kirim template bird_delivery_update yang sudah disetujui dari katalog terkelola Bird ke ponsel Anda, atau gunakan bird_otp untuk mengirim kode verifikasi sekali pakai. Template terkelola diawali dengan bird_ dan dikirim dari nomor Bird bersama, sehingga Anda tidak perlu menyertakan from. Instal Bird SDK untuk bahasa Anda dengan mengikuti panduan cepat SDK. Jika Anda menggunakan tab Bird CLI, instal terlebih dahulu (curl -fsSL https://cli.bird.com/install.sh | sh) lalu lakukan autentikasi dengan akses tulis (bird auth login --scope whatsapp:write).
Di tab SDK, ganti contoh kunci API, lalu ganti +15551234567 dengan nomor ponsel Anda dalam format E.164. CLI menggunakan login Anda, sedangkan tab cURL menggunakan BIRD_API_KEY.
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: "bk_XXXXXXXXXXXXXXXXXXXXXXXX" });
const msg = await bird.whatsapp.send({
to: "+15551234567",
template: {
slug: "bird_delivery_update",
components: [
{
type: "body",
parameters: [
{ type: "text", name: "ref", text: "A1B2C3D4" },
{ type: "text", name: "date", text: "10 Jul 2026" },
],
},
],
},
});
console.log(msg.id, msg.status);from bird import APIError, Bird
with Bird(api_key="bk_XXXXXXXXXXXXXXXXXXXXXXXX") as client:
try:
message = client.whatsapp.send(
to="+15551234567",
template="bird_delivery_update",
components=[
{
"type": "body",
"parameters": [
{"type": "text", "name": "ref", "text": "A1B2C3D4"},
{"type": "text", "name": "date", "text": "10 Jul 2026"},
],
}
],
)
print(message.id, message.status)
except APIError as err:
print("send failed:", err)package main
import (
"context"
"fmt"
"log"
bird "github.com/messagebird/bird-sdk-go"
"github.com/messagebird/bird-sdk-go/option"
)
func main() {
client, err := bird.NewClient(option.WithAPIKey("bk_XXXXXXXXXXXXXXXXXXXXXXXX"))
if err != nil {
log.Fatal(err)
}
msg, err := client.Whatsapp.Send(context.Background(), bird.WhatsappSendParams{
To: "+15551234567",
Template: "bird_delivery_update",
Components: []bird.WhatsAppMessageTemplateComponent{{
Type: "body",
Parameters: &[]bird.WhatsAppMessageTemplateComponentParameter{
{Type: "text", Name: bird.String("ref"), Text: bird.String("A1B2C3D4")},
{Type: "text", Name: bird.String("date"), Text: bird.String("10 Jul 2026")},
},
}},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(msg.Id, *msg.Status)
}<?php
declare(strict_types=1);
require __DIR__ . '/../vendor/autoload.php';
use MessageBird\Bird;
use MessageBird\Wire\Model\WhatsAppMessageTemplateComponent;
use MessageBird\Wire\Model\WhatsAppMessageTemplateComponentParameter;
$bird = new Bird('bk_XXXXXXXXXXXXXXXXXXXXXXXX');
$message = $bird->whatsapp->send(
to: '+15551234567',
template: 'bird_delivery_update',
components: [
(new WhatsAppMessageTemplateComponent())
->setType('body')
->setParameters([
(new WhatsAppMessageTemplateComponentParameter())->setType('text')->setName('ref')->setText('A1B2C3D4'),
(new WhatsAppMessageTemplateComponentParameter())->setType('text')->setName('date')->setText('10 Jul 2026'),
]),
],
);
echo $message->getId(), ' ', $message->getStatus(), "\n";bird whatsapp send \
--components '[{"parameters":[{"name":"ref","text":"A1B2C3D4","type":"text"},{"name":"date","text":"10 Jul 2026","type":"text"}],"type":"body"}]' \
--template bird_delivery_update \
--to +15551234567curl -X POST https://us1.platform.bird.com/v1/whatsapp/messages \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+15551234567",
"template": {
"slug": "bird_delivery_update",
"components": [
{
"type": "body",
"parameters": [
{ "type": "text", "name": "ref", "text": "A1B2C3D4" },
{ "type": "text", "name": "date", "text": "10 Jul 2026" }
]
}
]
}
}'Jika kunci Anda diawali dengan bk_eu1_, panggil https://eu1.platform.bird.com sebagai gantinya.
API merespons dengan 202 Accepted dan pesan yang telah dibuat. id pesan tersebut diawali dengan wam_, dan status-nya adalah accepted: Bird telah menerima pesan dan mengirimkannya secara asinkron. Simpan id untuk langkah berikutnya.
3. Periksa status pengiriman
Ambil pesan berdasarkan ID wam_-nya. Ganti WHATSAPP_MESSAGE_ID dengan id dari langkah 2, lalu ganti contoh kunci API di tab SDK dengan kunci Anda sendiri:
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: "bk_XXXXXXXXXXXXXXXXXXXXXXXX" });
const msg = await bird.whatsapp.get("WHATSAPP_MESSAGE_ID");
console.log(msg.id, msg.status);from bird import APIError, Bird
with Bird(api_key="bk_XXXXXXXXXXXXXXXXXXXXXXXX") as client:
try:
message = client.whatsapp.get("WHATSAPP_MESSAGE_ID")
print(message.id, message.status)
except APIError as err:
print("read failed:", err)package main
import (
"context"
"fmt"
"log"
bird "github.com/messagebird/bird-sdk-go"
"github.com/messagebird/bird-sdk-go/option"
)
func main() {
client, err := bird.NewClient(option.WithAPIKey("bk_XXXXXXXXXXXXXXXXXXXXXXXX"))
if err != nil {
log.Fatal(err)
}
msg, err := client.Whatsapp.Get(context.Background(), "WHATSAPP_MESSAGE_ID")
if err != nil {
log.Fatal(err)
}
fmt.Println(msg.Id, *msg.Status)
}<?php
declare(strict_types=1);
require __DIR__ . '/../vendor/autoload.php';
use MessageBird\Bird;
$bird = new Bird('bk_XXXXXXXXXXXXXXXXXXXXXXXX');
$message = $bird->whatsapp->get('WHATSAPP_MESSAGE_ID');
echo $message->getId(), ' ', $message->getStatus(), "\n";bird whatsapp get WHATSAPP_MESSAGE_IDcurl https://us1.platform.bird.com/v1/whatsapp/messages/WHATSAPP_MESSAGE_ID \
-H "Authorization: Bearer $BIRD_API_KEY"Kolom status menunjukkan posisi pesan:
accepted: Bird telah menerima pesan dan sedang bersiap menyerahkannya ke WhatsApp.sent: WhatsApp telah menerima pesan, dansent_atmencatat waktunya.delivered: WhatsApp mengonfirmasi pengiriman ke perangkat penerima, dandelivered_atmencatat waktunya. Saat penerima membaca pesan,read_atdiisi, sedangkanstatustetapdelivered.failedataurejected: pesan tidak sampai ke ponsel.last_errormemberikan alasannya, dan Peristiwa status pesan mencantumkan kode kesalahannya.
Lakukan polling hingga status tidak lagi accepted atau sent, atau berlangganan webhook WhatsApp untuk menerima setiap perubahan status pengiriman dan baca (whatsapp.sent, whatsapp.delivered, whatsapp.read, whatsapp.failed). Nomor bersama yang dikelola Bird hanya untuk pesan keluar dan tidak meneruskan balasan masuk ke workspace Anda. Untuk menerima balasan, hubungkan nomor Anda sendiri. Setiap pesan juga muncul di halaman Messages beserta linimasa peristiwanya.
Mengatasi pengiriman yang gagal
402WalletInsufficientBalance: saldo wallet tidak cukup untuk membayar pesan. Isi ulang wallet, lalu kirim lagi.403InsufficientScope: kunci API tidak memiliki cakupanwhatsapp. Ubah cakupan kunci tersebut atau buat kunci denganwhatsapp:write.422WhatsAppInvalidRecipient: nomortobukan nomor telepon E.164 yang valid. Periksa tanda+di awal, kode negara, dan digit nomor pelanggan.
Langkah berikutnya
- Mengirim pesan WhatsApp: kirim template dan pesan layanan berformat bebas dalam jendela layanan pelanggan 24 jam.
- Template WhatsApp: telusuri katalog terkelola (
bird_otp,bird_delivery_update, dan lainnya) atau buat template Anda sendiri. - Hubungkan nomor telepon: gunakan WhatsApp Business Account dan nomor pengirim milik Anda sendiri agar workspace Anda juga dapat menerima balasan masuk.
- Webhook WhatsApp: terima tanda terima pengiriman dan tanda terima baca (serta pesan masuk jika Anda menggunakan nomor sendiri yang terhubung).
- Referensi WhatsApp API: skema permintaan dan respons selengkapnya.
Sumber daya terkait
Lanjutkan dengan dokumentasi, panduan, dan contoh untuk topik ini.