Especialização · Telefonia e contact center
A camada de telefonia entre o seu operador e quem responde — humano ou agente.
Construímos a central: trunks SIP, regras de encaminhamento por horário, menus IVR lidos da base de dados, filas de espera, transferência para um humano, gravação e análise das chamadas. A chamada torna-se um registo com transcript e resumo, não uma memória.
Já construídoTrei 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 o seu operador de telefonia e quem responde efetivamente — uma pessoa ou um agente vocal — tem de existir uma camada que toma decisões. Quem recebe a chamada às 23:40. O que acontece se ninguém responder. Para onde vai a chamada quando o cliente pede «uma pessoa». O que fica da conversa depois de ela terminar. Esta camada é uma central, e nós construímo-la para ser da empresa, não do fornecedor de voz: se amanhã mudar o motor do agente, as regras de routing, as filas e o histórico continuam consigo.
Concretamente, o que construímos: doze ficheiros de dialplan — produção, IVR, fila, transferência, voicemail, redirecionamento, chamadas de saída com agente — quatro scripts AGI em Python e duas pontes de áudio, no total 5.522 linhas. O motor de IVR não tem os menus escritos no ficheiro: lê-os da base através de um script AGI e devolve uma de seis decisões — para um agente, para outro menu, para uma fila, transferência para um número externo, mensagem final, ou encerramento. As filas têm o nome do respetivo identificador e não têm membros escritos na configuração: são adicionados e removidos do exterior, através da interface de gestão, o que significa que um operador pode entrar ou sair da fila sem reiniciar a central.
O encaminhamento tem regras reais, não apenas um único «ligue aqui»: horários de funcionamento e fuso horário, funcionamento nocturno do tipo 22:00 → 06:00, e correspondência por prioridade — o cabeçalho SIP `Diversion`, que transporta o número original de onde a chamada foi reencaminhada, depois o próprio número, depois a regra de reserva. Os trunks são gerados por número, com nome construído a partir do fornecedor e do número, por uma função de configuração — não escritos à mão em cada nova linha.
O que sai da chamada é tão importante como a chamada. Para a linha ligada à central virtual de um operador, construí um middleware em Python que consulta a lista de registos a cada minuto, com uma reconciliação ampla a cada seis horas para que uma falha de rede não perca nada, e uma varredura a cada três minutos das chamadas perdidas — essas não têm registo e, de outro modo, seriam completamente invisíveis. Cada registo é descarregado, transcrito, analisado e espelhado na análise de chamadas, e a chamada perdida torna-se um alerta. A idempotência está num conjunto Redis, para que o mesmo registo não seja processado duas vezes.