IP-телефония на базе Asterisk
Введите свой номер телефона
и мы перезвоним вам
Решаем Ваши бизнес-задачи с помощью IT-технологий. Знаем, как сделать лучше, быстрее и дешевле. Наш опыт – на службе Вашего бизнеса.
Не все герои носят плащи. Сотни техических статей, написанных инженерами нашей компании. Делимся опытом и своими знаниями со всем сообществом.
Сотни функций и возможностей Asterisk помогут вывести коммуникации в Вашей компании на принципиально новый уровень. Технические ограничения – фантазия Заказчика.
Вы платите за систему, которая будет полностью соответствовать Вашим ожиданиям, требованиям и будет драйвером роста Вашего бизнеса
Идти в ногу со временем или оставаться на старых технологиях? Такой вопрос не стоит перед нашими клиентами. Решаем самые смелые задачи для Колл-Центров. Строим с нуля или работаем с существующими.
Поместите свой бизнес в эпицентр продаж. Интеграция IP-телефонии и CRM даст новый и мощный импульс Вашему Отделу Продаж и выведет компанию на три шага впереди конкурентов.
Подбираем для клиентов такие тарифы, которые ему редко получится найти на рынке самостоятельно. Работаем с 100+ операторов связи в интересах клиента.
Разработки, созданные нашей командой под запросы клиентов. Не отказывайтесь от инноваций. Мы поможем идти с ногу со временем.
Умные всю жизнь учатся, а остальные всегда все и так знают. Мы проводим обучение более 8 лет и выпустили более 1000 специалистов по Asterisk и Mikrotik. Проводим ежегодную конференцию Asterisk.
Купить наш опыт дешевле, чем набивать свои шишки. Мы реализовали более 800 проектов и накопили экспертизу для того, чтобы идеально выполнить Ваш проект.
Правильный выбор оборудования позволяет сэкономить от 20 до 50% бюджета телефонии. Мы предельно внимательно подойдем к выбору «железа» в Ваш проект.
Наши цены доступны не только для Москвы, но и для регионов. А вложения в нашу экспертизу обычно окупаются за несколько месяцев.
Работаем с 2011 года. Собрали отличную команду реальных фанатов своего дела. Подходим к работе с душой и ответственностью.
Мы уже 16 лет занимаемся разработкой на 1С. За это время создали, пожалуй, лучшее решение по интеграции Asterisk и 1С, и уже около 9 лет успешно развиваем его. Помимо этого, мы «перехватили флаг» у компании Plantel, которая раньше разрабатывала продукт на Asterisk под названием Ascosia. В своё время Ascosia была очень популярна, но, как вы знаете, компанию, которая её делала, купила 3CX и, заплатив немалые деньги, фактически закрыла проект.
Мы переписали Ascosia «с нуля» и сделали MikoPBX. Сейчас это вполне успешный продукт, включённый в реестр российского ПО и используемый по всему миру. У нас много пользователей, которые им интересуются.
Мы очень серьёзно подходим к качеству и стандартам разработки, используем инженерный подход, любим «копаться в кишочках» и считаем себя полноценными разработчиками.
Когда мы создавали наш продукт интеграции 1С и телефонии, стремились максимально упростить установку, сделать её понятной для пользователей. Именно поэтому нам понравилась идея Ascosia: можно было упаковать всё в один дистрибутив, в один ISO-файл. Клиент после установки сразу получал настроенную станцию, готовую к работе с 1С.
Но так сложилось, что FreePBX — тоже весьма популярная система, и сейчас примерно две трети наших клиентов используют именно её. Нам хотелось упростить механизм доставки и установки наших модулей и для FreePBX.
Наш модуль написан на Go. Это сервер телефонии, который ставится рядом с Asterisk, одним концом подключается к AMI (Asterisk Management Interface), ловит события (пришёл звонок, звонок завершён, произошла переадресация и т.д.), обрабатывает их и передаёт в CRM-систему в удобном для разработчика формате. Таким образом, разработчикам CRM не нужно разбираться во внутренних деталях телефонии.
Когда мы делали наш сервер репозиториев и механизм доставки расширений для MikoPBX, всё оказалось достаточно просто, потому что мы контролируем проект с обеих сторон: полностью владеем исходным кодом MikoPBX. Мы спроектировали репозиторий, подключили его к системе сборки модулей, и теперь модуль автоматически собирается, выкладывается в репозиторий, а затем в MikoPBX есть кнопка «Установить», которая модуль скачивает и устанавливает. Проблем здесь нет: у пользователя есть личный кабинет, там доступны релизы, сама MikoPBX бесплатна, а вот интеграция с CRM-системами (1С, Битрикс24 и т.д.) — это то, на чём мы зарабатываем. Система лицензирования тоже есть, но всё достаточно прозрачно.
Проблема в том, что с одной только MikoPBX мы далеко не уедем. С самого начала было понятно, что нам придётся иметь дело и с FreePBX, потому что многие хотят получить наш функционал именно там. На первый взгляд, всё просто: берём файл нашего модуля, загружаем во FreePBX и запускаем. Но выяснилось, что наш модуль «весит» порядка 50 МБ, и на большинстве инсталляций FreePBX есть ограничение в PHP (примерно 8 МБ на максимальный размер загружаемого файла). Через веб-интерфейс такой модуль не загрузить. Нужно заходить в консоль, править php.ini
, перезапускать веб-сервер (Apache или что у них стоит). С точки зрения удобства для пользователя — это очень плохо. Наша цель была, чтобы модуль можно было легко скачать, установить, попробовать и, в случае интереса, купить. Когда нужно лезть в консоль, удобство теряется.
Поэтому мы решили использовать стандартные механизмы FreePBX. Но по опыту оказалось, что эти механизмы практически не документированы. Есть упоминание в интерфейсе: «установка по ссылке», но как им пользоваться, я не нашёл. Возможно, у кого-то есть этот опыт или ссылка на инструкцию, но мне она не попадалась.
Я полез в код FreePBX, чтобы разобраться, как устроен этот механизм. На тот момент в системе была куча легаси-кода: глобальные переменные, отсутствие классов и так далее. Продукт классный и развивался много лет, да ещё и большое количество людей к нему прикасались. Разбираться было непросто. Честно скажу, я потратил 100–200 часов, чтобы изучить, как работает простейший функционал, о котором буду рассказывать. Надо отдать должное: FreePBX активно развивается. Каждый раз, заходя в их код, вижу улучшения — появляются классы, шёл переход на PHP 7, идёт рефакторинг. Система не ужасная, но, на мой взгляд, MikoPBX удобнее.
Сложность в том, что существует множество сборок: есть дистрибутив от VoxLink (VoxDistro), есть разные версии FreePBX (13, 16 и прочие), и все они работают немного по-своему. Приходится постоянно подстраиваться.
Далее я покажу некоторые запросы и ответы, но не пытайтесь их прямо сейчас скопировать и запомнить. Я опубликую статью на Хабре, где подробно разберу все поля, параметры и заголовки, чтобы желающие могли это повторить.
Первое, что нужно для «хорошего» модуля, — это подписанный сертификат в компании Sangoma. Это избавляет от больших красных предупреждений FreePBX о «левом неподписанном модуле» и повышает доверие пользователей. Если вы берёте деньги за модуль, это тем более важно. Процедура несложная: генерируете сертификат, заполняете анкету, отправляете в Sangoma, они подписывают, и вы можете подписывать свой код.
Далее, в документации по модулям упоминается, что всегда нужно использовать HTTPS-соединения. С появлением Let’s Encrypt это вроде бы не проблема, но осенью прошлого года (1 октября) был отозван один из сертификатов, и около 99% инсталляций FreePBX, где не обновлялась операционная система (а таких много, люди порой не трогают работающие серверы годами), перестали получать обновления через бесплатный SSL. Пришлось искать платные сертификаты или использовать альтернативы вроде Amazon Load Balancer, но не Let’s Encrypt. Так что с HTTPS тоже не всё просто.
Для полноценного сервера репозиториев, насколько я выяснил, нужно всего две точки входа в API:
GetModuleFile
— отдаёт сам архив модуля.GetModuleUpdate
— отдаёт описание доступных версий модуля.Принцип следующий:
GetModuleFile
(обычно POST, хотя в некоторых версиях FreePBX может быть GET) содержит путь вроде:
https://ваш-сервер/GetModuleFile/имя_модуля/версия/архив.tar.gz
Если вместо конкретной версии указать что-то вроде latest, вы отдаёте последнюю доступную версию.
HEAD
-запрос, чтобы FreePBX могла узнать размер файла и имя, под которым его сохранить. Если этого не сделать, прогресс-бар при загрузке будет отображаться некорректно.После успешной загрузки архив распаковывается и устанавливается стандартными методами FreePBX.
Когда в интерфейсе FreePBX нажимают «Проверить онлайн» (или проверка идёт по расписанию), система не использует «ручную» ссылку на архив. Она смотрит в module.xml
вашего модуля, где прописана опция Update URL
(тот самый GetModuleUpdate
). FreePBX делает к нему запрос вида:
GET https://ваш-сервер/GetModuleUpdate?module=имя_модуля&vers=14.005
(параметры могут немного отличаться в разных версиях). Сервер репозиториев должен вернуть JSON-ответ с описанием доступных версий, например:
{
"latest": "12",
"md5sum": "...",
"changelog": "...",
"size": 12345678,
"download": "https://ваш-сервер/GetModuleFile/имя_модуля/12/архив.tar.gz"
}
FreePBX увидит, что есть более свежая версия (12), покажет ChangeLog, предложит обновиться и скачает файл по указанной ссылке. Модуль обновится автоматически, без консоли и ручной загрузки.
Существует также секция previous
, позволяющая откатываться на более ранние версии, если что-то пошло не так.
Чтобы всё это заработало, нам понадобилось:
GetModuleFile
и GetModuleUpdate
) и корректно обрабатывать HEAD
-запросы, версии, размеры файлов и т.д.Мы автоматизировали эти процессы, и теперь у нас всё работает штатно.
Если у вас достаточно смелости и вы хотите разрабатывать модули для FreePBX, не забудьте обратить внимание на MikoPBX. Если у вас есть интересные решения, мы с радостью поможем интегрировать их в наш репозиторий, чтобы ваш модуль работал не только в FreePBX, но и в MikoPBX.
Билеты уже в продаже!
Я - Кондрашин Игорь, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
Быстро узнать мобильного или городского оператора. Впишите номер