Operatorunuz ile kimin yanıt verdiği — insan ya da agent — arasındaki telefon katmanı.
Santrali kuruyoruz: SIP trunklar, programa göre yönlendirme kuralları, veritabanından okunan IVR menüleri, bekleme kuyrukları, insana aktarım, çağrı kaydı ve analizi. Çağrı, transcript ve özet içeren bir kayıt haline gelir, bir anı değil.
Zaten kurduklarımızTrei implementări proprii, citate mai jos. (1) Stratul Asterisk din platforma Kallina: 5.522 de linii de configurație de dialplan, scripturi AGI și punți audio în `asterisk/`, plus șabloane de trunk generate automat per număr. (2) `asterisk-manager` — un serviciu separat care administrează cozile, trunkurile și fluxul RTP prin interfața de management a centralei. (3) Middleware-ul pentru centrala virtuală a unui operator, care a rulat în producție: commitul de reconciliere din 14 iulie 2026 aduce în depozit cod care rulase pe server și era cu circa 40 de zile înaintea git-ului. Rezerva, spusă înainte să întrebi: gazda SIP prin care trec liniile noastre de test nu răspunde — verificat azi, 06.09.2026, fără răspuns la ping și fără răspuns pe HTTP. Nu prezentăm un număr de demonstrație pe care să suni acum, pentru că nu l-am putea ridica în fața ta.
Telefon operatörünüz ile fiilen yanıt veren kişi — bir insan ya da bir voice agent — arasında karar veren bir katman olmalıdır. Aramayı 23:40’ta kim alır. Kimse cevap vermezse ne olur. Müşteri “bir insan” istediğinde arama nereye gider. Görüşme kapandıktan sonra geriye ne kalır. Bu katman bir santraldir ve biz onu sağlayıcının değil, işletmenin olacak şekilde kurarız: yarın agent motorunu değiştirirseniz, yönlendirme kuralları, kuyruklar ve geçmiş sizde kalır.
Somut olarak ne kurduk: on iki dialplan dosyası — üretim, IVR, kuyruk, aktarma, voicemail, yönlendirme, ajanlı giden aramalar — dört Python AGI betiği ve iki ses köprüsü, toplam 5.522 satır. IVR motorunun menüleri dosyada yazılı değildir: onları bir AGI betiği aracılığıyla veritabanından okur ve altı karardan birini döndürür — bir agente, başka bir menüye, bir kuyruğa, dış bir numaraya aktarım, son mesaj veya kapatma. Kuyruklar kendi kimlikleriyle adlandırılır ve yapılandırmada üyeleri yazılı değildir: yönetim arayüzü üzerinden dışarıdan eklenip çıkarılırlar; bu da bir operatörün santrali yeniden başlatmadan kuyruğa girip çıkabileceği anlamına gelir.
Rotalama gerçek kurallara sahiptir, tek bir “burayı ara” yoktur: çalışma saatleri ve saat dilimi, 22:00 → 06:00 gibi gece vardiyası ve öncelik eşleştirmesi — aramanın yönlendirildiği orijinal numarayı taşıyan SIP `Diversion` başlığı, ardından kendi numarası, ardından yedek kural. Trunk’lar her numara için üretilir; adları sağlayıcı ve numaradan, bir yapılandırma işleviyle oluşturulur — her yeni satır için elle yazılmaz.
Aramadan çıkan da aramanın kendisi kadar önemlidir. Bir operatörün sanal santraline bağlı hat için, her dakika kayıt listesini sorgulayan, ağ kesintisinin hiçbir şeyi kaybettirmemesi için her altı saatte geniş kapsamlı bir uzlaştırma yapan ve kayıp aramaları her üç dakikada bir tarayan Python tabanlı bir middleware kurduk — bunların kayıtları yoktur ve aksi halde tamamen görünmez olurlardı. Her kayıt indirilir, yazıya dökülür, analiz edilir ve çağrı analizine yansıtılır; kayıp arama ise bir uyarıya dönüşür. İdempotans, aynı kaydın iki kez işlenmemesi için Redis içinde bir sette tutulur.
Neleri kapsıyor
Çalışma, bileşenlerine ayrılmış hâliyle
Numara, elle yazılmış değil, üretilmiş bir trunk’a girer
Trunk şablonları parametrelenmiştir ve bir yapılandırma işlevi tarafından doldurulur; ad, sağlayıcı ve numaradan oluşur. Şablonda taşıma, izin verilen kodekler, NAT işleme, DTMF modu ve kimlik doğrulama yazılıdır. Pratik sonuç: onuncu numara birincisiyle aynı şekilde bağlanır ve operatörler arasındaki farklar tek bir yerde durur.
Santral, aramanın nereye gideceğine yazılı kurallara göre karar verir
Çalışma saatleri ve saat dilimi, 22:00 → 06:00 gibi gece vardiyası, öncelik eşleştirmesi: SIP `Diversion` başlığı (yönlendirilen numara), ardından kendi numarası, ardından yedek kural. Kural araması, çağrı sırasında platformu sorgulayan bir AGI scripti ile yapılır; kendi zaman aşımı vardır — dolayısıyla arayüzde değiştirilen bir kural, yeniden başlatma olmadan bir sonraki aramaya uygulanır.
Arama, ajana, sıraya veya insana ulaşır
Sesli ajana giderken ses, kodeği iki yönde dönüştüren bir köprüden geçer: `g711_ulaw` ↔ `PCM16`. İnsanlara giderken arama, dışarıdan yönetilen bir kuyruğa girer. Transfer ise konuşan kişinin elindedir: `##` ile kör transfer ve `*2` ile destekli transfer; arama bunun için yazılmış, dört haneli dahili uzantıları dış numaralardan ayıran bir bağlama iner.
IVR menüsü dosyadan değil, veritabanından okunur
IVR motoru menü kimliğini alır ve onu AGI scripti aracılığıyla veritabanından okur. Sonuç altı karardan biridir: bir ajana, başka bir menüye (özyinelemeli), bir kuyruğa, dış transfer, son mesaj, kapatma. Mesajlar ya sentezlenebilir ya da önceden kaydedilmiş ses dosyaları olabilir. Bir menüyü değiştirmek, sunucudaki bir yapılandırma dosyasını düzenlemek değil, veritabanında bir satırı değiştirmek demektir.
Dinamik üyeli kuyruklar
Her kuyruğun adı, kendi kimliğinden türetilir. Üyeler yapılandırmada kalıcı değildir: santralin yönetim arayüzü üzerinden çalışma sırasında eklenir ve çıkarılır, aynı anda birden fazla boşta konumda bulunma etkinleştirilmiştir. Pratikte, bir operatör kuyruktan girer veya çıkar; santral yeniden başlatılmaz ve bekleyen aramalar etkilenmez.
Sahadaki insanlara sevk
Bir ajan dışarıdan birini kendi arayabilir ve yanıtla geri dönebilir. Mekanizma, kendi tablosu ve açık durumlarla uygulanmıştır — aranıyor, sürüyor, yeniden deneniyor, tamamlandı, başarısız, yanıt yok, süresi doldu — en fazla üç deneme ve aralarında iki dakikalık bir bekleme ile; sonuç (tahmini varış zamanı dahil) yapısal olarak bunu isteyen konuşmaya geri döner. Bu bir kavram değildir: beş özel sunucu işlevi ve ayrıca takılı kalan aramaların süpürülmesi vardır.
Aramalar veriye dönüşür, kimsenin cevap vermediği aramalar da dahil
Zamanlanmış bir süreç kayıt listesini her dakika okur, bir kesintinin hiçbir şeyi kaybetmemesi için her altı saatte geniş kapsamlı uzlaştırma yapar. Kayıt WAV olarak indirilir, yazıya dökülür, analiz edilir ve ses ile birlikte arama analizine yansıtılır. Ayrı olarak, her üç dakikada bir yanıtlanmamış aramalar okunur — bunların kaydı yoktur ve aksi halde hiçbir yerde bulunmazlardı — ve bir alarma dönüşür. Kaçırılan arama, kaçırılan müşteridir; onu görünür kılmak, bir çağrı merkezindeki en ucuz iyileştirmedir.
Operatör API’sine karşı frenler
Operatörün santraliyle konuşan istemcinin, kendi token kovasıyla çalışan oran sınırlayıcısı ve açık hata işleme mekanizması vardır. Bu, teorik bir önlem değildir: her dakika sorgulayan ve altı saatte bir uzlaştıran bir middleware, fren olmadan operatör limitine çarpabilir ve tam da ona ihtiyaç duyduğunuz anda engellenebilir.
Nasıl görünüyor
Süreç, adım adım.
01
Herhangi bir yapılandırmadan önce hatların envanteri
Hangi numaralar var, hangi operatörde, bugün her birini kim yanıtlıyor, hangi programda ve şimdi kimse yanıtlamadığında ne oluyor. Bürokrasi gibi görünüyor; sürprizleri önleyen kısım bu. Deneyimimize göre, bir numara havuzunda veri tabanı bir şeyi, santral başka bir şeyi söylediği hatlar neredeyse her zaman vardır — ve bunlar yayında değil, şimdi ortaya çıkar.
02
Trunk, ardından iki yönde ayrı ayrı test
Numara trunk’a girer ve gelen ile giden aramalar, ayrı bozuldukları için ayrı iki şey olarak test edilir. Belgelendirdiğimiz bir vakada, gelen aramalar günlerce kusursuz çalışırken, giden tüm aramalar operatörün santrali tarafından `403 Forbidden` ile reddediliyordu; bizde hiçbir değişiklik yoktu. Tek bir “çaldı ve çalıştı” testi bunu kapsamaz.
Program ve öncelik kuralları, menüler, kuyruklar ve aktarım yolları dialplan ve veritabanındaki satırlar olarak yazılır, sözlü anlayış olarak değil. Sonunda, 23:40’ta, cumartesi günü, ajan talebi anlamadığında bir aramaya tam olarak ne olduğunu bilirsiniz.
04
Aramalar sistemlerinize girer
Aramanın sonucu — transcript, özet, duygu, kayıt adresi, süre — imzalı bir webhook ile дальше iletilir ve организация телефон numarasına göre tanımlanır. Orada bir CRM varsa, arama fişe bağlanır ve durumu otomatik olarak değiştirebilir; bu bölüm hakkında CRM sayfasında ve satış otomasyonu kısmında yazıyoruz.
05
Süreklilik, ilk arızadan sonra değil, başta konuşulur
Tek sunuculu bir santral tek bir hata noktasıdır ve biz bunu aynen yaşadık: sunucu yanıt vermediğinde, üzerinden geçen tüm hatlar onunla birlikte düşer; ajan ne kadar iyi yapılandırılmış olursa olsun fark etmez. Arıza imzası nettir — arama, boş SIP arama kimliğiyle “request timed out” döner, yani SIP araması hiç kurulmamıştır. Bu yüzden gerçek bir projede “sunucu çökerse ne olur” sorusu başta sorulur ve bütçelenir: ikinci sunucu, bir insanı arayan izleme ve olağan numaralara yedek bir yol.
Straturile unei linii telefonice: trunkul operatorului, centrala cu regulile de rutare, puntea audio către agent, coada și transferul către om, apoi înregistrarea, transcrierea și analiza.
Veriler
Neye dokunuyoruz, nerede duruyorlar ve ne kadar kalıyorlar
Veri koruma sorumlusu olan herkesin soracağı sorular — o sormadan önce burada sorulmuş hâliyle.
Arama kayıtları nereye gider
Santralin arama kaydı bugün yerel olarak, CSV formatında, santral sunucusunda yazılır; bunun PostgreSQL veritabanına yazılması yapılandırmada hazırlanmıştır, ancak devre dışı kalmaya devam eder. Bunu söylüyoruz çünkü doğrudan bir sonucu vardır: santral dışında aramalar üzerinde raporlar istiyorsanız, kayıtları veritabanında etkinleştirmek yapılacak bir iştir, işaretlenecek bir kutu değil. Transcriptler ve analizler ayrı olarak platformda, çalışma alanınıza bağlı şekilde durur.
Bir aramadan ne saklanır
Arayan numarası ve aranılan numara, zaman, süre, sonuç, ses kaydı, transcript ve analiz. Yanıtlanmamış aramalar için numara, zaman ve yanıt verilmemesinin nedeni vardır — ses yoktur, çünkü oluşmamıştır. Kayıt WAV olarak 8 kHz, mono indirilir ve insanlara teslim için sıkıştırılmış bir formata dönüştürülür.
İdempotans, veriler çoğalmasın diye
İşlenen her kayıt bir Redis kümesinde işaretlenir. Geniş kapsamlı uzlaştırma, hiçbir şeyi yeniden göndermeden aynı zaman penceresini tekrar okuyabilir. Bu, huzurla yeniden başlatılabilen bir sistem ile her yeniden başlatmada dünkü tüm uyarıları yeniden gönderen bir sistem arasındaki farkı yaratan ayrıntıdır.
Bir kaydı kim dinleyebilir
Arama verileri iş alanının çalışma alanına bağlıdır ve erişim kimlik doğrulama üzerinden geçer. Müşteriler üzerinde ortak bir depo yoktur ve bir kimlik olmadan “platformdan” erişim yoktur. Ekibinizden kimin dinleme yetkisine sahip olduğu, varsayılan olarak değil, uygulama sırasında belirlenir.
Saklama süresi ve kayıt bildirimi sizin kararınızdır
Sesin, transkriptin ve arama kayıtlarının ne kadar süre saklanacağı ve görüşmenin başında kaydedildiği hakkında ne söyleneceği, veri sorumlusunun — yani sizin — kararlarıdır. Talep üzerine silme platformda uygulanmıştır; süresi dolunca otomatik silme bugün bir prosedürle yapılır, bir saatle değil, bu yüzden otomatik gerekiyorsa projeye iş olarak girer.
Bir vaka
Uzun aramalar kayboluyordu. Kısa olanlar, hayır.
Durum
Bir görüşme analizi akışında, aramaların bir kısmı analize giriyor, bir kısmı girmiyordu. Nedeni ortaya çıkaran kalıp buydu: tam olarak uzun aramalar eksikti. Bazen çalışmıyor diye raporlanan ve yanlışlıkla transkripsiyonda aranan bir hata.
Ne kurduk
İki transkripsiyon yolu vardı ve ikisi de farklı nedenlerle çöküyordu. Çok modlu yol, tüm ses dosyasını isteğin gövdesine kodlanmış olarak gönderiyordu; belirli bir boyuttan sonra, ara sunucunun gövde sınırı 413 ile yanıt verdi. Yedek yol, erişim anahtarının artık izin vermediği bir transkripsiyon modeli istiyordu, bu yüzden 403 ile yanıt veriyordu. İkisi de başarısız oluyor, süreç tüm transkripsiyon modellerinin başarısız olduğunu raporluyor ve arama terk ediliyordu. Kısa aramalar gövde sınırının altında kalıyordu, dolayısıyla geçiyordu — kalıp buradan geliyordu. Düzeltme şuydu: 12 MB üzerindeki WAV dosyaları için çok modlu yol atlandı (ortamdan yapılandırılabilir eşik), zaten hesaplanmış transkript ikinci kez transkribe etmek yerine yeniden kullanıldı ve son çare transkripsiyonu izin verilen bir modele taşındı.
Ne çıktı
Sıkışıp kalan kayıt üzerinde doğrulandı: 21 dakikalık bir konuşma, 41 MB WAV dosyası — çok modlu yol atlandı, transkript alındı, analiz oluşturuldu, satır ve ses arama analizine ulaştı, sıfır hata. Mutabakat daha sonra başka sıkışmış kayıt kalmadığını doğruladı.
Vakanın söylemedikleri
12 MB eşiği aramanın değil, ara sunucunun bir özelliğidir. Gateway, anahtar ya da model değiştiğinde eşik yeniden doğrulanmalıdır — bu yüzden onu kodda sabit yazmak yerine ortamdan yapılandırılabilir yaptık.
Sorular
İnsanların aramadan önce bize sordukları
Şimdi arayabileceğim bir numaranız var mı, ajanı duyayım diye?
Bugün yok ve boş çalan bir numara vermektense bunu söylemeyi tercih ederiz. Ajan kısmı sayfada hemen dinlenebilir. Telefon kısmı bir SIP hostuna bağlıdır ve test hatlarımızın geçtiği host yazım tarihinde yanıt vermiyor — bugün kontrol edildi, ping’e yanıt yok ve HTTP’de yanıt yok. Sizin bir projeniz için telefon, testteki üzerinde değil, projeye ayrılmış bir host üzerinde kurulur.
Neden kendi santralimiz ve doğrudan ses ajanı sağlayıcısı değil?
Çünkü yönlendirme kuralları, kuyruklar, aktarım, voicemail ve arama geçmişi ses sağlayıcısının değil, işin kurallarıdır. Kendi santralinizle, telefonunuzun nasıl davrandığını yeniden yazmadan ajan motorunu değiştirebilirsiniz; aynı aramayı bir kez ajana, bir kez insana yönlendirebilir ve arama kayıtlarını sizde tutabilirsiniz. O olmadan, sağlayıcının açmayı seçtiğine bağlı kalırsınız.
Santral sunucusu çökerse ne olur?
Onun üzerinden geçen tüm hatlar düşer. Bu bir varsayım değil: bizim yaşadığımız şey bu ve imza kolayca tanınır — arama, SIP arama kimliği boş olarak “request timed out” döndürür; yani suçlu ajan, numara ya da prompt değildir. Çıkardığımız ve şimdi her projeye koyduğumuz sonuç şudur: süreklilik santralın bir fonksiyonu değil, en başta alınan bir mimari ve bütçe kararıdır. İkinci bir host ve sıradan numaralara yedek rota ile çözülür, bir ayarla değil.
Giden aramalar güvenilir çalışıyorsa, gelenler de çalışıyor mu?
Hayır. Bunlar iki farklı şeydir ve operatör onları farklı şekilde ele alabilir. Konfigürasyonumuz değişmeden ve gelen aramalar çalışırken, operatörün santralinin tüm giden aramaları `403 Forbidden` ile reddetmeye başladığı belgelenmiş bir vaka var — sorunun operatörde olduğunun kanıtı, yapısal olarak aynı konfigürasyona sahip ikinci bir hesabın dışarı aramaya devam etmesiydi. Bu yüzden, sizin numaranız üzerinde başarılı bir çıkış testi olmadan giden arama kampanyası vaat etmiyoruz.
Operatörün bana verdiği sanal santral ile çalışabilir misiniz?
Evet, çalıştık: bir operatörün sanal santralinin API’si üzerine Python ile bir middleware yazdık, kendi istemcisi, oran sınırlayıcısı, kayıt indirme, transkripsiyon, analiz ve uyarılama ile, üretimde çalıştırıldı. Önceden bilinmesi gereken şu: genişletilmiş API erişimi çoğu zaman ayrı bir hizmettir, ayrıca sözleşmelendirilir ve kimlik bilgileri ilk denemede çalışmayabilir — bizde, spesifikasyon netleştirme ve operatörle parola sıfırlama döngüsü aylar sürdü, hizmet ise zaten faturalandırılmış durumdaydı. Bu yüzden, bir operatörün API’sine bağlı bir teklifte açık koşul koyuyoruz: iş, kimlik doğrulama vaat edildikten sonra değil, gösterildikten sonra başlar.
Aramalar kaydediliyor mu ve bunları kim dinleyebilir?
Kaydedilebilir, yazıya dökülebilir ve analiz edilebilir. Bunlar işinizin çalışma alanına bağlı kalır ve erişim kimlik doğrulaması gerektirir — müşteriler üzerinde ortak bir depo yoktur. Ekibinizden kimin dinleme hakkına sahip olduğu uygulama sırasında belirlenir. Muhatap kişiye bildirim ve kaydın hukuki dayanağı, veri sorumlusu olarak sizin kararınızdır; bunları senaryoda yazarız, varsaymayız.
Kimsenin cevap vermediği aramalara ne olur?
Çoğu şirkette en kötü yönetilen durum budur, çünkü iz bırakmaz: kayıt yoktur, transkript yoktur, yalnızca çağrı dökümünde görünür. Bizde bir süreç, dökümü her üç dakikada bir okur, cevapsız aramaları belirler ve bunları uyarıya ve görünür satıra dönüştürür. Bunun neye bağlı olduğu açık olsun diye: bunları yalnızca operatörün çağrı dökümünde ortaya koyduğu ölçüde görürüz.
“1’e basın...” tarzı menüler yapabilir misiniz?
Evet, ve menüler dosyalarda değil, veritabanında durur. Motor, arama sırasında menü yapılandırmasını okur ve altı yoldan birine karar verir: bir agente, başka bir menüye, bir kuyruğa, harici bir numaraya aktarım, son bir mesaj veya kapatma. Mesajlar sentezlenebilir ya da önceden kaydedilebilir. Pratikte, menü değişikliği santralde müdahale gerektirmez.
Santral ile analiz arasında bir aramanın yolda kaybolduğunu nasıl anlarım?
Mutabakat yoluyla, ve bu, açıkça kurduğumuz bir parçadır. Hızlı sorgunun birkaç on saatlik bir penceresi vardır, bunun üzerinde her altı saatte bir bir haftalık pencere üzerinde mutabakat çalışır ve daha fazla sonuç sayfasını yeniden okur. İşlenen her kayıt işaretlenir, dolayısıyla yeniden okuma hiçbir şeyi çoğaltmaz. Mutabakat olmadan, bir saatlik kesinti verilerde kalıcı bir boşluk demektir — ve bunu kimse fark etmez.
Yukarıdaki iddialar neye dayanıyor (22 kaynak)
Bunlardan 22 tanesi depolarımızdaki kod ve dosyalardır. Adlarını ya da satırlarını yayımlamıyoruz: hepsi bir arada, tek bir sayfada, yalnızca bize ait olmayan sistemlerin nasıl kurulduğunu fazla net anlatırdı. İstek üzerine, depoda sizinle birlikte gözden geçiriyoruz — doğrulama hâlâ mümkün, sadece bir görüşme içinde yapılıyor.