Bilgi Bankası'na Dön

Asterisk PJSIP ile WebRTC Yapılandırması: Tarayıcıdan Doğrudan SIP Görüşmesi

Modern kurumsal çağrı merkezleri ve CRM yazılımları, kullanıcıların bilgisayarlarına ek masaüstü softphone (MicroSIP, Zoiper, Linphone vb.) kurmasını istememektedir. WebRTC teknolojisi sayesinde, Google Chrome veya Safari üzerinden tek bir satır ek program yüklemeden doğrudan web tarayıcısı içinden kristal netliğinde şifreli sesli görüşmeler yapılabilmektedir. Bu rehberde Asterisk 20 ve 22 sürümlerinde PJSIP ile uçtan uca WebRTC entegrasyon adımlarını inceliyoruz.

🔒 WebRTC'nin 3 Katı Zorunluluğu: 1) Sinyalleşme güvenli websocket (WSS) üzerinden olmalıdır (HTTPS zorunlu). 2) Ses/Medya akışı DTLS-SRTP ile şifrelenmelidir. 3) NAT ve güvenlik duvarı aşımı için ICE (Interactive Connectivity Establishment) ve STUN/TURN desteği aktif edilmelidir.

1. Asterisk HTTP ve WebSocket Yapılandırması (http.conf)

Asterisk'in dahili mini HTTP sunucusunu TLS desteğiyle aktif hale getirin:

; /etc/asterisk/http.conf
[general]
enabled = yes
bindaddr = 0.0.0.0
bindport = 8088

; HTTPS / WSS Ayarlari (8089)
tlsenable = yes
tlsbindaddr = 0.0.0.0:8089
tlscertfile = /etc/letsencrypt/live/pbx.example.com/fullchain.pem
tlsprivatekey = /etc/letsencrypt/live/pbx.example.com/privkey.pem

2. PJSIP Transport Tanımı (pjsip.conf)

Tarayıcılardan gelen WSS bağlantılarını kabul etmek için transport-wss nesnesini tanımlayın:

; /etc/asterisk/pjsip.conf
[transport-wss]
type = transport
protocol = wss
bind = 0.0.0.0:8089

3. WebRTC Dahili Tanımı (Endpoint, AOR, Auth)

WebRTC istemcileri (örneğin dahili 2001) standart bir IP telefondan farklı olarak DTLS, AVPF ve RTCP-MUX parametrelerine ihtiyaç duyar:

; --- Dahili 2001 (WebRTC Tarayici Softphone) ---
[2001]
type = endpoint
context = from-internal
transport = transport-wss
disallow = all
allow = opus,alaw,ulaw
aors = 2001
auth = 2001

; WebRTC Kritik Parametreleri
webrtc = yes
use_avpf = yes
media_encryption = dtls
dtls_verify = fingerprint
dtls_cert_file = /etc/letsencrypt/live/pbx.example.com/fullchain.pem
dtls_private_key = /etc/letsencrypt/live/pbx.example.com/privkey.pem
dtls_setup = actpass
ice_support = yes
media_use_received_transport = yes
rtcp_mux = yes

[2001]
type = auth
auth_type = userpass
username = 2001
password = Guclu_WebRTC_Sifresi_99@

[2001]
type = aor
max_contacts = 3
remove_existing = yes

4. NAT ve STUN Yapılandırması (rtp.conf)

Tarayıcıların medya paketlerini doğru IP adresine yönlendirebilmesi için Asterisk'in bir STUN sunucusu kullanması önerilir:

; /etc/asterisk/rtp.conf
[general]
rtpstart = 10000
rtpend = 20000
stunaddr = stun.l.google.com:19302
ice_support = yes

5. Tarayıcı Tarafı Entegrasyonu (SIP.js Örneği)

Modern web sayfalarında JavaScript ile Asterisk'e bağlanıp çağrı başlatmak için popüler ve kararlı SIP.js kütüphanesi kullanılabilir:

// SIP.js 0.20+ WebRTC istemci baslatma
import { SimpleUser } from "sip.js";

const server = "wss://pbx.example.com:8089/ws";
const aor = "sip:[email protected]";

const options = {
    aor: aor,
    media: {
        constraints: { audio: true, video: false },
        remote: { audio: document.getElementById("remoteAudio") }
    },
    userAgentOptions: {
        authorizationUsername: "2001",
        authorizationPassword: "Guclu_WebRTC_Sifresi_99@",
        transportOptions: { server: server }
    }
};

const user = new SimpleUser(server, options);

// Baglanti kur ve kayit ol (REGISTER)
await user.connect();
await user.register();
console.log("[✓] WebRTC dahili santrale baglandi!");

// Dis hat veya dahili arama baslat
async function makeCall(targetExtension) {
    await user.call(`sip:${targetExtension}@pbx.example.com`);
}

6. Sonuç

Asterisk PJSIP ve WebRTC kombinasyonu, sıfır kurulum gerektiren kurumsal seviyede modern birleşik iletişim platformu kurmanızı sağlar. Opus codec desteği ile dinamik bant genişliği optimizasyonu sağlanır ve kristal netliğinde ses kalitesi elde edilir.