Kirim notifikasi pesanan, pengingat, dan pemberitahuan melalui SMS.
Jangkau pelanggan di ponsel mereka dengan pembaruan pengiriman barang, pengingat pemesanan, dan peringatan akun dari nomor telepon terdaftar atau pengirim merek. Bird mengembalikan encoding karakter dan jumlah segmen saat pesan diterima, mencegah SMS ganda saat aplikasi Anda mencoba ulang permintaan yang habis waktu, dan mengalirkan pembaruan pengiriman dari operator ke webhook Anda.
Pesanan Anda #4821 siap diambil.
Pesan
Detail
Status terkirim adalah tanda terima dari operator. Status ini tidak membuktikan bahwa seseorang telah membacanya.
Pesanan Anda #4821 siap diambil.
Pesan
Detail
Status terkirim adalah tanda terima dari operator. Status ini tidak membuktikan bahwa seseorang telah membacanya.
Pesanan Anda #4821 siap diambil.
Pesan
Detail
Status terkirim adalah tanda terima dari operator. Status ini tidak membuktikan bahwa seseorang telah membacanya.
Kirim SMS pertama Anda dalam hitungan menit.
Uji dengan aman sebelum mengirim pesan ke pelanggan sungguhan.
Dengan Bird SMS API, satu panggilan dari backend Anda cukup untuk mengirim konfirmasi pesanan, pembaruan pengiriman, atau pengingat janji temu. Sebelum mengirim ke pelanggan sungguhan, arahkan pengiriman uji ke nomor sandbox AS +15005550006 dari pengirim AS yang aktif agar Anda dapat memverifikasi integrasi dan penanganan webhook tanpa mengirim SMS ke ponsel sungguhan.
// Install the SDK
// npm install @messagebird/sdk
const msg = await bird.sms.send({
from: "+15557654321",
to: "+14155550100",
text: "Your verification code is 123456.",
category: "authentication",
});
console.log(msg.id, msg.status);Perlu memverifikasi pengguna saat masuk atau checkout? Daripada membuat dan menyimpan kode verifikasi sekali pakai sendiri, gunakan Bird Verify untuk menerbitkan, mengakhiri masa berlaku, dan memeriksa kode verifikasi secara otomatis.
Jaga pengiriman SMS tetap dapat diprediksi di produksi.
Hindari biaya segmen tak terduga, SMS ganda akibat percobaan ulang jaringan, dan kegagalan operator yang tidak terdeteksi.
- 01
Lihat jumlah segmen langsung di respons.
Setiap pengiriman yang diterima mengembalikan encoding karakter yang diterapkan dan jumlah segmen. Anda juga dapat menguji draf teks di kalkulator segmen sebelum merilis templat baru.
- 02
Tangani GSM-7 dan Unicode tanpa menebak-nebak.
Pesan GSM-7 standar memuat 160 karakter dalam satu segmen, sedangkan teks dengan emoji atau aksara non-Latin otomatis beralih ke Unicode dengan 70 unit. Pesan yang lebih panjang terbagi dengan rapi dan tersusun kembali sebagai satu SMS di ponsel pelanggan.
- 03
Kirim hingga 100 SMS yang dipersonalisasi dalam satu panggilan.
Kirim antrean pengingat janji temu atau pemberitahuan sif dalam satu permintaan massal. Bird memvalidasi batch di awal sehingga input yang salah langsung gagal, lalu melacak pengiriman dari operator secara terpisah untuk setiap penerima.
- 04
Coba lagi permintaan yang habis waktu tanpa mengirim SMS ganda.
Sertakan idempotency key saat worker Anda mengirim pesan. Jika timeout jaringan memicu percobaan ulang dengan key dan payload yang sama, Bird mengembalikan respons asli alih-alih mengantrekan SMS ganda.
- 05
Ketahui kapan operator mengirimkan atau menolak SMS.
Terima webhook bertanda tangan saat status pesan berubah dari diterima menjadi terkirim, sampai, atau gagal, sehingga aplikasi Anda dapat memperbarui status pesanan atau beralih ke kanal lain saat nomor tidak dapat dijangkau.
Migrasi dari Twilio dengan beberapa baris kode.
Petakan nomor pengirim, kolom penerima, dan handler webhook yang sudah ada ke Bird tanpa merombak arsitektur layanan notifikasi Anda. Sinkronkan daftar opt-out Anda dan verifikasi pengiriman dengan nomor sandbox sebelum memindahkan lalu lintas live.
import twilio from "twilio";
const client = twilio(accountSid, authToken);
await client.messages.create({
from: "+14155550172",
to: "+15005550006",
body: "Your code is 123456.",
});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",
});Deteksi pesan multisegmen tak terduga sebelum tagihan Anda membengkak.
Satu tanda kutip lengkung, emoji, atau huruf beraksen dalam nama pelanggan dapat mengubah pesan dari encoding GSM-7 160 karakter menjadi Unicode 70 unit, sehingga satu SMS terbagi menjadi beberapa segmen yang ditagih. Bird mengembalikan jumlah karakter, encoding, dan total segmen di respons pengiriman agar tim Anda dapat menemukan templat yang mahal sejak awal.
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" }
Kirim hingga 100 pengingat yang dipersonalisasi dalam satu permintaan.
Saat tugas terjadwal mengirim pengingat janji temu esok hari atau pembaruan jadwal pengiriman, gabungkan hingga 100 pesan dalam satu panggilan API alih-alih mengirim permintaan satu per satu. Setiap penerima mendapat SMS yang dipersonalisasi dan status pengiriman tersendiri, dan validasi di awal mendeteksi input yang salah sebelum batch masuk antrean.
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`);Lacak pengiriman dari operator dan tangani SMS yang gagal secara real time.
Karena penyerahan ke operator berlangsung secara asinkron setelah panggilan pengiriman Anda berhasil, Bird mengirim event webhook bertanda tangan seiring kemajuan pesan. Perbarui database Anda saat SMS sampai di ponsel, atau picu fallback email dan tandai nomor yang tidak valid saat pengiriman gagal.
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 });
}Setiap event gagal menyertakan alasan kegagalan yang spesifik sehingga Anda dapat membedakan masalah ponsel sementara dari nomor yang tidak valid. Balasan opt-out seperti STOP otomatis menyupresi pengiriman pemasaran berikutnya, sedangkan kegagalan pengiriman biasa tidak mengubah status opt-in penerima.
sms.acceptedBird menerima permintaan Anda dan mengantrekan pesan untuk dirutekan ke operator.sms.sentBird menyerahkan pesan ke operator seluler tujuan.sms.deliveredOperator tujuan mengonfirmasi pesan telah sampai di ponsel penerima.sms.failedSMS tidak dapat dikirim. Event ini menyertakan alasan kesalahan agar aplikasi Anda dapat memberi tahu tim dukungan atau mencoba kanal lain.
Pelajari lebih dalam di panduan developer.
Verifikasi webhook bertanda tangan, lindungi worker pengiriman Anda dari SMS ganda dengan idempotency key, dan gunakan referensi kesalahan untuk menangani nomor tidak valid atau tujuan yang dinonaktifkan secara otomatis.
Pertanyaan sebelum Anda membangun
Apakah saya yang memilih pengirim?
Bagaimana percobaan ulang menghindari pesan duplikat?
Apakah diterima berarti terkirim?
Apakah batch sama dengan broadcast?
Platform SMS lainnya
Sediakan nomor pengirim, terima balasan pelanggan, dan pantau pengiriman dari operator dari workspace yang sama.
Skalakan tanpa
kehilangan kendali.
Atur tim dalam workspace, kontrol akses API, dan lacak perubahan melalui log audit.
Organisasi
Harbor
Akses tetap dalam workspace-nya.
Produksi/Kunci API
Agen pengiriman
AktifAlex Lee
Admin
Hari ini · UTC
Log audit
Organisasi
Harbor
Akses tetap dalam workspace-nya.
Produksi/Kunci API
Agen pengiriman
AktifAlex Lee
Admin
Hari ini · UTC
Log audit
Organisasi
Harbor
Akses tetap dalam workspace-nya.
Produksi/Kunci API
Agen pengiriman
AktifAlex Lee
Admin
Hari ini · UTC
Log audit