Satu API untuk setiap
pesan yang Anda kirim.

Kirim pesan transaksional dan notifikasi melalui Bird. Sediakan teks dan pengirim Anda, atau gunakan template; periksa encoding dan jumlah segmen dalam respons. Tambahkan kunci idempotensi untuk percobaan ulang yang aman dan pantau pengiriman melalui webhook bertanda tangan.

Satu pesan. Hasil yang terlihat.

Contoh pengiriman

FCatatan lapangan
Pesanan Anda #4821 siap diambil.
Status202 Accepted
EncodingGSM-7
Segmen1

Jelajahi penerimaan dan tanda terima operator berikutnya. Contoh ini tidak mengirim pesan; pengiriman tidak membuktikan bahwa seseorang membacanya.

Uji integrasi SMS pertama Anda.

Dari bahasa yang sudah Anda gunakan.

Pengiriman adalah inti dari Bird SMS API. Contoh di bawah menunjukkan bentuk permintaan. Untuk pengujian terkontrol, ganti penerima dengan nomor sandbox yang didokumentasikan +15005550006. Siapkan pengirim AS yang sesuai dan aktifkan tujuan terlebih dahulu, lalu verifikasi event penerimaan dan pengiriman sebelum mengirim ke pelanggan.

1
2
3
4
5
6
7
const msg = await bird.sms.send({
  from: "+15557654321",
  to: "+14155550100",
  text: "Your verification code is 123456.",
  category: "authentication",
});
console.log(msg.id, msg.status);

Pengiriman SMS menyampaikan teks yang Anda berikan. Untuk login dan verifikasi akun, gunakan Bird Verify untuk membuat, mengatur kedaluwarsa, dan memeriksa kode sebagai bagian dari alur verifikasi.

Bangun di atas kontrak pengiriman yang jelas.

Siapkan permintaan dan pantau hasilnya.

  1. 01

    Penghitungan segmen sebelum pengiriman.

    Bird melaporkan encoding dan jumlah segmen yang dihitung dalam responsnya. Gunakan kalkulator segmen untuk memeriksa draf sebelum Anda mengirimnya.

  2. 02

    GSM-7 dan Unicode, ditentukan untuk Anda.

    Karakter menentukan encoding. GSM-7 memuat 160 unit dalam satu segmen; Unicode memuat 70. Pesan multipart menyisakan ruang untuk reassembly, dan emoji dapat menempati lebih dari satu unit.

  3. 03

    Batch dalam satu panggilan.

    Kirim hingga 100 pesan independen dalam satu batch. Validasi terjadi sebelum antrean; setiap pesan yang diterima kemudian memiliki hasilnya sendiri.

  4. 04

    Coba lagi dengan kunci idempotensi.

    Gunakan satu kunci idempotensi per permintaan logis dan gunakan kembali untuk percobaan ulang yang identik. Respons API yang tersimpan dapat diputar ulang; ini tidak menjamin pengiriman operator tepat satu kali.

  5. 05

    Event pengiriman untuk aplikasi Anda.

    Berlangganan event penerimaan, pengiriman, dan hasil akhir. Verifikasi tanda tangan, deduplikasi percobaan ulang webhook, dan gunakan pembacaan pesan untuk menyelidiki pengamatan yang hilang atau tertunda.

Lanjutkan integrasi dengan pengujian terkontrol.

Petakan field permintaan, registrasi pengirim, dan penanganan event Anda saat ini ke Bird. Rekonsiliasi opt-out sebelum memindahkan trafik, lalu bandingkan pengujian terkontrol sebelum mengubah routing produksi.

twilio.ts
Twilio
import twilio from "twilio";

const client = twilio(accountSid, authToken);

await client.messages.create({
  from: "+14155550172",
  to:   "+15005550006",
  body: "Your code is 123456.",
});
bird.ts
Bird
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

await bird.sms.send({
  from:     "+14155550172",
  to:       "+15005550006",
  text:     "Your code is 123456.",
  category: "authentication",
});

Ketahui jumlah segmen sebelum pengiriman.

GSM-7 memuat 160 septet dalam satu segmen; UCS-2 memuat 70 code unit. Kapasitas multipart masing-masing 153 atau 67. Karakter GSM-7 yang diperluas menggunakan dua septet dan emoji dapat menggunakan dua code unit. Bird mengembalikan encoding dan segmen saat penerimaan; tarif yang berlaku dan biaya operator dikenakan terpisah.

segments.ts
202 · 1 segment
const { data, error } = await bird.sms.send({
  from:     "Bird",
  to:       "+31612345678",
  text:     "Your code is 123456.",
  category: "authentication",
}).safe();
if (error) throw error;

