Dokumentasi ini ditujukan bagi developer untuk menghubungkan aplikasi Integrasi Flutter WebRTC mobile (Flutter – Android/iOS) ke infrastruktur SolusiPBX WebRTC SBC Gateway. Gateway ini berfungsi sebagai jembatan signaling dan media anchor antara protokol WebRTC (sisi aplikasi mobile) dan Core PBX (sisi backend SIP).
1. Arsitektur & Alur Koneksi #
WebRTC SBC Gateway bertindak sebagai penerjemah signaling dan pengaman jalur media (media anchor). Alur komunikasi dirancang sebagai berikut:

- Signaling (Persinyalan): Aplikasi Flutter menggunakan koneksi WebSocket Secure (
wss://) untuk bertukar data JSON (Registrasi SIP, Handshake, dan Negosiasi SDP Offer/Answer). - Media Stream (Audio/Video): Aliran suara dienkripsi menggunakan SRTP/DTLS antara aplikasi Flutter dan WebRTC SBC Gateway, kemudian diteruskan sebagai RTP standar ke Core PBX.
2. Persyaratan & Dependencies (Flutter) #
Tambahkan library utama berikut pada file pubspec.yaml proyek Flutter Anda untuk menangani Integrasi Flutter WebRTC dan koneksi WebSocket.
dependencies:
flutter:
sdk: flutter
# Library utama untuk pemrosesan WebRTC (Audio/Video)
flutter_webrtc: ^0.12.0
# Client WebSocket untuk komunikasi signaling ke Gateway
web_socket_channel: ^2.4.5
Konfigurasi Izin Platform (Permissions) #
-
Android: Pastikan
minSdkVersionpadabuild.gradleminimal bernilai 21. Tambahkan izin berikut padaAndroidManifest.xml:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
iOS: Tambahkan deskripsi izin akses mikrofon dan kamera pada ios/Runner/Info.plist:
<key>NSMicrophoneUsageDescription</key>
<string>Aplikasi membutuhkan akses mikrofon untuk melakukan panggilan telepon.</string>
<key>NSCameraUsageDescription</key>
<string>Aplikasi membutuhkan akses kamera untuk melakukan video call.</string>
3. Parameter Endpoint Gateway #
Detail endpoint yang digunakan untuk menginisialisasi koneksi ke SolusiPBX Gateway:
-
SBC WebSocket URL:
wss://sbc.solusipbx.com:8989(Sesuaikan dengan domain/port gateway yang diberikan) -
WebSocket Protocol:
janus-protocol(Sub-protokol wajib untuk handshake) -
Service Module Identifier:
janus.plugin.sip(Modul internal penyedia layanan SIP)
4. Langkah Integrasi & Payload JSON #
Komunikasi antara Flutter dan SBC Gateway berbasis JSON-RPC melalui WebSocket.
⚠️ PENTING UNTUK DEVELOPER: Protokol signaling WebRTC SBC Gateway SolusiPBX menggunakan standarisasi JSON-RPC spesifik. Oleh karena itu, kata kunci (key)
"janus"pada root JSON bersifat mandatory (wajib) secara sintaksis sistem dan tidak boleh diubah/diganti menjadi nama lain agar request dapat dikenali oleh Gateway Engine.
Langkah 1: Membuka Koneksi WebSocket & Session #
Aplikasi Flutter harus membuka koneksi socket stabil dan membuat Gateway Sesi.
import 'package:web_socket_channel/io.dart';
final channel = IOWebSocketChannel.connect(
Uri.parse('wss://sbc.solusipbx.com:8989'),
protocols: ['janus-protocol'],
);
Kirimkan payload ini untuk membuat sesi baru:
{
"janus": "create",
"transaction": "tx_create_session_01"
}
SBC Gateway akan mengembalikan respons berisi session_id yang wajib disimpan untuk langkah berikutnya.
Langkah 2: Mengaktifkan SIP Service Module #
Gunakan session_id yang didapat untuk melakukan attach ke modul layanan SIP.
{
"janus": "attach",
"session_id": 123456789,
"plugin": "janus.plugin.sip",
"transaction": "tx_attach_sip_01"
}
Gateway akan mengembalikan respons berisi handle_id. ID ini merepresentasikan jalur komunikasi spesifik untuk ekstensi telepon Anda.
Langkah 3: Registrasi Ekstensi SIP (Register Extension) #
Kirimkan perintah register agar WebRTC SBC Gateway mendaftarkan akun ke Core PBX SolusiPBX.
{
"janus": "message",
"session_id": 123456789,
"handle_id": 987654321,
"transaction": "tx_sip_register_01",
"body": {
"request": "register",
"username": "sip:[email protected]",
"secret": "S3cretP4ssword",
"proxy": "sip:core-pbx.solusipbx.internal",
"refresh": true
}
}
Langkah 4: Melakukan Panggilan Keluar (Outbound Call) #
Untuk membuat panggilan, aplikasi Flutter membuat objek PeerConnection lokal via flutter_webrtc, menghasilkan SDP Offer, lalu mengirimkannya ke Gateway dalam objek jsep.
{
"janus": "message",
"session_id": 123456789,
"handle_id": 987654321,
"transaction": "tx_outbound_call_01",
"body": {
"request": "call",
"uri": "sip:[email protected]"
},
"jsep": {
"type": "offer",
"sdp": "v=0\r\no=- 123456..." // SDP String hasil generate dari flutter_webrtc
}
}
5. Manajemen Koneksi & Best Practices #
Session Keep-Alive (Heartbeat) #
WebRTC SBC Gateway memerlukan mekanisme heartbeat agar sesi tidak hangus (timeout). Developer wajib mengirimkan ping berkala setiap 25–30 detik menggunakan format:
{
"janus": "keepalive",
"session_id": 123456789,
"transaction": "tx_keepalive_rand"
}
Konfigurasi STUN/TURN (ICE Servers) #
Saat menginisialisasi RTCConfiguration di flutter_webrtc, developer wajib menyertakan STUN/TURN server SolusiPBX. Hal ini penting untuk memastikan media (suara/video) dapat menembus jaringan seluler atau Wi-Fi yang terproteksi NAT/Firewall ketat, mencegah kendala one-way audio (suara searah) atau no-audio.
