Ekspertyza · Telefonia i contact center
Warstwa telefonii między Twoim operatorem a osobą, która odbiera — człowiekiem albo agentem.
Budujemy centralę: trunky SIP, reguły routingu według harmonogramu, menu IVR odczytywane z bazy, kolejki oczekiwania, przekierowanie do człowieka, nagrywanie i analiza połączeń. Połączenie staje się nagraniem z transkrypcją i podsumowaniem, a nie wspomnieniem.
Już zbudowaneTrei 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.
Między Twoim operatorem telefonii a osobą, która faktycznie odbiera — człowiekiem lub agentem głosowym — musi istnieć warstwa, która podejmuje decyzje. Kto odbiera połączenie o 23:40. Co się dzieje, jeśli nikt nie odbiera. Gdzie trafia połączenie, gdy klient prosi o „człowieka”. Co zostaje z rozmowy po jej zakończeniu. Ta warstwa to centrala, a my budujemy ją tak, aby była własnością biznesu, a nie dostawcy głosu: jeśli jutro zmienisz silnik agenta, reguły routingu, kolejki i historia pozostają u Ciebie.
Konkretnie, co zbudowaliśmy: dwanaście plików dialplanu — produkcja, IVR, kolejka, transfer, voicemail, przekierowanie, połączenia wychodzące z agentem — cztery skrypty AGI w Pythonie i dwa mostki audio, łącznie 5.522 linii. Silnik IVR nie ma menu zapisanych w pliku: czyta je z bazy przez skrypt AGI i zwraca jedną z sześciu decyzji — do agenta, do innego menu, do kolejki, transfer na numer zewnętrzny, komunikat końcowy albo zamknięcie. Kolejki są nazwane według swojego identyfikatora i nie mają członków wpisanych w konfigurację: dodaje się ich i usuwa z zewnątrz, przez interfejs zarządzania, co oznacza, że operator może wejść do kolejki lub z niej wyjść bez restartu centrali.
Trasowanie ma rzeczywiste reguły, a nie jedno „dzwoń tutaj”: godziny pracy i strefa czasowa, tryb nocny typu 22:00 → 06:00 oraz dopasowanie według priorytetu — nagłówek SIP `Diversion`, który niesie oryginalny numer, z którego przekierowano połączenie, potem własny numer, a potem reguła rezerwowa. Trunki są generowane per numer, z nazwą zbudowaną z dostawcy i numeru, przez funkcję konfiguracji — nie wpisywane ręcznie przy każdej nowej linii.
To, co wychodzi z połączenia, jest równie ważne jak samo połączenie. Dla linii powiązanej z wirtualną centralą operatora zbudowaliśmy middleware w Pythonie, który odpyta listę nagrań co minutę, z szeroką rekoncyliacją co sześć godzin, aby awaria sieci niczego nie zgubiła, oraz skan co trzy minuty połączeń nieodebranych — te nie mają nagrania i inaczej byłyby całkowicie niewidoczne. Każde nagranie jest pobierane, transkrybowane, analizowane i odzwierciedlane w analizie połączeń, a połączenie nieodebrane staje się alertem. Idempotencja opiera się na zbiorze Redis, aby to samo nagranie nie zostało przetworzone dwa razy.