Expertise · Téléphonie et centre de contact
La couche de téléphonie entre votre opérateur et celui qui répond — un humain ou un agent.
Nous construisons le central : trunks SIP, règles de routage par programme, menus IVR lus depuis la base, files d’attente, transfert à un humain, enregistrement et analyse des appels. L’appel devient un enregistrement avec transcript et résumé, pas un souvenir.
Déjà construitTrei 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.
Entre votre opérateur téléphonique et celui qui répond effectivement — un humain ou un agent vocal — il doit exister une couche qui prend des décisions. Qui reçoit l’appel à 23:40. Que se passe-t-il si personne ne répond. Où va l’appel quand le client demande « un humain ». Ce qu’il reste de la conversation après la fermeture. Cette couche est un central, et nous la construisons pour qu’elle appartienne à l’entreprise, pas au fournisseur de voix : si demain vous changez le moteur de l’agent, les règles de routage, les files d’attente et l’historique restent chez vous.
Concrètement, ce que nous avons construit : douze fichiers de dialplan — production, IVR, file d’attente, transfert, voicemail, renvoi, appels sortants avec agent — quatre scripts AGI en Python et deux ponts audio, soit 5.522 lignes au total. Le moteur IVR n’a pas les menus écrits dans le fichier : il les lit depuis la base via un script AGI et renvoie l’une de six décisions — vers un agent, vers un autre menu, vers une file d’attente, transfert vers un numéro externe, message final, ou fermeture. Les files d’attente portent le nom de leur identifiant et n’ont pas de membres écrits dans la configuration : ils sont ajoutés et retirés de l’extérieur, via l’interface de gestion, ce qui signifie qu’un opérateur peut entrer ou sortir de la file sans redémarrer le central.
Le routage suit des règles réelles, pas un seul « appelez ici » : heures ouvrables et fuseau horaire, plage nocturne du type 22:00 → 06:00, et correspondance par priorité — l’en-tête SIP `Diversion`, qui porte le numéro d’origine depuis lequel l’appel a été redirigé, puis le numéro propre, puis la règle de repli. Les trunks sont générés par numéro, avec un nom construit à partir du fournisseur et du numéro, par une fonction de configuration — pas écrits à la main pour chaque nouvelle ligne.
Ce qui sort de l’appel est tout aussi important que l’appel. Pour la ligne reliée au central virtuel d’un opérateur, nous avons construit un middleware en Python qui interroge la liste des enregistrements toutes les minutes, avec une réconciliation large toutes les six heures afin qu’une panne réseau ne perde rien, et un scan toutes les trois minutes des appels manqués — ceux-ci n’ont pas d’enregistrement et seraient autrement totalement invisibles. Chaque enregistrement est téléchargé, transcrit, analysé et reflété dans l’analyse des appels, et l’appel manqué devient une alerte. L’idempotence repose sur un ensemble Redis, afin que le même enregistrement ne soit pas traité deux fois.