Экспертиза · Телефония и контакт-центр
Телефонный слой между вашим оператором и тем, кто отвечает — человеком или агентом.
Мы строим центральный узел: SIP-транки, правила маршрутизации по расписанию, IVR-меню, читаемые из базы, очереди ожидания, перевод на человека, запись и анализ звонков. Звонок становится записью с транскриптом и резюме, а не воспоминанием.
Уже построеноTrei 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.
Между вашим телефонным оператором и тем, кто реально отвечает — человек или голосовой агент — должен существовать слой, который принимает решения. Кто принимает звонок в 23:40. Что происходит, если никто не отвечает. Куда идёт звонок, когда клиент просит «человека». Что остаётся от разговора после его завершения. Этот слой — это станция, и мы строим её так, чтобы она принадлежала бизнесу, а не поставщику голоса: если завтра вы смените движок агента, правила маршрутизации, очереди и история останутся у вас.
Конкретно, что мы построили: двенадцать файлов dialplan — производство, IVR, очередь, перевод, voicemail, переадресация, исходящие звонки с агентом — четыре AGI-скрипта на Python и два аудиомоста, всего 5.522 строки. У движка IVR меню не прописаны в файле: он читает их из базы через AGI-скрипт и возвращает одно из шести решений — к агенту, к другому меню, к очереди, перевод на внешний номер, финальное сообщение или завершение. Очереди называются по своему идентификатору и не имеют членов, записанных в конфигурации: их добавляют и удаляют извне, через интерфейс управления, что означает, что оператор может войти в очередь или выйти из неё без перезапуска станции.
Маршрутизация имеет реальные правила, а не просто один «звонить сюда»: часы работы и часовой пояс, ночной график вида 22:00 → 06:00, а также сопоставление по приоритету — SIP-заголовок `Diversion`, который содержит исходный номер, с которого был переадресован вызов, затем собственный номер, затем запасное правило. Trunk-каналы генерируются для каждого номера, с именем, составленным из поставщика и номера, с помощью функции конфигурации — а не пишутся вручную для каждой новой строки.
То, что выходит из звонка, так же важно, как и сам звонок. Для линии, связанной с виртуальной АТС оператора, мы построили middleware на Python, который опрашивает список записей каждую минуту, с широкой сверкой каждые шесть часов, чтобы сбой сети ничего не потерял, и с проверкой пропущенных звонков каждые три минуты — у них нет записи, и иначе они были бы полностью невидимы. Каждая запись загружается, транскрибируется, анализируется и отражается в анализе звонков, а пропущенный звонок становится оповещением. Идемпотентность обеспечивается в Redis set, чтобы одна и та же запись не обрабатывалась дважды.