Cisco veya Avaya gibi tescilli IP santral altyapılarından açık kaynağa geçiş, son 18 ayda maliyetin yanı sıra özelleştirme ihtiyaçları nedeniyle hızlandı. WhatsApp Business, video çağrı, AI temelli IVR gibi modern senaryolar; tescilli platformlarda ya yok ya çok pahalı.
Bileşenleri ayır
Tek bir yazılıma her işi yüklemek (her şeyi Asterisk’te yapmak) ölçeklenmez. Mimariyi 3 katmana ayırıyoruz:
- Edge / SBC — Kamailio. SIP trunk + WebRTC sticky load balancing.
- PBX / dialplan — Asterisk. Agent yönlendirme, IVR, queue yönetimi.
- Media gateway — FreeSWITCH. Konferans, müzik, transcoding, kayıt.
Bu ayrımın faydası: her bileşen bağımsız ölçeklenir; bir hata diğerini sürüklemez.
Kamailio dispatcher
Kamailio, gelen SIP/WebRTC trafiğini Asterisk havuzuna yönlendirir; aktif-pasif failover sağlar:
loadmodule "dispatcher.so"
modparam("dispatcher", "list_file", "/etc/kamailio/dispatcher.list")
modparam("dispatcher", "flags", 2) # ping ile dead detection
modparam("dispatcher", "ds_ping_method", "OPTIONS")
modparam("dispatcher", "ds_ping_interval", 8)
route[DISPATCH] {
if (!ds_select_dst("1", "4")) { # 1: setid, 4: round-robin with ping
sl_send_reply("503","All Asterisk nodes down");
exit;
}
t_on_failure("DISPATCH_FAILOVER");
route(RELAY);
}
dispatcher.list:
1 sip:asterisk-01.internal:5060 0
1 sip:asterisk-02.internal:5060 0
8 saniyede bir OPTIONS pinglenir; cevap gelmeyen node havuzdan çıkarılır.
Asterisk dialplan
Asterisk 20’de chan_pjsip standartlaştı. Queue örneği:
[from-internal]
exten => 100,1,Answer()
same => n,Queue(support_queue,t,,,300)
same => n,Voicemail(default@support)
same => n,Hangup()
Queue agent’ları AOR olarak chan_pjsip üzerinden bağlanır:
[agent-tpl](!)
type=endpoint
context=from-internal
disallow=all
allow=opus,g722,ulaw
webrtc=yes
dtls_auto_generate_cert=yes
media_use_received_transport=yes
ice_support=yes
[agent-101](agent-tpl)
auth=auth-101
aors=agent-101
WebRTC için webrtc=yes + dtls_auto_generate_cert=yes ile self-signed sertifika; üretimde proper CA ile değiştirilir.
FreeSWITCH konferans
Konferans/IVR için FreeSWITCH’in mod_conference modülü; Asterisk’in MeetMe‘sine göre çok daha az kaynak kullanır:
<conference name="kampanya-1234" rate="48000" channels="2"/>
Asterisk’ten FreeSWITCH’e SIP Dial(SIP/freeswitch/...) ile yönlendirme.
WebRTC client
sip.js veya JsSIP ile tarayıcıdan Kamailio’ya WSS bağlantısı:
const ua = new SIP.UA({
uri: "sip:agent-101@mono.local",
transportOptions: { wsServers: ["wss://sip.mono.local:8089/ws"] },
authorizationUser: "agent-101",
password: process.env.SIP_PASS,
sessionDescriptionHandlerFactoryOptions: {
constraints: { audio: true, video: false }
}
});
ua.start();
Kayıt + kalite
- Kayıt Asterisk
MixMonitorveya FreeSWITCHrecordile; S3 uyumlu Garage’a otomatik upload. - Kalite OpenSIPs RTPproxy istatistikleri + Grafana MOS dashboard.
- CDR PostgreSQL Patroni cluster’da; KVKK retention.
Mono’nun pratiği
Üretim kurulumlarımızda:
- 1200 agent eşzamanlı bağlantıyı 2 Asterisk + 2 FreeSWITCH + 2 Kamailio node ile karşılıyoruz.
- Medyan WebRTC latency 80-100 ms (Türkiye içi).
- Recording ortalama 4 dk gecikmeyle Garage S3’te.
- MOS skoru ortalama 4.2 (üretim trafiği).
Yaygın hatalar
- Asterisk’i her şey için kullanma çabası. Konferansı FreeSWITCH’e ver.
- NAT traversal eksikliği. WebRTC için
ice_support=yesve TURN sunucu (coturn) şart. - Tek node deployment. Aktif-pasif minimum; aktif-aktif daha iyi.
- Codec savaşı. Opus tercih; ulaw fallback. G.729 lisans gerektirir.
Sıradaki adımlar
Çağrı merkezi modernizasyonu düşünüyorsanız, Çağrı Merkezi Çözümleri sayfamıza bakabilir; ya da Mono Asterisk vaka çalışması örneğini inceleyebilirsiniz.