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.`,
  category: "authentication",
}).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.

Two-way adalah bagian dari Bird SMS API. Ketika seseorang mengirim pesan ke nomor Anda, Anda mendapatkan event sms.received di endpoint bertanda tangan dan terlindungi dari replay yang sama, yang sudah membawa tanda terima pengiriman Anda. Tidak ada integrasi kedua dan tidak ada polling: verifikasi tanda tangan sekali, lalu arahkan berdasarkan tipenya.

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.receivedPesan masuk mendarat di nomor Anda: berisi pengirim, nomor Anda, dan teks pesan.
  • sms.deliveredBalasan yang Anda kirim mencapai handset (DLR operator).
  • sms.opted_outPengirim mengirim STOP: Bird menekan mereka dan memblokir pengiriman selanjutnya.

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.",
      category: "transactional",
    }).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.

Pesan masuk memerlukan nomor yang mendukung two-way: long code, short code, dan toll-free dapat menerima, sedangkan alphanumeric sender ID tidak bisa. Untuk percakapan bolak-balik yang lebih kaya di perangkat yang sama (indikator mengetik, tanda terima baca, carousel), RCS meningkatkan percakapan jika 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 telah Anda sediakan akan masuk sebagai webhook sms.received yang ditandatangani HMAC. Anda cukup memverifikasi satu tanda tangan, membaca from, to, dan text, lalu mengarahkannya ke logika Anda sendiri — format yang sama seperti yang sudah Anda tangani untuk tanda terima pengiriman.
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 supresi Anda dan memicu sms.opted_out, serta memblokir pengiriman selanjutnya ke nomor tersebut secara otomatis. HELP mengembalikan balasan bantuan dan START mengaktifkan kembali langganan mereka — semuanya ditangani sebelum sampai ke kode Anda, sehingga Anda tetap patuh tanpa perlu 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