IP-телефония на базе Asterisk
Введите свой номер телефона
и мы перезвоним вам
Решаем Ваши бизнес-задачи с помощью IT-технологий. Знаем, как сделать лучше, быстрее и дешевле. Наш опыт – на службе Вашего бизнеса.
База знаний Не все герои носят плащи. Сотни техических статей, написанных инженерами нашей компании. Делимся опытом и своими знаниями со всем сообществом.
Сотни функций и возможностей Asterisk помогут вывести коммуникации в Вашей компании на принципиально новый уровень. Технические ограничения – фантазия Заказчика.
IP-АТС Вы платите за систему, которая будет полностью соответствовать Вашим ожиданиям, требованиям и будет драйвером роста Вашего бизнеса
Идти в ногу со временем или оставаться на старых технологиях? Такой вопрос не стоит перед нашими клиентами. Решаем самые смелые задачи для Колл-Центров. Строим с нуля или работаем с существующими.
Поместите свой бизнес в эпицентр продаж. Интеграция IP-телефонии и CRM даст новый и мощный импульс Вашему Отделу Продаж и выведет компанию на три шага впереди конкурентов.
Подбираем для клиентов такие тарифы, которые ему редко получится найти на рынке самостоятельно. Работаем с 100+ операторов связи в интересах клиента.
Разработки, созданные нашей командой под запросы клиентов. Не отказывайтесь от инноваций. Мы поможем идти с ногу со временем.
Умные всю жизнь учатся, а остальные всегда все и так знают. Мы проводим обучение более 8 лет и выпустили более 1000 специалистов по Asterisk и Mikrotik. Проводим ежегодную конференцию Asterisk.
Купить наш опыт дешевле, чем набивать свои шишки. Мы реализовали более 800 проектов и накопили экспертизу для того, чтобы идеально выполнить Ваш проект.
Оборудование Правильный выбор оборудования позволяет сэкономить от 20 до 50% бюджета телефонии. Мы предельно внимательно подойдем к выбору «железа» в Ваш проект.
Наши цены доступны не только для Москвы, но и для регионов. А вложения в нашу экспертизу обычно окупаются за несколько месяцев.
О нас Работаем с 2011 года. Собрали отличную команду реальных фанатов своего дела. Подходим к работе с душой и ответственностью.
В сфере построения современных систем связи стандартные механизмы обработки вызовов рано или поздно упираются в потолок. Речь идет о ситуациях, когда классическая архитектура Asterisk с её привычными модулями перестает справляться с задачами масштабирования. Одной из самых «больных» тем здесь является организация очередей. Привычная схема, где есть один сервер и встроенный модуль обработки, отлично работает в малом бизнесе, но мгновенно рассыпается, как только проект вырастает в распределенную систему с балансировкой нагрузки.
Проблема не в самом Asterisk, а в том, как устроена логика обработки звонков в условиях высокой доступности. Когда в системе появляется больше одного узла обработки, а регистрация абонентов выносится на внешние прокси-серверы вроде Kamailio, стандартные инструменты управления очередями начинают мешать. Звонок может «гулять» между серверами, данные о состоянии операторов могут быть разрознены, а единой точки контроля просто не существует. В такой ситуации единственный выход — перестать пытаться «натянуть» старые решения на новые реалии и собрать систему очередей заново, используя микросервисный подход и современные инструменты вроде ARI и Redis.
Основной камень преткновения — это монолитность классических решений. Тот же app_queue привык, что он «царь и бог» внутри одного конкретного сервера. Он сам хранит очередь, сам следит за статусами операторов, сам проигрывает музыку в ожидании. Но в реальности крупных инсталляций всё выглядит иначе. Часто приходится использовать схемы с несколькими Stateless Proxy, где звонки распределяются между пулом серверов Asterisk. В такой конфигурации один и тот же вызов может проходить через балансировщик несколько раз, создавая «зигзаги» в трафике.
Когда регистрация уходит на внешний уровень, app_queue теряет понимание того, кто из операторов свободен, а кто — нет. Можно пытаться городить костыли через кастомные экстеншены и проверки статусов, но как только добавляется второй или третий сервер Asterisk, ситуация становится неуправляемой. Нужно собрать одну логическую очередь из нескольких физических серверов, и при этом сделать так, чтобы нагрузка распределялась равномерно, а не по принципу «кто первый схватил». Использование стандартных модулей здесь превращается в бесконечную борьбу с их внутренними ограничениями.
Основные сложности при попытке масштабирования классики:
В таких условиях проектирование и настройка сети требует совершенно иного взгляда на телефонию — как на набор независимых сервисов, которые общаются между собой через быстрые шины данных.
Чтобы построить по-настоящему гибкую систему, нужно сначала понять, из чего на самом деле состоит любая очередь вызовов. Если отбросить всё лишнее и посмотреть на процесс со стороны микросервисов, то мы увидим несколько независимых функциональных блоков. Первый — это само хранилище данных, то есть список звонков, которые ждут ответа. Второй — это база операторов с их текущими статусами. Третий — логика или «мозг» системы (Call Manager), который решает, кого с кем соединить. И четвертый — сервис уведомлений и аудио-сопровождения.
Такая декомпозиция позволяет вынести каждый элемент в отдельный слой. Например, хранение очереди идеально ложится на структуру данных Redis. Это сверхбыстрое хранилище в оперативной памяти, которое поддерживает работу со списками «из коробки». Мы можем просто добавлять идентификатор канала в хвост списка и забирать его из головы. При этом совершенно неважно, на каком сервере физически находится этот канал — информация о нем доступна всей системе мгновенно.
В этот момент установка Asterisk перестает быть установкой «комбайна» всё-в-одном. Сервер превращается в исполнительный механизм, который просто управляет медиа-потоками и каналами через ARI (Asterisk REST Interface), подчиняясь командам извне. Сама же бизнес-логика — кто за кем стоит и кому звонить — живет отдельно, в Call Manager.
Вся магия распределенной очереди строится на связке Asterisk REST Interface и Redis. Когда звонок прилетает на сервер, он попадает в ARI-приложение. Это приложение не пытается само решить судьбу вызова. Оно просто берет уникальный ID канала, добавляет к нему адрес текущего сервера и кладет эту «метку» в соответствующий список в Redis. Всё, с этого момента звонок встал в очередь.
Основные преимущества использования Redis для этих задач:
Пока абонент висит в ожидании, ARI-приложение просто проигрывает ему музыку. Но как сделать так, чтобы человек не чувствовал себя брошенным? Здесь на сцену выходят уведомления. Вместо того чтобы встраивать таймеры внутрь приложения (что делает его «тяжелым» и зависимым от состояния), используется механизм TTL (Time To Live) в Redis. Мы создаем ключ с определенным временем жизни. Как только время истекает, Redis генерирует событие, Call Manager его ловит и дает команду Asterisk: «Проиграй этому каналу его позицию в очереди». Это позволяет сделать систему полностью Stateless — если ARI-модуль перезагрузится, он просто подхватит данные из Redis и продолжит работу как ни в чем не бывало.
Call Manager — это сердце системы, отдельный процесс (написанный, например, на PHP или Go), который в бесконечном цикле опрашивает очереди в Redis. Его логика проста, но эффективна: он смотрит, есть ли в очереди свободные абоненты, и есть ли для них свободные операторы. Если пара найдена, он инициирует звонок. Важно, что Call Manager не «висит» на канале Asterisk. Он лишь отдает высокоуровневые команды через API.
Данные об операторах также хранятся в Redis. Это позволяет Kamailio или любому другому внешнему прокси-серверу обновлять статусы агентов независимо от Asterisk. Если оператор залогинился, отошел на перерыв или начал разговор — эта информация тут же попадает в общую базу. Call Manager видит эти изменения и моментально корректирует стратегию обзвона.
Для хранения настроек очередей (время ожидания, музыка, лимиты) разумно использовать классическую базу MySQL. Это дает удобный интерфейс для администраторов и клиентов. Такая модернизация АТС позволяет превратить телефонию в гибкий продукт, где любые параметры можно менять через веб-панель без вмешательства в код или конфиги серверов. Каждая очередь может иметь свои уникальные настройки, которые Call Manager считывает при инициализации.
Поскольку описанная архитектура основана на разделении логики и данных, она идеально вписывается в концепцию облачного развертывания и контейнеризации. Все компоненты системы могут работать внутри Kubernetes. Если нагрузка растет, мы просто добавляем новые поды с Asterisk. Каждый новый узел подключается к общему Redis и API, мгновенно включаясь в работу.
В распределенной системе критически важна стабильность медиа-серверов. Использование ARI позволяет сделать эти сервера максимально простыми. Их задача — выполнять команды: «создай мост», «проиграй файл», «соедини каналы». Вся сложная аналитика и принятие решений вынесены наружу. Это значительно снижает вероятность падения Asterisk из-за перегрузки логическими операциями. В такой конфигурации защита IP-ATC становится проще, так как периметр безопасности можно выстроить вокруг API-шлюза и балансировщиков.
Интересная особенность такого подхода — универсальность. Очередь — это всего лишь список в Redis. Если нам нужно организовать звонок на группу (Group Call), мы используем ту же самую логику, просто ограничиваем количество элементов в списке одним вызовом. Call Manager обрабатывает группы и очереди одинаково, что упрощает кодовую базу и снижает количество ошибок.
Для того чтобы всё это многообразие модулей работало как единое целое, используется слой API. Это критически важная деталь. Call Manager не должен знать специфику команд конкретной версии Asterisk или нюансы работы с каналами во FreeSwitch. Он общается с высокоуровневым API. Например, вместо того чтобы вручную управлять медиа-файлами для информирования абонента, Call Manager отправляет запрос: notify_position(channel_id, position).
Этот слой абстракции дает колоссальную свободу:
Такой подход позволяет строить системы, которые практически невозможно «уронить» целиком. Даже если упадет сам Call Manager, звонки останутся в очередях Redis, а ARI-приложения на серверах продолжат играть музыку абонентам, пока менеджер не поднимется и не возобновит распределение.
Микросервисный подход к очередям в Asterisk — это не просто дань моде, а производственная необходимость для крупных проектов. Вынос логики в Call Manager, использование Redis для хранения состояний и управление через ARI позволяют забыть о проблемах масштабирования и ограничениях стандартных модулей. Мы получаем систему, которая легко переживает рост нагрузки, просто расширяясь добавлением новых узлов.
Для бизнеса такая архитектура означает прежде всего надежность и гибкость. Возможность моментально менять сценарии обслуживания, добавлять новые функции без остановки системы и прозрачно мониторить каждый звонок в реальном времени — это то, что отличает современную телефонию от устаревших решений. Конечно, такая система требует качественного наполнения, и здесь часто помогает профессиональная запись IVR, чтобы голос системы звучал так же безупречно, как работает её внутренняя логика. В конечном счете, разделение ответственности между компонентами делает систему прозрачной, управляемой и готовой к любым вызовам современного рынка связи.
Билеты уже в продаже!
Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.