console.log(data.segments);
// → { characters: 20, count: 1, encoding: "GSM_7BIT" }

Satu pesan atau seratus, satu panggilan.

Kirim batch hingga 100 pesan independen, masing-masing dengan penerima dan teks sendiri. Input tidak valid menolak permintaan sebelum masuk antrean. Setelah respons 202 berhasil, pemrosesan dan pengiriman dapat berhasil atau gagal secara terpisah untuk setiap SMS. Gunakan kembali permintaan dan kunci idempotensi saat mencoba ulang dalam jendela retensi yang didokumentasikan.

reminders.ts
202 · batch
const { data: batch, error } = await bird.sms
  .sendBatch(
    users.map((u) => ({
      from: "Bird",
      to:   u.phone,
      text: `Hi ${u.name}, your appointment is tomorrow at ${u.time}.`,
    })),
  )
  .safe();

if (error) throw error;
console.log(`queued ${batch.data.length} messages`);

Pantau dari penerimaan hingga hasil yang dilaporkan.

Permintaan yang berhasil mengembalikan 202 Accepted. Penagihan dan pengiriman ke operator terjadi kemudian dan masih bisa gagal. Konsumsi event pengiriman bertanda tangan dan periksa catatan pesan saat menyelidiki hasilnya.

app/api/webhooks/bird/route.ts
signed
import { bird } from "@/lib/bird";

export async function POST(req: Request) {
  const event = bird.webhooks.unwrap(
    await req.text(),
    Object.fromEntries(req.headers),
  );

  switch (event.type) {
    case "sms.delivered":
      await markDelivered(event.data.sms_id);
      break;
    case "sms.failed":
      await flag(event.data.to, event.data.error?.description);
      break;
  }

  return new Response(null, { status: 204 });
}

Periksa kegagalan berdasarkan alasan yang dilaporkan. Kata kunci STOP yang didukung dan opt-out operator membuat supresi; kegagalan pengiriman lainnya tidak otomatis menjadi opt-out.

  • sms.acceptedDiterima oleh API dan diantrikan untuk penyerahan ke operator.
  • sms.sentDikirim ke SMSC operator tujuan.
  • sms.deliveredTanda terima pengiriman diterima dari operator (DLR).
  • sms.failedKegagalan terminal untuk percobaan SMS ini. Periksa error yang dilaporkan dan timeline pesan.

Pelajari lebih lanjut di dokumentasi.

Pasang webhook, amankan setiap pengiriman agar bisa dicoba lagi dengan kunci idempotensi, dan baca referensi kesalahan agar Anda menangani setiap kegagalan dengan benar.

Pertanyaan sebelum Anda membangun

Apakah saya yang memilih pengirim?
Untuk pengiriman teks bebas, berikan pengirim yang dapat digunakan workspace Anda di tujuan tersebut beserta kategori pesan yang sesuai. Pengiriman template sistem menentukan kategori dan pengirimnya dari template.
Bagaimana percobaan ulang menghindari pesan duplikat?
Berikan kunci idempotensi dan gunakan kembali untuk percobaan ulang permintaan yang sama. Pengiriman tanpa kunci tersebut dapat diperlakukan sebagai pesan baru.
Apakah diterima berarti terkirim?
Tidak. Respons 202 berarti API menerima permintaan tersebut. Ikuti catatan pesan dan signed event untuk hasil yang dilaporkan operator. Tanda terima pengiriman tidak menetapkan bahwa penerima telah membaca pesan.
Apakah batch sama dengan broadcast?
Batch berisi hingga 100 pesan independen, masing-masing dengan penerima dan isi sendiri. Broadcast adalah kampanye audiens dengan konten bersama dan siklus pengiriman yang dikelola. Pilih alur kerja yang sesuai dengan kebutuhan Anda.

Skalakan tanpa
kehilangan kendali.

Atur tim dalam workspace, kontrol akses API, dan lacak perubahan melalui log audit.

BirdHarborOrganisasi
WorkspaceProduksiSandbox

Agen pengiriman

Kunci API · Tim operasional pelanggan
Aktif
IzinAkses
EmailBaca & tulis
SMSBaca & tulis
ALAlex Lee AdminIzin diperbarui

Log audit

Produksi
Workspace
Produksi
Sumber daya
Agen pengiriman
WhatsApp
Akses bacaBaca & tulis
Berhasil

Mulai dengan SMS.
Bangun lintas kanal dengan Bird.

Ide Anda berikutnya.
Siap terhubung.