IP-телефония на базе Asterisk
Введите свой номер телефона
и мы перезвоним вам
Решаем Ваши бизнес-задачи с помощью IT-технологий. Знаем, как сделать лучше, быстрее и дешевле. Наш опыт – на службе Вашего бизнеса.
Не все герои носят плащи. Сотни техических статей, написанных инженерами нашей компании. Делимся опытом и своими знаниями со всем сообществом.
Сотни функций и возможностей Asterisk помогут вывести коммуникации в Вашей компании на принципиально новый уровень. Технические ограничения – фантазия Заказчика.
Вы платите за систему, которая будет полностью соответствовать Вашим ожиданиям, требованиям и будет драйвером роста Вашего бизнеса
Идти в ногу со временем или оставаться на старых технологиях? Такой вопрос не стоит перед нашими клиентами. Решаем самые смелые задачи для Колл-Центров. Строим с нуля или работаем с существующими.
Поместите свой бизнес в эпицентр продаж. Интеграция IP-телефонии и CRM даст новый и мощный импульс Вашему Отделу Продаж и выведет компанию на три шага впереди конкурентов.
Подбираем для клиентов такие тарифы, которые ему редко получится найти на рынке самостоятельно. Работаем с 100+ операторов связи в интересах клиента.
Разработки, созданные нашей командой под запросы клиентов. Не отказывайтесь от инноваций. Мы поможем идти с ногу со временем.
Умные всю жизнь учатся, а остальные всегда все и так знают. Мы проводим обучение более 8 лет и выпустили более 1000 специалистов по Asterisk и Mikrotik. Проводим ежегодную конференцию Asterisk.
Купить наш опыт дешевле, чем набивать свои шишки. Мы реализовали более 800 проектов и накопили экспертизу для того, чтобы идеально выполнить Ваш проект.
Правильный выбор оборудования позволяет сэкономить от 20 до 50% бюджета телефонии. Мы предельно внимательно подойдем к выбору «железа» в Ваш проект.
Наши цены доступны не только для Москвы, но и для регионов. А вложения в нашу экспертизу обычно окупаются за несколько месяцев.
Работаем с 2011 года. Собрали отличную команду реальных фанатов своего дела. Подходим к работе с душой и ответственностью.
Этот доклад я подготовил, чтобы вы могли посмотреть на наши ошибки и, возможно, не допускать их у себя. А может быть, найдёте для себя какие-то интересные архитектурные решения. Будет много схем с архитектурой. Я хотел добавить код, но в итоге не стал, потому что, честно говоря, кому нужен мой «кривой» код на PHP и Python? Поэтому просто схемы.
Изначально у нас был виджет обратного звонка, работавший довольно просто: там был практически статичный диалплан, куда подставлялись переменные. Он их воспроизводил и мог соединить звонок дальше с менеджером. На этом, в принципе, всё. На базе этой идеи мы решили создать новый продукт для автоматизации исходящих и входящих звонков.
В начале у нас был воркер на Python, который соединялся с Asterisk по AMI, передавал туда несколько переменных, а вся логика уже управлялась в диалплане. Процесс звонка выглядел так:
Диалплан был довольно статичным: проигрывал первый файл (по переменной), а дальше было всего три варианта нажатий и номер менеджера, с которым можно соединиться по нажатию «1».
Из плюсов — простой код с минимумом логики. Из минусов — сложность отладки и кастомизации сценариев, ведь диалплан — штука специфическая, и не каждый разработчик легко и быстро в нём разберётся. Кроме того, на тот момент было лишь три ветки IVR, что сильно ограничивало гибкость системы.
Следующим шагом было ввести скрипты на PHP, чтобы расширить возможности кастомизации диалплана. Инициация звонков всё так же шла на Python по AMI, но теперь с помощью AGI-скриптов на PHP мы могли запрашивать из базы данные сценариев и делать больше действий.
Процесс звонка при этом выглядел так же, но появилась новая часть с обработкой на PHP. Диалплан стал сложнее: сначала воспроизводился ролик (по переменной), потом шёл пользовательский ввод (цифры, слова, распознавание через IVR), а дальше система могла отправить SMS, проиграть другой ролик или соединить с менеджером.
Из плюсов — гибкая кастомизация, и разработчикам не нужно глубоко лезть в диалплан, чтобы дорабатывать приложение. Из минусов — теперь у нас два языка (Python и PHP), каждый звонок обрабатывается отдельным процессом (PHP-скрипт запускается на каждый вызов), и всё по-прежнему работает на одном сервере, что затрудняет масштабирование.
Чтобы решить проблемы с масштабированием, мы добавили новый компонент — роутер (на Python). Он подключался к базе, а с воркерами, которые общались с Asterisk по AMI, держал соединение по сокету. Так появилась возможность создавать несколько воркеров. При этом PHP-скрипты перестали обращаться напрямую к базе: теперь вся информация о звонке подавалась скриптам через переменные от воркера.
Сначала для распознавания речи мы использовали обычные AGI-скрипты. Минус в том, что они не позволяют обрабатывать звук в потоке. Нужно было записывать файл 2–10 секунд, потом отправлять его в службу распознавания (Яндекс, Google и т. д.) и лишь потом реагировать. В итоге взаимодействие получалось «топорным», робот отвечал с задержкой.
Чтобы это исправить, мы перешли на EAGI. Там можно работать со звуком в потоке и сразу реагировать на слова пользователя. Плюс — более «живое» общение. Минус — работа со звуком через файловый дескриптор, что упирается в ограничения по количеству одновременных звонков на Asterisk. Кроме того, не было буферизации на стыке роутера и Asterisk: если что-то ломается, звонки могут копиться и «ронять» всё приложение.
Чтобы решить проблему узких мест, мы добавили RabbitMQ и систему очередей. Теперь, если появляется перегрузка, звонки уходят в очередь, а воркеры их обрабатывают позже. Это не очень приятно для пользователей, которым хочется моментальной связи, но лучше, чем полное падение системы. Параллельно мы добавили DataUpdater — ещё один воркер, который занимается обновлением информации о звонке в базе.
С помощью очередей стало гораздо удобнее масштабироваться. Но при этом сохранялось несколько минусов: по-прежнему EAGI и его ограничения по дескрипторам, два языка в проекте, и каждый звонок обрабатывался отдельным процессом.
Чтобы убрать ограничения EAGI и отказаться от PHP, мы решили переписать логику на ARI (Asterisk REST Interface). Да, проблемы с файловым дескриптором ушли, а PHP мы совсем убрали, оставив один Python. Но при этом пришлось писать гораздо больше кода, потому что в ARI нужно самому управлять каналами, мостами, проигрыванием роликов, записью звонков и т. д. — если раньше в AGI можно было вызвать готовое приложение (Dial, Playback, MixMonitor), то теперь всё реализуется вручную.
Из плюсов — асинхронность, гибкость, один язык разработки. Из минусов — нет готовой библиотеки для ARI под Python 3, и мы писали свою. Плюс к этому у нас пока плохо автоматизирован процесс развёртывания: все сервера (а их уже около 50) мы поднимаем вручную, и это превращается в довольно большую боль.
Мы планируем упаковать Asterisk в Kubernetes, добавить Kamailio, чтобы Asterisk-узлы масштабировались как медиасерверы, а Kamailio служил бы фронтендом, общаясь напрямую с провайдерами. Тут, конечно, много нюансов, связанных и с Docker, и с Kamailio, но мы надеемся, что справимся с этими задачами уже в ближайшее время.
Билеты уже в продаже!
Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
Быстро узнать мобильного или городского оператора. Впишите номер