Competenza · Telefonia e contact center
Il livello di telefonia tra il vostro operatore e chi risponde — un uomo o un agente.
Costruiamo la centrale: trunk SIP, regole di instradamento per programma, menu IVR letti dal database, code di attesa, trasferimento a un umano, registrazione e analisi delle chiamate. La chiamata diventa una registrazione con trascrizione e riepilogo, non un ricordo.
Già costruitoTrei 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.
Tra il vostro operatore telefonico e chi risponde effettivamente — una persona o un voice agent — deve esserci un livello che prende decisioni. Chi riceve la chiamata alle 23:40. Cosa succede se non risponde nessuno. Dove va la chiamata quando il cliente chiede «un uomo». Cosa resta della conversazione dopo che si è chiusa. Questo livello è una centrale, e noi lo costruiamo perché sia dell’azienda, non del fornitore di voce: se domani cambiate il motore dell’agente, le regole di routing, le code e la cronologia restano vostre.
Concretamente, cosa abbiamo costruito: dodici file di dialplan — produzione, IVR, coda, trasferimento, voicemail, deviazione, chiamate uscenti con agente — quattro script AGI in Python e due bridge audio, in totale 5.522 righe. Il motore IVR non ha i menu scritti nel file: li legge dal database tramite uno script AGI e restituisce una delle sei decisioni — verso un agente, verso un altro menu, verso una coda, trasferimento a un numero esterno, messaggio finale, o chiusura. Le code si chiamano in base al loro identificatore e non hanno membri scritti nella configurazione: vengono aggiunti e rimossi dall’esterno, tramite l’interfaccia di gestione, il che significa che un operatore può entrare o uscire dalla coda senza riavviare la centrale.
Il routing ha regole reali, non un solo «chiama qui»: orari di apertura e fuso orario, orario notturno del tipo 22:00 → 06:00, e corrispondenza per priorità — l’intestazione SIP `Diversion`, che porta il numero originale da cui è stato trasferito il chiamata, poi il proprio numero, poi la regola di riserva. I trunk sono generati per numero, con un nome costruito dal fornitore e dal numero, da una funzione di configurazione — non scritti a mano a ogni nuova riga.
Ciò che esce dalla chiamata è importante quanto la chiamata. Per la linea collegata al centralino virtuale di un operatore abbiamo costruito un middleware in Python che interroga la lista delle registrazioni ogni minuto, con una riconciliazione ampia ogni sei ore affinché un’interruzione di rete non faccia perdere nulla, e una scansione ogni tre minuti delle chiamate perse — quelle non hanno registrazione e altrimenti sarebbero completamente invisibili. Ogni registrazione viene scaricata, trascritta, analizzata e riflessa nell’analisi delle chiamate, e la chiamata persa diventa un alert. L’idempotenza sta in un set Redis, così che la stessa registrazione non venga elaborata due volte.