Sign inGet Started

Event voice

Bird mengirimkan event webhook saat panggilan dimulai, dijawab, dan berakhir. Gunakan event ini untuk memperbarui sistem Anda tanpa polling. Lihat Webhook untuk langganan, tanda tangan, percobaan ulang, dan replay.

Jalur panggilan melalui tipe event:

  1. voice_call.initiated: Bird menerima permintaan penyiapan panggilan (SIP INVITE) dan mulai merutekan panggilan
  2. voice_call.answered: nomor yang Anda hubungi mengangkat. Hanya panggilan yang dijawab yang mendapatkan event ini
  3. voice_call.ended: panggilan selesai, dan event ini membawa hasilnya

voice_call.initiated mengonfirmasi bahwa panggilan ada, sedangkan voice_call.ended melaporkan hasilnya. Untuk panggilan yang ditolak atau gagal, gunakan status yang dilaporkan dan respons SIP akhir bersama dengan catatan panggilan. Jangan menyimpulkan siklus hidup lengkap dari keberadaan satu event saja.

Event type adalah open enum: Bird dapat menambahkan tipe baru seiring waktu, jadi cocokkan tipe yang Anda tangani dan abaikan sisanya alih-alih memperlakukan tipe yang tidak dikenal sebagai kesalahan.

Envelope event

Event voice tiba dalam envelope bersarang yang sama seperti setiap event Bird lainnya, yang dijelaskan di panduan Webhook: type, timestamp, dan objek data khusus tipe. Identitas event berada di header webhook-id HTTP, bukan di body.

FieldDeskripsi
typeSalah satu dari tiga tipe di halaman ini, misalnya voice_call.ended
timestampKapan event terjadi (RFC 3339). Urutkan berdasarkan ini, jangan berdasarkan urutan kedatangan
dataPayload khusus event, selalu membawa field identitas panggilan yang sama

data setiap event voice berisi field identitas yang sama untuk korelasi. Nomor telepon menggunakan format E.164: awalan +, kode negara, dan nomor nasional. Untuk panggilan browser ke pengguna workspace atau ring group, from dapat berupa ID usr_ pemanggil. Panggilan browser ke pengguna workspace, ring group, dan sequence masih dalam tahap pratinjau. Para pihak juga dapat berupa ekstensi SIP, dan to dapat berupa ID pengguna workspace, ring group, atau sequence.

FieldDeskripsi
call_idID catatan panggilan (vcl_…), sama seperti yang ditampilkan di Call log
session_idDibagikan oleh setiap leg panggilan yang ditransfer atau multi-pihak (vcs_…). Null jika tidak ada korelasi sesi
workspace_idWorkspace tempat panggilan ini berada
directioninbound untuk panggilan masuk; outbound untuk panggilan keluar
fromPihak pemanggil
toPihak yang dihubungi

Nama field event berbeda dari API leg: event call_id mengidentifikasi leg dan cocok dengan id pada respons leg; event session_id cocok dengan call_id pada respons leg. Gunakan pemetaan tersebut saat menggabungkan pembaruan webhook dengan catatan API.

Event siklus hidup ini menggunakan kontrak pengiriman dan tanda tangan webhook bersama. Langkah webhook sinkron dalam sequence menggunakan protokol penerima terpisah, yang ditandatangani dengan secret callback workspace, bukan dengan secret langganan event.

voice_call.initiated

Bird menerima INVITE dan mulai merutekan.

Contoh kode
{
  "type": "voice_call.initiated",
  "timestamp": "2026-06-10T14:30:00Z",
  "data": {
    "call_id": "vcl_01krdgeqcxet5s7t44vh8rt9mg",
    "session_id": "vcs_01krdgeqcxet5s7t44vh8rt9mh",
    "workspace_id": "wsp_01krdgeqcxet5s7t44vh8rt9mj",
    "direction": "outbound",
    "from": "+14155551234",
    "to": "+16505559876"
  }
}

voice_call.answered

Penerima menjawab, dan waktu yang dapat ditagih dimulai. Panggilan yang tidak dijawab tidak mengirimkan event ini.

Payload-nya adalah field identitas panggilan yang dibawa setiap event voice, dengan timestamp diatur ke saat panggilan dijawab.

voice_call.ended

Panggilan selesai. Event ini menambahkan hasilnya:

FieldDeskripsi
statusCara panggilan berakhir: answered, no_answer, failed, rejected, atau unknown (lihat Status)
sip_response_codeKode SIP akhir panggilan, misalnya 200 atau 486. Panggilan yang ditolak Bird membawa 503, atau 403 untuk panggilan keluar yang melampaui batas panggilan; null jika tidak ada kode akhir yang tercatat
duration_msTotal durasi panggilan dalam milidetik, dari saat Bird menerima panggilan hingga pemutusan
billable_msDurasi setelah dijawab dalam milidetik; panggilan yang tidak dijawab melaporkan nol
Contoh kode
{
  "type": "voice_call.ended",
  "timestamp": "2026-06-10T14:31:05Z",
  "data": {
    "call_id": "vcl_01krdgeqcxet5s7t44vh8rt9mg",
    "session_id": "vcs_01krdgeqcxet5s7t44vh8rt9mh",
    "workspace_id": "wsp_01krdgeqcxet5s7t44vh8rt9mj",
    "direction": "outbound",
    "from": "+14155551234",
    "to": "+16505559876",
    "status": "answered",
    "sip_response_code": 200,
    "duration_ms": 65000,
    "billable_ms": 60000
  }
}

Event ini tidak menyebutkan alasan panggilan berakhir. Panggilan yang mencapai batas durasi panggilan platform tiba sebagai akhir answered biasa, dengan duration_ms sekitar 4 jam.

Catatan panggilan menyimpan dua detail yang tidak disertakan event ini: alasan penolakan dan biaya. Buka panggilan di call log untuk membedakan penolakan Bird dari kegagalan operator. Biaya muncul setelah proses rating selesai.

Mengonsumsi event dengan aman

  • Deduplikasi berdasarkan webhook-id. Percobaan ulang sinyal atau pengiriman dapat mengulangi pembaruan. Publikasi ulang tahap panggilan yang sama mempertahankan identitas pengirimannya, sehingga menggunakan nilai tersebut sebagai kunci akan menghilangkan duplikat.
  • Jangan bergantung pada urutan. Pengiriman tidak berurutan, sehingga answered bisa sampai setelah ended. Urutkan berdasarkan timestamp, dan biarkan event yang tiba belakangan dengan timestamp lebih awal kalah.
  • Gunakan ended untuk hasil yang dilaporkan. Event ini membawa status dan durasi. Publikasi event bisa gagal sebelum pengiriman diantrekan, jadi event yang tidak ada bukan berarti panggilan masih aktif.
  • Rekonsiliasi dengan catatan panggilan. Event memberikan pembaruan tepat waktu, sedangkan call log menyimpan catatan panggilan. Ekspor panggilan sebagai CSV untuk rekonsiliasi.

Langkah selanjutnya

HalamanCakupan
Webhook & eventPenyiapan endpoint, verifikasi tanda tangan, percobaan ulang, dan replay
Call logSetiap field pada catatan panggilan, dan ekspor CSV

Lanjutkan dengan dokumentasi, panduan, dan contoh untuk topik ini.