ThunderPhone 2.0 kini resmi hadir.Gunakan langsung secara mandiri, mulai 2¢/menit.Baca pengumumannya

Developer cookbook

Hubungkan melalui SIP (tanpa nomor telepon)

Kirim panggilan ke agen ThunderPhone langsung dari PBX, operator, atau aplikasi SIP Anda, dengan URI SIP satu kali untuk setiap panggilan atau alamat SIP permanen.

Jika sistem Anda sendiri sudah menangani nomor telepon (PBX, platform pusat kontak, atau akun operator tempat Anda merotasi nomor), Anda dapat mengirim panggilan ke agen ThunderPhone melalui SIP standar. Anda tidak perlu mengimpor atau membeli nomor di ThunderPhone. Sistem Anda menghubungi alamat SIP dan agen menjawab.

Ada dua jenis alamat SIP:

URI SIP per panggilanEndpoint SIP
Bentuksip:c-<token>@sip.thunderphone.comsip:agent-<id>-<letters>@sip.thunderphone.com
Dibuat denganPOST /v1/calls/register-sip, sekali per panggilanPOST /v1/sip-endpoints, sekali
AutentikasiToken satu kali pakai dalam alamatNama pengguna + kata sandi digest SIP (dan opsional daftar izin IP sumber)
Cocok untukAplikasi yang sudah memanggil API sebelum meneruskan panggilan; variabel per panggilanPBX dan operator yang cukup “mengarahkan trunk” ke ThunderPhone
Berlaku selama5 menit, satu panggilanHingga Anda menghapusnya

Kedua jenis tersebut merutekan ke satu agen di organisasi Anda, dan keduanya muncul di riwayat panggilan seperti panggilan masuk lainnya.

URI SIP per panggilan

1. Daftarkan panggilan

curl -X POST https://api.thunderphone.com/v1/calls/register-sip \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_id": 12,
    "to_number": "+14155550142",
    "variables": {"customer_name": "Ada"}
  }'
{
  "call_id": 862197007562,
  "sip_uri": "sip:c-1790372992.Qm3xT8vLk2PzR7nYw4HbJa.uF6sD1gK9eW2cX5vB8nM0q@sip.thunderphone.com",
  "expires_at": "2026-09-25T21:49:52Z",
  "agent_id": 12,
  "to_number": "+14155550142"
}
  • to_number (opsional) adalah nomor yang dihubungi penelepon di sisi Anda. Nilai ini disimpan sebagai tujuan panggilan dalam riwayat panggilan, dan agen melihatnya sebagai nomornya sendiri.
  • variables (opsional) mengisi {{placeholders}} dalam Prompt agen, sama seperti untuk panggilan keluar.
  • call_id adalah id yang akan dimiliki panggilan dalam riwayat panggilan (GET /v1/calls/{call_id}) setelah terhubung.

2. Hubungi URI

Kirim panggilan ke sip_uri dalam waktu 5 menit. URI hanya berfungsi untuk satu panggilan: setelah digunakan oleh sebuah panggilan, URI tersebut habis, bahkan jika panggilan itu berakhir dengan cepat.

Dengan Twilio, misalnya, kembalikan TwiML ini untuk panggilan yang ingin Anda teruskan:

<Response>
  <Dial>
    <Sip>sip:c-1790372992.Qm3xT8vLk2PzR7nYw4HbJa.uF6sD1gK9eW2cX5vB8nM0q@sip.thunderphone.com;transport=tcp</Sip>
  </Dial>
</Response>

Dari PBX, hubungi URI sebagai tujuan SIP. Tidak diperlukan nama pengguna atau kata sandi; token adalah kredensialnya, jadi perlakukan URI seperti kata sandi hingga URI tersebut digunakan.

Endpoint SIP (alamat permanen)

1. Buat endpoint

curl -X POST https://api.thunderphone.com/v1/sip-endpoints \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"agent_id": 12, "name": "Main PBX"}'
{
  "id": 7,
  "name": "Main PBX",
  "agent_id": 12,
  "sip_uri": "sip:agent-12-jhxmginwjx@sip.thunderphone.com",
  "username": "tp409667538f83",
  "password": "8mJ0…",
  "allowed_source_cidrs": [],
  "status": "active",
  "created_at": "2026-09-25T21:46:18Z"
}

2. Arahkan sistem Anda ke endpoint

Konfigurasikan trunk atau tujuan SIP dengan:

PengaturanNilai
URI SIPsip_uri endpoint
Nama pengguna / kata sandiusername / password (autentikasi digest; ThunderPhone melakukan challenge pada setiap panggilan)
TransportTCP pada port 5060 atau TLS pada port 5061 (disarankan), atau UDP pada port 5060
CodecG.711 (PCMU/PCMA) atau G.722

Pengaturan transport dan codec ini juga berlaku untuk URI per-panggilan. Dua detail jaringan penting untuk kedua jenis alamat:

  • Ikuti Record-Route. Setelah INVITE pertama, sisa pensinyalan panggilan (ACK, putus panggilan, pengalihan) dikirim ke server ThunderPhone tertentu yang menjawab, yang disebutkan dalam header Record-Route (sip-1.thunderphone.com atau sip-2.thunderphone.com, atau alamat IP-nya). Jika Anda membatasi SIP keluar, izinkan host tersebut selain sip.thunderphone.com: 172.170.39.202 (sip), 13.86.104.121 (sip-1) dan 20.80.98.90 (sip-2).
  • Audio dikirim ke tempat lain. sip.thunderphone.com hanya membawa pensinyalan. Izinkan media (RTP) ke alamat dan port dalam jawaban SDP.

