Kirim SMS
Satu API untuk setiap teks yang Anda kirim.
Kirim satu pesan atau seratus melalui SMS API yang sama. SDK menghitung segment sebelum pengiriman, memilih GSM-7 atau Unicode untuk Anda, dan setiap pengiriman bersifat idempotent dengan webhook pada setiap status pengiriman.
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const code = generateOtp();
const { data, error } = await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your Bird verification code is ${code}. Reply STOP to opt out.`,
}).safe();
if (error) throw error;
console.log(data.id);
// → "sms_4kT01Lq2m..."Today at 2:14 PM
Kirim SMS pertama Anda dalam lima menit.
Dari bahasa yang sudah Anda gunakan.
Pengiriman adalah inti dari Bird SMS API. Pengiriman pertama menuju penerima uji resmi (+15005550006), sehingga Anda bisa merilis cek CI dan memasang webhook sebelum memprovisikan nomor.
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: "Hello from Node.",
}).safe();Lima hal yang tidak Anda bangun sendiri.
Kontrak yang sama di setiap channel Bird.
- 01
Penghitungan segment sebelum pengiriman.
SDK mengukur panjang yang dienkode dan memberitahu Anda berapa segment yang dibebankan sebuah pesan, sehingga sebuah karakter nyasar tidak pernah diam-diam memecah satu teks menjadi tiga.
- 02
GSM-7 dan Unicode, diputuskan untuk Anda.
Teks biasa menumpang GSM-7; sebuah emoji atau aksara non-Latin membalik seluruh pesan ke UCS-2. Bird memilih encoding dan memperingatkan Anda saat satu karakter mengubah biayanya.
- 03
Batch dalam satu panggilan.
Kirim banyak pesan independen dalam satu request, masing-masing dengan penerima dan text-nya sendiri, tervalidasi sebagai satu kesatuan sehingga Anda tidak pernah setengah-mengirim.
- 04
Idempotent berdasarkan kontrak.
Setiap pengiriman menerima idempotency key, sehingga request yang diulang setelah timeout mengembalikan hasil aslinya alih-alih mengirim teks ke seseorang dua kali.
- 05
Webhook pada setiap perubahan status.
Queued, sent, delivered, failed. Masing-masing bertanda HMAC, terlindungi replay, idempotent, amplop yang sama di setiap channel.
Sudah mengirim di tempat lain? Ganti client-nya, pertahankan panggilannya.
Bentuknya nyaris tidak berubah: tukar client, pertahankan from, to, dan text Anda, arahkan webhook Anda ke satu endpoint. Model auth yang sama dengan pengiriman email, voice, dan WhatsApp Anda.
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: "Bird",
to: "+15005550006",
text: "Your code is 123456.",
});Ketahui biaya sebelum operator mengetahuinya.
Pesan GSM-7 muat 160 karakter per segment; satu emoji atau karakter non-Latin membalik seluruh pesan ke UCS-2 dan menurunkannya menjadi 70. SDK melaporkan encoding dan jumlah segment pada setiap pengiriman, sehingga penagihan tidak pernah mengejutkan dan pesan yang digabungkan selalu pilihan yang disengaja.
const { data } = await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: "Your code is 123456.",
}).safe();
console.log(data.encoding); // → "GSM-7"
console.log(data.segments); // → 1Satu pesan atau seratus, satu panggilan.
Batch pesan independen dalam satu request, masing-masing dengan penerima dan text-nya sendiri. Batch tervalidasi sebagai satu kesatuan: satu nomor buruk menolak panggilan dengan 422, sehingga Anda tidak pernah setengah-mengirim. Satu idempotency key membuat seluruh request aman untuk diulang.
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}.`,
})),
{ idempotencyKey: `reminders-${runId}` },
)
.safe();
if (error) throw error;
console.log(`queued ${batch.data.length} messages`);Pantau setiap pesan sepanjang hidupnya.
Sebuah pengiriman mengembalikan 202 segera; hasilnya datang sebagai webhook. Verifikasi satu tanda tangan, branch pada type-nya: amplop yang sama yang sudah Anda tangani untuk email, voice, dan WhatsApp.
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.reason);
break;
}
return new Response(null, { status: 204 });
}Pengiriman yang gagal dan balasan STOP memperbarui daftar supresi Anda secara otomatis, sehingga nomor buruk tidak pernah membebani Anda dua kali.
sms.queuedDiterima API dan diantrekan untuk diserahkan ke operator.sms.sentDikirimkan ke SMSC operator tujuan.sms.deliveredDelivery receipt diterima dari operator (DLR).sms.failedKegagalan permanen — penolakan operator, nomor tidak valid, atau terkena supresi.
Pelajari lebih dalam di dokumentasi.
Pasang webhook, buat setiap pengiriman aman untuk diulang dengan idempotency key, dan baca referensi error agar Anda menangani setiap kegagalan dengan cara yang tepat.
FAQ pengiriman SMS
Seberapa panjang sebuah SMS bisa?+
Bisakah saya mengirim ke banyak penerima dalam satu request?+
Apa yang terjadi jika saya mengulang pengiriman setelah timeout?+
Bagaimana saya tahu apakah sebuah pesan terkirim?+
Sisanya dari platform SMS
Satu API, satu set key. Jelajahi kemampuan lainnya.
Sekitar 40% SMS komersial dunia sudah berjalan di Bird.
Pengiriman adalah salah satu kemampuan Bird SMS API: nomor, inbound dua arah, kepatuhan, routing, dan analitik hadir bersamanya, di atas infrastruktur yang telah kami jalankan selama satu dekade.