Dua arah

Teks kembali. Jadi tanganilah.

Siap dalam:
Cursor

Setiap pesan yang dikirim seseorang ke nomor yang Anda provisikan datang sebagai webhook bertanda HMAC. Baca text-nya, balas dari nomor yang sama, dan biarkan Bird menangani STOP dan HELP untuk Anda. Bangun alur percakapan dan auto-reply pada API yang sudah Anda gunakan untuk mengirim.

send-otp.ts
200 · 0.4s
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

Hey Ada — your Bird sign-in code is 482917. It'll expire in 10 minutes. Don't share it with anyone.
482917
Delivered

Inbound hanyalah webhook lainnya.

Dua arah adalah bagian dari Bird SMS API. Saat seseorang mengirim teks ke nomor Anda, Anda mendapatkan event sms.received pada endpoint bertanda tangan dan terlindungi replay yang sama yang sudah membawa delivery receipt Anda. Tidak ada integrasi kedua dan tidak ada polling — verifikasi tanda tangan sekali dan branch pada type.

Dengarkan apa yang kembali.

Pesan inbound dan opt-out adalah event, sama seperti delivery receipt. Verifikasi satu tanda tangan, branch pada type, dan tangani masing-masing di handler yang sudah Anda tulis.

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.received":
      await handleInbound(event.data.from, event.data.text);
      break;
    case "sms.opted_out":
      await removeFromCampaigns(event.data.from);
      break;
  }

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

Payload-nya adalah amplop yang sama di setiap channel Bird: sebuah id evt_, tanda tangan HMAC, dan timestamp yang terlindungi replay.

  • sms.receivedSebuah pesan inbound mendarat di nomor Anda — membawa pengirim, nomor Anda, dan text-nya.
  • sms.deliveredBalasan yang Anda kirim mencapai handset (DLR operator).
  • sms.opted_outPengirim mengirim teks STOP — Bird mensupresi mereka dan memblokir pengiriman mendatang.

Pesan inbound bertanda tangan, secara lengkap.

Berikut tampilan sebuah event sms.received di jalur. from adalah siapa pun yang mengirim teks kepada Anda, to adalah nomor yang Anda provisikan, dan segment serta encoding dilaporkan dengan cara yang sama seperti pada pengiriman, sehingga balasan inbound yang panjang tidak pernah mengejutkan.

sms.received
evt_
{
  "id": "evt_7nQ9xLp2aR...",
  "type": "sms.received",
  "created_at": "2026-06-26T14:03:11Z",
  "data": {
    "id": "sms_5hV02Mr3n...",
    "from": "+15005550006",
    "to": "+14155550172",
    "text": "YES book me in for Thursday",
    "encoding": "GSM-7",
    "segments": 1
  }
}

Balas dari nomor yang sama.

Sebuah balasan adalah pengiriman dengan from dan to ditukar. Setel from ke nomor Anda dan to ke pengirim asli, dan percakapan tetap pada satu nomor, sehingga penerima melihat sebuah thread alih-alih pengirim baru setiap kali. Bangun auto-reply, konfirmasi, atau alur percakapan lengkap di atasnya.

reply.ts
200 · reply
async function handleInbound(from: string, text: string) {
  if (/^yes\b/i.test(text)) {
    const { error } = await bird.sms.send({
      from: "+14155550172", // your two-way number
      to:   from,           // reply to the sender
      text: "Booked. See you Thursday at 10am.",
    }).safe();

    if (error) throw error;
  }
}

STOP, HELP, dan START kami tangani untuk Anda.

Bird mengenali kata kunci khusus sebelum mencapai handler Anda: STOP menambahkan pengirim ke daftar penekanan Anda dan memicu sms.opted_out, HELP mengirim balasan bantuan otomatis, dan START membuat mereka berlangganan kembali. Pengiriman berikutnya ke nomor yang ditekan diblokir otomatis. Anda tetap bisa memakai kata kunci sendiri untuk YES, BOOK, atau apa pun yang dibutuhkan alur Anda. Aturan lengkap kata kunci dan opt-out ada di penanganan opt-out.

Dua hal yang akan Anda inginkan berikutnya.

Inbound memerlukan nomor yang berkemampuan dua arah — long codes, short codes, dan toll-free dapat menerima, alphanumeric sender ID tidak bisa. Untuk percakapan bolak-balik yang lebih kaya pada handset yang sama (indikator mengetik, read receipt, carousel), RCS meningkatkan percakapan di tempat perangkat mendukungnya.

Pelajari lebih dalam di dokumentasi.

Pasang webhook untuk event inbound, baca referensi error untuk kegagalan yang akan Anda tangani, dan periksa penyalahgunaan dan kepatuhan untuk aturan keyword dan consent.

FAQ SMS dua arah

Bagaimana SMS inbound mencapai aplikasi saya?+
Setiap pesan yang dikirim ke nomor yang Anda provisikan datang sebagai webhook sms.received bertanda HMAC. Anda memverifikasi satu tanda tangan, membaca from, to, dan text, lalu meroute-nya ke logika Anda sendiri — amplop yang sama yang sudah Anda tangani untuk delivery receipt.
Bisakah saya membalas pesan inbound?+
Ya. Balas dengan mengirim dari nomor yang sama tempat pesan itu masuk. Setel from ke nomor Anda dan to ke pengirim asli, dan thread tetap pada satu nomor dari ujung ke ujung.
Apa yang terjadi saat seseorang mengirim teks STOP?+
Bird menambahkan pengirim ke daftar penekanan Anda, memicu sms.opted_out, dan memblokir pengiriman berikutnya ke nomor itu secara otomatis. HELP mengirim balasan bantuan dan START membuat mereka berlangganan kembali — semuanya ditangani sebelum mencapai kode Anda, sehingga Anda tetap patuh tanpa menulis logika kata kunci sendiri.
Apakah saya perlu nomor khusus untuk dua arah?+
Anda perlu nomor yang berkemampuan dua arah. Long codes, short codes, dan nomor toll-free mendukung inbound; alphanumeric sender ID hanya kirim dan tidak bisa menerima balasan.

Kirim dan terima pada satu nomor, satu API.

Inbound dua arah adalah salah satu kemampuan Bird SMS API: pengiriman, nomor, kepatuhan, routing, dan analitik hadir bersamanya, di atas infrastruktur yang telah kami jalankan selama satu dekade.

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