Setiap panggilan ke alamat tersebut mencapai agen endpoint, nomor apa pun yang dihubungi pemanggil Anda di sisi Anda. Anda tidak pernah mengimpor nomor, jadi mengganti nomor di sisi Anda tidak memerlukan perubahan di ThunderPhone.

Teruskan nomor yang dihubungi (opsional)

Untuk mencatat nomor Anda yang dihubungi pemanggil, kirimkan nomor tersebut pada INVITE dalam header X-Original-To (misalnya X-Original-To: +14155550142) atau dalam header standar Diversion. ThunderPhone menyimpannya sebagai tujuan panggilan.

Tujuan dipilih dalam urutan ini: to_number yang diberikan saat URI per-panggilan didaftarkan, lalu nomor dalam X-Original-To, lalu nomor dalam Diversion. Jika tidak satu pun memberikan nomor, tujuan ditampilkan sebagai sip:agent-12-jhxmginwjx (alamat endpoint) untuk endpoint, atau sip:call untuk URI per-panggilan.

Dengan Twilio, Anda dapat menambahkan header ke URI SIP: sip:agent-12-jhxmginwjx@sip.thunderphone.com;transport=tcp?X-Original-To=%2B14155550142.

Batasi IP sumber (opsional)

Atur allowed_source_cidrs agar hanya menerima panggilan dari alamat pensinyalan Anda sendiri, selain nama pengguna dan kata sandi:

curl -X PATCH https://api.thunderphone.com/v1/sip-endpoints/7 \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"allowed_source_cidrs": ["203.0.113.0/28"]}'

Panggilan dari alamat lain ditolak sebelum mencapai agen. Gunakan alamat asal sistem Anda mengirim pensinyalan SIP (untuk operator seperti Twilio, rentang IP pensinyalan yang dipublikasikannya), bukan alamat media Anda.

Yang dilihat oleh penelepon dan sistem Anda

  • ID penelepon: bagian pengguna dari header From disimpan sebagai penelepon. Nomor telepon (digit, opsional dengan +, spasi, tanda hubung, titik, atau tanda kurung) dinormalisasi ke E.164; hal lain, seperti nama pengguna SIP, disimpan sebagaimana dikirim. Maksimal 32 karakter disimpan, dan penelepon yang tidak ada disimpan sebagai anonymous.
  • Panggilan yang ditolak: URI per-panggilan yang tidak dikenal atau kedaluwarsa mendapatkan SIP 404 Not Found. URI per-panggilan yang sudah digunakan, endpoint yang dinonaktifkan, atau sumber di luar daftar izin (termasuk panggilan UDP apa pun ke endpoint dengan daftar izin) diputuskan sebelum agen dimulai: sistem Anda mungkin melihat panggilan gagal, atau terhubung lalu langsung berakhir. Penolakan ini tidak membuat entri riwayat panggilan. Jika organisasi Anda kehabisan kredit atau telah mencapai batas pengeluaran, panggilan ditolak dan muncul dalam riwayat panggilan sebagai panggilan gagal tanpa biaya. Untuk mencoba ulang upaya per-panggilan, daftarkan URI baru.
  • Transfer: transfer dingin agen berfungsi (ThunderPhone mengirim SIP REFER, yang harus diterima oleh sistem Anda). Transfer hangat tidak tersedia pada panggilan alamat SIP, karena tidak ada nomor ThunderPhone untuk ditampilkan sebagai ID penelepon pada kaki kedua. Dengan Twilio, TwiML di atas menghubungkan agen tetapi tidak menangani transfer: tambahkan referUrl="https://YOUR_SERVER/sip-transfer" ke <Dial>, dan buat webhook tersebut membaca ReferTransferTarget serta mengembalikan TwiML yang memanggil tujuan transfer (lihat panduan SIP REFER Twilio).
  • Pesan teks: alamat SIP dan nomor yang dipanggil tidak dapat mengirim pesan teks. Agen hanya dapat mengirim pesan teks selama panggilan alamat SIP jika agen memiliki nomor terpisah yang mendukung SMS dan telah disiapkan untuk mengirim pesan teks; jika tidak, alat SMS-nya tidak tersedia.
  • Pendaftaran: ThunderPhone tidak menerima SIP REGISTER. Kirim panggilan ke alamat tersebut; jangan mendaftar ke alamat tersebut.

Harga

Panggilan alamat SIP ditagihkan sesuai tarif per menit normal agen. Tidak ada biaya nomor telepon, karena tidak ada nomor ThunderPhone yang membawa panggilan tersebut. Operator Anda sendiri menagihkan bagian panggilannya seperti biasa. Lihat Harga.

Uji coba

  1. Buat URI per-panggilan atau endpoint seperti di atas.
  2. Hubungi URI tersebut dari sistem Anda, atau dari softphone SIP apa pun (untuk endpoint, masukkan nama pengguna dan kata sandi).
  3. Setelah menutup panggilan, buka panggilan di Panggilan pada dashboard, atau ambil menggunakan GET /v1/calls/{call_id}. Data tersebut menampilkan penelepon, tujuan (lihat urutan di bawah "Teruskan nomor yang dipanggil"), dan transkrip.

Detail API: referensi API alamat SIP.