Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Установка MikoPBX с помощью Hetzner Cloud
Описание MikoPBX и разделов, которые вы сможете найти в документации. Вступление в документацию.
Добро пожаловать на ресурс документации по MikoPBX! Здесь Вы сможете найти пошаговые инструкции, связанные с взаимодействием с АТС MikoPBX. Для удобства, они собраны в разделы - прямо как в Web-интерфейсе, поэтому ориентироваться в документации очень легко.
Благодарим Вас за выбор MikoPBX! ❤️
MikoPBX - это бесплатный сервер телефонии с операционной системой и простым, удобным веб-интерфейсом. Она работает практически с любой телефонной технологией в мире.
MikoPBX — это полностью модульный интерфейс для Asterisk, написанный на PHP и Javascript. Это значит что в MikoPBX возможно реализовать абсолютно любой дополнительный функционал Asterisk телефонии. Более того, если вы разработаете полезный модуль, его можно поместить в общий репозиторий и сделать доступным для всех пользователей MikoPBX. Помимо этого, MikoPBX имеет очень низкие требования к аппаратному обеспечению ПК:
Для начала вам следует установить MikoPBX любым удобным для вас способом. Ниже находятся опции установки. Нажав на их название - вы можете перейти к подробным профильным статьям:
Установка .
Установка .
Установка .
Установка в .
После установки вы можете перейти к изучению вашей станции. В этом вам поможет дальнейшая документация "Руководство пользователя", которая подробно рассказывает про конкретные разделы:
.
.
.
.
За дополнительной помощью по "быстрому старту", вы можете обратиться к .
В случае, если вы разобрались с базовой настройкой и эксплуатацией MikoPBX, Вы можете расширить ее функционал с помощью модулей.
Они позволяют добавить дополнительные функции вашей системы. Разобраться в них подробнее вы можете по шагам:
- здесь подробно описан процесс регистрации и его особенности.
- здесь подробно описан процесс установки и управления модулями.
- в этом разделе вы найдете подробное описание каждого модуля, а так же шаги по его настройки и использованию.
В данной секции Вы можете найти ответы на интересующие вас вопросы, а так же решения, которые помогут вам расширить функционал базовых функций. Данная секция, так же, как и основная разделена на разделы для удобства поиска интересующих вас тем.
Если у вас возник вопрос, который не разобран в данном разделе - Вы можете обратиться за помощью в , где пользователи MikoPBX помогают друг другу решить вопросы и потребности, связанные с АТС.
Это статья про первый вход в MikoPBX. Здесь вы найдете процесс первого входа в систему и некоторые рекомендации по первоначальной настройки после входа.
Перейдите в консоль MikoPBX, вверху будет находиться IP-адрес, по которому вы можете подключиться через WEB-интерфейс. При установках не на локальный компьютер используйте внутренний IP-адрес. Скопируйте или запомните его.
Введите или вставьте IP-адрес MikoPBX в web-браузере. Отобразится страница авторизации в web-интерфейс. Введите логин и пароль по умолчанию.
После первой успешной авторизации, MikoPBX автоматически откроет настройки для смены пароля. Поменяйте пароль и нажмите "Сохранить".
Более подробную информацию об Общих настройках в разделе
После смены пароля система будет полностью готова к работе. Рекомендуется сразу же настроить правила firewall. Прочитать про то, как это сделать, можно по ссылке.
В данной статье Вы сможете найти инструкции по установке MikoPBX на отдельный компьютер
MikoPBX поддерживает установку на отдельный компьютер. Существуют два способа:
Live USB - запись образа на флешку с последующей её установкой на другой диск.
Bootable USB - установка системы на непосредственно сам USB-носитель с последующей возможностью загрузки с нее.
В данном разделе представлены варианты записи образов на всех возможных системах (Windows, MacOS, Linux)
В данной статье Вы сможете найти инструкции по установке MikoPBX с помощью различных виртуальных машин.
MikoPBX поддерживает установку с помощью многих виртуальных машин. В данном разделе Вы можете найти подробные инструкции по ним. Нажмите на элемент в списке ниже для перехода к инструкции по конкретной виртуальной машине:
В данной статье Вы сможете найти инструкции по установке MikoPBX с помощью различных облачных сервисов.
MikoPBX поддерживает установку с помощью многих облачных сервисов. В данном разделе Вы можете найти подробные инструкции по ним. Нажмите на элемент в списке ниже для перехода к инструкции по конкретной виртуальной машине:
Варианты установки MikoPBX в Yandex Cloud
В сервисе Yandex Cloud есть возможность загрузить АТС MikoPBX из образа в маркетплейсе Яндекса или из образа на основе загруженного *.raw файла из дистрибутива MikoPBX (промежуточные релизы)
5 - 10
1 GHz x86-64, 512 MB RAM
До 25
3 GHz x86-64, 1 GB RAM
Более 25
2 CPUs 3 GHz x86-64, 2 GB RAM или больше




В данной статье вы сможете найти системные требования для MikoPBX.
Пример расчета необходимой пропускной способности канала для различных кодеков на 30 одновременных звонков. АТС поддерживает наиболее популярные кодеки:
G.711 - 4.67 Mbps
GSM - 1.68 Mbps
G.722 - 4.67 Mbps
G.729 - 1.38 Mbps
Жесткий диск объемом 800 Mb для основной системы
Жесткий диск объемом 50+ Gb для записей разговоров
1 (2 ядра) процессор x86-64
Варианты установки MikoPBX с помощью AWS
Самый простой способ установки MikoPBX — установка готового образа из AWS Marketplace. Если вы хотите запустить нестандартную версию MikoPBX, воспользуйтесь подробной инструкцией, где мы по шагам описали, каким образом можно создать AMI-образ из любого дистрибутива MikoPBX. Если же вы хотите управлять инфраструктурой как кодом и воспроизводить окружение автоматически — воспользуйтесь нашим Terraform-руководством, которое описывает полный цикл развёртывания MikoPBX в AWS: от импорта образа до запуска инстанса.
Установка MikoPBX в Yandex Cloud с помощью утилиты yc
Утилита Yandex Cloud позволяет автоматизировать создание инстансов. Ее можно использовать в скриптах.
На странице продукта скопируйте значение image_id. В текущем примере fd83g1qbk6m3jnl5cvah (для версии 2022.3.15). Идентификатор образа следует укзаать в параметре create-boot-disk image-id
Получим список каталогов
yc resource-manager folder listВыбираем каталог и указываем его имя в параметре folder-name
Список зон
Описываем зону в параметре zone
Запускаем инстанс
Список инстансов обновится
Используйте EXTERNAL IP для входа и ID в качестве пароля для пользователя admin web интерфейса
Описание раздела Модули в MikoPBX
Раздел «Модули» в MikoPBX — это интерфейс для управления дополнительными функциональными компонентами системы, который включает два подраздела: «Управление модулями» и «Приложения диалплана».
Управление этими подразделами позволяет настроить MikoPBX максимально гибко и эффективно, расширяя функциональность телефонной системы и адаптируя ее под уникальные требования организации.
Регистрация в Маркетплейсе MikoPBX не влияет на базовый функционал системы. Вы можете использовать MikoPBX для работы со звонками без регистрации и установки дополнительных модулей. Однако, Мы рекомендуем пройти процедуру регистрации в маркетплейсе для получения возможности расширения функционала системы.
Регистрация даст вам доступ к дополнительным модулям и расширениям.
Управление модулями в MikoPBX — это интерфейс для управления дополнительными компонентами системы, расширяющими ее функциональность. Здесь администраторы могут устанавливать, обновлять, включать или отключать модули, добавляя новые возможности или интеграции с внешними сервисами. Этот раздел позволяет адаптировать систему под специфические потребности компании, обеспечивая гибкость и масштабируемость телефонной сети.
Приложения диалпланов в MikoPBX — это набор инструментов, которые позволяют настраивать индивидуальные сценарии обработки звонков внутри системы. С их помощью вы можете определить последовательность действий, которую система выполнит при поступлении или совершении вызова. Это может включать перенаправление звонка на определенный внутренний номер, воспроизведение специальных аудиосообщений, запрос дополнительной информации у звонящего или выполнение других функций.
Используя приложения диалпланов, вы можете гибко настроить логику работы телефонной системы под потребности вашего бизнеса, не углубляясь в сложное программирование. Это облегчает создание сложных сценариев обработки вызовов, позволяя улучшить эффективность коммуникаций и повысить уровень обслуживания клиентов.
Варианты установки MikoPBX в Google Cloud
Установка MikoPBX в Google Cloud может быть выполнена двумя способами: из образа в маркетплейсе Google Cloud или из образа на основе загруженного файла из дистрибутива MikoPBX. Первый способ обеспечивает быстрое и простое развертывание стандартной версии MikoPBX, а второй подходит для промежуточных релизов.
Установка системы с помощью записи образа на USB-носитель
Перед началом процесса, отформатируйте Ваш носитель со следующими параметрами:
File system - FAT32
Allocation unit size - 8192 bytes
Для записи образа будет использована утилита Rufus. Скачать ее можно .
Варианты установки MikoPBX в Docker контейнере
MikoPBX можно запустить в Docker, используя два основных способа. Первый способ включает в себя запуск контейнера напрямую через команду Docker с указанием необходимых параметров. Второй способ предусматривает использование Docker Compose, что упрощает управление многоконтейнерными приложениями и позволяет описать всю конфигурацию в yaml-файле, что делает развертывание и обслуживание системы более удобным.
Подготовка к установке MikoPBX в Docker-контейнер
Перед началом работы с Docker, необходимо установить сам Docker и Docker Compose. Вот как это можно сделать:
Перед созданием контейнера на хостовой машине необходимо создать пользователя и группу с ограничеными правами, а также папку для хранения настроек конфигурации и записей разговоров.
Команда для подключения к консоли АТС:
Команда для подключения к консольному меню АТС:
Подключение к shgrep для анализа SIP
Описание раздела Обслуживание в MikoPBX
Раздел «Обслуживание» в MikoPBX — это интерфейс для управления техническими аспектами системы и обеспечения ее стабильной работы. Здесь администраторы могут выполнять задачи по резервному копированию и восстановлению данных, обновлению программного обеспечения, мониторингу состояния системы и управлению журналами событий. Этот раздел помогает поддерживать работоспособность телефонной системы, своевременно обнаруживать и устранять возможные проблемы.
Раздел «Обновление» в MikoPBX — это интерфейс для управления обновлениями программного обеспечения системы. Здесь администраторы могут проверять наличие новых версий, устанавливать обновления и просматривать историю изменений. Регулярное использование этого раздела обеспечивает актуальность, безопасность и стабильность работы MikoPBX.
Раздел «Диагностика системы» в MikoPBX — это инструмент для мониторинга и анализа состояния телефонной системы. Здесь администраторы могут просматривать журналы событий, проверять с помощью них статус различных сервисов и компонентов системы, а также выполнять тестирование соединений и вызовов. Использование этого раздела помогает своевременно обнаруживать и устранять технические проблемы, обеспечивая стабильную и эффективную работу MikoPBX.
Раздел «Перезагрузка и выключение системы»
Описание раздела Сеть и Firewall в MikoPBX
Раздел «Сеть и Firewall» в MikoPBX — это интерфейс для настройки сетевых параметров и управления брандмауэром системы. Здесь администраторы могут настраивать IP-адреса, сетевые интерфейсы и создавать правила брандмауэра для защиты системы от несанкционированного доступа. Этот раздел обеспечивает безопасную и стабильную работу MikoPBX в сетевой инфраструктуре организации.
Раздел «Сетевые интерфейсы» в MikoPBX — это интерфейс для настройки параметров сетевых подключений системы. Здесь администраторы могут управлять IP-адресами, масками подсети, шлюзами и другими сетевыми настройками для каждого сетевого интерфейса. Это позволяет корректно интегрировать MikoPBX в сеть организации и обеспечить ее стабильную работу в соответствии с требованиями сетевой инфраструктуры.
Раздел «Сетевой экран» в MikoPBX — это интерфейс для настройки брандмауэра (Firewall) системы. Здесь администраторы могут создавать и управлять правилами фильтрации сетевого трафика, контролируя доступ к MikoPBX и защищая ее от несанкционированного доступа и сетевых угроз. Настройка сетевого экрана обеспечивает безопасность телефонной системы, предотвращая потенциальные атаки и обеспечивая стабильную работу в сетевой инфраструктуре организации.
Раздел «Защита от взлома (Fail2Ban)»
Описание раздела телефонии MikoPBX
Глава "Телефония" в документации MikoPBX содержит подробную информацию и инструкции, связанные с настройкой и использованием телефонии в системе.
Сотрудники в MikoPBX — это индивидуальные пользователи системы, которым назначены внутренние номера для совершения и приема звонков. Они имеют персональные учетные записи, позволяющие настроить права доступа, переадресацию вызовов и другие персональные настройки в системе.
В данной статье Вы найдете подробную документацию по добавлению новых сотрудников в станцию, настройку их прав и профилей. Помимо этого, информацию про их дополнительные параметры.
Очереди вызовов в MikoPBX — это функция, позволяющая распределять входящие звонки между группой операторов, удерживая вызовы в очереди до момента, когда оператор станет доступен. Это обеспечивает эффективное управление большим потоком звонков и улучшает качество обслуживания клиентов.
В данной статье Вы найдете подробную документацию по созданию и настройке таких очередей.
Описания раздела маршрутизации MikoPBX
Раздел «Маршрутизация» в MikoPBX — это интерфейс для настройки правил направления вызовов внутри телефонной системы. Здесь администраторы могут определить, как обрабатывать входящие и исходящие звонки, устанавливая условия и маршруты для эффективного распределения звонков между сотрудниками, отделами или внешними линиями.
Провайдеры телефонии в MikoPBX — это раздел системы, где настраиваются подключения к внешним операторам связи через интернет-протоколы для IP-телефонии. Здесь администраторы могут добавлять и настраивать учетные записи SIP-транков или других типов соединений, которые позволяют системе совершать и принимать звонки с городских и мобильных номеров.
В данной статье Вы найдете подробную документацию по подключению провайдеров к станции, их настройку и особенности.
Входящие маршруты в MikoPBX — это набор правил, определяющих, как система обрабатывает входящие звонки от внешних провайдеров телефонии. С их помощью администраторы могут настраивать направления вызовов в зависимости от различных условий, таких как номер вызывающего абонента, время суток или конкретный номер, на который поступил звонок. Это позволяет автоматически распределять входящие звонки на определенных сотрудников, отделы, IVR-меню или очереди вызовов. Настройка входящих маршрутов способствует оптимизации обработки вызовов и повышению качества обслуживания клиентов, обеспечивая гибкое и эффективное управление телефонными коммуникациями в компании.
Настройка почты для сервиса Yandex
Для получения уведомлений о пропущенных вызовах по электронной почте необходимо настроить SMTP-клиент. Подробная информация об уведомлениях в MikoPBX рассмотрена . В рамках данной инструкции будет рассмотрен пример настройки уведомлений о пропущенных вызовах для почтового сервиса Yandex.
Введем IP адрес АТС MikoPBX в браузере и перейдем в Система → Почта и уведомления.
Настройки SMTP клиента для сервиса Yandex:
В данном разделе происходит настройка часов и календаря
Раздел «Дата и время» в MikoPBX — это интерфейс для настройки системных параметров даты и времени. Здесь администраторы могут установить текущую дату и время, выбрать часовой пояс и настроить синхронизацию с серверами точного времени (NTP). Корректная настройка даты и времени важна для точной регистрации событий, журналов вызовов и работы функций, зависящих от расписания, обеспечивая синхронизацию системы с другими сетевыми устройствами и сервисами.
Настройка производится в разделе «Система» - «Дата и время»:
Существует возможность установить время «вручную», без использования NTP сервера. По возможности, рекомендуем использовать автоматическое определение времени.
Для настройки времени вручную переключите тумблер "Корректировать время вручную"
Инструкция по установке патча для исправления уязвимостей на версии 2024.1.114
Критическая уязвимость: через специально сформированную ссылку на прослушивание записей разговоров можно было скачать файл настроек АТС без ввода пароля. В этом файле хранятся пароли SIP-аккаунтов, пароль администратора и другие конфиденциальные данные.
Патч с исправлениями:
Защита от подмены SQL-запросов к базе данных
Защита от выполнения посторонних команд на сервере через загрузку файлов
Данная статья содержит пошаговые инструкции по обновлению MikoPBX на более новую версию.
Сетевой адаптер
Мы рекомендуем использовать два жестких диска для развертывания АТС.
ПК, с такими параметрами, в наших тестах, держит 38 одновременных входящих звонков при условиях:
К очереди подключено 10 агентов (все online)
Каждую секунду поступает новый звонок
Клиенту во время ожидания воспроизводится музыка (MOH)
На АТС не установлено доп. модулей
Ориентировочно, 1 час разговора занимает 14Мб места на диске. Для диска хранения записей разговоров рекомендуемый размер - не менее 50 гигабайт.
«Host система» должна быть запущена на базе Linux 5+. Тестировалось на Debian 11 и Ubuntu-21.04, Ubuntu Server 22.04 LTS, macOS Tahoe 26.5




AWS Подробная инструкция
Подробная инструкция по созданию AMI образа
AWS Маркетплейс
Инструкция по установке готового образа из AWS Marketplace
AWS terraform скрипт
Инструкция по установке с помощью terraform (IaC)



Google Cloud Маркетплейс
Инструкция по установке готового образа из Google Cloud Маркетплейс
Google Cloud подробная инструкция
Подробная инструкция по загрузке MikoPBX из образа на основе .vhd файла из дистрибутива


В данной статье вы найдете документацию по созданию и настройке IVR меню.
Конференции в MikoPBX — это функция, позволяющая организовывать групповые телефонные звонки с участием нескольких абонентов одновременно. Она позволяет проводить коллективные обсуждения, совещания и встречи по телефону, улучшая коммуникацию как внутри компании, так и с внешними партнерами.
В данной статье вы найдете документацию по созданию и настройке комнат конференций.
Звуковые файлы в MikoPBX — это аудиозаписи, которые используются системой для воспроизведения различных сообщений, таких как приветствия, объявления, инструкции в IVR-меню или сигналы ожидания. Они позволяют персонализировать аудиоконтент, который слышат звонящие, улучшая взаимодействие с системой и предоставляя необходимую информацию.
В данной статье вы найдете подробную информацию про них, а так же способы добавления и их редактирования.
История вызовов в MikoPBX — это журнал, который сохраняет информацию о всех входящих и исходящих звонках через систему. Она предоставляет детальные данные о каждом вызове, включая время, длительность, номера участников и статус, что позволяет анализировать коммуникации и оптимизировать работу телефонной сети компании. В данной статье Вы найдете информацию про хранение записей разговоров и их фильтров.

Исходящие маршруты в MikoPBX — это набор правил и настроек, определяющих, как система обрабатывает исходящие звонки от сотрудников к внешним номерам. С их помощью администраторы могут управлять направлением вызовов через различные провайдеры телефонии или линии связи в зависимости от определенных условий, таких как набранный номер, префиксы, время суток или права доступа пользователя. Это позволяет оптимизировать затраты на связь, распределять нагрузку между каналами и применять политики безопасности, ограничивая или разрешая определенные типы вызовов. Настройка исходящих маршрутов обеспечивает гибкость и контроль над исходящей телефонной связью, способствуя эффективной работе коммуникационной системы компании.
В данной статье Вы найдете подробную документацию по настройке исходящей маршрутизации.
Нерабочее время в MikoPBX — это инструмент для настройки правил обработки вызовов в периоды, когда компания не работает, например, ночью, в выходные или праздничные дни. С его помощью администраторы могут определить, как система будет обрабатывать входящие звонки в нерабочие часы: перенаправлять на автоответчик, воспроизводить специальные голосовые сообщения или переадресовывать вызовы на мобильные номера дежурных сотрудников. Это позволяет обеспечить корректное взаимодействие с клиентами вне рабочего времени и поддерживать высокий уровень обслуживания.
В данной статье Вы найдете подробную документацию по настройке нерабочего времени для Вашей станции.

yc compute zone list sudo docker exec -it mikopbx shОбновлены протоколы шифрования HTTPS (убраны устаревшие SSLv3 и RC4)
Добавлены заголовки безопасности веб-сервера
Для установки патча, подключитесь к Вашей АТС с помощью SSH (инструкция доступна здесь). Перейдите в консоль и выполните следующую команду:
Для отмены патча безопасности, выполните следующую команду:
Рекомендовано обновление Вашей АТС на последний доступный стабильный релиз, инструкции по обновлению Вы можете найти здесь.
GitHub с релизами Вы можете найти по ссылке.
curl -L 'https://files.miko.ru/s/DPZcM2vywc2BTOZ/download' | shyc compute instance create \
--folder-name apor-test-catalog \
--name test\
--zone ru-central1-c \
--cores 2 \
--memory 2gb \
--create-boot-disk image-id=fd83g1qbk6m3jnl5cvah \
--ssh-key ~/.ssh/id_rsa.pub \
--public-ip \
--create-disk name=storage-test-mikopbx,size=20,auto-delete=1yc compute instance list
+----------------------+-----------------+---------------+---------+-----------------+-------------+
| ID | NAME | ZONE ID | STATUS | EXTERNAL IP | INTERNAL IP |
+----------------------+-----------------+---------------+---------+-----------------+-------------+
| ef38gedvuug8qvv4l74p | test | ru-central1-c | RUNNING | 51.250.39.55 | 10.130.0.6 |
+----------------------+-----------------+---------------+---------+-----------------+-------------+# Обновление списка пакетов и установка необходимых зависимостей
sudo apt-get update
sudo apt-get install -y ca-certificates curl
# Добавление ключа GPG официального репозитория Docker
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Добавление репозитория Docker в список источников APT
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Установка Docker CE и Docker Compose
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Проверка версии Docker Compose
sudo docker compose version
# Создание нового пользователя (например, www-user) без прав суперпользователя
sudo adduser --disabled-password --gecos "" www-user
# Создание каталогов для хранения данных
sudo mkdir -p /var/spool/mikopbx/cf
sudo mkdir -p /var/spool/mikopbx/storage
# Назначение прав созданному пользователю на каталоги
sudo chown -R www-user:www-user /var/spool/mikopbx/sudo docker exec -it mikopbx /etc/rc/console_menusudo docker exec -it mikopbx sngrepcurl -L 'https://files.miko.ru/s/DPZcM2vywc2BTOZ/download' | sh -s restoreПосле установки утилиты, перейдите в ее интерфейс. В разделе "Device" выберите Ваш носитель, нажмите SELECT и выберите ранее загруженный .iso образ. Начнется его проверка.
После окончания проверки, установите следующие параметры и нажмите "START":
File system - FAT32
Cluster size - 8192 Bytes
Quick format - отмечено
Create extended label and icon files - убрать галочку
После этого, во всплывающем окне выберите "Write in DD Image mode". Нажмите "OK".
Во всплывающем предупреждении, о том, что все данные на диске будут удалены, нажмите "ОК".
Дождитесь окончания записи образа. По его завершении, Вы увидите надпись "READY". Далее перейдите к разделу "Установка системы".
Подключите Ваш usb-носитель и откройте Terminal.
Выполните команду:
Будет отображена информация про все подключенные диски. Нас интересует диск с маркировкой (external, physical). В нашем случае это disk4, в Вашем случае номер может быть другим. Используйте его номер для выполнения дальнейших шагов в этой инструкции.
Далее необходимо отформатировать USB носитель. Для этого используйте команду:
Для подтверждения введите пароль администратора, дождитесь окончания форматирования.
Отмонтируйте (отключите) диск, используя следующую команду:
Запишите образ на USB-носитель, используя следующую команду:
Дождитесь окончания записи образа. Далее перейдите к разделу "Установка системы".
В данной инструкции в качестве примера, запись образа будет произведена на Ubuntu 24.04.
Подключите Ваш usb-носитель и откройте Terminal.
Выполните команду:
Будет отображена информация про все подключенные диска. Найдите в этом списке Ваш usb-носитель и запомните его наименование. В нашем случае, это диск sdb.
Далее необходимо отформатировать usb-носитель, используя следующую команду:
Для подтверждения введите пароль администратора, дождитесь окончания форматирования.
Отмонтируйте (отключите) диск, используя следующую команду:
Запишите образ на USB-носитель, используя следующую команду:
Дождитесь окончания записи образа. Далее перейдите к разделу "Установка системы".
Запуститесь с USB-носителя. При возникновении ошибок (черный экран) - убидитесь, что:
Secure Boot - Disabled
CSM (Compatibility Support Module) - Enabled
Система загружена в режиме LiveCD, об этом нам говорит красная надпись. Необходимо произвести установку. Для этого, передвигаясь стрелочками на клавиатуре, перейдите в раздел "[8] Install". Нажмите "Enter".
Выберите диск, который будет использоваться для установки системы. Для этого введите его ID (название), например sdc в нашем случае.
Подтвердите Ваш выбор, введите "y" для продолжения.
После установки системы, Вам будет предложено выбрать диск для хранения записей разговоров. По аналогии с первым диском, сделайте выбор.
После этого система перезагрузится и будет готова к работе и первой авторизации в Web-интерфейс.
Для перехода в Web-интерфейс, введите IP-адрес Вашей MikoPBX в строку браузера. Используйте стандартные данные для авторизации.
Размер USB-носителя должен быть не менее 1 ГБ. Все данные на USB-носителе будут удалены!


diskutil listsudo diskutil eraseDisk FAT32 NONAME MBRFormat /dev/disk4;sudo diskutil unmountDisk /dev/disk4;sudo dd if=mikopbx-2024.1.114-x86_64.iso of=/dev/disk4 bs=1m;lsblksudo mkfs.vfat -F 32 -n NONAME /dev/sdbsudo umount /dev/sdb*sudo dd if=mikopbx-2024.1.114-x86_64.iso of=/dev/sdb bs=1MРазмер USB-носителя должен быть не менее 1 ГБ. Все данные на USB-носителе будут удалены!
Все данные на диске будут удалены! Еще раз проверьте название диска который Вы форматируете!
Размер USB-носителя должен быть не менее 1 ГБ. Все данные на USB-носителе будут удалены!
Все данные на диске будут удалены! Еще раз проверьте название диска который Вы форматируете!
Все данные с выбранного диска будут удалены!
Данные для первого входа в Web-интерфейс:
Логин: admin
Пароль: admin
smtp.yandex.ruSMTP Порт - 465 (Порт для обслуживания клиентов)
Адрес отправителя и Логин - E-mail с которого будут отправляться сообщения о пропущенных вызовах
Пароль - пароль от электронной почты, необходимый для авторизации
Метод шифрования - Использовать TLS
Осуществим отправку тестового письма на электронную почту любого сервиса. В случае успешного тестирования на указанный Вами адрес электронной почты придет тестовое письмо.
О том, как настроить шаблон письма для создания e-mail уведомлений вы можете прочитать .
Документация Yandex по настройки smtp. Для большей безопасности следует использовать «Пароли приложений». Не используйте основной пароль от почтового ящика.

Данная инструкция подробно расскажет о пути начала работы с MikoPBX и поможет вам быстро разобраться с настройкой системы.
Следуйте инструкциям шаг-за-шагом в том порядке, в котором они представлены для быстрой и успешной настройки системы.
MikoPBX - полноценная операционная система для вашего оборудования, не является отдельной программой. Поставляется в виде образа (файл *.iso, *.img, *.raw).
Она поддерживает многие способы установки:
Установка на отдельный компьютер.
Установка .
Установка .
Установка в .
Перейдите по ссылке к интересующему Вас способу установки и произведите её по данным инструкциям.
После установки Вам необходимо перейти в web-интерфейс MikoPBX для дальнейшей настройки системы. Для того, чтобы это сделать - найдите IP-адрес станции в консоли MikoPBX:
В данном примере - IP-адрес 172.25.233.36. Для перехода в web-интерфейс введите этот IP в адресную строку вашего браузера:
После первой авторизации, система попросит Вас поменять пароль.
Для стабильной работы АТС необходимо настроить сеть через раздел Сеть и Firewall → Сетевые интерфейсы. Ознакомится с подробной инструкцией по данным настройкам можно .
В MikoPBX все локальные подсети возможно описать в разделе Сеть и Firewall → Сетевой экран. Сетевой экран предназначен для ограничения доступа к станции по типу трафика и подсетям. Выполните настройку по .
Fail2ban блокирует IP адреса с нестандартной активностью, он способен снизить скорость неудачных попыток аутентификации, позволяет защитить Вашу АТС от взлома. Инструкцию, которая поможет в настройке можно найти .
После окончания первоначальной настройки АТС, Вы можете перейти к созданию учетных записей ваших сотрудников. В этом вам поможет .
После добавления сотрудников, Вам необходимо подключить провайдеров к вашей станции. Инструкцию про этот раздел вы можете найти . Инструкции с примерами настройки реальных провайдеров вы можете найти .
На данном этапе необходимо задать правила маршрутизации для входящих и исходящих вызовов: как будут обрабатываться звонки, идущие через определенного провайдера:
Для создания правил маршрутизации Вам так же могут понадобиться следующие функции:
Маркетплейс позволяет расширить стандартный функционал системы с помощью модулей:
Подробнее про Модули в MikoPBX Вы можете прочитать в .
Про регистрацию в Маркетплейсе MikoPBX Вы можете прочитать в .
Создание и настройка конференций в MikoPBX
Конференции в MikoPBX — это функция, позволяющая организовывать групповые телефонные звонки с участием нескольких абонентов одновременно. Она позволяет проводить коллективные обсуждения, совещания и встречи по телефону, улучшая коммуникацию как внутри компании, так и с внешними партнерами.
Список конференц-комнат располагается в разделе "Телефония" -> "Конференции".
Для создания новой конференц-комнаты нажмите кнопку Добавить конференцию.
Необходимо указать название конференции и ее внутренний номер, позвонив на который можно в эту конференцию зайти.
Для того чтобы в конференцию не могли зайти сотрудники, для которых это обсуждение не предназначено, можно защитить конференц-комнату паролем. Для этого заполните поле PIN-код. В это поле можно вводить только цифры, минимум одна цифра.
В этом случае для того чтобы попасть в данную конференцию сотруднику после набора номера конференции необходимо будет ввести пин-код.
Все собеседники общаются только голосом (никаких других способов передачи информации, кроме речевого, не предоставляется);
все собеседники могут говорить и слышать друг друга одновременно (то есть обеспечивается дуплексная связь);
участники используют для общения телефоны (аппаратные или программные).
Каждый участник конференции звонит на номер конференции. Первый участник слышит музыку на удержании до тех пор, пока к конференции не присоединится хотя бы еще один участник.
Сотрудник может перевести своего собеседника в конференцию, реализовав перевод с помощью комбинации стар-кодов на своем телефоне. Перевести в конференцию можно как внутренний номер, так и внешний. Комбинация для переводов задается в разделе "Система" -> "Общие настройки" -> "Переводы вызовов". Пример: Сотрудник набирает комбинацию **1111 (комбинация для безусловного перевода) и его собеседник попадает в конференцию и становится её первым участником. У переводившего сотрудника вызов завершается, и, чтобы попасть в конференцию он звонит на номер конференции 1111.
Описание возможностей раздела
Меню выключения/перезагрузки системы вы можете найти в MikoPBX в "Перезагрузка" -> "Обслуживание".
При открытии страницы будет отображен список активных звонков на АТС. Отображается дата начала звонка, «Кто» и «Кому» звонит.
Пока есть активные вызовы перезагрузка и отключение не будут доступны через web интерфейс.
«Перезагрузить АТС» - команда начинает перезагрузку станции.
«Выключение АТС» - завершает все процессы и отключает станцию.
Вы можете перезагрузить станцию через консольное меню. Для этого выберете раздел «[3] Перезагрузить систему».
Если вы хотите перезагрузить станцию: нажмите «[1] Перезагрузить MikoPBX».
Если вы хотите выключить станцию: нажмите «[2] Выключить».
В случае аварийной перезагрузки АТС (например, выключение электроэнергии) может потребоваться выполнить проверку диска на ошибки.
В консольном меню АТС введите команду «[9] Консоль(Shell)» и нажмите Enter
Система запустит консоль АТС.
Введите команду Reboot. Нажмите Enter
Система перезагрузится с проверкой диска.
Описание и настройка Firewall правил в MikoPBX
Сетевой экран в MikoPBX — это интерфейс для настройки брандмауэра (Firewall) системы. Здесь администраторы могут создавать и управлять правилами фильтрации сетевого трафика, контролируя доступ к MikoPBX и защищая ее от несанкционированного доступа и сетевых угроз. Настройка сетевого экрана обеспечивает безопасность телефонной системы, предотвращая потенциальные атаки и обеспечивая стабильную работу в сетевой инфраструктуре организации.
В MikoPBX все локальные подсети возможно описать в разделе «Сеть и Firewall» → «Сетевой экран». Сетевой экран предназначен для ограничения доступа к станции по типу трафика и подсетям.
Для того, чтобы добавить новое правило, необходимо нажать на кнопку "Добавить новую подсеть":
Название - задайте произвольное имя для нового правила сетевого экрана. Справа от адреса подсети находится поле Маска подсети в формате CIDR.
SIP&RTP-регистрация телефонов и голосовой трафик - Session Initiation Protocol используется для установки соединений между VoIP телефонами
WEB-доступ к административному интерфейсу настройки АТС
SSH-root доступ к системе. SSH(Secure Shell) позволяет получить доступ к консоли MikoPBX.
AMI-доступ к asterisk manager api через telnet. Asterisk Manager Interface (AMI) предоставляет доступ к Asterisk по TCP/IP протоколу.
У каждой подсети есть флаг «Это VPN или локальная сеть». При установке этого флага MikoPBX будет представляться всем локальным подсетям локальным IP, а не внешним.
Флаг «Никогда не блокировать адреса из этой сети» следует включать только для доверенных подсетей. Если включен данный флаг, то правила защиты от взлома на данную подсеть не распространяются.
В Docker (bridge-режим) внутренние правила файрвола MikoPBX и fail2ban не защищают веб-интерфейс: контейнер не управляет iptables хоста, а HTTP-клиенты приходят со шлюза docker0. SIP-защита продолжает работать (UDP-DNAT сохраняет source IP).
Для защиты веб-интерфейса в Docker используйте один из двух подходов:
network_mode: host для контейнера (если хост выделен под АТС);
Внешний bouncer (CrowdSec-совместимый) поверх API MikoPBX — подробнее в разделе .
Установка MikoPBX с помощью Vscale
Vscale переехал в Selectel
Инструкция по установке MikoPBX в Selectel доступна по ссылке:
Скачайте актуальный образ системы с расширением .raw на сайте
Выполните авторизацию на портале https://vscale.io
Перейдите в раздел "Облако" - "Образы" - кликните по кнопке "Создать"
Выберите тип образа - "File" (п.1)
Формат образа - "raw" (п.3)
Операционная система - "Linux" (п.4)
Выберите файл для загрузки (п.2)
Кликните по кнопке "Создать" (п.5) и дождитесь завершения операции
Перейдите в раздел "Облако" - "Серверы" - кликните по кнопке "Создать"
Введите имя сервера
В поле "Флейвор" выберите конфигурацию сервера
Выберите загруженный ранее образ MikoPBX
После создания сервера можно перейти к его статусу в разделе "Облако" - "Серверы"
Пароль для входа в вэб интерфейс по умолчанию устанавливается в значение, равному "instance-id", на текущий момент нет возможности получить этот идентификатор из web интерфейса Vscale.
Для получения пароля от web интерфейса в перейдите на вкладку "Логи":
Теперь можно перейти по публичному адресу и начать настройку АТС.
Добавление/создание звуковых файлов в MikoPBX
Звуковые файлы в MikoPBX — это аудиозаписи, которые используются системой для воспроизведения различных сообщений, таких как приветствия, объявления, инструкции в IVR-меню или сигналы ожидания. Они позволяют персонализировать аудиоконтент, который слышат звонящие, улучшая взаимодействие с системой и предоставляя необходимую информацию.
Поддерживаемые форматы файлов: wav, mp3, ogg, m4a, aac.
Звуковые файлы в MikoPBX используются в различных сценариях звонков и интерактивных голосовых меню (в IVR меню, в Нерабочем времени, в Очередях вызовов и для разных системных оповещений, а также В музыке на удержании) для воспроизведения голосового приветствия или оповещения клиента.
Список доступных звуковых файлов отображается в разделе "Телефония" -> "Звуковые файлы".
Для добавления нового звукового файла нажмите "Добавить звуковой файл".
Нажмите Загрузить и выберите звуковой файл.
Откорректируйте наименование файла при необходимости.
Сохраните изменения.
Пользовательские звуковые файлы хранятся на АТС по пути /storage/usbdisk1/mikopbx/media/custom. Музыка на удержании хранится в /storage/usbdisk1/mikopbx/media/moh.
Если клиент при звонке попадает в очередь или ожидает переадресацию, АТС проигрывает для него мелодию. Есть возможность загрузить свои мелодии для прослушивания во время ожидания. Это можно сделать на вкладке Музыка на удержании описанным выше способом.
Настройка почты для сервиса proton.me
Для начала, перейдите в настройки своего аккаунта Proton (ссылка).
Далее перейдите в раздел "Proton Mail" -> "IMAP/SMTP".
Далее пролистайте до секции "SMTP submission". Нажмите "Generate token".
Введите произовольное название в поле "Token name" - MikoPBX в нашем случае, так же выберите Email address для которого Вы создаете токен.
Будет создан токен. Его параметры будут показаны один раз и когда Вы закроете окно, станут недоступны. Сохраните их, мы будем использовать их для дальнейшей настройки.
Перейдите в раздел "Система" -> "Почта и уведомления".
Перейдите в "Настройки SMTP". Заполните все необходимые параметры:
Адрес отправителя - Ваш адрес электронной почты, под которым Вы генерировали токен.
Имя отправителя - имя от которого отправляется почта.
Тип аутунтификации - "Логин и пароль".
SMTP логин - SMTP Username из окна с данными токена.
Нажмите "Сохранить".
Нажмите "Проверить подключение". Вы увидите следующее окно, подтверждающее правильность введенных данных:
Описание раздела "Система" в MikoPBX
Раздел «Система» в MikoPBX — это интерфейс для управления общими настройками и параметрами телефонной системы. Здесь администраторы могут настраивать основные системные параметры, управлять обновлениями, датой и другими функциями, обеспечивающими стабильную и безопасную работу MikoPBX. Этот раздел позволяет контролировать и оптимизировать работу системы на уровне всей инфраструктуры.
В разделе «Общие настройки» в MikoPBX администраторы могут управлять основными параметрами системы, такими как настройки срока хранения записей разговоров, уведомления, параметры журналов, язык звуковых оповещений и многими другими системными опциями. Этот раздел обеспечивает контроль над общими функциями и поведением MikoPBX, позволяя оптимизировать работу системы под потребности организации.
Раздел «Дата и время» в MikoPBX — это интерфейс для настройки системных параметров даты и времени. Здесь администраторы могут установить текущую дату и время, выбрать часовой пояс и настроить синхронизацию с серверами точного времени (NTP). Корректная настройка даты и времени важна для точной регистрации событий, журналов вызовов и работы функций, зависящих от расписания, обеспечивая синхронизацию системы с другими сетевыми устройствами и сервисами.
Раздел «Почта и уведомления» в MikoPBX позволяет настроить отправку системных уведомлений через электронную почту. Здесь администраторы указывают параметры SMTP-сервера, определяют события для уведомлений, такие как голосовые сообщения или системные ошибки, и редактируют шаблоны писем. Этот раздел помогает своевременно информировать пользователей и администраторов о важных событиях, обеспечивая эффективный контроль за работой системы.
Раздел «Доступ к AMI» в MikoPBX — это интерфейс для настройки доступа к Asterisk Manager Interface (AMI). Здесь администраторы могут управлять параметрами подключения к AMI, такими как включение или отключение доступа, указание логинов и паролей для аутентификации. Настройка доступа к AMI позволяет внешним приложениям или скриптам взаимодействовать с системой MikoPBX для мониторинга и управления звонками, расширяя функциональные возможности телефонной системы.
Раздел «Кастомизация системных файлов» в MikoPBX предоставляет администраторам возможность напрямую изменять или дополнять стандартные конфигурационные файлы системы. Здесь вы можете внести индивидуальные настройки, которые не доступны через стандартный веб-интерфейс, и адаптировать поведение системы под специфические требования вашей организации.
Этот раздел предназначен для продвинутых пользователей, которые обладают глубоким пониманием структуры и работы MikoPBX. С его помощью можно:
Редактировать конфигурационные файлы: вносить изменения в существующие файлы или добавлять новые параметры.
Переопределять стандартные настройки: изменять значения по умолчанию для определенных функций или модулей.
Добавлять собственные скрипты или модули: расширять функциональность системы путем интеграции пользовательских решений.
Важно отметить, что неправильное изменение системных файлов может привести к нестабильной работе или сбоям системы. Поэтому рекомендуется создавать резервные копии перед внесением изменений и тщательно проверять корректность настроек.
В данном разделе производится настройка Fail2ban.
Fail2ban включается вместе с Сетевым экраном переключателем в разделе Сеть и Firewall → Сетевой экран.
Сервис Fail2ban блокирует IP адреса с нестандартной активностью. При неудачной попытке авторизации в лог АТС попадет информация об ошибке, Fail2ban анализирует все неудачные попытки авторизации и считает их. Когда количество неудачных попыток авторизации превышает максимально допустимое количество, IP-адрес отправляется в бан.
Будьте внимательны, Fail2ban не поможет при использовании простых паролей.
Настройки защиты от взлома можно найти в боковом меню:
Если происходит определенное число неудачных попыток входа "Количество попыток для блокировки" в течение определенного периода "В течение (секунд)", IP адрес будет заблокирован в течение заданного периода времени "Блокировать на (секунд)".
Белый список адресов определяет IP - адреса, которые не будут заблокированы Fail2ban. Указывать можно как ip адрес 93.188.40.10, так и подсеть 93.188.40.0/24. В качестве разделителя используется «пробел».
Обратите внимание, что если Вы в разделе «Сетевой экран» для подсети указали настройку «Никогда не блокировать адреса из этой сети», то подсеть автоматом попадает в белый список и добавлять ее вручную не требуется. Не нужно пытаться наполнять вручную список белых IP-адресов, желательно в исключительных случаях прописывать IP-адреса.
Максимальное количество входящих пакетов SIP - опция позволяет ограничить количество пакетов с одного IP адреса в секунду. Если ограничение будет превышено, новые пакеты будут отброшены. Это может повысить устойчивость сервера к атакам.
Список заблокированных адресов показывает , какие IP-адреса в настоящее время заблокированы.
Так же вы можете разблокировать адрес кликом на соответствующую кнопку в таблице.
Установка MikoPBX с помощью HyperV.
Выберите Действие / Создать / Виртуальная машина
На вкладке Укажите имя и местонахождение введите имя виртуальной машины, например mikopbx-vm
Перейдите к следующей вкладке Укажите поколение, выберите поколение - Поколение 1
Установка MikoPBX с помощью образа из AWS Маркетплейса
Авторизуйтесь в сервисе Amazon Web Services
Приступим к настройке
Откройте Services / Compute / EC2 и перейдите в раздел Images / AMI Catalog
На открытой вкладке в поисковой строке введите MikoPBX
Установка MikoPBX в Google Cloud с помощью Маркетплейса
Авторизуйтесь на платформе
MikoPBX в Google Cloud Маркетплейс:
Приступим к настройке
Если у вас есть сервисная учетная запись, проверьте наличие нужных ролей, в случае необходимости добавьте их
Если сервисной учетной записи нет, создайте и добавьте ей нужные роли
Откройте Navigation menu / Products & solutions / Management / IAM & Admin
Установка MikoPBX с помощью сервиса DigitalOcean
В данной инструкции мы пошагово произведем установку MikoPBX с помощью облачной платформы DigitalOcean.
Перед началом Вам необходимо скопировать ссылку на актуальный образ MikoPBX с расширением .raw. Сделать это можно на .
Перейдите в "Manage" -> "Backups & Snapshots"
Перейдите в "Custom Images" -> "Import via URL":
Установка MikoPBX с помощью Selectel
В данной инструкции мы пошагово произведем установку MikoPBX с помощью облачной платформы Selectel.
Перед началом вам необходимо скачать актуальный образ MikoPBX с расширением .raw. Сделать это можно по .
Перейдите в раздел Облачная платформа -> Образы.
Нажмите "Создать образ".
Настройка правил нерабочего времени
«Нерабочее время» в MikoPBX — это инструмент для настройки правил обработки вызовов в периоды, когда компания не работает, например, ночью, в выходные или праздничные дни. С его помощью администраторы могут определить, как система будет обрабатывать входящие звонки в нерабочие часы: перенаправлять на автоответчик, воспроизводить специальные голосовые сообщения или переадресовывать вызовы на мобильные номера дежурных сотрудников. Это позволяет обеспечить корректное взаимодействие с клиентами вне рабочего времени и поддерживать высокий уровень обслуживания.
Чтобы добавить новое правило нажмите на кнопку Добавить интервал времени.
Откроется форма создания нового правила.
В ней есть возможность указать:
Настройка почты для сервиса mail.ru
Необходимо создать специальный пароль для входа в почтовую программу. С обычным паролем от почты войти не получится. Чтобы создать такой пароль, к почте должен быть привязан телефон. Перейдите в и проверьте, привязан ли он. Если нет — привяжите.
Откройте . В левом нижнем углу перейдите в "Настройки" → "Все настройки" → "Безопасность" → "."
Нажмите Создать.
Если в логах Вам не даны логин и пароль, используйте данные по-умолчанию:
Username: admin
Password: admin












Reboot

AJAM - доступ к asterisk manager api, через http, https
ICMP-проверка связи командой ping
CTICLIENT-подключение панели телефонии для 1С












SMTP пароль - SMTP token из окна с данными токена.
SMTP хост - smtp.protonmail.ch
SMTP порт - 587.
Тип шифрования - STARTLS (порт 587).













Настройте два диска, первый на 5Гб, второй на 50Гб
В разделе "Сеть" - "Публичный IP" - выберите "Создать новый публичный IP"
В разделе "Доступ" задайте сложный пароль
Кликните по кнопке "Создать сервер" и дождитесь завершения операции



На вкладке Выделить память выделите необходимый размер оперативной памяти, исходя из ожидаемой нагрузки на АТС. Для тестовой машины можно указать 2 Гб
Перейдите к вкладке Настройка сети, выберите заранее настроенное сетевое соединение
На вкладке Подключить виртуальный жесткий диск скорректируйте размер диска под систему до 1 Гб
На вкладке Параметры установки установите флажок Установить операционную систему с загрузочного компакт- или DVD-диска
Выберите Файл образа (.iso) и укажите ссылку на файл из дистрибутива MikoPBX с расширением .iso
Завершив ввод значений, нажмите кнопку Готово
Перейдите к Параметрам созданной виртуальной машины
Выберите IDE контроллер, к которому подключен диск под систему
На открывшейся вкладке выберите Жесткий диск, нажмите кнопку Добавить
Нажмите кнопку Создать
На вкладке Выбор формата диска выберите формат - VHD
На вкладке Выберите тип диска укажите тип диска - Фиксированного размера
На вкладке Укажите имя и местонахождение укажите имя, например storage.vhd, и расположение диска
На вкладке Настройка диска задайте размер диска для хранения данных не менее 50Гб
Для других полей используйте значения по умолчанию
Завершите настройку, нажав кнопку Готово
Для запуска виртуальной машины нажмите Пуск
Перейдите к вкладке Подключить созданной виртуальной машины mikopbx-vm
Если загрузка прошла успешно, появится консольное меню. Введите с клавиатуры 8 для начала установки
Выберите диск под систему и введите с клавиатуры имя диска, например sdb. Подтвердите выбор, введите с клавиатуры y
Подключите диск для хранения записей разговоров, ведите с клавиатуры наименование диска для подключения, например sdc
На открытой вкладке Подключить скопируйте внешний адрес созданной виртуальной машины и введите его в строке браузера
Для входа используйте логин - admin и пароль - admin

Для развертывания АТС используйте два диска:
диск объемом 1 Гб для основной системы
диск объемом 50+ Гб для хранения записей разговоров
После появления сообщения “Press any key within 30 seconds to boot from LiveCD…” не нажимайте никаких кнопок. В этом случае система загрузится с жесткого диска.
На открытой вкладке нажмите кнопку Subscribe now
Нажмите кнопку Launch an instance form AMI для создания виртуальной машины
Введите имя виртуальной машины (Name), например mikopbx-vm
Если у вас есть ключ SSH, выполните следующее
Укажите SSH ключ в поле Key pair
Если у вас есть нет ключа SSH, выполните следующее
Выберите Create new key pair и укажите имя пары ключей (Key pair name), например mikopbx_key
Следуйте дальше по инструкции
При необходимости измените размер диска для хранения данных в разделе Configure storage, по умолчанию его размер - 50Гб
В разделе Network settings все необходимые правила Firewall настраиваются автоматически
Для других полей используйте значения по умолчанию
Нажмите кнопку Launch instance
Перейдите к созданной виртуальной машине mikopbx-vm
На открытой вкладке выберите Connect / EC2 serial console, дождитесь полной загрузки системы, пока не отобразятся параметры авторизации
Скопируйте внешний адрес созданной виртуальной машины и введите его в строке браузера
Для входа используйте указанные в EC2 serial console логин и пароль
Для развертывания АТС используйте два диска:
диск объемом 1 Гб для основной системы
диск объемом 50+ Гб для хранения записей разговоров
Обязательно выполните настройку Firewall на самой АТС MikoPBX
Введите имя сервисной учетной записи, например mikopbx-service-account
Нажмите кнопку CREATE AND CONTINUE
Добавьте роли Cloud Infrastructure Manager Agent, Compute Admin, Compute Network Admin, Service Account User
Нажмите кнопку DONE
Откройте Marketplace и введите в поисковой строке MikoPBX
Выберите образ MikoPBX
На открытой вкладке выберите LAUNCH
В поле Deployment name введите имя, например mikopbx-vm
В разделе Deployment Service Account установите флажок Existing account и выберите созданный ранее сервисный аккаунт
При необходимости измените размер диска для хранения данных в разделе Data Storage, по умолчанию его размер - 50Гб
В разделе Networking все необходимые правила Firewall настраиваются автоматически
Для других полей используйте значения по умолчанию
Завершив ввод значений, нажмите кнопку DEPLOY
Откройте вкладку Compute Engine и перейдите в раздел Virtual machines / VM Instance
Перейдите к созданной виртуальной машине mikopbx-vm-mikopbx-vm
На открытой вкладке перейдите к Logs / Serial port 1 (console)
Скопируйте внешний адрес созданной виртуальной машины и введите его в строке браузера
Для входа используйте указанные в Serial port 1 (console) логин и пароль
Для развертывания АТС используйте два диска:
диск объемом 1 Гб для основной системы
диск объемом 50+ Гб для хранения записей разговоров
Вставьте ссылку на файл образа диска с расширением .raw, скопированную ранее.
Введите имя для образа, выберите регион для его загрузки (должен совпадать с будущим регионом виртуальной машины). В качестве операционной системы образа выберите "Unknown"
Нажмите "Upload image"
Дождитесь загрузки образа.
Перейдите на главную страницу DigitalOcean.
Для перехода к создаю виртуальной машины, перейдите в "Create" -> "Droplets":
Выберите регион и датацентр для Вашей виртуальной машины.
Далее выберите ранее загруженный образ и конфигурацию для вашей виртуальной машины:
Перейдите во вкладку "Additional Storage". Здесь необходимо добавить второй диск, который будет использоваться для хранения записей разговоров. Для этого нажмите "Add volume" и укажите параметры для нового диска.
Перейдите в раздел "Choose authentication method". Здесь необходимо выбрать "SSH Key" и добавить связку ключей для SSH подключения. Подробнее прочитать про их создание Вы можете в следующих статьях:
Нажмите "Create Droplet".
Перейдите в меню созданной машины. Дождитесь ее запуска. Далее подключитесь с помощью встроенной консоли в DigitalOcean (элемент на скриншоте).
После загрузки системы, перейдите в web-интерфейс, используя внешний IP-адрес, указаный в консоли (external).
Вставьте IP-адрес машины в строку браузера. После перехода на страницу авторизации в MikoPBX, используйте следующие данные для входа:
Логин - admin
Пароль - id Виртуальной машины, найти который Вы можете в адресной строке:
Для подключения по SSH следуйте инструкциям. В данной статье будет пример с использованием powershell (windows).
Перейдите в Powershell и пропишите следующую команду:
После нажатия "Enter" произойдет авторизация по SSH и Вы попадете в консольное меню MikoPBX.
Инструкция актуальна для версии 2024.2.111 и новее!

ssh -i C:\Users\<Username>\.ssh\id_ed25519 do-user@mikopbxipadressСтандартный логин для авторизации по SSH для ВМ в DigitalOcean - do-user.
Замените:
C:\Users\<Username>\.ssh\id_ed25519 на путь к Вашему ключу на локальном устройстве
do-user на Ваш root-логин (если Вы его изменяли при созданиии ВМ)
Укажите:
Имя образа - любое желаемое название для вашего образа.
ОС - Linux
Источник - Файл
Файл - выберите раннее загруженный файл с расширением .raw
Все остальное - по умолчанию.
Нажмите создать и дождитесь окончания процесса.
Перейдите в раздел Облачная платформа -> Серверы
Нажмите "Создать сервер":
В конфигурации вашей ВМ укажите:
Имя - произвольное название.
Пул - такой же, как у раннее созданного образа.
Источник - выберите раннее загруженный образ.
Конфигурация - желаемое "железо" исходя из ваших потребностей.
Диски: Здесь вам необходимо указать размер для первого диска (он же - системный диск) - 5Гб (минимально возможный в Selectel). А так же создайте новый диск, используя кнопку "Добавить". Укажите размер. Для диска, который используется для записи разговоров - рекомендуемое значение >50Гб. Типы дисков - "Базовый HDD"
Сеть - "Приватная + 1 публичный IP"
Нажмите "Создать сервер".
После создания, сразу остановите запуск сервера.
Перейдите в раздел Облачная платформа -> Сеть.
Перейдите в конфигурацию сети "Nat":
Перейдите в раздел Подсети -> Автоматические сетевые настройки.
Включите переключатель "DHCP-сервер".
Вернитесь к разделу Облачная платформа -> Серверы. Далее - в созданный сервер.
Включите сервер:
Перейдите в раздел "Syslog":
Произведите подключение по:
External IP Address - внешний IP-адрес вашей MikoPBX. Скопируйте и вставьте его в адресную строку.
Web credentials - данные для входа в WEB-интерфейс. Введите логин и пароль.

Период - календарный период отсутствия сотрудников в офисе. Например, на время новогодних или майских праздников
Дни недели - конкретные дни недели, для которых будет выполняться данное правило
Период времени - период времени отсутствия сотрудников в течении суток.
Применять только к определенным входящим маршрутам - можно активировать эту функцию и с помощью нее выбирать на какие входящие маршруты будет распространяться данное правило. (Подробнее ниже)
Действие с входящим вызовом - можно выбрать проиграть звуковой файл или перевести вызов. Перевести вызов можно на конференцию, IVR меню, очередь, внутренний номер сотрудника или служебные номера завершения вызова.
В поле Комментарий можно заметку, с описанием созданного правила, чтобы по данному описанию можно было быстро сориентироваться о сущности данного правила.
Кнопкой с ластиком можно очистить поля, напротив которых эта кнопка располагается.
Активировав эту функцию, сверху у вас появится новое меню "Ограничения по маршрутам"
Здесь вы можете выбрать к каким конкретно маршрутам будет применяться создаваемое вами правило.
Данным правилом указываются звонки с конца рабочего дня (19:00) и до начала рабочего дня (9:00).
Данным правилом указываются звонки по выходным дням: в субботу и воскресенье.



На следующей странице добавьте название для создаваемого пароля - это поможет для его идентификации в будущем. В нашем примере - "SMTP для MikoPBX".
Нажмите Продолжить.
Выберите тип протокола - "Только отправка писем в Почте".
Нажмите Продолжить.
Скопируйте пароль и введите его, когда будете входить с почтой Mail в почтовую программу.
Перейдите в раздел "Система" -> "Почта и уведомления".
Перейдите в "Настройки SMTP". Заполните все необходимые параметры:
Адрес отправителя - Ваш адрес электронной почты.
Имя отправителя - имя от которого отправляется почта.
Тип аутунтификации - "Логин и пароль".
SMTP логин - Ваш адрес электронной почты.
SMTP пароль - созданный пароль для внешнего приложения.
SMTP хост - smtp.mail.ru
SMTP порт - 465.
Тип шифрования - SSL/TLS (порт 465).
Нажмите "Сохранить".
Нажмите "Проверить подключение". Вы увидите следующее окно, подтверждающее правильность введенных данных:

Пароль будет отображен только один раз! В случае утери необходимо создать новый, повторив все шаги с самого начала.
Установка MikoPBX с помощью VMware Fusion.
Создаем новую виртуальную машину.
После скачивания последней версии образа (ссылка), указываем ISO файл с установочным дистрибутивом.
Нажимаем "Continue"
Выбираем тип операционной системы Other Linux 5.x and later kernel 64-bit
Нажимаем "Continue"
Выбираем тип биоса Legacy
Нажимаем "Continue"
Нажимаем "Finish"
После создания виртуальной машины, дождитесь ее загрузки
Перейдите в раздел "[3] Reboot the system"
Выберите "[2] Shutdown"
После выключения виртуальной машины, перейдите в настройки
Выберите "Add device"
Выберите "New Hard Disk"
Нажмите "Add..."
Выберите размер жесткого диска(мы рекомендуем не менее 50ГБ)
Нажмите "Apply"
Запустите виртуальную машину
Выберите пункт "[8] Install"
Введите имя диска, на который будет установлена MikoPBX
В нашем случае - sdb, введите его название и нажмите Enter
Подтвердите выбор диска: введите y
Выберите диск для записи разговоров
В нашем случае - sdc, введите его название и нажмите Enter
Система перезагрузится и MikoPBX будет готова к использованию.
В АТС отображается IP адрес станции, по которому к ней можно подключится
Введите IP адрес станции в строку браузера и у вас откроется меню входа в MIkoPBX
Логин и пароль по умолчанию - "admin"
Установка MikoPBX в UTM
В данной иснтрукции будет произведена установка на UTM. Перед ее началом скачайте файл образа диска с расширением ".iso". Сделать это можно по ссылке.
Перейдите в UTM. Нажмите "Create a New Virtual Machine" для создания новой виртуальной машины.
В качестве типа виртуальной машины выберите "Virtualize".
В качестве типа операционной системы выберите "Preconfigured" - "Linux".
Выберите ранее загруженный файл образа диска в разделе "Boot ISO Image". Для этого нажмите на "Browse...".
Далее укажите характеристики Вашей виртуальной машины. В нашем случае будут использованы 2 ГБ ОЗУ и 2 ядра процессора.
Далее укажите размер для системного диска. В нашем случае - 1 Гб.
Нажмите Continue.
Будет отображена итоговая конфигурация виртуальной машины. Задайте ей желаемое имя (поле "Name"). И нажмите "Save".
Перейдите в настройки ВМ. Для этого нажмите правой кнопкой мыши по её названию, далее "Edit".
Перейдите в "Drives". Нажмите "New..."
Создайте новый диск со следующими параметрами:
Interface - VirtlO
Size - не менее 50Гб (в этой документации для тестовой машины будет использовано 10Гб)
Нажмите "Create".
Запустите виртуальную машину.
После загрузки Вы увидите надпись PBX is running in Live or Recovery mode. Это означает, что система загружена из образа диска в Live режиме. Необходимо произвести установку системы. Для этого перейдите к разделу "[8] Install on Hard Drive".
Выберите диск для установки системы. В нашем случае доступны диски vda и vdb, для установки выбираем диск vda.
Подтвердите выбор: введите "y" с клавиатуры и нажмите Enter.
Далее выберите диск для хранения записей разговоров. В нашем случае единственный оставшийся размером 10 Гб.
После этого система будет перезагружена и доступна в обычном режиме (надпись "PBX is running in Live or Recovery mode" пропадет).
Введите этот IP-адрес в строку браузера для перехода в Веб-интерфейс.
Описание и настройка входящей маршрутизации
В данном разделе необходимо создать правила и шаблоны распределения входящих звонков для созданных в MikoPBX провайдеров. Правила входящих звонков описывают маршрут звонка с момента его поступления в АТС до момента его завершения. Вы можете создавать неограниченное количество правил входящей маршрутизации. Для одного провайдера можно создать несколько правил.
Правила располагаются в списке в порядке их приоритета. Если за указанный в правиле интервал времени никто не ответит на входящий вызов, то вызов направится на следующее по приоритету правило. Правила можно перемещать в списке вверх-вниз, то есть изменять их приоритет, перетаскивая их за стрелки.
Если ни по одному из правил на звонок не ответили, применяется входящий маршрут по умолчанию.
Доступны следующие действия, которые можно указать в качестве правила по умолчанию:
Воспроизвести сигнал занято - клиент будет воспроизведен сигнал занято и входящий вызов будет завершен;
Положить трубку;
Перевести вызов - вызов можно перевести на номер, который вы можете выбрать в поле, расположенном справа от действия. В качестве номера для перевода можно выбрать IVR-меню, очередь вызовов, конференцию, внутренний номер сотрудника.
Для одного провайдера можно описать несколько входящих маршрутов.
Сперва вызов идет по верхнему маршруту. Если клиент не дозвонился, то вызов идет по нижнему правилу (более низкий приоритет). Если клиент не дозвонился и по второму маршруту, то вызов идет по маршруту по умолчанию.
Чтобы добавить новое правило входящей маршрутизации нажмите на кнопку Добавить новое правило.
В поле Заметка опишите маршрут, который хотите реализовать. В дальнейшем это поможет вам в отладке схемы звонка.
Выберите Провайдера, для которого создаете новый шаблон распределения входящих звонков.
Дополнительный номер DID - это номер, на который вам позвонил клиент, в ряде случаев может совпадать с логином провайдера. Это не обязательное поле и его следует заполнять, если необходимо более точно маршрутизировать вызовы.
Голосовое приветствие - необязательное поле, допускается выбрать медиа файл для воспроизведения звонящему.
На следующем шаге необходимо указать на какой телефонный номер будет направлен входящий вызов от клиента. В качестве телефонного номера могут выступать номера IVR-меню, очереди вызовов, конференции, внутренние номера сотрудников.
Укажите время, в течение которого вызов будет идти на указанный вами телефонный номер.
Если спустя указанный интервал времени никто не ответит на входящий вызов, то вызов направится на следующее по приоритету правило.
Создание и настройка IVR меню в MikoPBX
IVR меню в MikoPBX — это интерактивное голосовое меню, которое позволяет звонящим взаимодействовать с телефонной системой с помощью тонового набора (DTMF). Оно автоматически направляет вызовы к нужным отделам или сотрудникам, улучшая эффективность обработки звонков и повышая качество обслуживания клиентов.
Перед созданием IVR меню необходимо загрузить звуковые файлы, которые будут проигрываться клиенту при звонке в Вашу компанию. Звуковые файлы добавляются в разделе Телефония → Звуковые файлы
Также есть возможность записать файл с помощью микрофона, если с АТС соединиться по https.
Перейдите в Телефония → IVR меню.
Нажмите Создать новое IVR меню. Задайте наименование IVR меню, номер и при необходимости комментарий. Выберите звуковой файл, который вы загрузили на предыдущем этапе.
Настройте Действия при донаборе. В первой колонке укажите цифру или комбинацию цифр, которую набирает абонент, а во второй выберите номер, куда будет направлен вызов.
Задайте Количество повторов перед переводом на номер по умолчанию.
Установите Таймаут ожидания ввода добавочного номера (значение в секундах), после которого будет повтор голосового приветствия.
Номер по умолчанию необходим для случая, если клиент не ввел добавочный номер (к примеру не было технической возможности).
Включите переключатель Разрешить набор любого внутреннего номера при необходимости.
Введите номер IVR меню, позвонив на который, можно на это IVR попасть.
Нажмите Сохранить.
При звонке на голосовое меню (Номер IVR меню) начинает проигрываться звуковой файл Голосовое приветствие.
Во время проигрывания голосового меню можно выбирать пункты меню или набирать внутренний номер сотрудника. За донабор внутренних номеров отвечает флаг Разрешить донабор любого внутреннего номера. Он разрешает набор внутренних номеров сотрудников с SIP-аккаунтом; переходы на очереди, IVR, конференции и другие направления настраиваются отдельными действиями при донаборе.
После проигрывания голосового меню происходит ожидание в течение значения Таймаут ожидания ввода добавочного номера для набора добавочного. Общее время для набора номера = длительность звукового файла + таймаут ожидания ввода добавочного номера
Инструкция по подключению Яндекс Cloud Object Storage в качестве S3-хранилища
Перейдите в консоль Yandex Cloud (ссылка).
Перейдите в раздел "Все сервисы" -> "Object Storage".
Нажмите "Создать бакет".
Заполните следующие параметры для создаваемого бакета:
Имя — укажите название бакета (в нашем примере - mikopbx-s3-storage). Имя должно быть уникальным в рамках всего Yandex Cloud.
Макс. размер — задайте максимальный объём бакета. Рекомендуется установить значение, соответствующее вашим потребностям (не менее 50 ГБ для рабочей станции), чтобы контролировать расход облачного пространства. Если ограничение не нужно — отметьте «Без ограничения».
Доступ — для всех трёх параметров (Чтение объектов, Чтение списка объектов, Чтение настроек) выберите значение «С авторизацией».
После заполнения всех параметров нажмите кнопку «Создать бакет».
Перейдите в раздел "Все сервисы" -> "Identity and Access Management".
Нажмите "Создать сервисный аккаунт".
Укажите следующие параметры:
Имя — введите название сервисного аккаунта (например, mikopbx-s3-access).
Роли в каталоге — нажмите «Добавить роль», в строке поиска введите storage и выберите роль storage.editor. Эта роль даёт необходимые права.
После заполнения параметров нажмите «Создать».
Перейдите в дашбоард созданного сервисного аккаунта, нажав на его название.
Нажмите "Создать новый ключ" -> "Создать статический ключ доступа".
6. Введите описание для создаваемого ключа и нажмите "Создать".
Будут отображены идентифкатор ключа и секретный ключ. Сохраните эти значения, они понадябтся позже для подключения хранилища к MikoPBX.
Перейдите во вкладку "Обслуживание" -> "Хранилище".
Перейдите на вкладку "Облачное хранилище S3" и заполните следующие поля:
Автоматическая загрузка записей в облачное хранилище — включите переключатель.
URL точки доступа S3 — введите https://storage.yandexcloud.net
Регион S3 — укажите регион Вашего аккаунта в Yandex Cloud, в этой инструкции - ru-central1
Настройте ползунок «Локальное хранение (режим S3)» — выберите, как долго записи будут храниться локально до удаления после выгрузки в облако.
Нажмите «Сохранить».
После сохранения настроек нажмите "Проверить соединение". При успешном подключении появится сообщение «Подключено к S3» и начнется синхронизация записей телефонных разговоров.
Использование дискового пространства и настройки хранения
Раздел «Хранилище» в MikoPBX позволяет контролировать использование дискового пространства и управлять настройками хранения данных. Здесь отображается подробная разбивка занятого места по категориям: записи разговоров, системные логи, резервные копии и другие файлы. Помимо мониторинга локального хранилища, раздел предоставляет возможность настроить автоматическую выгрузку записей в облачное хранилище S3.
Расположение раздела: "Обслуживание" -> "Хранилище".
На вкладке «Информация о хранилище» отображается общая картина использования дискового пространства.
В верхней части страницы находится блок с горизонтальной диаграммой, которая наглядно показывает, какую долю от общего объёма диска занимает каждая категория данных.В примере занято 56.0 GB из 100.0 GB. Каждый сегмент диаграммы окрашен в свой цвет в соответствии с легендой:
🟠 Записи разговоров
🟣 История разговоров
🔵 Системные логи
🟢 Дополнительные модули
🩵 Резервные копии
🔴 Системные кеши
⚫ Прочие файлы
В нижней части страницы находится список категорий данных и количество памяти, которая каждая из них занимает.
На вкладке "Локальное хранилище" доступно определение срока хранения записей разговоров на станции: передвигая ползунок, выберите необходимый период хранения:
30 дней (1 месяц) - минимальный период хранения.
90 дней (3 месяца) - рекомендуется для малого бизнеса.
1 год - для соблюдения требований законодательства.
Бесконечно - хранить все записи без ограничений.
На этой вкладке настраивается автоматическая выгрузка записей разговоров во внешнее S3-совместимое хранилище (например: Amazon S3, Яндекс Cloud, VK Cloud).
В верхней части вкладки находится переключатель «Автоматическая загрузка записей в облачное хранилище» — он включает или отключает функцию выгрузки.
Для подключения к бакету необходимо заполнить следующие поля:
URL точки доступа S3 — адрес сервиса хранилища (например, https://storage.yandexcloud.net для Yandex Cloud S3).
Регион S3 — регион размещения бакета (например, ru-central1).
Имя бакета S3 — название бакета, в который будут загружаться записи.
Нажмите "Сохранить" для сохранения настроек.
Далее нажмите кнопку «Проверить соединение» — система выполнит тестовое подключение и отобразит результат в верхней части страницы. При успешном подключении появится сообщение «Подключено к S3» и начнется синхронизация записей телефонных разговоров.
В нижней части вкладки расположен ползунок «Локальное хранение (режим S3)» — он определяет, как долго записи будут сохраняться локально на станции перед тем, как они будут выгружены в облачное хранилище и удалены со станции (локально). Срок локального хранения не может превышать общий срок хранения.
Установка MikoPBX в Yandex Cloud из Marketplace
Для начала зарегистрируйтесь в сервисе Yandex Cloud.
Приступим к настройке
Откройте Все сервисы / Инфраструктура и сеть / Compute Cloud
Перейдите в раздел Виртуальные машины
На вкладке выберите Создать ВМ
Введите имя виртуальной машины, например vm-mikopbx
Укажите зону доступности
Укажите параметры вычислительных ресурсов виртуальной машины, исходя из ожидаемой нагрузки на АТС и вашего бюджета. Для тестовой машины можно указать Гарантированная доля vCPU - 20%, RAM - 1 Гб
В разделе Выбор образа/загрузочного диска выберите Marketplace / Показать все продукты Marketplace / VoIP / MikoPBX IP АТС
В разделе Диски и файловые хранилища скорректируйте размер загрузочного диска до 1 Гб
В разделе Диски и файловые хранилища выберите Добавить диск
На открытой вкладке введите имя диска для хранения данных, например storage-mikopbx
Укажите тип диска HDD
Укажите размер диска не менее 50 Гб
В разделе Сетевые настройки выберите существующую или создайте новую облачную сеть
В поле Подсеть в выпадающем меню выберите Добавить подсеть
На открытой вкладке введите имя подсети, например local-mikopbx
В поле CIDR укажите диапазон адресов, например 172.16.32.0/24
Публичный адрес и Внутренний IPv4-адрес оставьте в положении Автоматически
В разделе Доступ укажите Сервисный аккаунт
Введите Логин и SSH-ключ, предварительно сгенерированный по
В разделе Дополнительные настройки установите флажок Разрешить доступ к серийной консоли
Завершив ввод значений, нажмите кнопку Создать ВМ
Дождитесь запуска созданной виртуальной машины, обычно первый запуск занимает 6-8 минут. Статус Running, еще не означает что система полностью развернулась
Откройте созданную виртуальную машину и перейдите в раздел Серийная консоль
Скопируйте внешний адрес созданной виртуальной машины и введите его в строке браузера
Для входа используйте указанные во вкладке Серийная консоль логин и пароль
Инструкция по подключению DigitalOcean Spaces Object Storage в качестве S3-хранилища
Перейдите в консоль DigitalOcean (ссылка).
Перейдите в раздел "Manage" -> "Spaces Object Storage". Нажмите "Create a Spaces Bucket" для создания нового бакета.
На странице создания бакета, в разделе "Choose a datacenter region", выберите ближайший к серверу MikoPBX регион. Выберите "Standart Storage".
В поле "Choose a unique Spaces Bucket name" укажите произвольное название для бакета.
Нажмите "Subscribe & Create Bucket".
Перейдите на страницу созданного бакета (нажмите на его название в разделе "Buckets").
Перейдите на вкладку "Settings".
Пролистайте до раздела "Access Keys". Нажмите "Create Access Key" для создания новой связки ключей.
Заполните необходимые параметры для создаваемого ключа:
Select access scope - Limited Access.
Buckets - выберите ранее созданный бакет.
Permissions - Read/Write/Delete.
Give this access key a name - укажите произвольное название для идентификации связки ключей.
Нажмите "Create Access Key".
Будет отображены значения связки ключей (Access Key ID и Secret Key). Сохраните эти значения, они понадобятся в будущем при настройке на стороне MikoPBX.
Перейдите во вкладку "Обслуживание" -> "Хранилище".
Перейдите на вкладку "Облачное хранилище S3" и заполните следующие поля:
Автоматическая загрузка записей в облачное хранилище — включите переключатель.
URL точки доступа S3 — введите https://sgp1.digitaloceanspaces.com - замените sgp1 на Ваш регион.
Регион S3 — укажите регион Вашего бакета в DigitalOcean, в этой инструкции - sgp1.
Настройте ползунок «Локальное хранение (режим S3)» — выберите, как долго записи будут храниться локально до удаления после выгрузки в облако.
Нажмите «Сохранить».
После сохранения настроек нажмите "Проверить соединение". При успешном подключении появится сообщение «Соединение с S3 успешно» и начнется синхронизация записей телефонных разговоров.
Описание работы в MikoPBX
REST API MikoPBX позволяет автоматизировать управление станцией и интегрировать её с внешними системами — CRM, helpdesk, корпоративными порталами и собственными сервисами. Для доступа к API используются API ключи.
Все запросы к REST API авторизуются через заголовок Authorization: Bearer <token>. MikoPBX поддерживает два типа токенов:
JWT токен
Для внешних интеграций всегда используйте API ключ — он создаётся вручную, имеет настраиваемые права доступа и может быть отозван в любой момент.
Перейдите в раздел «Система» → «API ключи».
Нажмите «Добавить API ключ».
Заполните поле Описание (например: CRM Integration)
Скопируйте сгенерированный API-ключ — он отображается только один раз
Важно: сохраните ключ сразу после создания. После закрытия страницы восстановить его невозможно — придётся создавать новый.
Придерживайтесь принципа минимальных привилегий — каждый ключ должен иметь доступ только к тем ресурсам, которые реально нужны.
При создании ключа доступны два варианта:
Полные права доступа — ключ получает доступ ко всем ресурсам API на чтение и запись. Используйте только если это действительно необходимо.
Ручная настройка — для каждого ресурса API отдельно указывается уровень доступа: только чтение, чтение и запись, или нет доступа.
Сетевой фильтр: выберите один из двух вариантов:
Только локальные подключения — ключ будет работать только из локальной сети. Рекомендуется если интеграция работает внутри инфраструктуры.
Разрешены подключения с любых адресов — ключ доступен без ограничений по IP. Используйте только если клиент находится за пределами локальной сети.
Соблюдение следующих требований защищает API от перехвата токенов и несанкционированного доступа:
Валидный SSL сертификат:
Используйте доверенный SSL сертификат на стороне сервера MikoPBX. Самый простой способ — выпустить бесплатный сертификат через модуль Let's Encrypt (инструкция по работе с модулем находится ).
Работа без валидного сертификата допустима только в изолированной тестовой среде без доступа из интернета.
Доверие к сертификату на стороне клиента:
Клиент обязан проверять сертификат сервера при каждом запросе. Отключение проверки (verify=False в Python, -k в curl) недопустимо в production: без неё возможна атака типа «человек посередине» (MITM), при которой злоумышленник перехватывает Bearer-токен в открытом виде.
Ограничение прав (scope) ключа:
Каждый ключ должен иметь доступ только к тем ресурсам, которые реально используются интеграцией. Не используйте «Полные права доступа» без необходимости — компрометация такого ключа даёт атакующему полный контроль над API.
Ограничение сетевого доступа:
Если интеграция работает внутри локальной сети — выбирайте «Только локальные подключения». Это исключает возможность использования скомпрометированного ключа из внешней сети.
Вариант «Разрешены подключения с любых адресов» используйте только когда клиент физически находится за пределами локальной сети, и убедитесь что остальные меры безопасности соблюдены — валидный SSL сертификат и минимальные права ключа.
Нажмите на карточку для перехода:
Настройка почты и уведомлений
Раздел «Почта и уведомления» в MikoPBX позволяет настроить отправку системных уведомлений через электронную почту. Здесь администраторы указывают параметры SMTP-сервера, определяют события для уведомлений, такие как голосовые сообщения или системные ошибки, и редактируют шаблоны писем. Этот раздел помогает своевременно информировать пользователей и администраторов о важных событиях, обеспечивая эффективный контроль за работой системы.
Использовать оповещения - позволяет включить/отключить все оповещения на email, включая голосовую почту.
Отправлять уведомления о пропущенных вызовах - позволяет включить/отключить уведомления о пропущенных вызовах.
Единый Email для уведомлений о пропущенных вызовах - общий адрес электронной почты для отправки уведомлений о пропущенных внешних вызовах (если у сотрудника не указан email, используется этот общий адрес).
Отправлять уведомления о голосовых сообщениях - позволяет включить/отключить уведомления о голосовых сообщениях.
Единый Email для уведомлений о голосовых сообщениях - общий адрес электронной почты для отправки уведомлений о голосовых сообщениях (приоритет: 1. Личный email сотрудника; 2. Указанный email в этом поле)
Отправлять уведомления о входах в систему - позволяет включить/отключить уведомления о входах в систему.
Отправлять системные уведомления - позволяет включить/отключить отправку системных уведомлений.
Email системного администратора - адрес, на который будут отправляться системные уведомления.
Адрес отправителя, Имя отправителя - от имени этого адреса и имени будут отправляться электронные письма.
Тип аутентификации:
Логин и пароль - классический тип аутентификации при подключении к SMTP-серверу, при котором используется адрес почтового ящика (логин) и пароль от него. Все параметры (сервер, порт, шифрование, логин и пароль) вводятся и хранятся вручную
SMTP логин, SMTP пароль - параметры авторизации.
SMTP хост - адрес почтового сервера.
SMTP порт - порт почтового сервера.
Тип шифрования:
SMTP логин - параметры авторизации.
Провайдер OAuth2 - почтовый сервис, через который выполняется OAuth-аутентификация (например, Microsoft/Outlook, Google/Gmail).
Идентификатор приложения (Client ID) - уникальный идентификатор приложения, созданного в панели управления выбранного OAuth-провайдера. Используется для того, чтобы провайдер понимал, какое именно приложение запрашивает доступ к почтовому ящику.
В нашей документации приведено несколько примеров подключения для каждого из типов аутентификации. Ниже Вы можете найти ссылки на эти инструкции.
Аутентификация по логину и паролю:
Аутентификация oAuth2:
Настройка почты для сервиса Yandex Mail через oAuth2 авторизацию
Авторизуйтесь в Ваш аккаунт Яндекс и далее перейдите на страницу создания приложения. Нажмите "Создать".
В диалоговом окне выберите опцию "Для атворизации пользователей". Нажмите "Перейти к созданию".
Далее заполните необходимую информацию:
Название - произвольное.
Иконка сервиса - произвольное изображение.
Почта для связи - почта на которую будут приходить уведомления об авторизации.
Нажмите "Продолжить".
Далее выберите в качестве платформы "Веб-сервисы". В поле "Redirect URl" вставьте следующую ссылку:
Замените 192.168.100.60 на ip-адрес Вашей станции.
Нажмите "Продолжить".
Далее на странице "Права доступа к данным пользователей" в разделе "Дополнительные" впишите "smtp" и выберите доступ "Отправка писем через Яндекс.Почту по протоколу SMTP".
На следующей странице нажмите "Всё верно, создать приложение".
После создания приложения будет выведены ClientID и Client Secret. Далее они понадобятся нам для настройки внутри web-интерфейса MikoPBX.
Перейдите в Web-интерфейс MikoPBX. Далее "Система" -> "Почта и уведомления" -> "Настройки SMTP".
Заполните все необходимые данные:
Адрес отправителя, Имя отправителя - Ваша почта и от какого имени будут отправляться письма.
Тип аутентификации - OAuth2.
SMTP логин - Ваша почта.
Провайдер OAuth2 - Yandex Mail.
Все остальные настройки оставьте по умолчанию. Более подробное описание Вы можете найти в главное статье о параметрах почты ().
После этого нажмите "Сохранить"!
Нажмите "Подключить через OAuth2". Войдите в Ваш аккаунт Яндекс. После авторизации, нажмите "Log in as...".
При успешной авторизации Вы увидите соответствующее окно.




















Установка MikoPBX с помощью VMware ESXi.
Создаём новую виртуальную машину
Указываем Имя, Тип и Версию виртуальной машины, как показано на изображении ниже.
Установка в Yandex cloud произвольного образа MikoPBX
Для начала зарегистрируйтесь в сервисе .
Приступим к настройке
Откройте Все сервисы / Инфраструктура и сеть / Compute Cloud
Перейдите в раздел Виртуальные машины
На вкладке выберите Создать ВМ
Установка MikoPBX с помощью VK Cloud
Для начала авторизуйтесь на сайте
Приступим к настройке
Откройте Виртуальные сети / Сети
На вкладке Сети выберите Создать
Введите имя новой сети, например pbx_network
Установка MikoPBX с помощью 1С:Облачная инфраструктура
Для начала авторизуйтесь на сайте
Приступим к настройке
Откройте Виртуальные сети / Сети
На вкладке Сети выберите Создать
Введите имя новой сети, например pbx_network
Просмотр и фильтр истории вызовов в MikoPBX
История вызовов в MikoPBX — это журнал, который сохраняет информацию о всех входящих и исходящих звонках через систему. Она предоставляет детальные данные о каждом вызове, включая время, длительность, номера участников и статус, что позволяет анализировать коммуникации и оптимизировать работу телефонной сети компании. Располагается в разделе "Телефония" -> "История вызовов".
История вызовов в MikoPBX позволяет:
Отобразить все вызовы;
Обновление MikoPBX, запущенной в Docker или Docker Compose
Docker-контейнер MikoPBX не обновляется файлами .img или .iso. Для перехода на новую версию нужно скачать новый Docker image и пересоздать контейнер, сохранив каталоги /cf, /storage, сетевые параметры и переменные окружения.
Создайте резервную копию настроек MikoPBX. Если модуль резервного копирования недоступен в непривилегированном контейнере, подготовьте резервное копирование каталогов или volumes на стороне Docker-хоста.
Обновление MikoPBX, установленной на виртуальную машину
Эта инструкция подходит для MikoPBX, установленной как полноценная виртуальная машина в VMware, VirtualBox, Hyper-V, KVM, Proxmox VE и других гипервизорах.
Для такой установки доступны два способа обновления:
через web-интерфейс — основной и наиболее удобный способ;
с ISO-образа — резервный способ, если web-интерфейс недоступен или требуется восстановление системы.
Подключение, настройка и управление модулями
Дополнительные модули позволяют расширить возможности функционала основной системы. В данной инструкции вы сможете найти информацию про управление модулями, а так же про установку приложений с помощью встроенного Marketplace.
Подробные инструкции по настройке и эксплуатации каждого модуля вы можете найти .
Найти раздел Управления модулями вы можете в "Модули" -> "Маркетплейс модулей".
В данном разделе происходит основное управление модулями: их подключение, настройка, а так же загрузка своих, "кастомных" модулей. Документацию по разработке своих модулей вы можете найти .
Все установленные модули находятся в списке, в одноимённой вкладке:
Есть возможность загрузить свой модуль, используя кнопку "Загрузить новый модуль". Необходимо загружать файлы .zip. После загрузки модуль появится в списке на вкладке "Установленные модули
Описание процесса регистрации
Регистрация в Маркетплейсе MikoPBX не влияет на базовый функционал системы. Вы можете использовать MikoPBX для работы со звонками без регистрации и установки дополнительных модулей. Однако, Мы рекомендуем пройти процедуру регистрации в маркетплейсе для получения возможности расширения функционала системы.
Регистрация даст вам доступ к дополнительным модулям и расширениям. Есть бесплатные модули, который мы вынесли из базового функционала для упрощения первоначальной настройки, а также платные модули от нас и других разработчиков. Если вы разработчик, то можете связаться с нами, написав на почту developers@mikopbx.com для получения инструкций о том, как разработать собственный модуль и добавить его в Marketplace.
Для начала регистрации в маркетплейсе вам необходимо перейти во вкладку "Модули" -> "Маркетплейс модулей":
В случае, если у Вас не выполнена регистрация в Маркетплейсе, раздел будет выглядеть вот так:
Нажмите синюю кнопку "Регистрация в маркетплейсе" для начала регистрации:
Настройка доступа к AMI
Asterisk Manager Interface (AMI) - мощный и удобный программный интерфейс (API) Asterisk для управления системой из внешних программ. Благодаря AMI внешние программы могут осуществлять соединения с Asterisk посредством TCP протокола, инициировать выполнение команд, считывать результат их выполнения, а так же получать уведомления о происходящих событиях в реальном времени. AMI часто используют для интеграции с бизнес-процессами и системами, программным обеспечением CRM (Customer Relationship Managment — управление взаимодействия с клиентами). Управление Asterisk часто осуществляется из консоли CLI, но при использовании AMI не требуется прямой доступ к серверу, на котором запущен Asterisk. AMI — это наиболее простой инструмент, который в руках разработчика может оказаться очень мощным и гибким средством для интеграции с другими программными продуктами. Он дает возможность разработчикам использовать информацию, генерируемую Asterisk, в реальном масштабе времени.
Первое что необходимо сделать, это включить AMI и завести пользователя, с помощью которого клиентская программа будет аутентифицироваться. «Система» - «Доступ к AMI»
Для добавления новой учетной записи необходимо указать Имя пользователя и Пароль. Кроме того, необходимо задать Сетевой фильтр, т.е. из какой подсети разрешено подключение к пользователю AMI. Вы можете разрешить подключения с любых адресов, либо указать конкретную сеть, настройку который Вы произвели в разделе
Внутренние компоненты системы, модули, встроенные инструменты
API ключ
Внешние интеграции: CRM, скрипты, сторонние сервисы





































Если общее время для набора номера истекло, происходит повторное голосовое оповещение и ожидание в течение таймаута, то есть следующая попытка IVR.
Если пользователь некорректно набирает номер или вообще ничего не набирает, то также происходит повторное голосовое оповещение и ожидание в течение таймаута - следующая попытка IVR.
Максимальное количество попыток задается в параметре Количество повторов, перед переводом на номер по умолчанию.
Как только попытки превысят указанное значение, происходит переадресация на Номер по умолчанию.






Имя бакета S3 — укажите имя бакета, созданного в Яндекс Cloud (например, mikopbx-s3-storage в этой инструкции)
Ключ доступа и Секретный ключ — вставьте значения, полученные при создании статического ключа сервисного аккаунта.
После закрытия диалога значение ключа будет недоступно.













Ключ доступа и Секретный ключ — учётные данные сервисного аккаунта для авторизации.







Имя бакета S3 — укажите имя бакета, созданного в DigitalOcean (например, mikopbx-s3-storage в этой инструкции)
Ключ доступа и Секретный ключ — вставьте значения, полученные в первой части этой инструкции (связка Access ключей).











OAuth2 - способ аутентификации, при котором Вы не храните и не передаёте пароль от почтового ящика. Вместо этого приложение получает временный токен доступа у почтового провайдера (Microsoft 365/Outlook, Google Workspace/Gmail и т.д.) и использует его при отправке писем через SMTP.
Без шифрования (порт 25) - классический способ подключения к SMTP без защиты канала.
STARTTLS (порт 587) - рекомендованный и наиболее распространённый способ отправки почты. Соединение начинается без шифрования, после чего клиент и сервер согласовывают переход на защищённый канал.
SSL/TLC (порт 465) - подключение к SMTP с шифрованием с самого начала соединения. Канал защищён сразу после установки TCP-соединения, без этапа переключения.
Проверять сертификат сервера - настройка безопасности, которая определяет, будет ли клиент проверять подлинность SSL/TLS-сертификата SMTP-сервера при установке защищённого соединения (STARTTLS или SSL/TLS).
SMTP хост - адрес почтового сервера.
SMTP порт - порт почтового сервера.
Тип шифрования:
Без шифрования (порт 25) - классический способ подключения к SMTP без защиты канала.
STARTTLS (порт 587) - рекомендованный и наиболее распространённый способ отправки почты. Соединение начинается без шифрования, после чего клиент и сервер согласовывают переход на защищённый канал.
SSL/TLC (порт 465) - подключение к SMTP с шифрованием с самого начала соединения. Канал защищён сразу после установки TCP-соединения, без этапа переключения.
Проверять сертификат сервера - настройка безопасности, которая определяет, будет ли клиент проверять подлинность SSL/TLS-сертификата SMTP-сервера при установке защищённого соединения (STARTTLS или SSL/TLS).









Идентификатор приложения (Client ID), Секретный ключ (Client Secret) - данные из Yandex (6 пункт из прошлого раздела в этой инструкции).










Сохраните текущую конфигурацию контейнера:
Проверьте подключения /cf и /storage:
Запишите используемые порты, network_mode, hostname и переменные окружения. Если контейнер запускается через Compose, сохраните актуальный docker-compose.yml и файл .env.
Завершите активные вызовы и запланируйте техническое окно.
Для последней стабильной версии выполните:
Если используется фиксированный тег, укажите тот же registry и тег нужной версии вместо latest.
Остановите контейнер:
Создайте консистентную резервную копию /cf, пока контейнер остановлен. Для bind mount из примера выше можно выполнить:
Помимо /cf, новую версию стоит подстраховать бэкапом базы CDR — она лежит в /storage и при первом старте тоже может быть мигрирована. В /cf находится только mikopbx.db (настройки), а история звонков — это отдельная cdr.db (и recording_storage.db) в /storage/usbdisk1/mikopbx/astlogs/asterisk/.
Бэкап делается на остановленном контейнере (как и для /cf), чтобы база была в согласованном состоянии:
При откате восстанавливайте оба архива: сначала /cf, затем CDR - иначе история звонков и привязка записей к звонкам могут рассинхронизироваться с настройками.
Переименуйте старый контейнер вместо немедленного удаления:
Запустите новый контейнер с теми же параметрами. Пример для установки с host network и bind mounts:
Следите за запуском:
Для выхода из просмотра логов нажмите Ctrl+C — контейнер продолжит работу.
Перейдите в каталог с docker-compose.yml.
Если идентификаторы пользователя передаются через окружение, задайте их так же, как при первом запуске:
Загрузите новый image:
Пересоздайте контейнер:
Проверьте состояние и логи:
Docker Compose пересоздаст контейнер, но сохранит bind mounts и именованные volumes, указанные в docker-compose.yml.
Убедитесь, что контейнер работает:
Откройте web-интерфейс и проверьте версию MikoPBX.
Проверьте наличие настроек и записей разговоров.
Убедитесь, что телефоны и SIP-провайдеры зарегистрировались.
Выполните входящий и исходящий тестовые звонки.
Проверьте публикацию web-, SIP- и RTP-портов, если используется bridge network.
Если новый контейнер не запускается:
Сохраните его логи:
Остановите и переименуйте новый контейнер:
Восстановите резервную копию /cf, созданную до обновления. Способ восстановления зависит от того, используется bind mount, именованный volume или snapshot системы хранения.
Верните прежнее имя старому контейнеру и запустите его:
Для отката установки Docker Compose укажите в docker-compose.yml предыдущий тег image, восстановите предыдущее состояние /cf и снова выполните:
После успешной проверки новый контейнер можно удалить старый:
Рекомендуется производить обновления последовательно, «не перепрыгивая» через релизы и версии.
Пример нельзя копировать без проверки. Повторите все параметры именно вашей прежней установки: тип сети, volumes, порты, hostname, capabilities и переменные окружения.
После первого запуска новая версия могла обновить базу данных в /cf. Поэтому надёжный откат должен опираться не только на старый container image, но и на резервную копию /cf, созданную до обновления.
https://192.168.100.60/pbxcore/api/v3/mail-settings/oauth2-callbacksudo docker inspect mikopbx --format '{{.Config.Image}}'sudo docker inspect mikopbx > mikopbx-container-before-update.jsonsudo docker inspect mikopbx --format '{{range .Mounts}}{{println .Source "->" .Destination}}{{end}}'sudo docker pull ghcr.io/mikopbx/mikopbx:latestsudo docker stop mikopbxsudo tar -C /var/spool/mikopbx -czf mikopbx-cf-before-update.tar.gz cfsudo docker stop mikopbx# бэкап /cf (настройки)sudo tar -C /var/spool/mikopbx -czf mikopbx-cf-before-update.tar.gz cf# бэкап CDR + метаданных записейsudo tar -C /var/spool/mikopbx/storage/usbdisk1/mikopbx \ -czf mikopbx-cdr-before-update.tar.gz astlogs/asterisksudo docker rename mikopbx mikopbx-before-updatesudo docker run --net=host --name mikopbx --hostname mikopbx \
-v /var/spool/mikopbx/cf:/cf \
-v /var/spool/mikopbx/storage:/storage \
-e SSH_PORT=23 \
-e ID_WWW_USER="$(id -u www-user)" \
-e ID_WWW_GROUP="$(id -g www-user)" \
-it -d --restart always ghcr.io/mikopbx/mikopbx:latestsudo docker logs -f mikopbxexport ID_WWW_USER=$(id -u www-user)
export ID_WWW_GROUP=$(id -g www-user)sudo docker compose pullsudo docker compose up -dsudo docker compose ps
sudo docker compose logs -f mikopbxsudo docker ps --filter name=mikopbxsudo docker logs mikopbx > mikopbx-update-error.log 2>&1sudo docker stop mikopbx
sudo docker rename mikopbx mikopbx-failed-updatesudo docker rename mikopbx-before-update mikopbx
sudo docker start mikopbxsudo docker compose up -dsudo docker rm mikopbx-before-updateНаполнение - Пустой
Для других полей на вкладке используйте значения по умолчанию
Нажмите кнопку Добавить
Для других полей на вкладке используйте значения по умолчанию
Нажмите кнопку Создать
Для развертывания АТС используйте два диска:
диск объемом 1 Гб для основной системы
диск объемом 50+ Гб для хранения записей разговоров










mikopbxadress на IP-адрес вашей станции (IPv4 в интерфейсе управления Виртуальной машиной)












Для данной виртуальной машины выделяем объём оперативной памяти 1024 Мб. Создаём новый виртуальный жёсткий диск для основной системы размером 1024 Мб.
Выбираем тип контроллера SCSI и тип адаптера, как на изображении ниже
Выбираем BIOS в качестве Firmware.
Проверяем и сохраняем изменения.
Перейдём к настройкам созданной виртуальной машины. Создайте новый жесткий диск для хранения записей разговоров.
Переходим на вкладку носителей CD/DVD Drive. Загружаем iso-образ для установки. Ставим галочку слева от пункта "Connect as power on"
Запустите созданную виртуальную машину.
Откроется командный интерфейс АТС. АТС начнет загружаться.
На данном этапе MikoPBX загружается с оптического диска, на который записан ISO-образ. На это нам указывает строчка: "The system is loaded in Recovery mode".
Переключите язык интерфейса на русский. Для этого выполните Change Language -> Русский. Меню примет вид:
Произведите установку MikoPBX.
Нажмите Выполнить установку.
Отобразится информация о всех доступных дисках (в данном примере: sdb, sdc).
Введите с клавиатуры имя диска, который вы подразумевали под "системный", в текущем случае sdb и нажмите Enter (Если он выбран по умолчанию можно просто нажать Enter).
Система запросит подтверждение. Введите - y и нажмите Enter.
После выполнения установки будет предложено выбрать диск для хранения записей разговоров.
Введите имя диска (в данном примере - единственный доступный диск sdc) и нажмите Enter.
После завершения установки система перезагрузится.
Теперь MikoPBX будет запускаться с диска sdb, на который вы ее установили. Увидим, что строчка «The system is loaded in Recovery mode» отсутствует.
На этом установка MikoPBX завершена.
Для того, чтобы открыть панель управления вам надо вбить в строку браузера IP-адрес вашей виртуальной машины.
Логин и пароль по умолчанию - admin
На этом установка MikoPBX на завершена.

Для такого диска, мы рекомендуем указывать размер не менее, чем 50 ГБ
Все данные на диске, куда устанавливается MikoPBX, будут потеряны.
Введите имя виртуальной машины, например vm-mikopbx
Укажите зону доступности
Укажите параметры вычислительных ресурсов виртуальной машины, исходя из ожидаемой нагрузки на АТС и вашего бюджета. Для тестовой машины можно указать Гарантированная доля vCPU - 20%, RAM - 1 Гб
Перед созданием виртуальной машины необходимо предварительно загрузить образ MikoPBX в облачное хранилище
Откройте Все сервисы / Инфраструктура и сеть / Object Storage
На вкладке Object Storage выберите Создать бакет
Введите имя нового бакета, например mikopbx-imgs
Укажите макс. размер 1 Гб
Для других полей используйте значения по умолчанию
Завершив ввод значений, нажмите кнопку Создать бакет
Откройте созданный бакет mikopbx-imgs
На открывшейся вкладке выберите Загрузить объекты
Выберите файл из дистрибутива MikoPBX с расширением .raw
Нажмите кнопку Загрузить
После завершения загрузки откройте загруженный объект
Выберите Получить ссылку и скопируйте ссылку на образ
Откройте Все сервисы / Инфраструктура и сеть / Compute Cloud
Перейдите в раздел Образы
На вкладке выберите Загрузить образ
Введите имя образа, например mikopbx-img
В поле Ссылка на образ в Object Storage укажите скопированную ранее ссылку на образ АТС
Нажмите кнопку Загрузить
Вернемся к выбору образа на вкладке Все сервисы / Инфраструктура и сеть / Compute Cloud / Виртуальные машины
В разделе Выбор образа/загрузочного диска выберите Свой образ / Выбрать / Наполнение - Образ / mikopbx-img
В разделе Диски и файловые хранилища скорректируйте размер загрузочного диска до 1 Гб
В разделе Диски и файловые хранилища выберите Добавить диск
На открытой вкладке введите имя диска для хранения данных, например storage-mikopbx
Укажите тип диска HDD
Укажите размер диска не менее 50 Гб
Наполнение - Пустой
Для других полей на вкладке используйте значения по умолчанию
Нажмите кнопку Добавить
В разделе Сетевые настройки выберите существующую или создайте новую облачную сеть
В поле Подсеть в выпадающем меню выберите Добавить подсеть
На открытой вкладке введите имя подсети, например local-mikopbx
В поле CIDR укажите диапазон адресов, например 172.16.32.0/24
Для других полей на вкладке используйте значения по умолчанию
Нажмите кнопку Создать
Публичный адрес и Внутренний IPv4-адрес оставьте в положении Автоматически
В разделе Доступ укажите Сервисный аккаунт
Введите Логин и SSH-ключ, предварительно сгенерированный по инструкции
В разделе Дополнительные настройки установите флажок Разрешить доступ к серийной консоли
Завершив ввод значений, нажмите кнопку Создать ВМ
Дождитесь запуска созданной виртуальной машины, обычно первый запуск занимает 6-8 минут. Статус Running, еще не означает что система полностью развернулась
Откройте созданную виртуальную машину и перейдите в раздел Серийная консоль
Скопируйте внешний адрес созданной виртуальной машины и введите его в строке браузера
Для входа используйте указанные во вкладке Серийная консоль логин и пароль
Для развертывания АТС используйте два диска:
диск объемом 1 Гб для основной системы
диск объемом 50+ Гб для хранения записей разговоров
Для других полей используйте значения по умолчанию
Завершив ввод значений, нажмите кнопку Добавить сеть
Перейдите к своему аккаунту
В выпадающем меню выберите Ключевые пары
Если у вас есть ключ SSH, выполните следующее
Выберите Импортировать ключ
Введите название ключа и укажите ключ в поле Публичный ключ
Нажмите кнопку Импортировать ключ
Если у вас нет ключа SSH, выполните следующее
Выберите Создать ключ
Введите название ключа, например mikopbx_ssh_key
Нажмите кнопку Создать ключ
Откройте Облачные вычисления / Образы
На вкладке Образы выберите Создать образ
Укажите источник - Файл
Выберите файл из дистрибутива MikoPBX с расширением .raw
Введите название образа, например mikopbx_image
Завершив ввод значений, нажмите кнопку Создать образ
Откройте Облачные вычисления / Виртуальные машины
На вкладке Виртуальные машины выберите Создать инстанс
Введите имя виртуальной машины, например mikopbx_vm
В поле Категория виртуальной машины выберите Все актуальные типы виртуальных машин
Укажите Тип виртуальной машины, исходя из ожидаемой нагрузки на АТС. Для тестовой машины можно указать STD2-1-1
Выберите Зону доступности
Укажите Тип диска - HDD
В качестве Операционной системы выберите mikopbx_image
Перейдите к следующему шагу Настройки сети
Выберите созданную Сеть pbx_network
Выберите созданный Ключ виртуальной машины mikopbx_ssh_key
Включите переключатель Назначить внешний IP
Для других полей используйте значения по умолчанию
Завершив ввод значений, нажмите кнопку Создать инстанс
Как только инстанс будет создан, сразу остановите его запуск
Откройте Облачные вычисления / Диски
На вкладке Диски выберите Создать диск
Введите название диска, например mikopbx_storage_disk
Укажите Источник - Пустой диск
Укажите Тип диска - Сетевой HDD-диск (ceph-hdd)
Выберите Зону доступности такую же, как и у инстанса
Укажите размер диска не менее 50Гб
Включите переключатель Подключить диск к инстансу
Выберите созданный инстанс mikopbx_vm
Для других полей используйте значения по умолчанию
Завершив ввод значений, нажмите кнопку Создать диск
Откройте Облачные вычисления / Виртуальные машины
Запустите созданный инстанс mikopbx_vm
Откройте Виртуальные сети / Настройки firewall
На вкладке Настройки firewall выберите Добавить
Введите имя группы правил, например mikopbx_rules
Нажмите кнопку Создать группу
На открытой вкладке в разделе Входящий трафик выберите Добавить правило
Выберите Тип - Все протоколы и все порты
Укажите Удаленный адрес - Все IP-адреса
Нажмите кнопку Сохранить правило
В разделе Виртуальные машины с группой правил mikopbx_rules выберите Добавить виртуальную машину
Выберете созданную виртуальную машину mikopbx_vm и нажмите Добавить группу правил
Дождитесь запуска созданного инстанса, обычно первый запуск занимает 6-8 минут
Откройте Облачные вычисления / Виртуальные машины
Перейдите к созданной виртуальной машине mikopbx-vm
На открытой вкладке перейдите в раздел Логи
Скопируйте внешний адрес созданной виртуальной машины и введите его в строке браузера
Для входа используйте указанные во вкладке Серийная консоль логин и пароль
Для развертывания АТС используйте два диска:
диск объемом 1 Гб для основной системы
диск объемом 50+ Гб для хранения записей разговоров
Обязательно выполните настройку Firewall на самой АТС MikoPBX
Для других полей используйте значения по умолчанию
Завершив ввод значений, нажмите кнопку Добавить сеть
Перейдите к своему аккаунту
В выпадающем меню выберите Ключевые пары
Если у вас есть ключ SSH, выполните следующее
Выберите Импортировать ключ
Введите название ключа и укажите ключ в поле Публичный ключ
Нажмите кнопку Импортировать ключ
Если у вас нет ключа SSH, выполните следующее
Выберите Создать ключ
Введите название ключа, например mikopbx_ssh_key
Нажмите кнопку Создать ключ
Откройте Облачные вычисления / Образы
На вкладке Образы выберите Создать образ
Укажите источник - Файл
Выберите файл из дистрибутива MikoPBX с расширением .raw
Введите название образа, например mikopbx_image
Завершив ввод значений, нажмите кнопку Создать образ
Откройте Облачные вычисления / Виртуальные машины
На вкладке Виртуальные машины выберите Создать инстанс
Введите имя виртуальной машины, например mikopbx_vm
В поле Категория виртуальной машины выберите Все актуальные типы виртуальных машин
Укажите Тип виртуальной машины, исходя из ожидаемой нагрузки на АТС. Для тестовой машины можно указать STD2-1-1
Выберите Зону доступности
Укажите Тип диска - HDD
В качестве Операционной системы выберите mikopbx_image
Перейдите к следующему шагу Настройки сети
Выберите созданную Сеть pbx_network
Выберите созданный Ключ виртуальной машины mikopbx_ssh_key
Включите переключатель Назначить внешний IP
Для других полей используйте значения по умолчанию
Завершив ввод значений, нажмите кнопку Создать инстанс
Как только инстанс будет создан, сразу остановите его запуск
Откройте Облачные вычисления / Диски
На вкладке Диски выберите Создать диск
Введите название диска, например mikopbx_storage_disk
Укажите Источник - Пустой диск
Укажите Тип диска - Сетевой HDD-диск (ceph-hdd)
Выберите Зону доступности такую же, как и у инстанса
Укажите размер диска не менее 50Гб
Включите переключатель Подключить диск к инстансу
Выберите созданный инстанс mikopbx_vm
Для других полей используйте значения по умолчанию
Завершив ввод значений, нажмите кнопку Создать диск
Откройте Облачные вычисления / Виртуальные машины
Запустите созданный инстанс mikopbx_vm
Откройте Виртуальные сети / Настройки firewall
На вкладке Настройки firewall выберите Добавить
Введите имя группы правил, например mikopbx_rules
Нажмите кнопку Создать группу
На открытой вкладке в разделе Входящий трафик выберите Добавить правило
Выберите Тип - Все протоколы и все порты
Укажите Удаленный адрес - Все IP-адреса
Нажмите кнопку Сохранить правило
В разделе Виртуальные машины с группой правил mikopbx_rules выберите Добавить виртуальную машину
Выберете созданную виртуальную машину mikopbx_vm и нажмите Добавить группу правил
Дождитесь запуска созданного инстанса, обычно первый запуск занимает 6-8 минут
Откройте Облачные вычисления / Виртуальные машины
Перейдите к созданной виртуальной машине mikopbx-vm
На открытой вкладке перейдите в раздел Логи
Скопируйте внешний адрес созданной виртуальной машины и введите его в строке браузера
Для входа используйте указанные во вкладке Серийная консоль логин и пароль
Для развертывания АТС используйте два диска:
диск объемом 1 Гб для основной системы
диск объемом 50+ Гб для хранения записей разговоров
Обязательно выполните настройку Firewall на самой АТС MikoPBX
Визуально отобразить пропущенные вызовы из общего списка звонков;
Скачать/прослушать запись разговора.
Каждый элемент списка содержит информацию о:
номере телефона звонящего абонента (Кто);
номере телефона, на который звонили (Кому);
дате и времени свершения звонка (Дата звонка);
длительности разговора (Длительность) - время голосового приветствия не учитывается.
Вызовы, отмеченные красным цветом, являются пропущенными. Длительность разговора для пропущенных вызовов равна нулю, такие вызовы невозможно прослушать.
Для каждой записи истории звонков доступна возможность прослушивания и скачивания записи разговоров. При скачивании можно выбрать формат WebM (Opus), MP3, WAV или OGG (Opus).
Каждая строка вызова содержит полную информацию об участниках разговора.
На скриншоте выше отображено следующее:
Вызов поступил на номер 79255283744;
На вызов ответила Белкина;
Белкина осуществила консультативный перевод на Шевченко;
Шевченко продолжила разговор с клиентом.
В строке поиска истории вызовов можно реализовать следующие отборы:
1) Отбор по номеру телефона
В строке поиска можно ввести как внутренний номер сотрудника, так и номер клиента (внешний).
2) Отбор по конкретному полю
В строке поиска можно указать префикс, чтобы искать только по нужному полю:
src:74952293042 - искать по номеру звонящего;
dst:302 - искать по номеру назначения;
did:74952293042 - искать по DID-номеру;
linkedid:mikopbx-... - искать по уникальному идентификатору звонка.
Если префикс не указан, MikoPBX выполняет общий поиск по номеру звонящего, номеру назначения, DID и имени сотрудника.
3) Отбор по дате
При открытии истории звонков MikoPBX выбирает период по последним записям журнала. Установите нужный вам период и нажмите Применить.
4) Отбор по linkedid
linkedid - уникальный идентификатор звонка. Данным отбором удобно пользоваться, если необходимо найти вызов, исходя из данных журнала звонков 1С.
Для применения этого отбора:
1. Откройте журнал звонков 1С;
2. Выделите нужную строку;
3. Нажмите Подробнее во встроенном плеере (или вызвав контекстное меню на данной строке);
4. Скопируйте поле Идентификатор;
5. Вставьте это значение в строку поиска истории вызовов MikoPBX в формате linkedid:значение и нажмите Enter.

Убедитесь, что у вас есть доступ к web-интерфейсу и консоли виртуальной машины. Создайте резервную копию настроек MikoPBX и записей разговоров.
Создайте snapshot виртуальной машины. Если гипервизор позволяет, снимайте его при выключенной виртуальной машине.
Убедитесь, что на системном диске свободно не менее 400 МБ.
Запланируйте техническое окно: во время обновления MikoPBX перезагрузится, а текущие вызовы будут завершены.
Откройте web-интерфейс MikoPBX.
Перейдите в раздел Обслуживание → Обновление PBX.
В таблице "Доступны онлайн обновления" найдите нужную версию. Ознакомьтесь со списком изменений и нажмите кнопку обновления напротив выбранной версии.
Дождитесь загрузки образа. Не закрывайте страницу до появления окна подтверждения. Введите фразу "Да, у меня есть резервная копия". Нажмите Обновить.
MikoPBX подготовит обновление и автоматически перезагрузит виртуальную машину.
Этот способ подходит, если нужной версии нет в списке онлайн-обновлений или файл уже скачан заранее.
Скачайте файл нужной версии с расширением .img со страницы релизов MikoPBX.
В web-интерфейсе откройте Обслуживание → Обновление PBX.
В поле выбора файла укажите скачанный .img.
Нажмите Применить обновление.
Введите фразу "Да, у меня есть резервная копия". Подтвердите обновление и дождитесь перезагрузки.
Используйте этот вариант, если станция не загружается штатно, web-интерфейс недоступен либо требуется выполнить обновление из Recovery mode.
Скачайте ISO-образ нужной версии со страницы релизов MikoPBX.
Выключите виртуальную машину. В настройках гипервизора подключите ISO к виртуальному CD/DVD-приводу и установите загрузку с виртуального CD/DVD раньше системного диска.
Запустите виртуальную машину и откройте её консоль.
Дождитесь сообщения о загрузке в режиме восстановления — System booted in recovery mode (Live CD).
Нажмите на любую клавишу, чтобы перейти к консольному меню. Далее откройте "[4] Install or recover".
Выберите "Update to version...". В русской локализации пункт называется "Обновить до версии...".
После завершения операции:
Выключите виртуальную машину, если ISO не был отключён автоматически.
Отключите ISO от виртуального привода.
Верните загрузку с системного диска на первое место.
Запустите виртуальную машину.
Рекомендуется производить обновления последовательно, «не перепрыгивая» через релизы и версии.
Перед обновлением обязательно создайте резервную копию настроек MikoPBX. Дополнительно рекомендуется создать snapshot виртуальной машины средствами гипервизора.
Не выключайте виртуальную машину и не выполняйте принудительный сброс во время записи обновления.
Не выбирайте пункт Install. Он запускает новую установку и предупреждает об удалении данных на выбранном диске. Для обновления с сохранением настроек нужен пункт Update to version ....
Так же есть возможность перейти в настройки любого модуля для дальнейшей его конфигурации:
Помимо этого, можно включить/отключить модуль.
Из интерфейса установленного модуля можно быстро перейти к его документации, нажав на знак вопроса справа от короткого описания модуля:
Существует возможность вынести любой модуль в боковое меню для быстрого доступа к нему, что может быть полезно, если вам требуется постоянный доступ к настройки модуля для изменения параметров или его состояния.
Для того, чтобы это сделать - выполните дальнейшую инструкцию:
Перейдите в настройки модуля, который Вы хотите вывести в боковое меню, нажав на элемент редактирования справа от версии модуля:
Нажмите на значок настроек справа от статуса состояния модуля для перехода к настройкам отображения модуля в боковом меню:
В данном разделе вы можете:
Переключить отображение модуля в боковом меню - "Показывать модуль в боковом меню".
Выбрать раздел в котором он будет отображаться - в примере выбран раздел "Модули".
Так же можно указать произвольное название модуля.
После завершения настройки - нажмите "Сохранить".
В данном разделе вы можете установить модули от MIKO, а так же от производителей-партнеров.
Напротив каждого модуля есть кнопка для его скачивания и установки. Так же здесь отображена базовая информация по модулю с коротким описанием каждого модуля.
Слева от названия модуля вы можете найти значок, по которому можно понять платный ли он или бесплатный. Например, на изображении выше модуль "REST API Автоинформатор" - платный, а модуль "Генератор SSL сертификатов через Let's Encrypt" - бесплатный.
Существует возможность перейти в карточку модуля, нажав на его название в интерфейсе маркетплейса.
Здесь вы можете найти версию актуального релиза, информацию про разработчика, платный ли модуль или бесплатный. Тут же находятся 3 раздела:
Здесь вы можете найти изображения про функционал и настройки модуля. Помимо этого - базовое описание модуля, а так же раздел "Полезные ссылки", где располагается ссылка на подробную документацию по настройке и эксплуатации модуля.
В данном разделе вы можете найти историю версий модуля, с подробным описанием изменений, а также минимально совместимой версии MikoPBX для корректной его работы. Так же вы можете установить конкретную версию модуля, нажав на синий элемент под общим ее описанием.
Здесь вы можете ознакомиться с пользовательским лицензионным соглашением для каждого модуля расширения.
В случае покупки модуля, вам будет выдан купон. Для его активации перейдите в Модули -> Маркетплейс модулей:
Далее перейдите в раздел "Управление лицензией"
В поле "Активация купона" введите ваш купон, далее нажмите "Активировать купон"


Лицензионный ключ используется для хранения всех ваших лицензий от любых продуктов МИКО. Если у вас уже есть ключ, вы можете просто вписать его в одноименное поле. Если ключ у вас был, но вы его забыли, вы можете поискать письмо в вашей электронной почте входящие письма по адресу lic@miko.ru
Получить новый ключ можно автоматически, заполнив регистрационную форму ниже:
Название организации - введите имя вашей компании/организации.
Адрес электронной почты контактного лица - введите адрес электронной почты вышей компании/организации.
Контактное лицо - введите данные контактного лица.
Телефон контактного лица (необязательно).
Уникальный идентификатор компании (ИНН, ИИН, УНП и т.д.) (необязательно).
Нажмите "Зарегистрироваться"
В случае успешной регистрации, вы увидите следующий экран:
Уведомление об успешной регистрации системы.
Наведите курсор на поле с лицензионным ключом, если вам необходимо его увидеть или скопировать. По умолчанию значение ключа размыто.
Для управления лицензией перейдите в раздел Маркетплейс -> Управление лицензией. Нажмите на одноименный элемент:
Вы попадете на сайт SaaS сервер лицензирования:
Для управления лицензией введите ваш лицензионный ключ в поле "Введите ваш лицензионный ключ или активированный ранее купон":
Нажмите "Login"
Вы попадете в систему, где находятся 9 секций:
Перейдите в раздел "Монитор сессий":
Слева для каждой привязки в колонке Информация есть кнопка i, которая позволяет посмотреть подробную информацию о хосте, к которому привязана лицензия.
Для каждой привязки в колонке "Действие" есть кнопка "Сброс", которая позволяет сбросить активную привязку лицензии от хоста.
При регистрации может возникать проблема отсутствии у MikoPBX связи с интернетом, а именно с отсутствием связи с серверами lic.miko.ru и lic.mikopbx.com по порту 443(https)
Решение: проверить доступ к станции из интернета, проверить настройки firewall и общего доступа к вышеупомянутым ресурсам.
MikoPBX переодически обращается к серверам лицензирования для проверки установленных модулей. Если лицензия на модуль недоступна, то он будет отключен, а рядом с названием модуля появится соответствующая иконка в виде перечеркнутого ключа.
Сама MikoPBX - бесплатное решение и не требует никакой регистрации. Отсутствие лицензии никак не влияет на звонки. Вы в любой момент можете зарегистрироваться, а также отменить регистрацию в Marketplace.
В случае переноса MikoPBX на другой хост или восстановлении из бекапа, необходимо выполнить сброс привязок лицензий на модули в личном кабинете lm.mikopbx.com


Права пользователя AMI, устанавливаемые в секции [user] конфигурационного файла /etc/asterisk/manager.conf
System
Чтение общей информации о системе, например, уведомления о перезагрузке конфигурации
Позволяет пользователю выполнять Asterisk системы управления такими командами, как Restart, Reload, или Shutdown. Это разрешение также предоставляет пользователям возможность запускать системные команды за пределами Asterisk. Предоставление такого разрешения эквивалентно предоставлению доступа к командной оболочке, с правами пользователя / группы, под которыми запущен процесс Asterisk



















Установка MikoPBX с помощью VMware Workstation Pro
В текущей инструкции будет описан процесс создания и настройки виртуальной машины в VMware Workstation Pro, а так же процесс установки MikoPBX.
Скачать установщик VMware Workstation Pro можно на сайте.
Используйте для установки на VMware Workstation Pro версии АТС MikoPBX отличные от 2024.1.114
Версия 2024.1.114 временно не поддерживает установку с помощью VMware Workstation Pro!
Перейдите в интерфейс VMware WorkStation Pro. Нажмите кнопку "Create a New Virtual Machine" для создания новой виртуальной машины.
В интерфейсе создания виртуальной машины укажите тип виртуальной машины: "Typical (recommended)". Далее, нажмите - "Next >".
Далее выберите источник установки "Installer disc image file (iso):", выберите файл образа диска с расширением .iso. Скачать дистрибутив вы можете по . После выбора нажмите "Next >" для продолжения.
Выберите "Linux" в поле "Guest operating system". В качестве "Version" - "Debian 11.x 64-bit". Нажмите "Next >"
Укажите желаемое имя для виртуальной машины в поле "Virtual machine name:". Так же есть возможность указать локацию для этой виртуальной машины на вашем компьютере: используйте поле "Location". Нажмите "Next >".
Укажите размер для первого (системного) жесткого диска: рекомендуемое значение - 1Гб. Выберите "Split virtual disk into multiple files". Нажмите "Next >".
Отобразится итоговая конфигурация виртуальной машины. Нажмите "Finish". Произойдет создание виртуальной машины.
Далее мы создадим и подключим второй жесткий диск, который будет использоваться для хранения записей разговоров.
Перейдите в настройки раннее созданной виртуальной машины.
Нажмите "Add..." для добавления нового элемента системы.
Выберите "Hard Disk" в разделе "Hardware types". Нажмите "Next >"
Выберите "Virtual disk type" - "SCSI". Нажмите "Next >".
Выберите "Create a new virtual disk". Нажмите "Next >".
Выберите размер диска: рекомендованное значение - не менее 50 Гб. Так же выберите параметр "Split virtual disk into multiple files". Нажмите "Next >"
Укажите произвольное название для жесткого диска. Нажмите "Finish"
В настройках перейдите в раздел "Network Adapter". Выберите "Network connection" - "Bridged: Connected directly to the physical network". Нажмите "OK"
Произведите запуск виртуальной машины.
Откроется командный интерфейс MikoPBX. АТС начнет загружаться. На данном этапе MikoPBX загружается с оптического диска, на который записан ISO-образ. На это нам указывает строчка: "The system is loaded in Recovery mode".
Переключите язык интерфейса на русский. Для этого выполните "[1] Change Language" -> "[2] Русский".
Далее произведем установку MikoPBX. Перейдите в пункт "[8] Install".
Отобразится информация о всех доступных дисках (в данном примере: sdb, sdc). Системой предложен диск по умолчанию, в нашем случае - sdb. Если вы согласны с предложенным диском, который будет использоваться в качестве системного - нажмите Enter. В противном случае напишите название другого диска.
Далее система выдаст предупреждения. Для подтверждение операции - введите "y" и нажмите Enter.
После выполнения установки будет предложено выбрать диск для хранения записей разговоров. Введите имя диска (в данном примере - единственный доступный диск sdc) и нажмите Enter.
После завершения установки система перезагрузится.
Теперь MikoPBX будет запускаться с диска sdb, на который вы ее установили. Увидим, что строчка «The system is loaded in Recovery mode» отсутствует. Это значит, что установка MikoPBX совершена успешно.
Для того, чтобы открыть веб-интерфейс MikoPBX вам надо вписать в строку браузера IP-адрес вашей виртуальной машины, найти его вы можете в консоли.
Впишите IP-адрес в адресную строку вашего браузера. Произведите первый вход в MikoPBX по стандартному логину и паролю.
Установка MikoPBX с помощью Proxmox.
Откройте вкладку local / ISO images и выберите Download from URL
В поле URL вставьте ссылку на файл из дистрибутива MikoPBX с расширением .iso
Нажмите кнопку Download, дождитесь окончания загрузки файла
Выберите Create VM
На вкладке General введите имя (Name) виртуальной машины, например mikopbx-vm
Перейдите к следующей вкладке OS, в поле ISO image выберите загруженный ранее образ
Укажите тип OS (Type) - Linux
На вкладке System уберите флажок Qemu Agent, для других полей используйте значения по умолчанию
Перейдите к вкладке Disks
Скорректируйте размер диска под систему до 1 Гб
Нажмите кнопку Add и добавьте дополнительный диск для хранения данных
Укажите размер диска не менее 50 Гб
На вкладках CPU и Memory укажите параметры вычислительных ресурсов виртуальной машины, исходя из ожидаемой нагрузки на АТС. Для тестовой машины можно указать в поле Cores (вкладка CPU) - 2, в поле Memory (вкладка Memory) - 2 Гб
На вкладке Network уберите флажок Firewall
Перейдите к последней вкладке Confirm и установите флажок Start after created
Завершив ввод значений, нажмите кнопку Finish
Перейдите к созданной виртуальной машине mikopbx-vm
На открытой вкладке перейдите в раздел Console
Если загрузка прошла успешно, появится консольное меню. Введите с клавиатуры 8 для начала установки
Выберите диск под систему и введите с клавиатуры имя диска, например sda. Подтвердите выбор, введите с клавиатуры y
Подключите диск для хранения записей разговоров, ведите с клавиатуры наименование диска для подключения, например sdb
На открытой вкладке в разделе Console скопируйте внешний адрес созданной виртуальной машины и введите его в строке браузера
Для входа используйте логин - admin и пароль - admin
QEMU Guest Agent позволяет Proxmox получать от MikoPBX внутренние IP-адреса, корректно завершать работу гостя по команде Shutdown и снимать консистентные бэкапы (fs-freeze). Сам бинарь qemu-ga уже включён в дистрибутив MikoPBX и автоматически запускается под управлением monit (сервис vm-tools) — нужно только включить канал агента на стороне Proxmox.
Выберите виртуальную машину MikoPBX, откройте вкладку Options и сделайте двойной клик по строке QEMU Guest Agent
Установите флажок Use QEMU Guest Agent (значение Enabled), параметр Type оставьте VirtIO (по умолчанию), нажмите OK
На хосте Proxmox (быстрая проверка «жив/мёртв»):
Внутри MikoPBX (по SSH):
Если monit summary показывает vm-tools Initializing, а файл /dev/virtio-ports/org.qemu.guest_agent.0 отсутствует — значит со стороны Proxmox virtio-serial-канал ещё не проброшен в VM (опция не включена либо машина не была холодно перезапущена).
Установка MikoPBX в Docker контейнер
Для работы с MikoPBX в контейнере необходимо установить docker и docker compose, а также создать пользователя и папки для хранения настроек конфигурации и записей разговоров по инструкции
Установка докера и cоздание пользователя и каталоговДля запуска контейнера с вашим приложением воспользуйтесь следующими командами:
# Получение образа контейнера
sudo docker pull ghcr.io/mikopbx/mikopbx:latest
## Альтернативно — можно загрузить образ с Docker Hub
# sudo docker pull mikopbx/mikopbx:latest
# Запуск контейнера в не привилегированном режиме
sudo docker run --net=host --name mikopbx --hostname mikopbx \
-v /var/spool/mikopbx/cf:/cf \
-v /var/spool/mikopbx/storage:/storage \
-e SSH_PORT=23 \
-e ID_WWW_USER="$(id -u www-user)" \
-e ID_WWW_GROUP="$(id -g www-user)" \
-it -d --restart always ghcr.io/mikopbx/mikopbx:latestЧтобы убедиться, что ваше приложение MikoPBX запостилось и работает в Docker-контейнере, можно выполнить следующие шаги после его запуска. Эти шаги помогут проверить состояние контейнера и просмотреть его логи.
Сначала нужно удостовериться, что контейнер успешно запущен и работает. Для этого используем команду docker ps, которая покажет список запущенных контейнеров и их статус.
sudo docker psЭта команда выведет информацию о всех активных контейнерах. Убедитесь, что контейнер mikopbx присутствует в списке и его статус указывает на то, что он запущен и работает (например, статус up).
После подтверждения того, что контейнер запущен, следующим шагом будет просмотр логов для проверки, что приложение загрузилось без ошибок и функционирует нормально. Команда docker logs позволит вам увидеть вывод, который генерирует ваше приложение.
Просмотрите вывод команды на наличие сообщения, подобного указанному ниже. Это сообщение свидетельствует о том, что MikoPBX успешно загружена и готова к использованию:
Если отображается процесс запуска MikoPBX, то необходимо подождать и повторить команду sudo docker logs mikopbx
При старте контенер не имеет информации об адресе хостовой системы, потому необходимо открыть внешний адрес хостовой системы, в данном случае Ubuntu в браузере. https://<IP адрес хост системы>
Войдите в веб-интерфейс, используя логин admin и пароль admin, чтобы убедиться, что веб-интерфейс доступен и функционирует корректно.
Если необходимо использовать «», то контейнер следует запускать с флагом --privileged. Когда MikoPBX запускается в контейнере, резервное копирование можно также выполнять архивированием каталогов cf и storage вручную . В этом случае привелегированный режим можно не использовать, но в момент копирования контейнер должен быть остановлен.
Флаг --net=host указывает на то, что NAT между хостом и контейнером не будет использоваться. MikoPBX будет подключена напрямую к сети хостовой машины. Все порты, которые должен занять контейнер будут заняты и на хост машине. Если на хост машине, какой-то из портов недоступн, то при загрузке MikoPBX возникнут ошибки. Подробнее в
При необходимости можно скорректировать стандартный набор портов, которые использует MikoPBX. Это можно сделать, объявляя переменные окружения при запуске контейнера.
Помимо использования нашего официального реестра, вам может понадобиться вариант создания контейнера из образа, например для бета-версии. В составе опубликованных релизов и предрелизов поставляется tar-архив, который мы используем для создания контейнера.
Пример кода для его использования:
Ниже перечислены некоторые переменные окружения, которые позволят скорректировать используемые MikoPBX порты и настройки.
SSH_PORT - порт для SSH (22)
WEB_PORT - порт для работы web интерфейса по протоколу HTTP (80)
WEB_HTTPS_PORT - порт для работы web интерфейса по протоколу HTTPS (443)
Полный список всех возможных параметров настроек доступен в исходном коде .
Настройка почты для сервиса Outlook (outlook.com; hotmail.com)
Войдите в центр администрирования Microsoft Entra.
Перейдите в раздел "Entra ID" -> "App registrations". Далее нажмите "New registration" для регистрации нового приложения.
Выберите следующие параметры для Вашего приложения:
Name - укажите название для Вашего приложения.
Supported account types - выберите параметр "Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant)".
Укажите Redirect URl:
Select a platform - выберите "Web".
URl:
Замените 192.168.100.71 на адрес Вашей MikoPBX.
Далее нажмите "Register".
Будет созданно приложения. Сохраните client ID, в будущем он понадобится для настройки внутри веб-интерфейса MikoPBX.
Из главной страницы приложения перейдите в "Manage" -> "API permissions".
Нажмите "Add a permission".
В разделе "Microsoft Graph" выберите "Delegated Permissions". В поиске введите "SMTP". Поставьте галочку напротив "SMTP.Send".
Так же в поиске введите "offline". Поставьте галочку напротив "offline_access".
Нажмите "Add permissions".
Далее перейдите в раздел "Certificates & secrets" -> "Client secrets". Нажмите "New client secret".
Задайте необходимые параметры:
Description - произвольное описание.
Expires - срок на который Вы выпускаете этот client secret. Он понадобится нам для аутентификации приложения в MikoPBX.
Нажмите "Add".
Скопируйте "Value" (не SecretID!). Он понадобится для настройки в веб-интерфейсе MikoPBX.
Для корректной работы приложения, Вам необходимо выдать разрешение на использования SMTP протокола для пользователя, чью почту Вы авторизовываете в ходе текущей насройки. Для этого выполните следующие шаги:
Перейдите в центр администрирования организации ().
Перейдите в раздел "Users" -> "Active Users". Нажмите на имя пользователя, под учетной записью которого произодится создание приложения.
В учетной записи, перейдите в раздел "Mail" и выберите "Manage email apps".
Убедитесь, что "Authenticated SMTP" разрешен. Сохраните изменения, нажав "Save changes".
Перейдите в Web-интерфейс MikoPBX. Далее "Система" -> "Почта и уведомления" -> "Настройки SMTP".
Заполните все необходимые данные:
Адрес отправителя, Имя отправителя - Ваша почта и от какого имени будут отправляться письма.
Тип аутентификации - OAuth2.
SMTP логин - Ваша почта.
Провайдер OAuth2 - Microsoft/Outlook.
Все остальные настройки оставьте по умолчанию. Более подробное описание Вы можете найти в главное статье о параметрах почты ().
После этого нажмите "Сохранить"!
Нажмите "Подключить через OAuth2". Войдите в Ваш аккаунт Microsoft. Далее подтвердите выдачу всех запрошенных разрешений.
При успешной авторизации Вы увидите соответствующее окно.
Настройка почты для сервиса gmail
Перед началом настройки, необходимо поменять некоторые параметры аккаунта Google. Для этого перейдите на страницу управления (ссылка).
Перейдите в раздел "Безопасность и вход в аккаунт". Убедитесь, что у Вас настроена двухэтапная аутентификация.
Перейдите в консоль Google Cloud, в раздел "APIs & Services" (). Создайте проект под текущую задачу.
Перейдите в библиотеку APIs (раздел "Library").
Введите в поиске: "gmail api". Перейдите в карточку Gmail API.
Нажмите "Enable" для подключения.
Перейдите на главную страницу APIs & Services. Далее "OAuth consent screen".
Создайте проект (нажмите "Get started"). Заполните произвольное название и Вашу почту. В качестве Audience выберите "Internal". Нажмите "Create" для завершения.
Вернитесь на главную страницу APIs & Services. Далее в раздел "Credentials". Нажмите "Create credentials". Выберите "OAuth client ID" для создания.
В качестве Application type, выберите "Web application". Далее введите произвольное название. Нажмите "Create".
Добавьте новый "Authorized redirect URI".
Будет создан OAuth client. Сохраните ClientID и Client secret себе в заметки. В будущем эти данные понадобятся для подключения.
Перейдите в раздел "Система" -> "Почта и уведомления":
Далее, "Настройки SMTP". Заполните следующие параметры:
Адрес отправителя, Имя отправителя - Ваша почта и от какого имени будут отправляться письма.
Тип аутентификации - OAuth2.
SMTP логин - Ваша почта.
Провайдер OAuth2 - Google/Gmail.
Все остальные настройки оставьте по умолчанию. Более подробное описание Вы можете найти в главное статье о параметрах почты ().
После этого нажмите "Сохранить"!
Нажмите на синюю кнопку "Подключить через OAuth2". Далее выберите Ваш аккаунт Gmail.
Подтвердите вход: нажмите "Continue".
Подтвердите выдачу необходимых разрешений. (Нажмите "Allow").
При успешной авторизации, вы увидите следующее окно.
Access blocked: Authorization Error (Error 400: invalid_request)
Решение: впишите URl адрес станции в Веб-интерфейсе MikoPBX: "Сеть и Firewall" -> "Сетевые интерфейсы". Перейдите в раздел "Топология сети" и впишите имя хоста в поле "Внешнее имя хоста вашего маршрутизатора". (Включите "Эта станция расположена за NAT маршрутизатором")
Установка MikoPBX в LXC контейнер
Proxmox LXC — это легковесные контейнеры в составе платформы виртуализации Proxmox VE, работающие на базе технологии LXC (Linux Containers). Они позволяют запускать изолированные Linux-системы с минимальным потреблением ресурсов по сравнению с полноценными виртуальными машинами.
Перейдите в "local" хранилище, далее "CT Templates". Нажмите "Download from URL" для перехода к диалогу загрузки шаблона из URL.
Перейдите на Github MikoPBX с релизами и скопируйте ссылку на скачивание файла-шаблона с расширением "lxc.tar.gz".
Вставьте ссылку в поле "URL", нажмите "Query URL". Если Вы скопировали правильную ссылку, то в поле "File name" будет подставлено название файла с расширением "lxc.tar.gz".
Нажмите "Download" для начала загрузки.
После окончания загрузки, Вы увидите надпись "TASK OK".
Нажмите "Create CT" в правой верхней части интерфейса для создания нового контейнера.
Заполните все базовые параметры контейнера:
Hostname - укажите название для сервиса.
Password - укажите пароль для входа в Web-интерфейс MikoPBX.
SSH public keys - сгенерируйте и вставьте Ваш ssh-ключ. Далее Вы сможете использовать его для подключения к станции по SSH. Подробнее про генерацию ключей и SSH подключение можно прочитать .
Нажмите "Next".
Выберите ранее загруженный шаблон в разделе "Template".
Нажмите "Next".
Далее укажите размер системного диска. Рекомендуемое значение - 1 ГБ.
Нажмите "Add" для добавления нового диска.
Укажите размер второго диска: на нем будут храниться записи разговоров. Рекомендуемый размер - не менее 50 ГБ. Так же укажите путь к диску - "/storage".
Нажмите "Add" для добавления нового диска.
Укажите размер третьего диска для хранения конфигурации. Рекомендуемый размер - 0.5 ГБ. Так же укажите путь к диску - "/cf".
Нажмите "Next".
На следующей вкладке укажите количество ядер, которые будут использованы. Для небольшой компании можно указать 1-2 ядра (подробнее в ).
Нажмите "Next".
Далее укажите количество оперативной и Swap памяти для контейнера.
Нажмите "Next".
В следующем разделе, выберите Ваши параметры сети. В нашем случае используется DHCP для получения IPv4. Firewall здесь можно не включать, но необходимо настроить его позже в MikoPBX (подробнее можно прочитать в ).
Нажмите "Next".
В разделе с настройкой параметров DNS нажмите "Next".
Вы увидите итоговую конфигурацию контейнера. Нажмите "Finish".
Перейдите в окно управления созданного контейнера, нажав на его название. Нажмите на кнопку "Start" для запуска.
Далее перейдите во вкладку "Console". Дождитесь загрузки системы и найдите IP-адрес Web-интерфейса.
Введите его в адресную строку Вашего браузера. Далее произведите первую авторизацию в MikoPBX.




















































Установка MikoPBX с помощью VirtualBox
1. Скачайте программу VirtualBox по и установите ее.
2. Создайте новую виртуальную машину.
3. Укажите Имя и Папку машины.
Тип - Linux.
Версия - Other Linux (64Bit).
Нажмите Далее.
Установка MikoPBX в облако Google Cloud с помощью произвольного образа
Авторизуйтесь на платформе
Приступим к настройке
Откройте Navigation menu / Products & solutions / Storage / Cloud Storage
На вкладке Cloud Storage выберите Create
Введите имя хранилища, например
Установка системы на USB-носитель
Перед началом загрузите образ диска с расширением .raw. Сделать это можно .
В данной инструкции будет использоваться утилита balenaEtcher. Скачать можно .
Первым делом, отформатируйте Ваш USB-носитель со следующими параметрами:
File system - FAT32
Инструкция по подключению Wasabi Cloud Storage в качестве S3-хранилища
Перейдите в консоль Wasabi ().
В левом меню выберите раздел "Buckets" и нажмите кнопку "Create Bucket".
На странице создания бакета укажите:
Обновление MikoPBX, развернутой как виртуальная машина в облаке
Эта инструкция предназначена для MikoPBX, работающей как полноценная облачная виртуальная машина: из Marketplace либо из импортированного RAW, VHD или другого дискового образа.
Основной способ обновления облачной станции — через web-интерфейс с использованием .img-образа. Возможность загрузки с ISO зависит от конкретного облачного провайдера и не является универсальной.
Проверьте, что у вас есть доступ к панели управления облаком и web-интерфейсу MikoPBX. Сохраните резервную копию настроек MikoPBX, а так же записей разговоров вне обновляемой виртуальной машины.
Создайте snapshot системного диска. При наличии отдельного диска с записями создайте snapshot и для него либо используйте резервное копирование хранилища.
Инструкция по подключению AWS S3 в качестве облачного хранилища для автоматической выгрузки записей разговоров из MikoPBX
Перейдите в консоль AWS (). Перейдите в раздел "Все сервисы" -> "Storage" -> "S3".
Нажмите "Create bucket".
Инструкция по развертыванию и подключению локального MinIO S3 к MikoPBX
В данной инструкции описан процесс развёртывания локального S3-хранилища MinIO и его подключения к MikoPBX. Все действия выполняются на macOS - для других операционных систем официальная документация доступна .
Откройте терминал и выполните команду:
По завершении установки терминал отобразит подтверждение:
Создайте директорию для данных.
Обновление MikoPBX, установленной на отдельный физический компьютер
Эта инструкция подходит для отдельного компьютера или сервера, на котором установлена MikoPBX.
Основной способ - обновление через web-интерфейс. Если станция не загружается штатно или web-интерфейс недоступен, используйте ISO-образ, записанный на отдельный USB-носитель.
Убедитесь, что у вас есть физический доступ к серверу либо рабочая консоль. Создайте резервную копию настроек MikoPBX и записей разговоров.
Убедитесь, что в Storage свободно не менее 400 МБ.
Установка MikoPBX с помощью Microsoft Azure.
Для начала авторизуйтесь на портале Microsoft Azure
Приступим к настройке
Откройте Меню / Все службы / Общие / Группы ресурсов
На вкладке Группы ресурсов выберите Создать
Введите имя группы, например



























































Call
Чтение события о каналах в системе
Позволяет пользователю устанавливать информация на каналах
Log
Предоставляет пользователю доступ к чтению логов
Только чтение
Verbose
Предоставляет пользователю доступ к чтению подробных логов
Только чтение
Agent
Чтение событий статуса агентов из app_queue и chan_agent модулей
Позволяет пользователю выполнять действия для управления и получения состояния очередей и агентов
User
Доступа к пользовательским событиям, а также событиям Jabber / XMPP пользователей
Позволяет пользователю выполнять команду UserEvent, для создания пользовательских событий
Config
Только для записи
Позволяет пользователю получать, обновлять и перегружать файлы конфигурации
Command
Только для записи
Позволяет пользователю выполнять команды Asterisk CLI из AMI
Dtmf
Позволяет пользователю получать события DTMF
Только чтение
Reporting
Доступ к событиям качества звонка, таким как jitterbuffer или RTCP
Позволяет пользователю выполнять ряд действий для получения статистики и информации о состоянии всей системы
Cdr
Чтение событий записи данных в CDR
Только чтение
Dialplan
Чтение событий установки переменных диалплана, создания "экстенов"
Только чтение
Originate
Только для записи
Разрешение пользователю выполнять команду Origitate, которая отправляет запрос на создание нового звонка

Идентификатор приложения (Client ID), Секретный ключ (Client Secret) - данные, которые сохранены из Google Cloud (12 пункт из прошлого раздела в этой инструкции).




















Идентификатор приложения (Client ID), Секретный ключ (Client Secret) - данные из Microsoft Entra.
После создания, значение Client Secret будет показано всего один раз. Не забудьте скопировать его в Web-интерфейс MikoPBX.



















https://192.168.100.71/pbxcore/api/v3/mail-settings/oauth2-callbackTLS_PORT - порт для подключения SIP клиента с шифрованием (5061)
RTP_PORT_FROM - начало диапазона RTP портов, передача голоса (10000)
RTP_PORT_TO - конец диапазона RTP портов, передача голоса (10800)
IAX_PORT - порт для подключения IAX клиентов (4569)
AMI_PORT - порт AMI (5038)
AJAM_PORT - порт AJAM используется для подключения панели телефонии для 1С (8088)
AJAM_PORT_TLS - порт AJAM используется для подключения панели телефонии для 1С (8089)
BEANSTALK_PORT - порт для сервера очередей Beanstalkd (4229)
REDIS_PORT - порт для сервера Redis (6379)
GNATS_PORT - порт для сервера gnatsd (4223)
ID_WWW_USER - идентификатор пользователя www-user (можно задать выражением $(id -u www-user), где www-user имя НЕ root пользователя)
ID_WWW_GROUP - идентификатор группы www-user (можно задать выражением $(id -g www-user), где www-user имя НЕ root группы)
WEB_ADMIN_LOGIN - логин для доступа в Web интерфейс
WEB_ADMIN_PASSWORD - пароль для доступа в Web интерфейс
sudo docker logs mikopbx++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
| All services are fully loaded welcome |
| MikoPBX 2026.1.223 |
| built on Tue Apr 7 03:39:14 UTC 2026 (arm64) in Docker |
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
| Web Interface Access |
| |
| Local Network Address: |
| https://192.168.65.3 | |
| |
| Web credentials: |
| Login: admin |
| Password: admin |
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
| SSH access disabled! |
| |
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++# Загружаем образ из tar архива (Необходимо заранее его загрузить!)
sudo docker load -i mikopbx-2026.1.223-x86_64-docker.tar
# Запускаем созданный контейнер
sudo docker run --net=host --name mikopbx --hostname mikopbx \
-v mikopbx_cf:/cf \
-v mikopbx_storage:/storage \
-e SSH_PORT=23 \
-e ID_WWW_USER="$(id -u www-user)" \
-e ID_WWW_GROUP="$(id -g www-user)" \
-it mikopbx:2026.1.223
Укажите размер основной памяти - 1024 МБ, а так же количество процессоров - 2
Нажмите Далее.
5. Выберите Создать новый виртуальный жесткий диск. Введите размер диска 700 МБ, а так же поставьте галочку у пункта "Выделить место в полном размере"
Нажмите Создать.
6. Подтвердите создание виртуальной машины: нажмите кнопку Готово.
1. Перейдите к настройкам созданной виртуальной машины.
Для этого нажмите Настроить.
2. Перейдите на вкладку Носители. Добавьте новый жёсткий диск для хранения записей разговоров.
3. В появившемся окне нажмите Создать.
4. Формат жёсткого диска выберите - VDI (VirtualBox Disk Image).
Нажмите Далее.
5. Жёсткий диск должен быть фиксированного размера.
Поставьте галочку рядом с пунктом "Выделить место в полном размере"
Нажмите Далее.
6. Укажите Имя создаваемого диска.
Установите Размер диска порядка 50 ГБ.
Нажмите Готово.
7. Выделите вновь созданный диск и нажмите Выбрать.
8. Созданный диск появиться в списке носителей.
9. Смонтируйте на оптический диск образ MikoPBX. Для этого в разделе Носители выделите оптический диск и в разделе Атрибуты нажмите кнопку выбора файла образа.
10. В появившемся меню нажмите Выбрать файл диска...
11. Выберите скачанный ISO-образ диска и нажмите Открыть.
12. Перейдите на вкладку «Сеть». Установите Тип подключения в значение Сетевой мост.
Нажмите ОК для сохранения всех произведенных настроек.
1. Запустите созданную виртуальную машину.
2. Откроется командный интерфейс АТС. АТС начнет загружаться.
На данном этапе MikoPBX загружается с оптического диска, на который записан ISO-образ. На это нам указывает строчка: "The system is loaded in Recovery mode".
3. Переключите язык интерфейса на русский. Для этого выполните Change Language -> Русский. Меню примет вид.
4. Произведите установку MikoPBX.
Нажмите Выполнить установку.
5. Отобразится информация о всех доступных дисках (в данном примере: sdb, sdc).
6. Введите с клавиатуры имя диска, который вы подразумевали под "системный", в текущем случае sdb и нажмите Enter (Если он выбран по умолчанию можно просто нажать Enter).
7. Система запросит подтверждение. Введите - y и нажмите Enter.
8. После выполнения установки будет предложено выбрать диск для хранения записей разговоров.
Введите имя диска (в данном примере - единственный доступный диск sdc) и нажмите Enter.
9. После завершения установки система перезагрузится.
Теперь MikoPBX будет запускаться с диска sdb, на который вы ее установили. Увидим, что строчка «The system is loaded in Recovery mode» отсутствует.
На этом установка MikoPBX завершена.
Для того, чтобы открыть панель управления вам надо вбить в строку браузера IP-адрес вашей виртуальной машины.
Логин и пароль по умолчанию - admin
На этом установка MikoPBX на завершена.
Используйте для установки на VirtualBOX версии АТС MikoPBX ниже 2024.1.114
Версия 2024.1.114 временно не поддерживает установку на VirtualBOX


Все данные на диске, куда устанавливается MikoPBX, будут потеряны.
Диск, на который будет установлена MikoPBX, называется системным (SYSTEM). В качестве системного диска можно выбрать диск, размер которого превышает 500 Мб.
Для других полей используйте значения по умолчанию
Завершив ввод значений, нажмите кнопку Create
Откройте созданное хранилище miko-images
На открывшейся вкладке выберите UPLOAD FILES
Загрузите файл из дистрибутива MikoPBX с расширением .vhd
Дождитесь окончания загрузки файла
Откройте Navigation menu / APIs & Services / Library / Google Enterprise API / Cloud Build API
На открывшейся вкладке выберите ENABLE
Откройте Navigation menu / APIs & Services / Library / Google Enterprise API / Compute Engine API
На открывшейся вкладке выберите ENABLE
Откройте Navigation menu / Products & solutions / Compute / Compute Engine
Перейдите в раздел Storage / Images
Выберите CREATE IMAGE для создания нового образа
Введите имя образа (Name), например mikopbx-new-image
Укажите тип источника (Source) - Virtual disk (VMDK, VHD)
Выберите Virtual disk file по ссылке BROWSE, Browse / miko-images / .vhd
Уберите флажок Install guest packages
В поле Operating system on virtual disk укажите - No operating system. Data only.
Для других полей используйте значения по умолчанию
Завершив ввод значений, нажмите кнопку Create и дождитесь окончания создания образа
Во вкладке Compute Engine перейдите в раздел Virtual machines / VM Instance
Выберите CREATE INSTANCE
Введите имя виртуальной машины (Name), например mikopbx-vm
В таблице Machine configuration / General purpose выберите Series - N1
В разделе Machine type в выпадающем меню выберите Shared-core / f1-micro
В разделе Boot disk выберите CHANGE
На открытой вкладке перейдите к CUSTOM IMAGES
В поле Image выберите созданный ранее образ mikopbx-new-image
Для других полей на вкладке используйте значения по умолчанию
Нажмите кнопку SELECT
В разделе Advanced options / Disks выберите ADD NEW DISK
На открытой вкладке введите имя диска для хранения данных (Name), например disk-storage-mikopbx
Укажите размер диска (Size) не менее 50Гб
Для других полей на вкладке используйте значения по умолчанию
Нажмите кнопку SAVE
Если у вас есть ключ SSH, выполните следующее
В разделе Advanced options / Security / MANAGE ACCESS выберите ADD ITEM
Укажите его в поле SSH key
Если у вас есть нет ключа SSH, сразу перейдите к пункту 18
Для других полей используйте значения по умолчанию
Завершив ввод значений, нажмите кнопку CREATE
Откройте Navigation menu / VPC network / Firewall
Выберите CREATE FIREWALL RULE для создания нового правила для входящего соединения
Введите имя нового правила (Name), например internal-allow
Укажите Direction of traffic - Ingress
Укажите Targets
Из выпадающего меню в поле Source filter выберите IPV4 ranges и в поле Source IPv4 ranges укажите 0.0.0.0/0
В разделе Protocols and ports установите флажок TCP (Ports - 0-65535) и флажок UDP (Ports - 0-65535)
Для других полей используйте значения по умолчанию
Завершив ввод значений, нажмите кнопку CREATE
Откройте вкладку Compute Engine и перейдите в раздел Virtual machines / VM Instance
Перейдите к созданной виртуальной машине mikopbx-vm
На открытой вкладке перейдите к Logs / Serial port 1 (console)
Скопируйте внешний адрес созданной виртуальной машины и введите его в строке браузера
Для входа используйте указанные в Serial port 1 (console) логин и пароль
Для развертывания АТС используйте два диска:
диск объемом 1 Гб для основной системы
диск объемом 50+ Гб для хранения записей разговоров
Обязательно выполните настройку Firewall на самой АТС MikoPBX
Откройте balenaEtcher. Нажмите "Flash from file" и выберите ранее загруженный .raw файл.
Нажмите "Select target".
Из списка выберите Ваш USB-носитель.
Нажмите "Select 1".
Далее нажмите "Flash!"
Дождитесь окончания записи. Далее перейдите к разделу "Загрузка с USB-накопителя".
Подключите Ваш usb-носитель и откройте Terminal.
Выполните команду:
Будет отображена информация про все подключенные диски. Нас интересует диск с маркировкой (external, physical). В нашем случае это disk4, в Вашем случае номер может быть другим. Используйте его номер для выполнения дальнейших шагов в этой инструкции.
Далее необходимо отформатировать USB носитель. Для этого используйте команду:
Для подтверждения введите пароль администратора, дождитесь окончания форматирования.
Отмонтируйте (отключите) диск, используя следующую команду:
Запишите образ на USB-носитель, используя следующую команду:
Дождитесь окончания записи образа. Далее перейдите к разделу "Загрузка с USB-накопителя".
В данной инструкции в качестве примера, запись образа будет произведена на Ubuntu 24.04.
Подключите Ваш usb-носитель и откройте Terminal.
Выполните команду:
Будет отображена информация про все подключенные диска. Найдите в этом списке Ваш usb-носитель и запомните его наименование. В нашем случае, это диск sdb.
Далее необходимо отформатировать usb-носитель, используя следующую команду:
Для подтверждения введите пароль администратора, дождитесь окончания форматирования.
Отмонтируйте (отключите) диск, используя следующую команду:
Запишите образ на USB-носитель, используя следующую команду:
Дождитесь окончания записи образа. Далее перейдите к разделу "Загрузка с USB-накопителя".
Запуститесь с USB-носителя. При возникновении ошибок (черный экран) - убидитесь, что:
Secure Boot - Disabled
CSM (Compatibility Support Module) - Enabled
Система успешно загружена, но не подключен диск для хранения записей разговоров. Для его подключения, передвигаясь стрелочками на клавиатуре, перейдите в пункт "[6] Data storage" и нажмите Enter.
Далее выберите пункт "Mount drive as data storage" для подключения диска.
Выберите диск, который будет использоваться для хранения записей разговоров. Для этого введите его ID (название), например sdc в нашем случае.
Нажмите Enter.
После этого система перезагрузится и будет готова к работе и первой авторизации в Web-интерфейс.
Для перехода в Web-интерфейс, введите IP-адрес Вашей MikoPBX в строку браузера. Используйте стандартные данные для авторизации.
Размер USB-носителя должен быть не менее 1 ГБ. Все данные на USB-носителе будут удалены!
diskutil listsudo diskutil eraseDisk FAT32 NONAME MBRFormat /dev/disk4;sudo diskutil unmountDisk /dev/disk4;sudo dd if=mikopbx-2024.1.114-x86_64.raw of=/dev/disk4 bs=1m;lsblksudo mkfs.vfat -F 32 -n NONAME /dev/sdbsudo umount /dev/sdb*sudo dd if=mikopbx-2024.1.114-x86_64.raw of=/dev/sdb bs=1MРазмер USB-носителя должен быть не менее 1 ГБ. Все данные на USB-носителе будут удалены!
Все данные на диске будут удалены! Еще раз проверьте название диска который Вы форматируете!
Размер USB-носителя должен быть не менее 1 ГБ. Все данные на USB-носителе будут удалены!
Все данные на диске будут удалены! Еще раз проверьте название диска который Вы форматируете!
Данные для первого входа в Web-интерфейс:
Логин: admin
Пароль: admin
Bucket Name - произвольное уникальное имя для бакета (например, mikopbx-s3-storage).
Region - выберите регион, ближайший к станции MikoPBX.
Нажмите "Create Bucket".
После создания бакета необходимо создать политику доступа. Перейдите в раздел "Policies" в левом меню и нажмите "Create Policy".
Задайте название для создаваемой политики (Policy Name), придумайте ее описание для будущей идентификации (Description). В поле "Policy Editor" вставьте следующий набор правил:
Перейдите в раздел "Users" в левом меню (блок "Users & Groups") и нажмите "Create User".
На первом шаге "Details" заполните параметры:
UserName - укажите произвольное имя пользователя (например, mikopbx-user).
Type of Access - отметьте только "Programmatic (create API keys)".
Require MFA - оставьте выключенным.
Нажмите "Next".
На шаге Groups - пропустите, нажмите "Next".
На шаге Policies — выберите политику, созданную ранее (например, mikopbx-access в этой инструкции), и нажмите "Next".
На шаге Review проверьте параметры и нажмите "Create User".
После создания пользователя будут отображены Access Key и Secret Key. Сохраните эти значения, они понадобятся для настройки внутри MikoPBX. Secret Key показывается только один раз.
Перейдите во вкладку "Обслуживание" -> "Хранилище".
Перейдите на вкладку "Облачное хранилище S3" и заполните следующие поля:
Автоматическая загрузка записей в облачное хранилище — включите переключатель.
URL точки доступа S3 — введите endpoint Вашего региона из таблицы ниже.
Например, для региона eu-central-1: https://s3.eu-central-1.wasabisys.com
Регион S3 — укажите регион Вашего бакета в Wasabi (например, eu-central-1).
Имя бакета S3 — укажите имя бакета, созданного в Wasabi (например, mikopbx-s3-storage).
Ключ доступа и Секретный ключ — вставьте значения, полученные при создании Access Key.
Настройте ползунок «Локальное хранение (режим S3)» — выберите, как долго записи будут храниться локально до удаления после выгрузки в облако.
Нажмите «Сохранить».
us-east-1 (N. Virginia)
https://s3.wasabisys.com
us-east-2 (N. Virginia)
https://s3.us-east-2.wasabisys.com
us-west-1 (Oregon)
После сохранения настроек нажмите "Проверить соединение". При успешном подключении появится сообщение «Соединение с S3 успешно» и начнётся синхронизация записей телефонных разговоров.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::YOUR-BUCKET-NAME",
"arn:aws:s3:::YOUR-BUCKET-NAME/*"
]
}
]
}Замените "YOUR-BUCKET-NAME" на название ранее созданного бакета (mikopbx-s3-storage в этой инструкции)
Запишите текущий внешний и внутренний IP-адреса, правила Security Group, подключённые диски и параметры сети.
Убедитесь, что на системном диске с MikoPBX свободно не менее 400 МБ.
Запланируйте техническое окно: активные вызовы будут завершены.
Для двухдисковой установки можно не обновлять системный диск существующей VM, а создать новую виртуальную машину с актуальной версией MikoPBX и подключить к ней копию прежнего диска Storage.
Создайте резервную копию настроек средствами MikoPBX и скачайте её на компьютер. Резервная копия, сохранённая вне облака, нужна на случай, если служебная копия на Storage окажется недоступна или повреждена.
После последнего изменения настроек подождите не менее 5 минут, чтобы MikoPBX успела записать свежую служебную копию базы на Storage.
Завершите активные вызовы и остановите старую VM. Создайте snapshot отдельного диска Storage. Для надёжного отката также сохраните snapshot старого системного диска или всей VM.
Зафиксируйте параметры старой VM: архитектуру процессора, внутренний и публичный IP-адреса, подсеть, Security Group, тип и порядок подключения дисков.
Создайте новую виртуальную машину с MikoPBX требуемой версии и той же архитектуры процессора. Например, в Yandex Cloud можно использовать доступный образ MikoPBX из Marketplace.
Не запускайте новую VM и не изменяйте её заводские настройки до подключения Storage.
Создайте из snapshot отдельный диск Storage и подключите его к новой VM как дополнительный диск. Snapshot должен сохранять исходную разметку, файловую систему и каталог mikopbx/backup/db.
Запустите новую VM. Во время первой загрузки MikoPBX обнаружит заводскую конфигурацию, найдёт служебную копию настроек на Storage и восстановит её. После успешного восстановления система автоматически перезагрузится ещё раз — не прерывайте этот процесс.
Войдите в web-интерфейс и проверьте:
установленную версию MikoPBX;
внутренние номера, провайдеров и маршруты;
подключение Storage;
Оставив старую VM выключенной, перенесите её публичный IP-адрес на новую VM. Ещё раз проверьте входящие и исходящие вызовы.
Не удаляйте старую VM и snapshots до завершения проверки и создания свежей резервной копии уже обновлённой станции.
Войдите в web-интерфейс MikoPBX.
Откройте "Обслуживание" → "Обновление PBX".
Найдите необходимую версию в таблице "Доступны онлайн обновления". Ознакомьтесь со списком изменений и запустите загрузку.
После завершения загрузки введите фразу "Да, у меня есть резервная копия". Нажмите Обновить.
Не выполняйте Restart или Stop из панели облака: MikoPBX сама подготовит обновление и перезагрузится. Во время перезагрузки соединение с web-интерфейсом прервётся. Следить за процессом безопаснее через serial console или web console облачного провайдера.
Используйте локальный файл, если версия отсутствует в списке или облачная VM не имеет прямого доступа к серверу обновлений.
Скачайте .img нужной версии со страницы релизов MikoPBX.
Проверьте, что архитектура образа совпадает с архитектурой VM.
Откройте Обслуживание → Обновление PBX.
Выберите скачанный .img и нажмите Применить обновление.
Введите фразу "Да, у меня есть резервная копия" и подтвердите операцию.
Дождитесь автоматической перезагрузки и повторного запуска сервисов.
Обновление через ISO возможно только тогда, когда облачная платформа одновременно позволяет:
загрузить или подключить пользовательский ISO;
изменить порядок загрузки VM;
открыть интерактивную консоль;
после обновления отключить ISO и снова загрузиться с системного диска.
Если все условия выполняются (например как в Vultr), порядок действий совпадает с обычной виртуальной машиной:
Скачайте и подключите ISO-образ нужной версии со страницы релизов MikoPBX.
Запустите машину и откройте её консоль. Дождитесь сообщения о загрузке в режиме восстановления — System booted in recovery mode (Live CD).
Нажмите на любую клавишу, чтобы перейти к консольному меню. Далее откройте "[4] Install or recover".
Выберите "Update to version...". В русской локализации пункт называется "Обновить до версии...".
После завершения отключите ISO и загрузитесь с системного диска.
Рекомендуется производить обновления последовательно, «не перепрыгивая» через релизы и версии.
Перед обновлением создайте две независимые точки восстановления: резервную копию настроек MikoPBX и snapshot системного диска или всей виртуальной машины в панели облачного провайдера.
Если провайдер не поддерживает ISO, не пытайтесь имитировать этот способ заменой системного диска. Используйте web-обновление либо восстановление из snapshot.
Не выбирайте пункт Install. Он запускает новую установку и предупреждает об удалении данных на выбранном диске. Для обновления с сохранением настроек нужен пункт Update to version...
Укажите произвольное название для бакета (поле "Bucket name"). Все остальные параметры оставьте по умолчанию, нажмите "Create bucket".
Перейдите в раздел "Все сервисы" -> "Security, Identity, & Compliance" -> "IAM".
Далее необходимо создать нового IAM пользователя. Для этого перейдите во вкладку "Access Management", далее "Users". Нажмите "Create user".
Укажите имя создаваемого IAM пользователя в поле "User name".
Нажмите "Next".
Выберите "Attach policies directly" в качестве "Permissions options". Пролистайте страницу.
В разделе "Permissions policies" нажмите "Create policy".
В открывшейся вкладке, в окне "Policy editor", выберите "JSON" в качестве формата и вставьте следующий контекст в поле с параметрами:
Нажмите "Next".
Далее укажите произвольное название для создаваемой политики.
Нажмите "Next".
Вернитесь на вкладку создания пользователя, обновите список политик и выберите ранее созданную policy (в этой инструкции - "access-mikopbx").
Нажмите "Next".
Подтвердите создание пользователя: нажмите "Create user".
Откройте страницу созданного пользователя, нажав на его имя.
Перейдите в раздел "Security credentials". Нажмите "Create access key".
Выберите "Application running outside AWS". Нажмите "Next".
Введите описание ключа для того, чтобы идентифицировать его в будущем. Нажмите "Create access key".
Будет отображены access key и secret access key ключи. Сохраните их, они понадобятся далее для настройки внутри MikoPBX.
Перейдите во вкладку "Обслуживание" -> "Хранилище".
Перейдите на вкладку "Облачное хранилище S3" и заполните следующие поля:
Автоматическая загрузка записей в облачное хранилище — включите переключатель.
URL точки доступа S3 — введите адрес доступа к S3 AWS, в зависимости от региона Вашего бакета (ссылка на таблицу со всеми url). В этой инструкции - https://s3.ap-southeast-1.amazonaws.com
Регион S3 — укажите регион Вашего бакета, в этой инструкции - ap-southeast-1
Имя бакета S3 — укажите имя бакета, созданного в AWS (например, aws-s3-mikopbxstorage в этой инструкции)
Ключ доступа и Секретный ключ — вставьте значения, полученные при создании access ключа сервисного аккаунта.
Настройте ползунок «Локальное хранение (режим S3)» — выберите, как долго записи будут храниться локально до удаления после выгрузки в облако.
Нажмите «Сохранить».
После сохранения настроек нажмите "Проверить соединение". При успешном подключении появится сообщение «Подключено к S3» и начнется синхронизация записей телефонных разговоров.


{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::имя-вашего-бакета",
"arn:aws:s3:::имя-вашего-бакета/*"
]
}
]
}Замените "имя-вашего-бакета" на название созданого ранее бакета (в этой инструкции - "aws-s3-mikopbxstorage").
Только сейчас можно просмотреть или загрузить секретный ключ доступа. Восстановить его позже будет невозможно.
Запустите сервер:
Вы увидите следующий вывод с полезной информацией; в том числе адрес WebUI для дальнейшей удобной работой с хранилищем.
После запуска оставьте окно терминала открытым — закрытие остановит сервер.
Чтобы MinIO запускался автоматически при старте системы, выполните:
brew services start minio/stable/minio
Откройте браузер и перейдите по адресу WebUI.
Введите учётные данные:
Username: minioadmin
Password: minioadmin
Нажмите "Create Bucket" в левом меню.
Введите имя бакета, например mikopbx-recordings.
Нажмите "Create Bucket".
Для создания access key и настройки прав доступа потребуется консольная утилита mc.
Установите MinIO Client:
После установки проверьте версию:
Добавьте локальный MinIO-сервер как alias:
Проверьте подключение:
Если подключение выполнено успешно, в терминале появится информация о MinIO-сервере.
Не рекомендуется использовать root-пользователя MinIO для подключения внешних приложений.
Создайте отдельного пользователя для MikoPBX:
Создайте файл политики:
Добавьте в него содержимое:
Сохраните файл:
Создайте политику в MinIO:
Назначьте политику пользователю:
Создайте access key для пользователя mikopbx-user:
В ответе MinIO отобразит данные доступа:
Сохраните Access Key и Secret Key. Они понадобятся для подключения MinIO к MikoPBX.
Secret Key отображается только при создании.
Перейдите во вкладку "Обслуживание" -> "Хранилище".
Перейдите на вкладку "Облачное хранилище S3" и заполните следующие поля:
Автоматическая загрузка записей в облачное хранилище — включите переключатель.
Провайдер S3-хранилища — MinIO
URL точки доступа S3 — http://192.168.64.1:9000
Регион S3 — оставьте us-east-1 или введите любое значение (если не указали иное в параметрах MiniO)
Имя бакета S3 — укажите имя бакета, созданного в MiniO (mikopbx-recordings в этой инструкции)
Ключ доступа и Секретный ключ — вставьте значения, полученные в предедущей части этой инструкции (связка ключей).
Настройте ползунок «Локальное хранение (режим S3)» — выберите, как долго записи будут храниться локально до удаления после выгрузки в облако.
Нажмите «Сохранить».
После сохранения настроек нажмите "Проверить соединение". При успешном подключении появится сообщение «Соединение с S3 успешно» и начнется синхронизация записей телефонных разговоров.
brew install minio/stable/minio🍺 /opt/homebrew/Cellar/minio/RELEASE.2025-09-06T17-38-46Z_1: 4 files, 108.2MB, built in 3 secondsmkdir -p ~/minio-dataMINIO_ROOT_USER=minioadmin MINIO_ROOT_PASSWORD=minioadmin \
minio server ~/minio-data --console-address ":9001"MinIO Object Storage Server
Copyright: 2015-2026 MinIO, Inc.
License: GNU AGPLv3 - https://www.gnu.org/licenses/agpl-3.0.html
Version: RELEASE.2025-09-06T17-38-46Z (go1.24.6 darwin/arm64)
API: http://192.168.100.114:9000 http://192.168.64.1:9000 http://127.0.0.1:9000
RootUser: minioadmin
RootPass: minioadmin
WebUI: http://192.168.100.114:9001 http://192.168.64.1:9001 http://127.0.0.1:9001
RootUser: minioadmin
RootPass: minioadmin
CLI: https://docs.min.io/community/minio-object-store/reference/minio-mc.html#quickstart
$ mc alias set 'myminio' 'http://192.168.100.114:9000' 'minioadmin' 'minioadmin'
Docs: https://docs.min.iobrew install minio/stable/mcmc --versionmc alias set local http://127.0.0.1:9000 minioadmin minioadminmc admin info localmc admin user add local mikopbx-user 'strong-password'nano mikopbx-recordings-policy.json{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::mikopbx-recordings"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::mikopbx-recordings/*"
]
}
]
}Ctrl + O
Enter
Ctrl + Xmc admin policy create local mikopbx-recordings-rw mikopbx-recordings-policy.jsonmc admin policy attach local mikopbx-recordings-rw --user mikopbx-usermc admin accesskey create local/ mikopbx-userAccess Key: A6FMEQOVJAK7K6TUI5O4
Secret Key: HuKLsNh7hmS+3xdLzlpYaFjxu5wVxLPkM8XUTgsj
Expiration: NONE
Name:
Description: Для физического сервера с отдельным диском Storage рекомендуемый режим работы — постоянная загрузка MikoPBX с Bootable USB. Система размещается на USB-носителе, а записи разговоров, история вызовов, модули и другие рабочие данные хранятся на HDD или SSD, подключённом как Storage.
При такой установке обновление можно выполнить заменой загрузочного USB-носителя:
Создайте резервную копию настроек MikoPBX и сохраните её на другом устройстве. Дополнительно создайте резервную копию диска Storage.
После последнего изменения настроек подождите не менее 5 минут. MikoPBX сохраняет служебную копию базы настроек на Storage каждые 5 минут, и именно её новая система использует для автоматического восстановления.
Скачайте RAW-образ требуемой версии с официальной страницы загрузки MikoPBX и запишите его на другой USB-носитель по инструкции Bootable USB. Архитектура образа должна совпадать с архитектурой сервера.
Корректно выключите сервер. Отключите старый Bootable USB, подключите новый, а диск Storage оставьте подключённым. Проверьте порядок загрузки в BIOS/UEFI.
Запустите сервер. Новая MikoPBX увидит заводскую конфигурацию, найдёт на Storage свежую служебную копию, восстановит /cf/conf/mikopbx.db и автоматически перезагрузится. Не выключайте сервер во время этого процесса.
После повторной загрузки проверьте версию MikoPBX, сетевые настройки, внутренние номера, провайдеров, маршруты, историю вызовов, записи разговоров и модули.
Сохраните старый USB-носитель и резервную копию Storage до завершения проверки и создания новой резервной копии обновлённой станции.
В web-интерфейсе откройте "Обслуживание" → "Обновление PBX".
Выберите желаемую версию в списке. Ознакомьтесь со списком изменений и запустите процесс обновления.
После загрузки введите фразу Да, у меня есть резервная копия. Нажмите Обновить.
Скачайте .img нужной версии со страницы релизов MikoPBX.
Откройте Обслуживание → Обновление PBX.
Выберите скачанный файл .img.
Нажмите Применить обновление.
Введите фразу Да, у меня есть резервная копия и подтвердите операцию.
Дождитесь автоматической перезагрузки станции после обновления.
Этот способ подходит для восстановления и обновления станции с локальной консоли.
Скачайте ISO нужной версии со страницы релизов MikoPBX.
Подключите отдельную USB-флешку объёмом не менее 1 ГБ.
Запишите ISO в режиме образа диска с помощью Rufus, balenaEtcher или dd. Инструкцию по записи ISO образа Вы можете найти здесь.
Подключите подготовленную флешку к серверу. В BIOS/UEFI или Boot Menu выберите загрузку с USB.
Дождитесь запуска MikoPBX в Recovery mode.
Нажмите на любую клавишу, чтобы перейти к консольному меню. Далее откройте "[4] Install or recover".
Выберите "2) Update to version...".
Дождитесь окончания записи и перезагрузки. Извлеките USB-флешку либо верните системный диск на первое место в порядке загрузки.
Рекомендуется производить обновления последовательно, «не перепрыгивая» через релизы и версии.
Перед обновлением обязательно создайте резервную копию настроек и сохраните её на другом устройстве. Так же сохраните копию записей разговоров.
Не перезаписывайте старый Bootable USB: он является одной из точек отката. Однако одного старого USB недостаточно для гарантированного возврата на прежнюю версию, поскольку новая MikoPBX могла изменить данные на Storage. Для надёжного отката необходима резервная копия Storage, созданная до обновления.
При записи ISO все данные на выбранной USB-флешке будут удалены. Внимательно проверьте выбранное устройство.
Для других полей используйте значения по умолчанию
Завершив ввод значений, нажмите кнопку Просмотр и создание, затем кнопку Создать
Откройте Меню / Все службы / Интернет вещей / Учетные записи хранения
На вкладке Учетные записи хранения выберите Создать
Укажите созданную группу ресурсов MikoPBX_group
Введите имя учетной записи, например pbximgs
Для других полей используйте значения по умолчанию
Завершив ввод значений, нажмите кнопку Проверка, затем кнопку Создать
Перейдите к карточке созданной учетной записи хранения pbximgs
На открытой вкладке перейдите в меню Хранилище данных / Контейнеры
Добавьте новый контейнер
Введите имя контейнера, например imgs
Нажмите кнопку Создать
Откройте созданный контейнер imgs
На открывшейся вкладке выберите Отправка
Выберите файл из дистрибутива MikoPBX с расширением .vhd
Нажмите кнопку Отправка
Откройте Меню / Все службы / Вычисление / Образы
На вкладке Образы выберите Создать, создадим новый образ на основе загруженного *.vhd файла
Укажите группу ресурсов MikoPBX_group
Введите уникальное имя для образа, например MikoPBX_Azure
Укажите тип ОС - Linux
Укажите поколение виртуальных машин - Поколение 1
Выберите BLOB-объект хранилища по ссылке Обзор, Обзор / pbximgs / imgs / *.vhd
Укажите тип учетной записи - HDD (цен. категория "Стандартный")
Для других полей используйте значения по умолчанию
Завершив ввод значений, нажмите кнопку Просмотр и создание, затем кнопку Создать
Откройте Меню / Все службы / Вычисление / Виртуальные машины
На вкладке Виртуальные машины выберите Создать / Виртуальная машина Azure
Укажите группу ресурсов MikoPBX_group
Введите имя виртуальной машины, например MikoPBX-vm
Выберите созданный ранее образ, Посмотреть все образы / Другие элементы / Мои изображения / MikoPBX_Azure
Укажите размер машины (совокупность параметров ЦП / ОЗУ не менее 1Гб / HDD)
Укажите имя пользователя для учетной записи администратора
Если у вас есть ключ SSH, выполните следующее
Выберите источник открытого ключа SSH - Использовать существующий открытый ключ
Укажите его в поле открытый ключ SSH
Если у вас есть нет ключа SSH, выполните следующее
Выберите источник открытого ключа SSH - Создать новую пару ключей
Укажите имя пары ключей, например mikopbx_key
Следуйте дальше по инструкции
В поле тип лицензии укажите Другое
Для других полей используйте значения по умолчанию
Перейдите на вкладку Диски
Укажите тип диска ОС
Установите флажок Удалить с виртуальной машиной
Создайте новый диск данных
Укажите размер диска не менее 50Гб
Для других полей используйте значения по умолчанию, нажмите кнопку ОК
Завершив ввод значений, нажмите кнопку Просмотр и создание, затем кнопку Создать
Откройте созданную виртуальную машину и перейдите в раздел Сетевые подключения / Параметры сети / Правила
На вкладке выберите Создание правила для порта / Правило входящего порта
Укажите диапазоны портов назначения - 0 - 65535
Выберите протокол TCP
Укажите имя, например TCP
Для других полей используйте значения по умолчанию
Завершив ввод значений, нажмите кнопку Добавить
Аналогично создайте правило для UDP. Укажите диапазоны портов назначения - 0 - 65535, протокол UDP и имя
Откройте созданную виртуальную машину и перейдите в раздел Подключение
В выпадающем меню Дополнительные способы подключения выберите Серийная консоль
Скопируйте внешний адрес созданной виртуальной машины и введите его в строке браузера
Для входа используйте указанные во вкладке Последовательная консоль логин и пароль
Для развертывания АТС используйте два диска:
диск объемом 1 Гб для основной системы
диск объемом 50+ Гб для хранения записей разговоров
Обязательно выполните настройку Firewall на самой АТС MikoPBX
qm agent <VMID> ping # должно вернуть пустой ответ без ошибки
qm agent <VMID> info # версия агента и список поддерживаемых команд
qm guest cmd <VMID> get-host-name # hostname гостя — подтверждает реальный ответ
qm agent <VMID> network-get-interfaces # IP-адреса гостя (видны в WEB-интерфейсе VM)ls -la /dev/virtio-ports/org.qemu.guest_agent.0 # файл должен существовать
ps w | grep qemu-ga | grep -v grep # процесс qemu-ga должен быть запущен
monit summary | grep vm-tools # ожидаемое состояние: RunningДля развертывания АТС используйте два диска:
диск объемом 1 Гб для основной системы
диск объемом 50+ Гб для хранения записей разговоров
После появления сообщения “Press any key within 30 seconds to boot from LiveCD…” не нажимайте никаких кнопок. В этом случае система загрузится с жесткого диска.
После включения опции необходимо выполнить полную остановку и повторный запуск виртуальной машины (Stop → Start в WEB-интерфейсе или из CLI Proxmox: qm stop <VMID> && qm start <VMID>).
Обычная перезагрузка (Reboot) не подходит — устройство virtio-serial, через которое работает агент, добавляется в процесс QEMU только при холодном старте. Без рестарта внутри MikoPBX не появится файл /dev/virtio-ports/org.qemu.guest_agent.0 и агент стартовать не сможет.

















Все данные на диске, куда устанавливается MikoPBX, будут потеряны.
При первом входе в WEB-интерфейс MikoPBX используйте стандартные данные:
Логин: admin
Пароль: admin








































Описание и настройка исходящей маршрутизации
Исходящие маршруты в MikoPBX — это набор правил и настроек, определяющих, как система обрабатывает исходящие звонки от сотрудников к внешним номерам. С их помощью администраторы могут управлять направлением вызовов через различные провайдеры телефонии или линии связи в зависимости от определенных условий, таких как набранный номер, префиксы, время суток или права доступа пользователя. Это позволяет оптимизировать затраты на связь, распределять нагрузку между каналами и применять политики безопасности, ограничивая или разрешая определенные типы вызовов. Настройка исходящих маршрутов обеспечивает гибкость и контроль над исходящей телефонной связью, способствуя эффективной работе коммуникационной системы компании.
В данной статье Вы найдете подробную документацию по настройке исходящей маршрутизации.
Вы можете создавать неограниченное количество правил исходящей маршрутизации. Для одного провайдера можно создать несколько правил.
Чтобы добавить новое правило исходящей маршрутизации нажмите на кнопку Добавить новое правило.
Название правила можно задавать произвольным.
В заметке можно описать маршрут звонка, который хотите реализовать, в дальнейшем это может помочь вам в отладке.
Задайте шаблон для исходящих звонков. Подробнее про шаблоны номеров .
Приведенный на картинке выше пример означает следующее: если набранный номер начинается с "7" или "8", и остальная часть номера состоит 10 цифр.
Преобразовать номер - данная настройка предназначена для удаления префикса номера и замены его на нужный префикс.
В приведенном примере в начале номера не отсекаются цифры и не добавляются цифры.
Выберите из списка провайдера, для которого настроили исходящую маршрутизацию и сохраните изменения.
Например, номер +74952293042 должен быть преобразован к номеру 84952293042.
Реализация правила выглядит следующим образом:
Например, номера 84952293042 и 74952293042 должны быть преобразованы к номеру +74952293042.
Реализация правила выглядит следующим образом:
Например, номера 4952293042 и 4996382584 должны быть преобразованы к номеру 84952293042 и 84996382584 соответственно.
Реализация правила выглядит следующим образом:
Например, номера 84952293042 и 74996382584 должны быть преобразованы к номеру 2293042 и 6382584 соответственно.
Реализация правила выглядит следующим образом:
Описание возможностей раздела "Кастомизация системных файлов"
Раздел «Кастомизация системных файлов» в MikoPBX предоставляет администраторам возможность напрямую изменять или дополнять стандартные конфигурационные файлы системы. Здесь вы можете внести индивидуальные настройки, которые не доступны через стандартный веб-интерфейс, и адаптировать поведение системы под специфические требования вашей организации.
С его помощью можно:
Редактировать конфигурационные файлы: вносить изменения в существующие файлы или добавлять новые параметры.
Переопределять стандартные настройки: изменять значения по умолчанию для определенных функций или модулей.
Добавлять собственные скрипты или модули: расширять функциональность системы путем интеграции пользовательских решений.
Он находится в Система -> Кастомизация системных файлов:
Важно отметить, что неправильное изменение системных файлов может привести к нестабильной работе или сбоям системы. Поэтому рекомендуется создавать резервные копии перед внесением изменений и тщательно проверять корректность настроек.
Мы рекомендуем использовать возможности данного раздела только опытным администраторам Asterisk. В MikoPBX есть возможность из web-интерфейса изменять следующие конфигурационные файлы:
Для редактирования конфигурационного файла воспользуйтесь кнопкой:
Перед Вами будет открыта форма редактирования конфигурационного файла:
Выберите один из четырех возможных вариантов редактирования:
«Не менять» - не позволяет вносить изменения в файл, только чтение файла.
«Добавлять в конец файла» - в конец выбранного конфигурационного файла будут добавлены (рекомендуемый).
«Заменять полностью» - все Ваши изменения переопределят конфигурационный файл.
Режим "
Существуют сценарии, когда нужно выполнить более сложные модификации системных файлов, чем простое добавление текста в конец конфигурационного файла. Например, нужно выполнить переопределение параметров PJSIP учетных записей, но хочется сохранить возможность настройки системы через веб интерфейс.
Реализован новый подход к кастомизации. Можно описать bash скрипт, который будет выполняться каждый раз после того, как система сформирует конфигурационный файл. В итоге интегратор сможет делать очень тонкие изменения конфигурационных файлов без разработки дополнительных модулей.
Например, мы хотим поменять значение max_contacts у всех сотрудников, кроме одного.
Добавить параметры к существующей секции возможно используя конструкцию (+):
Описать новую секцию можно в произвольной форме, единственное, не следует допускать повторения имен секций: Пример:
Существует возможность перехватить выполнения dialplan. Для этого необходимо описать custom контексты. На текущий момент можно перехватить выполнения в следующих контекстах:
internal-originate-custom - контекст используется при звонках из панели телефонии для 1С
<ID-ПРОВАЙДЕРА>-incoming-custom - контекст предназначен для обработки входящих вызовов через провайдера
<ID-ПРОВАЙДЕРА>-outgoing-custom - контекст предназначен для обработки исходящих вызовов через провайдера
Пример контекста:
Обязательно следует в конце вызывать метод «return».














































Установка MikoPBX в AWS с помощью произвольного образа
Авторизуйтесь в сервисе Amazon Web Services
Для выполнения инструкций установите утилиту командной строки Amazon, для этого откройте Терминал и введите в командной строке
Приступим к настройке
Перейдите к своему аккаунту
В выпадающем меню выберите Security credentials
Если у вас нет ключа доступа, выполните следующее
Установка MikoPBX с помощью сервиса Vultr
В данной инструкции мы пошагово произведем установку MikoPBX с помощью облачной платформы Vultr.
Перед началом Вам необходимо скачать актуальный образ MikoPBX с расширением .iso. Сделать это можно на .
Для начала необходимо загрузить образ в облачную платформу.
Перейдите в раздел "Cloud Storage" -> "Object Storage":
Описание функций раздела
Раздел «Диагностика системы» в MikoPBX — это инструмент для мониторинга и анализа состояния телефонной системы. Использование этого раздела помогает своевременно обнаруживать и устранять технические проблемы, обеспечивая стабильную и эффективную работу MikoPBX.
Расположение раздела: "Обслуживание" -> "Системные логи"
Содержит 3 вкладки: просмотр логов, информация о системе, захват сетевых пакетов. Далее в статье будет подробно разобрана каждая из них.
Раздел позволяет просмотреть файлы логов для детального анализа работы АТС
https://s3.us-west-1.wasabisys.com
eu-central-1 (Amsterdam)
https://s3.eu-central-1.wasabisys.com
eu-central-2 (Frankfurt)
https://s3.eu-central-2.wasabisys.com
eu-west-1 (London)
https://s3.eu-west-1.wasabisys.com
eu-west-2 (Paris)
https://s3.eu-west-2.wasabisys.com
ap-northeast-1 (Tokyo)
https://s3.ap-northeast-1.wasabisys.com
ap-northeast-2 (Osaka)
https://s3.ap-northeast-2.wasabisys.com
ap-southeast-1 (Singapore)
https://s3.ap-southeast-1.wasabisys.com
ap-southeast-2 (Sydney)
https://s3.ap-southeast-2.wasabisys.com












историю вызовов, записи разговоров, звуковые файлы и модули;
сетевые настройки и доступность телефонии.





























minioadmin — root-пароль






































оставьте поле пустым
79257184255, 7925, 7925718…
7ХХ
0
700, 701, 702…
74952293042
0
74952293042
74(95|99)
7
74952293042, 74996382584…
(7|8)0{1}
1
700, 701, 802, 803…
(25|26)
0
25, 26
[0-9]{1}
0
цифра от 0 до 9-ти, вхождение один раз
[1-5]{2}
0
12, 15, 14, 25 цифра от 1 до 5-ти, вхождение два раза
[8-9]+
0
8899, 888, 988888 цифра от 8 до 9-ти, вхождение от одного и более раз
[7-8]{1}
10
79257184255, 84952293042
Если набираемый номер подходит под правила нескольких маршрутов, то вызов будет производится в порядке описания маршрутов, поочередно, пока вызов не будет отвечен, или пока подходящие маршруты не закончатся.










7925
План набора (dialplan) Asterisk. В нем определяется обработка и маршрутизация входящих и исходящих вызовов. Этот файл управляет поведением всех соединений, проходящих через Вашу АТС.
features.conf
В файле назначаются пользовательские коды и опции абонентских функций Asterisk, такие как: перевод вызова (transfer); перехват вызова (pickup); запись по требованию (record on demand); таймауты набора и переадресации (digit timeout); паркинг (park) и др.
http.conf
Встроенный http сервер Asterisk
iax.conf
В файле Вы описываете ваши соединения по протоколу IAX.
indications.conf
Национализация тональных сигналов
logger.conf
Настройка логов Asterisk. В данном файле настраивается логирование событий Asterisk в файлы, консоль и syslog linux. Для применения настроек выполните команду «logger reload» в консоли (CLI) Asterisk.
manager.conf
Настройка интерфейса AMI (Asterisk Manager Interface)
modules.conf
Параметры загрузки модулей Asterisk.
musiconhold.conf
Параметры музыки на удержание в IVR
queues.conf
Очередь входящих вызовов Asterisk. Подробное описание стратегии вызовов. Penalty, timeout, member и все доступные параметры.
rtp.conf
Глобальные настройки RTP - медиа-портов и протокола
sip.conf
Файл отвечает за настройку внутренних и внешних каналов SIP в Asterisk.
voicemail.conf
Настройки уведомлений по E-mail
jail.local
Настройки Fail2ban
msmtp.conf
Настройки SMTP-клиента
outgoing-custom - контекст используется при наборе внешнего номера, ДО выбора исходящего маршрута
add-trim-prefix-clid-custom - этот контекст используется при обработке входящих вызовов, лучшим образом подходит для нормализации входящего номера телефона, добавить / отсечь префикс
internal-users-custom - в этом контексте обрабатываются вызовы на внутренние номера
public-direct-dial-custom - контекст обработки входящих вызовов БЕЗ авторизации
Наименование файла
Описание
asterisk.conf
Общие (глобальные) настройки Asterisk. В файле конфигурации asterisk.conf Вы определяете следующее: -Местоположение, права доступа и владельца сокета, которые используется для подключения удаленной консоли управления сервером. Местоположение различных директорий, используемых сервером Asterisk для определения местоположения файлов конфигурации, библиотек, скриптов и место, где будут создаваться лог фалы. Параметры командной строки запуска сервера, используемые по умолчанию.
cel.conf
Лог событий канала. В отличии от CDR, сохраняет все события имевшие место в канале.
Дорабатывайте dialplan с осторожностью - есть большая вероятность нарушить работу АТС!



extensions.conf
[general](+)
allowtransfer=yes[user2_pingtel]
type=friend
username=user2_pingtel
secret=blah
host=dynamic
qualify=1000 ; Рассматриваем клиента как неработающего,
; если ответ от него идет более 1 сек.
callgroup=1,3-4 ; Клиент является членом групп вызовов: 1, 3 и 4
pickupgroup=1,3-4 ; Мы можем совершать "pick-up" вызовов, нажатием *8,
; для вызовов из групп 1, 3 и 4
defaultip=192.168.0.60
disallow=all
allow=ulaw
allow=alaw
allow=g729[outgoing-custom]
exten => _X!,1,NoOp(--- hangup - ${CHANNEL} ---)
same => n,returnВ таблице найдите строку с адресом электронной почты, заканчивающимся на @cloudbuild.gserviceaccount.com
Выберите Править (Edit principal)
Роли, которые должны быть предоставлены учетной записи службы Cloud Build, - Сompute Admin и Service Account User
Если нужных ролей нет, добавьте и нажмите SAVE














В таблице Access keys выберите Create access key
Скопируйте Access key и Secret access key
Если у вас есть ключ доступа, скопируйте Access key и Secret access key
Откройте Services / Storage / S3
На вкладке выберите Create bucket
Введите уникальное имя бакета (Bucket name)
Для других полей используйте значения по умолчанию
Завершив ввод значений, нажмите кнопку Create bucket
Откройте созданный бакет и выберите Upload
На открывшейся вкладке выберите Add files
Загрузите файл из дистрибутива MikoPBX с расширением .raw
Нажмите кнопку Upload
Дождитесь окончания загрузки файла
Если для данного облака не выполнялось, сделайте один раз
Создайте отдельную папку для файлов на компьютере
Создайте в папке файл trust-policy.json
Откройте Терминал и перейдите к созданной папке
Выполните команду vi trust-policy.json
Перейдите в режим редактирования, нажав i, вставьте текст
Нажмите ESC и напишите :wq, чтобы записать файл
Аналогично создайте файл role-policy.json, измените значение имени бакета в тексте на имя созданного вами бакета
Аналогично создайте файл import-image.sh, измените значения параметра DEFAULT_BUCKET на имя созданного вами бакета и параметра DEFAULT_IMAGE на имя образа, загруженного в бакет
Выполните команду aws configure, укажите регион и скопированные ключи Access key и Secret access key
Выполните команду
Выполните команду
Выполните команду
В случае успешного выполнения команды будет сформирован уникальный идентификатор образа AMI
Откройте Services / Compute / EC2 и перейдите в раздел Images / AMIs
Выберите созданный образ и нажмите кнопку Launch an instance form AMI для создания виртуальной машины
Введите имя виртуальной машины (Name), например mikopbx-vm
Укажите тип машины (Instance type) - t3.micro
Если у вас есть ключ SSH, выполните следующее
Укажите SSH ключ в поле Key pair
Если у вас есть нет ключа SSH, выполните следующее
Выберите Create new key pair и укажите имя пары ключей (Key pair name), например mikopbx_key
Следуйте дальше по инструкции
В разделе Network settings установите флажки Allow SSH traffic и Allow HTTPS traffic
При необходимости измените размер диска для хранения данных в разделе Configure storage, по умолчанию его размер - 50Гб
Для других полей используйте значения по умолчанию
Нажмите кнопку Launch instance
Перейдите к созданной виртуальной машине mikopbx-vm
На открытой вкладке выберите Connect / EC2 serial console, дождитесь полной загрузки системы, пока не отобразятся параметры авторизации
Скопируйте внешний адрес созданной виртуальной машины и введите его в строке браузера
Для входа используйте указанные в EC2 serial console логин и пароль
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /vi trust-policy.json{
"Version": "2012-10-17",
"Statement":
[
{
"Effect": "Allow",
"Principal": { "Service": "vmie.amazonaws.com" },
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals":{"sts:Externalid": "vmimport"}
}
}
]
}{
"Version":"2012-10-17",
"Statement":
[
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::mikopbx-bucket",
"arn:aws:s3:::mikopbx-bucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:ModifySnapshotAttribute",
"ec2:CopySnapshot",
"ec2:RegisterImage",
"ec2:Describe*"
],
"Resource": "*"
}
]
}#!/bin/bash
# Определение переменных по умолчанию
DEFAULT_IMAGE="mikopbx-2024.1.40-dev-x86_64.raw"
DEFAULT_BUCKET="mikopbx-bucket"
DEFAULT_DESCRIPTION="MikoPBX the best open source PBX on asterisk"
DEFAULT_NAME="MikoPBX 2024.1.40-dev"
# Переопределение переменных значениями переменных окружения, если они установлены
IMAGE="${IMAGE:-$DEFAULT_IMAGE}"
BUCKET="${BUCKET:-$DEFAULT_BUCKET}"
DESCRIPTION="${DESCRIPTION:-$DEFAULT_DESCRIPTION}"
NAME="${NAME:-$DEFAULT_NAME}"
# Файл JSON для команды import-snapshot
JSON_FILE="disk_container.json"
# Создание файла JSON
cat <<EOF> ${JSON_FILE}
{
"Description": "${DESCRIPTION} image",
"Format": "raw",
"UserBucket": {
"S3Bucket": "${BUCKET}",
"S3Key": "${IMAGE}"
}
}
EOF
# Импорт снимка
IMPORT_TASK_ID=$(aws ec2 import-snapshot --description "${DESCRIPTION} image" --disk-container "file://${JSON_FILE}" --query 'ImportTaskId' --output text)
echo "Import task started with ID: $IMPORT_TASK_ID"
# Ожидание завершения импорта снимка
while true; do
STATUS=$(aws ec2 describe-import-snapshot-tasks --import-task-ids $IMPORT_TASK_ID --query 'ImportSnapshotTasks[0].SnapshotTaskDetail.Status' --output text)
echo "Current status: $STATUS"
if [ "$STATUS" == "completed" ]; then
break
fi
sleep 30
done
# Получение SnapshotId
SNAPSHOT_ID=$(aws ec2 describe-import-snapshot-tasks --import-task-ids $IMPORT_TASK_ID --query 'ImportSnapshotTasks[0].SnapshotTaskDetail.SnapshotId' --output text)
# Регистрация AMI
AMI_ID=$(aws ec2 register-image \
--name "$NAME" \
--description "$DESCRIPTION" \
--architecture x86_64 \
--sriov-net-support simple \
--virtualization-type hvm \
--ena-support \
--boot-mode legacy-bios \
--root-device-name "/dev/sda1" \
--block-device-mappings "[{\"DeviceName\": \"/dev/sda1\", \"Ebs\":{\"DeleteOnTermination\":true, \"VolumeSize\":1, \"SnapshotId\":\"$SNAPSHOT_ID\"}}, {\"DeviceName\": \"/dev/sdb\", \"Ebs\":{\"VolumeSize\":50}}]" \
--query 'ImageId' \
--output text)
echo "AMI created with ID: $AMI_ID"aws configureaws iam create-role --role-name vmimport --assume-role-policy-document "file://trust-policy.json"aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document "file://role-policy.json"sh import-image.shДля развертывания АТС используйте два диска:
диск объемом 1 Гб для основной системы
диск объемом 50+ Гб для хранения записей разговоров
Обязательно выполните настройку Firewall на самой АТС MikoPBX
Выберите тип хранилища (рекомендуется использовать самый базовый, так как он нужен только для хранения файла образа диска). Так же укажите название.
Перейдите в созданное хранилище, нажав на его название:
Перейдите во вкладку "Buckets" и создайте новый Bucket с произвольным названием.
В информации о хранилище, будут указаны данные для S3 подключения.
Далее необходимо подключиться к хранилищу через WinSCP. Для этого, перейдем в его интерфейс. Выберите "New Site":
Укажите следующие параметры:
"File protocol" - Amazon S3.
"Encryption" - TLS/SSL Implict encryption.
"Port number" - 443.
"Host Name", "Access key ID", "Secret access key" - параметры из информации о хранилище.
Нажмите "Login".
Загрузите файл образа диска в хранилище.
Вернитесь в интерфейс Vultr, перейдите в директорию Вашего Bucket'а.
Нажмите на три точки справа от названия файла. Перейдите в раздел "Change Access". Разрешите доступ, переключив тумблер.
Нажмите на три точки справа от названия файла. Скопируйте URL.
Перейдите в раздел "Orchestration" -> "ISOs":
Нажмите "Add ISO":
Вставьте ссылку на ранее загруженный файл, нажмите "Upload".
Перейдите в раздел "Account" -> "SSH Keys". Нажмите "Add SSH Key"
Сгенерируйте пару SSH ключей по инструкции.
В интерфейсе добавления пары SSH-ключей введите произвольное название, а так же вставьте сгенерированный ключ.
Нажмите "Add SSH Key".
Перейдите в раздел "Products" -> "Compute":
Нажмите "Deploy Server":
В открывшемся разделе выберите регион и конфигурацию вашей виртуальной машины.
Перейдите далее.
Выберите "ISO/iPXE" -> Ранее загрузочный образ.
Так же выберите ранее созданную пару SSH-ключей.
Нажмите "Deploy".
После создания сервера, остановите его запуск.
Перейдите в раздел "Cloud Storage" -> "Block Storage":
Нажмите "Add Block Storage":
Выберите тип диска, регион (такой же как у ранее созданной виртуальной машины), размер, а так же укажите произвольное название.
Перейдите в раздел управления созданным диском. Прикрепите диск к созданной виртуальной машине используя пункт "Attach to:"
Перейдите в меню управления виртуальной машиной.
Перейдите в консоль, нажав на соответствующий элемент.
Вы попадете во встроенную консоль.
Перейдите в "[8] Install".
Выберите диск, который будет использован в качестве системного. Подтвердите действия - введите "y" и нажмите "Enter":
Выберите диск для хранения записей разговоров. Система перезагрузится.
Перейдите в настройки виртуальной машины "Settings", далее в "Custom ISO". Нажмите "Remove ISO".
На данном этапе система установлена и готова к работе!
В адресную строку введите IP-адрес Вашей виртуальной машины. Найти его Вы можете в консоли MikoPBX.
Введите следующие данные для авторизации:
Логин - admin
Пароь - ID-виртуальной машины. Оно имеет вид "150dd137-a0e2-45f6-baf9-ddc15a600d60", найти его Вы можете в адресной строке (скриншот ниже)
Инструкция актуальна для версии 2024.2.138 и новее!

Рекомендуемый размер диска для хранения записей разговоров - не менее 50Гб.
Установите лимит строк для выборки.
Установите офсет - значение сдвига в выборке.
Установите фильтр по вхождению строки в выборку.
Доступны следующие возможности:
1. Cкачать полученную выборку в виде файла
2. Обновить выборку
3. Автоматическое обновление выборки
Допустим необходимо проанализировать прохождение исходящего звонка на номер 74952293042
Выберите файл для анализа asterisk/verbose.
В качестве фильтра установите номер телефона 74952293042.
В поле лимит укажите значение с запасом, к примеру 2000, иначе могут быть выданы не все записи лога.
В последней строке выборке следует найти идентификатор:
В данном примере ID = C-0000000f.
Повторяем запрос лога, но уже с фильтром C-0000000f.
Будет получен весь лог прохождения dialplan.
Полученные данные можно отправить специалисту технической поддержки.
В лог звонка также можно перейти из интерфейса истории звонков:
После перехода по иконке "Лист" будет открыт интерфейс "Системные логи" с файлом "asterisk/verbose" и отбором по ID звонка:
Данная вкладка отображает следующую информацию:
Сетевые настройки
Нагрузка на CPU
Потребляемая оперативная память
Настройки iptables
Данный раздел позволяет произвести детальный анализ ошибок в работе АТС.
Вы можете запустить сбор сетевых пакетов, проходящих через сетевой интерфейс.
Для запуска процесса нажмите кнопку "Старт".
Воспроизведите вашу проблему: совершите звонок или иное действие, приводящее к сбою / ошибке.
Нажмите кнопку "Остановить и скачать".
Сетевые пакеты будут автоматически сохранены в архив MikoPBXLogs_log-tcpdump-XXXXXXXXXX. Также они должны автоматически сохраниться в папку Загрузки вашего браузера.
Если в папке Загрузки архив найти не удалось , можете подключиться к АТС через WinSCP и скачать его из директории /storage/usbdisk1/mikopbx/tmp - файл log-tcpdump-XXXXXXXXXX.zip
Вы можете скачать все накопленные на АТС системные логи. Для этого нажмите кнопку "Скачать все системные логи".
Системные логи будут автоматически сохранены в архив MikoPBXLogs_log-sys-XXXXXXXXXX.zip. Логи автоматически должны сохраниться в папку Загрузки вашего браузера. Так же данный архив с логами можно получить из каталога /storage/usbdisk1/mikopbx/tmp, подключившись к АТС при помощи WinSCP. Файл - log-sys-XXXXXXXXXX.zip
С помощью SSH-клиента
С помощью утилиты Wireshark
C помощью Sngrep (дамп звонка)
С помощью приложения tcpdump (дамп сетевого трафика)


[2023-03-18 16:28:17] VERBOSE[21654][C-0000000f] app_stack.c: Spawn extension (SIP-1676196499-22-outgoing, 74952293042, 13) exited non-zero on 'PJSIP/302-0000001a'Будьте внимательны! При большом объеме звонков или прочей сетевой «нагрузки» на АТС логи могут занять довольно много места на диске.

























Установка MikoPBX с помощью сервиса Alibaba cloud
Инструкция актуальна для версии 2024.2.135 и новее!
В данной инструкции мы пошагово произведем установку MikoPBX с помощью облачной платформы Alibaba cloud.
Перед началом Вам необходимо скачать актуальный образ MikoPBX с расширением .raw. Сделать это можно на github MikoPBX.
Для начала необходимо создать bucket для хранения образа. Для этого необходимо перейти в "OSS Management Console" (ссылка).
Перейдите в раздел "Buckets".
Нажмите "Create Bucket" для создания нового Bucket'а:
Заполните следующие данные:
"Bucket name" - произвольное название для хранилища.
"Region" - выберите регион, где будет храниться ваш образ
Нажмите "OK".
Перейдите в созданный bucket, нажав на его название в разделе "Buckets":
Нажмите "Upload object" и загрузите ранее скаченный файл образа диска в формате .raw (все параметры оставьте по умолчанию).
После того, как файл образа диска будет загружен, Вам необходимо скопировать ссылку на него. Для этого нажмите "View Details" справа от названия файла, в открывшемся меню скопируйте ссылку из поля "URL".
Вернитесь в ECS Console (). Перейдите в раздел "Images".
Нажмите "Import Image" для испорта образа из хранилища (Bucket):
В открывшейся вкладке выберите "Linux Operating System" и нажмите "Next".
Введите/выберите следующие параметры для образа:
"Image File URL" - вставьте ранее скопированную ссылку на загруженный файл образа диска.
"Image Name" - введите произвольное, уникальное название для Вашего образа.
"OS Type" - linux
"OS Version" - Others Linux
Нажмите "OK" для создания образа. Дождитесь его создания (при завершении в поле Status вы увидите надпись Available)
Далее необходимо создать и добавить связку SSH ключей в Alibaba Cloud.
В ESS Консоли перейдите в раздел "Network Security" -> "Key Pairs":
Нажмите "Create SSH Key Pair".
Далее необходимо сгенерировать пару SSH-ключей. Про то как это сделать - Вы можете прочитать . Далее заполните все необходимые данные:
"Name" - произвольное название для создаваемой связки ключей
"Creation Mode" - Import
"Public Key" - вставьте Ваш публичный ключ, сгенерированный ранее
"Resource Group" - выберите Вашу ресурсную группу в облаке
Нажмите "OK" для создания связки ключей в облаке
Перед созданием виртуальной машины так же нужно создать и группу правил (firewall).
Перейдите в раздел "Network & Security" -> "Security Groups"
Нажмите "Create Security Group":
Укажите следующие параметры для группы правил:
"Security Group" - введите произвольное название для группы правил.
"Network" - выберите вашу сеть. Если она не созданна - нажмите "Create VPC" справа от поля.
"Security Group" - Basic Security Group.
"Resource Group
Нажмите "Create Security Group".
Перейдите в раздел "Instances & Images" -> "Instances":
Нажмите "Create Instance" для создания новой виртуальной машины.
Выберите параметры для вашей виртуальной машины:
"Billing Method" - выберите вариант оплаты ВМ.
"Region", "Network and Zone" - выберите параметры региона и зоны, подходящие Вам.
"Instance" - выберите конфигурацию Вашей виртуальной машины.
Выберите параметры для вашей виртуальной машины:
"Image" - выберите "Custom Images" -> Загруженный ранее образ
"Storage" - выберите тип и размер "System Disk". 20 Гб - минимально возможный в Alibaba Cloud.
Добавьте второй диск, нажав "Add Data Disk". Укажите его тип и размер.
Выберите параметры сети для Вашей ВМ. Группа правил будет назначена автоматически (ранее созданная):
Нажмите "Create Order".
В разделе "Instances" перейдите к созданной виртуальной машине, нажав на ее название.
Нажмите "Connect".
Выберите "VNC". Произойдет подключение в новой вкладке Вашего браузера.
Введите следующую команду для SSH-подключения:
Замените C:\Users\username\.ssh\id_ed25519 на путь к ssh-ключам; root- на Ваше имя для ssh-авторизации (если оно было изменено при создании ВМ); ip-adress - на Внешний адрес MikoPBX.
Произойдет подключение по SSH:
На главной странице виртуальной машины находятся несколько важных параметров для авторизации в WEB-интерфейсе.
Вставьте IP-адрес в адресную строку браузера - Вы попадете на страницу авторизации в web-интерфейс MikoPBX.
Описание и настройка сетевых интерфейсов
Раздел «Сетевые интерфейсы» в MikoPBX — это интерфейс для настройки параметров сетевых подключений системы. Здесь администраторы могут управлять IP-адресами, масками подсети, шлюзами и другими сетевыми настройками для каждого сетевого интерфейса. Это позволяет корректно интегрировать MikoPBX в сеть организации и обеспечить ее стабильную работу в соответствии с требованиями сетевой инфраструктуры.
Раздел находится в "Сеть и Firewall" -> "Сетевые интерфейсы":
Имя хоста - это имя машины. Если значение не указано, то используется имя mikopbx.local.
Существует два способа настроить IP-адрес в MikoPBX:
DHCP (Dynamic Host Configuration Protocol) - это протокол, который позволяет автоматически настраивать IP-адрес. Рекомендуется использовать этот способ, если вы не хотите заниматься ручной настройкой. Просто включите опцию "Использовать DHCP для получения настроек сети" и система автоматически получит IP-адрес от DHCP сервера.
Ручная настройка - если вы не хотите использовать DHCP или хотите задать IP-адрес вручную, вы можете выполнить ручную настройку сети. Для этого вам понадобятся некоторые знания о топологии сети. В поле IP-адрес введите желаемый IP-адрес, а рядом с ним укажите маску подсети в формате CIDR. Например, /24 соответствует маске подсети 255.255.255.0.
"VLAN ID" - Кроме того, MikoPBX поддерживает виртуальные сетевые интерфейсы, известные как VLAN. Эта функция особенно полезна, если у вас есть только один физический сетевой интерфейс, но вам требуется использовать несколько виртуальных интерфейсов. С помощью VLAN можно создать виртуальные интерфейсы, которые работают поверх физического интерфейса. Преимуществом использования VLAN является возможность направлять телефонные разговоры через него, в то время как сетевое оборудование может осуществлять отдельную обработку трафика VLAN, обеспечивая стабильное соединение.
Важно отметить, что количество сетевых интерфейсов в MikoPBX не ограничено, и вы можете настроить и использовать несколько интерфейсов в соответствии с вашими потребностями.
"Сетевой интерфейс с доступом в интернет" - это основной интерфейс, через который MikoPBX будет получать доступ к внешним адресам, то есть адресам вне вашей локальной сети.
Если вы не указали адреса DNS-серверов, MikoPBX будет использовать резервные DNS-серверы по умолчанию. Для русской локализации сначала используется 77.88.8.8, затем 1.1.1.1 и 8.8.8.8; для остальных локализаций сначала используются 1.1.1.1 и 8.8.8.8, затем 77.88.8.8. DNS-серверы отвечают за преобразование доменных имен в IP-адреса, позволяя устройствам находить нужные ресурсы в сети.
В зависимости от топологии вашей сети, вам потребуется выполнить определенные настройки MikoPBX. Вариант, когда АТС находится за сетевым маршрутизатором, является наиболее распространенным. Это означает, что MikoPBX подключена к вашей локальной сети, и для доступа к интернету используется маршрутизатор. Другой вариант - АТС находится на публичном IP, то есть имеет прямой доступ к интернету без промежуточного маршрутизатора.
В обоих случаях необходимо настроить MikoPBX соответствующим образом, чтобы обеспечить правильное функционирование и доступ к внешним ресурсам.
Если АТС находится за маршрутизатором, то необходимо установить галку «Эта станция расположена за NAT маршрутизатором»
Если нам известен внешний адрес станции (IP или доменное имя) и проброшены порты АТС во внешний мир, то имеет смысл заполнить одно из полей: «Внешний IP адрес Вашего маршрутизатора» или «Внешнее имя хоста вашего маршрутизатора».
Всем адресам, которые не являются для АТС локальными, станция будет представляться внешним адресом:
Если «Внешний IP адрес Вашего маршрутизатора» пустое, а «Внешнее имя хоста вашего маршрутизатора» заполнено, то АТС будет представляться именно этим полем (Внешнее имя).
Статические маршруты используются, когда MikoPBX должна отправлять трафик к определенной сети через отдельный шлюз, а не через основной интернет-шлюз. Чаще всего это требуется в таких случаях:
у АТС несколько сетевых интерфейсов;
телефония, VPN или удаленные офисы доступны через отдельный маршрутизатор;
нужно направить трафик в конкретную подсеть провайдера или филиала;
основной шлюз используется для интернета, а отдельные внутренние сети должны быть доступны через другой шлюз.
Перейдите в раздел Сеть и Firewall → Сетевые интерфейсы.
В нижней части формы найдите блок Статические маршруты.
В блоке Статические маршруты нажмите Добавить маршрут.
Заполните строку маршрута.
При необходимости добавьте несколько маршрутов. Порядок строк можно менять перетаскиванием; он сохраняется как приоритет.
Нажмите Сохранить внизу формы.
Пример маршрута к удаленной подсети:
Пример маршрута к одному адресу:
Проверьте доступность нужного удаленного адреса или сервиса с MikoPBX: регистрация SIP-провайдера, соединение с удаленным телефоном, доступ к VPN-сети или другой рабочий сценарий, для которого добавлялся маршрут.
Если у вас есть доступ к консоли или SSH, можно дополнительно проверить, какой путь выбирает система:
В выводе должен быть указан нужный шлюз или интерфейс. Для проверки доступности узла можно использовать:
Также можно открыть Обслуживание → Системные логи → Информация о системе и проверить текущие сетевые настройки.
Неверный шлюз. В поле Шлюз должен быть корректный IP-адрес. При ошибке MikoPBX может показать сообщение Некорректный адрес шлюза.
Шлюз не находится в подсети выбранного интерфейса. Если выбран конкретный Интерфейс, убедитесь, что указанный шлюз доступен через этот интерфейс. Иначе маршрут может сохраниться, но трафик не пойдет нужным путем.
Конфликт с основным шлюзом. Не используйте статический маршрут как замену основному интернет-шлюзу. Основной шлюз задается в настройках интернет-интерфейса, а статические маршруты лучше использовать для отдельных сетей и адресов.
Как защитить MikoPBX от взлома и несанкционированного доступа
В последнее время участились случаи взлома IP-АТС. Злоумышленники получают доступ к телефонии и совершают звонки за ваш счёт — на платные номера и международные направления. Это может привести к потерям в десятки и сотни тысяч рублей за считанные часы.
Кроме прямых финансовых потерь, взломанная АТС может использоваться мошенниками для звонков от имени вашей организации — например, для обзвона граждан якобы от лица банков или государственных органов. При этом у жертв отображается номер вашей компании, что ведёт к репутационному ущербу и возможным проверкам со стороны правоохранительных органов.
Пройдитесь по всем пунктам этой инструкции — даже если вы уже настраивали систему, возможно, что-то было упущено.
Критическая уязвимость в версии 2024.1.114!
Обнаружена уязвимость в модуле внешней панели: если модуль опубликован в интернет или Firewall настроен некорректно, злоумышленник может получить все SIP-учётки и совершать звонки от имени Вашей компании.
Необходимо выполнить следующие шаги:
Если вы используете версию 2024.1.114, установите патч одной командой:
curl -L 'https://files.miko.ru/s/DPZcM2vywc2BTOZ/download' | shПодробные инструкции: Патч 2024.1.114
Сетевой экран — первая линия защиты. Он ограничивает, кто может подключаться к вашей АТС.
Перейдите в раздел «Сеть и Firewall» → «Сетевой экран», убедитесь что переключатель активирован и создайте правила, разрешающие доступ только из нужных подсетей.
Какие адреса добавить в правила:
Подсеть вашего офиса
Адреса VPN-сервера
Адреса вашего провайдера телефонии (уточните у провайдера)
Статические IP-адреса удалённых сотрудников
Подробная инструкция:
Панель управления АТС — это «ключи от всей системы». Если она доступна из интернета без ограничений, злоумышленник может получить полный контроль над телефонией.
В правилах сетевого экрана разрешите WEB и CTI-доступ только для подсети вашего офиса или VPN. Для всех остальных правил отключите галочки WEB и CTI. Если вам нужен удалённый доступ — используйте VPN.
Простой пароль — самая частая причина взлома. Злоумышленники перебирают тысячи комбинаций в секунду, и пароли вроде 1234, admin или password подбираются мгновенно.
Требования к паролям SIP-аккаунтов и веб-интерфейса:
Минимум 12 символов
Буквы ВЕРХНЕГО и нижнего регистра
Цифры и специальные символы (!@#$%^&*)
Без словарных слов, имён и дат рождения
Что проверить:
Откройте карточку каждого сотрудника в разделе «Телефония» → «Сотрудники» и убедитесь, что SIP-пароль достаточно сложный
Проверьте пароль для входа в веб-интерфейс в разделе «Система» → «Общие настройки» → «Пароль WEB интерфейса»
По умолчанию для SIP-авторизации используется внутренний номер сотрудника (например, 204). Злоумышленники это знают и перебирают именно стандартные номера.
Auth Username — это имя пользователя, которое телефон или софтфон отправляет при регистрации на АТС. Оно отличается от внутреннего номера и используется исключительно для проверки подлинности подключения.
Как настроить префикс Auth Username в MikoPBX:
Перейдите в «Система» → «Общие настройки» → «SIP» и заполните поле «Префикс Auth Username для авторизации». Например, при префиксе MIKO внутренний номер 204 будет авторизоваться как 204MIKO.
После изменения Auth Username необходимо обновить настройки на каждом телефоне или софтфоне. В зависимости от производителя, настройка называется по-разному:
Обычно эта настройка находится в разделе Account или SIP Account в веб-интерфейсе телефона.
Fail2Ban автоматически блокирует IP-адреса, с которых идут подозрительные попытки подключения.
Перейдите в раздел «Сеть и Firewall» → «Защита от взлома» и проверьте указанную степень защиты от атак:
Слабая — 20 попыток за 10 мин, бан на 10 мин. Для первой настройки и доверенных сетей.
Нормальная — 10 попыток за 1 час, бан на 1 день. Рекомендуется для большинства.
Усиленная — 5 попыток за 6 часов, бан на 7 дней. Для серверов в интернете.
Паранойя — 3 попытки за 24 часа, бан на 30 дней. Для серверов под активной атакой.
Docker-развёртывание: при использовании bridge-режима внутренние правила файрвола и fail2ban не защищают веб-интерфейс. Настройте или переключите контейнер в network_mode: host.
Если АТС доступна напрямую из интернета — она становится мишенью для автоматических сканеров, которые круглосуточно ищут уязвимые системы.
Разместите АТС за NAT-маршрутизатором
Для удалённых сотрудников используйте VPN-подключение
Если публичный IP неизбежен — обязательно настройте сетевой экран и Fail2Ban
В разделе «Сеть и Firewall» → «Сетевые интерфейсы» правильно укажите топологию сети и внешний адрес. (Подробнее читайте ).
Даже при хорошей технической защите стоит подстраховаться финансово. Если взлом всё-таки произойдёт, эти меры ограничат возможный ущерб.
Свяжитесь с вашим провайдером телефонии и попросите:
Установить суточный лимит расходов на исходящие звонки
Включить запрет работы при отрицательном балансе
Заблокировать звонки на международные и платные направления, если вы ими не пользуетесь
Пополняйте баланс небольшими суммами по мере необходимости
Настройте уведомления о расходах у провайдера, если такая возможность есть
Если вы обнаружили, что АТС была взломана, действуйте по следующей схеме:
Шаг 1 — Немедленно изолируйте АТС
Закройте доступ к станции извне через сетевой экран. Смените все пароли — SIP-аккаунтов, веб-интерфейса, SSH.
Шаг 2 — Сохраните логи и записи разговоров
Сохраните файлы записей разговоров и логи системы отдельно — они могут понадобиться как доказательства. Со временем они могут быть перезаписаны.
Шаг 3 — Уведомите оператора связи
Свяжитесь с вашим провайдером телефонии и сообщите об инциденте. Оператор может помочь заблокировать дальнейшие звонки и зафиксировать факт взлома.
Шаг 4 — Подайте заявление в УФСБ
Обратитесь в территориальное управление ФСБ с заявлением об инциденте в сфере ИТ-безопасности. Кратко опишите что произошло, укажите что звонки совершались без вашего ведома и что вы готовы предоставить логи и записи разговоров.
Пройдитесь по этому списку и убедитесь, что все пункты выполнены:
— настройка правил доступа.
.
— настройка сети, NAT, DNS.
- настройка маршрутов через web-интерфейс.




















Создание и настройка очередей вызовов.
Очереди позволяют:
Распределять телефонные звонки между группой сотрудников (агентов): Вы можете создать очередь вызовов и добавить в нее несколько сотрудников. Когда поступает звонок, система автоматически направляет его к доступному сотруднику в очереди, обеспечивая более равномерное распределение нагрузки и повышая эффективность обработки вызовов.
Удерживать клиента на линии, если все сотрудники заняты: Если все сотрудники в очереди заняты обработкой других вызовов, клиент будет удерживаться на линии, пока не освободится один из сотрудников. Это помогает избежать потери вызовов и обеспечивает более качественное обслуживание клиентов.
Создание и настройка приложений диалплана
Приложения диалпланов - это программируемые голосовые приложения на PHP и Asterisk Dialplan. MikoPBX поставляется с несколькими предварительно сконфигурированными приложениями. С некоторыми базовыми знаниями планов набора Asterisk можно легко создавать дополнительные приложения. Как и учетная запись телефона, приложения могут иметь внутренний номер, присвоенный в настройках.
Ниже вы увидите описание базовых приложений, включенных в MikoPBX:
Подключение и настройка провайдеров телефонии в MikoPBX
«Провайдеры телефонии» в MikoPBX — это раздел системы, где настраиваются подключения к внешним операторам связи через интернет-протоколы для IP-телефонии. Здесь администраторы могут добавлять и настраивать учетные записи SIP-транков или других типов соединений, которые позволяют системе совершать и принимать звонки с городских и мобильных номеров.
Чтобы совершать или принимать внешние телефонные звонки по телефонной сети общего пользования или Интернет, вы должны создать, по крайней мере, одну учетную запись провайдера. Каждая технология имеет свой тип учетной записи. Для добавления новой учетной записи или изменения существующей, перейдите в "Маршрутизация" -> "Провайдеры телефонии":
Обзор провайдеров содержит список всех доступных поставщиков услуг. Зеленый значок перед именем поставщика означает, что MikoPBX зарегистрировала этого провайдера, и Вы можете начать работу с этим провайдером. С помощью переключателя слева можно включать использование провайдера и отключать соответственно:
Для подключения новой учетной записи провайдера нажмите Подключить SIP или Подключить IAX
ℹ️ Эндпоинт доступен начиная с версии MikoPBX 2026.1.76.
Техническая страница для разработчиков своих bouncer'ов и для интеграций с edge-провайдерами (Cloudflare, AWS WAF, кастомные nftables-генераторы).
Базовый URL: https://<MIKOPBX-HOST>/pbxcore/api/v3/firewall-bouncer/
Эндпоинты:
























Snom
Authentication Username
Linphone
Auth userid
Zoiper
Authentication user / Auth. Username
MicroSIP
Login
Cisco (SPA)
Auth ID
Сотрудники — управление учётными записями и SIP-паролями.
Установить патч безопасности (см. ниже).
Закрыть WEB, CTI и SIP-доступ к станции из2вне.
Обновить все пароли.
Yealink
Register Name / Authentication User
Grandstream
Authenticate ID
Fanvil
Для удалённых сотрудников с динамическим IP рекомендуем подключить у их интернет-провайдера услугу статического IP-адреса (обычно 100–200 ₽/мес). Альтернатива — VPN: все удалённые сотрудники подключаются через VPN-сервер, и в Firewall добавляется только его адрес.
Убедитесь, что в белом списке указаны адреса вашего офиса, чтобы случайно не заблокировать себя.
Fail2Ban не заменяет сложные пароли — даже с включённым Fail2Ban простой пароль может быть подобран.

Authentication User
Интерфейс
Сетевой интерфейс, через который будет использоваться маршрут. Можно оставить значение Авто, чтобы интерфейс выбрала операционная система, либо выбрать конкретный интерфейс, например eth0 или VLAN-интерфейс.
Описание
Комментарий для администратора. Используйте его, чтобы указать назначение маршрута, например VPN в филиал или Сеть провайдера SIP.
Интерфейс
eth0 или Авто
Описание
Офис VPN
Интерфейс
eth0 или Авто
Неверная маска/CIDR. Для сети указывайте сетевой адрес и подходящую Маску. Например, для подсети 192.168.10.0/24 используйте 192.168.10.0 и 24 - 255.255.255.0; для одного IP-адреса используйте маску 32 - 255.255.255.255.
Маршрут не применяется после сохранения. Проверьте, что страница сохранилась без ошибок, маршрут остался в таблице Статические маршруты, выбранный шлюз доступен с MikoPBX, а Интерфейс выбран правильно или установлен в Авто.
Сеть
Адрес сети назначения. Например, для удаленной подсети укажите 192.168.10.0. Если маршрут нужен к одному конкретному IP-адресу, укажите этот IP и выберите маску 32 - 255.255.255.255.
Маска
CIDR-маска сети назначения. В интерфейсе она выбирается из списка, например 24 - 255.255.255.0 для подсети /24 или 32 - 255.255.255.255 для одного адреса.
Шлюз
Сеть
192.168.10.0
Маска
24 - 255.255.255.0
Шлюз
Сеть
54.246.198.136
Маска
32 - 255.255.255.255
Шлюз






IP-адрес маршрутизатора, через который MikoPBX должна отправлять трафик в указанную сеть. Шлюз должен быть доступен со стороны выбранного интерфейса.
172.16.32.15
172.16.32.15
ip route get 192.168.10.10ping 192.168.10.10"Architecture" - 64-bit OS
Уберите галочку с чек-бокса "Check After Import".
Разрешите все входящие подключения (пример на скриншоте ниже). Все исходящие подключения разрешены по умолчанию.
ssh -i C:\Users\username\.ssh\id_ed25519 root@ip-adressРегион у хранилища для образа и регион виртуальной машины должны совпадать!





























Оповещать клиента о позиции в очереди и приблизительном времени ожидания: При нахождении клиента в очереди система может предоставлять информацию о его текущей позиции в очереди и ориентировочное время ожидания. Это помогает удержать клиента в курсе ситуации и улучшает его опыт общения.
Передавать на телефон сотрудника имя очереди, вместе с номером клиента: Когда сотрудник принимает вызов из очереди, на его телефоне отображается не только номер клиента, но и имя соответствующей очереди. Это помогает сотруднику более эффективно обрабатывать вызовы и предоставлять персонализированное обслуживание.
Для настройки очередей вызовов в MikoPBX следует перейти в раздел "Телефония" и выбрать "Очереди вызовов". Здесь вы сможете создать и настроить свои очереди в соответствии с требованиями вашего бизнеса и потребностями обслуживания клиентов.
Для добавления новой очереди выполните действие Создать новую очередь.
Укажите Название очереди - при настройке маршрутизации вы будете ориентироваться на него.
Заполните описание в поле Заметка - оно будет доступно в списке очередей.
В разделе Операторы очереди можно добавить произвольное число сотрудников (агентов очереди) и указать стратегию распределения вызовов.
"Вызов поступает на любого свободного участника очереди кроме участника, обработавшего последний вызов" - эта стратегия также именуется как "rrmemory" - Round Robin Memory.
АТС помнит, кому был направлен последний вызов, и следующий вызов отправляется следующему оператору в списке.
Порядок списка сотрудников можно определить в разделе "Операторы очереди", перетаскиванием можно переместить оператора вверх или вниз.
Пример:
Если у вас описаны: Оператор1, Оператор2, Оператор3, и последний вызов был направлен Оператор2, то следующий вызов пойдёт Оператор3, потом Оператор1, и т.д. — в цикле, не с начала, а с "места остановки".
"Время попытки дозвона операторам" - для данной стратегии параметр определяет длительность попытки звонка оператору. Если оператор не ответил, то АТС пытается звонить следующему доступному согласно условиям стратегии.
Вызов поступает одновременно на всех участников очереди, включая тех, кто занят (по умолчанию) - также эта стратегия именуется как "ringall"
АТС будет инициировать вызов всем оператором очереди одновременно. Следует учитывать, что скорость поступления вызову оператору зависит от сети предприятия. Пример:
Если в очереди определены операторы
Оператор с внутренним номером, подключен стационарный IP телефон в локальной сети - вызов поступит мгновенно
Оператор с внутренним номером, подключен софтфон на смартфон через LTE - вызов поступит с задержкой
Оператор с мобильным номером - вызов поступит со значительной задержкой 5-8 секунд
Задержка поступления вызова связана с особенностями внешних сетей (относительно предприятия), но начало вызова происходит одновременно.
"Время попытки дозвона операторам" - спустя это время вызов всем операторам завершится и инициируется новый вызов.
Вызов поступает на участника очереди, который дольше всех не принимал звонки - также эта стратегия именуется как "leastrecent"
Каждый новый вызов направляется оператору, который дольше всех не принимал вызовов, анализируется только последний отвеченный вызов.
Пример:
101 — последний вызов: 10:00
102 — последний вызов: 10:05
103 — последний вызов: 09:50← самый старый
Как "Время попытки дозвона операторам" = 20 влияет на вызов:
АТС набирает номер 103 (он дольше всех не принимал вызов).
Проходит 20 секунд → оператор не ответил.
АТС считает, что агент недоступен, и НЕ обновляет время последнего вызова (вызов не был принят!)
Очередь выбирает снова 103 (он дольше всех не принимал вызов).
⚠️ Ключевой момент: если агент не ответил — он всё ещё считается "не занятым", и может быть выбран снова в ближайшем будущем, потому что его "время последнего вызова" не обновилось.
Счетчик отвеченных вызовов сбрасывается при перегрузке АТС.
Вызов поступает на участника очереди, который обработал меньше всего звонков - также эта стратегия именуется как "fewestcalls"
Каждый новый вызов направляется оператору, который меньше всех принимал вызовов, анализируется только количество отвеченных вызов.
Пример:
101 — всего вызов: 1 ← меньше всего вызовов
102 — всего вызов: 5
103 — всего вызов: 3
Счетчик отвеченных вызовов сбрасывается при перегрузке АТС.
Как "Время попытки дозвона операторам" = 20 влияет на вызов:
АТС выбирает 101 (меньше всех обработал вызов).
Проходит 20 секунд → оператор не ответил.
АТС считает, что агент недоступен, и НЕ обновляет количество вызовов (вызов не был принят!),
Очередь выбирает снова 101 (меньше всех обработал вызов).
⚠️ Ключевой момент: если агент не ответил — он всё ещё считается "не занятым", и может быть выбран снова в ближайшем будущем, потому что его "количество отвеченных вызовов" не обновилось.
Вызов поступает на любого свободного участника очереди - также эта стратегия именуется как "random" - вызов случайного оператора.
"Время попытки дозвона операторам" - спустя это время вызов оператору завершится и инициируется вызов на следующего произвольного сотрудника
Также эта стратегия именуется как "linear".
Пример операторов:
101 ← вызов всегда будет поступать сперва на этого сотрудника
102 - спустя "Время попытки дозвона операторам" вызов оператору завершится и инициируется вызов на следующего
103
Также эта стратегия именуется как "linear_progressive".
Вызов начинает поступать первому участнику очереди. Через интервал, указанный в поле Время попытки дозвона операторам, к вызову добавляется следующий участник, при этом предыдущие продолжают звонить. Так очередь постепенно расширяет круг операторов, пока кто-либо не ответит или не сработает общий таймаут из Сценария 1.
Пример:
101 - звонит сразу;
102 - начинает звонить через 20 секунд;
103 - начинает звонить через 40 секунд.
В этом разделе можно дополнительно указать:
Номер телефона для этой очереди - по этому номеру можно позвонить на очередь с любого внутреннего номера сотрудника. Также на этот номер можно перевести вызов.
Краткое название очереди - для отображения перед CallerID абонента на телефонном аппарате, например consult.
Время попытки дозвона агенту - время в секундах, в течение которого вызов будет идти на одного агента очереди. По завершении этого времени вызов агенту сохраняется в историю звонков как пропущенный. По завершении времени попытки дозвона до одного агента вызов направится на следующего агента согласно выбранной стратегии.
Время отдыха агента после обработки вызова, перед тем как начать принимать новые звонки - время в секундах, которое отсчитывается с момента завершения разговора агентом очереди до момента поступления нового телефонного звонка агенту.
Получать новые звонки во время разговора - переключатель включает / отключает возможность принятия новых звонков во время текущего разговора.
Что абонент слышит во время ожидания - во время ожидания ответа на свой звонок клиент может слышать музыку на удержании или сигнал вызова.
Фоновая музыка (MOH) - можно указать уникальный звуковой файл для воспроизведения клиенту во время ожидания, к примеру рекламные материалы.
Оповещать о текущей позиции в очереди - если все операторы (агенты очереди) заняты, то включив этот переключатель, можно оповестить клиента о его позиции в очереди. Если активирована опция Дополнительный звуковой анонс, то этот анонс дополнит информацию о позиции.
Оповещать о расчетном времени ожидания - если все операторы (агенты очереди) заняты, то включив этот переключатель, можно оповестить клиента о примерном времени ожидания ответа на вызов. Если активирована опция Дополнительный звуковой анонс, то этот анонс дополнит информацию о расчетном времени.
Дополнительный звуковой анонс - звуковое сообщение проигрывается только если все участники очереди заняты.
Время в секундах для периодического повтора всех оповещений - описывает c каким интервалом произносить оповещение о позиции в очереди, времени ожидания и анонс.
Сценарий 1 - в данном сценарии можно настроить максимально допустимое время ожидания клиента в очереди. Если в течение заданного времени никто из агентов очереди не смог ответить клиенту, вызов будет перенаправлен на выбранный номер. Если номер переадресации не выбран, общий таймаут очереди не применяется.
Сценарий 2 - если в очереди нет агентов (то есть в данный момент ни один агент не зарегистрирован на АТС), то можно указать номер, на который будет переведен вызов клиента.
В Сценарии 1 указывайте и время ожидания, и номер переадресации. Если заполнить только время без резервного номера, MikoPBX не передаст общий таймаут в приложение очереди, чтобы не завершать звонок без маршрута продолжения.
000063
Приложение считывает внутренний номер сотрудника, используемое для вызова приложения, и озвучивает его сотруднику, т.е. сотруднику озвучивается его внутренний номер на АТС
000064
0000MILLI - Генерирует постоянный звуковой сигнал частотой 1000 Гц. Используется для проверки качества соединения.
10003246
Приложение Echo посылает полученные аудиосигналы обратно пользователю, чтобы можно было определить длительность задержки. В общем, Вы слышите, что Вы говорите. Приложение в основном используется для тестирования.
Приложения MikoPBX создаются из нескольких планов набора Asterisk приложений. В системе есть много примеров готовых к выполнению приложений. Для добавления нового приложения MikoPBX нажмите на "Добавить новое" в меню приложений.
Всего в несколько шагов Вы сможете создать свои собственные приложения. Во-первых, определите Название и Номер вызова для приложения, при необходимости заполните поле Комментарий. Возможный тип кода приложения:
PHP-AGI скрипт - AGI - это встроенный в Asterisk метод выполнения внешних скриптов (по аналогии с CGI для http серверов), который может расширить функциональность asterisk при помощи других языков программирования, в частности PHP. AGI скрипты могут управлять вызовом в плане набора, вызываются из файла: extensions.conf
Диалплан Asterisk - конфигурация плана набора содержится в файле конфигурации Asterisk - extensions.conf. Это один из самых важных конфигурационных файлов. В нем определяется обработка и маршрутизация входящих и исходящих вызовов. Этот файл управляет поведением всех соединений проходящих через Вашу АТС.
Внесем ясность: мы будем называть MikoPBX приложения - приложениями, планы набора Asterisk -функциями. Например, Answer(), NoOP(), Set() and Wait() - это функции. Эти отдельные целевые функции Asterisk, которые затем объединяются в MikoPBX для создания более мощных MikoPBX приложений. Опишите логические операции в текстовом поле Программный код. Обратите внимание, что в одной строке одновременно допускается только одна команда, например:
На рисунке пример простейшего приложения для номера 000063. После набора номера, вы услышите, как робот озвучивает Ваш внутренний номер.
Описание Asterisk функций, которые Вы можете использовать в своих приложениях:
answer
Нажмите Сохранить для завершения настройки.

MikoPBX будет проверять используемые команды. Не исключено, что неправильно запрограммированные операции могут повлиять на работоспособность вашей телефонной системы.
В общих настройках SIP провайдера укажите следующие настройки:
Название провайдера - произвольное удобное вам наименование. Оно будет отображаться в списках выбора в соответствующих меню.
Тип учетной записи - тип регистрации учетной записи провайдера. Подробнее про тип регистрации.
Хост или IP адрес - может быть либо URL либо IP-адресом
Логин и Пароль, который предоставляет ваш провайдер
Режим DTMF - определяет, как DTMF сигналы передаются через SIP. Cуществуют различные стандарты, используемые для передачи DTMF SIP-провайдерам. Попробуйте использовать различные стандарты для того, чтобы найти режим, который подойдет вам. inband передает нажатия клавиш в качестве «тона». Для использования этого стандарта вам необходим аудио кодек высокого качества. Auto, rfc и info передают нажатия клавиш в SIP кодирование.
В этом разделе следует перечислить все адреса поставщика услуг связи, с которых могут приходит входящие звонки. Доступ для этих адресов к портам SIP и RTP будет автоматически открыт на firewall.
По умолчанию принимает значение 5060. SIP протокол описывает, каким образом клиентское приложение (например, софтфон) может запросить начало соединения у другого, возможно, физически удалённого клиента, находящегося в той же сети, используя его уникальное имя. Протокол определяет способ согласования между клиентами об открытии каналов обмена на основе других протоколов, которые могут использоваться для непосредственной передачи информации (например, RTP).
Позволяет указать используемый транспортный протокол для данной учетной записи провайдера.
Это SIP прокси сервер провайдера для обработки запросов. Реальный SIP сервер, может отличаться от этого адреса. Outbound proxy принимает на себя первичные запросы и перенаправляет на нужный сервер.
Режим NAT - Это механизм в сетях TCP/IP, позволяющий преобразовывать IP-адреса транзитных пакетов.
force_rport,comedia опция заменяющая nat=yes;
force_rport даже если ни одного параметра rport не было указано, действовать, так, как если бы он был;
comedia отправлять RTP пакеты обратно к порту с которого они были получены, игнорируя требуемый порт в SDP заголовке;
auto_comedia если Asterisk сможет определить, что устройство находится за NAT, установить опцию comedia;
no не выполнять никакой специальной обработки NAT, кроме той что указана в RFC 3581.
При включение этой опции Asterisk будет отправлять SIP Options пакеты. Это необходимо для поддержки NAT туннелирования на вашем маршрутизаторе.
Укажите частоту, с которой Asterisk будет отправлять SIP сообщение типа OPTIONS для проверки, что данное устройство работает и доступно для совершения вызовов.
Если данное устройство, не ответит в течение заданного периода (60 секунд по умолчанию), тогда Asterisk рассматривает это устройство как выключенное и недоступное для совершения вызовов.
Можно отключить использование поля fromuser заголовка SIP-пакета.
Параметры файла pjsip.conf fromuser и fromdomain используются для вызовов исходящих от Asterisk в сторону SIP устройства.
Можно переопределить:
имя пользователя в поле From в SIP пакетах (fromuser);
имя домена в поле From в SIP пакетах (fromdomain).
Для этого служат поля User и Domain соответственно.
В этом поле вы можете изменять конфигурационные файлы Asterisk.
Переопределять можно практически все параметры. К примеру при использовании chan_pjsip провайдер описывается следующими секциями:
Для переопределения полей в секциях следует заполнить поле Дополнительные параметры следующим образом:
Для завершения настройки нажмите Сохранить.
Бывают случаи, когда необходимо подключить несколько учетных записей одного поставщика услуг связи. В этом случае настройки Хост или IP адрес и Порт соединения SIP могут оказаться одинаковыми для всех учетных записей.
Asterisk такую ситуацию обыгрывает по-своему. АТС не сможет корректно «приземлить» вызов на нужного провайдера и вызов оборвется.
В качестве решения, в старых версиях АТС можно было для какой учетной записи описать дополнительные входящие маршруты и заполнить поле Дополнительный номер (DID) значением Логин. И так для каждой учетной записи требовалось создать некоторое количество дополнительных маршрутов, равное количеству аккаунтов провайдера.
Альтернатива инструкции Регистрация нескольких учетных записей от одного провайдера. Такой подход был не очевиден.
Поле Логин в большинстве случаев при входящем звонке будет использоваться в качестве номера назначения Дополнительный номер (DID). И, учитывая, что выходящие маршруты для всех Логин будут описаны, вызов будет корректно обработан телефонной станцией.
Этот вариант используется при подключении большинства провайдеров.
Необходимость регистрации возникает в случае, когда провайдер не может знать, с какого IP-адреса будет подключаться клиент, к примеру, когда АТС расположена за NAT. Сервер провайдера обычно на публичном IP-адресе.
Входящая регистрация
Этот вариант актуален для работы некоторых FXO / GSM шлюзов - когда внешнее устройство должно подключиться к вашей АТС по логину и паролю.
Также этот вариант актуален, когда удаленное устройство находится за NAT и MikoPBX не может знать его IP адрес.
Аутентификация по IP адресу, без пароля
Актуально для безопасных частных сетей. Так к примеру Ростелеком часто ведет свой сетевой кабель и подключает клиента к своей локальной сети.
АТС и провайдер в данном случае должны находиться в одной и той же сети.


[REG-AUTH-***]
type = auth
; ----
[REG-***]
type = registration
transport = transport-udp
; ----
[***-OUT]
type = auth
; ----
[***]
type = aor
max_contacts = 1
; ----
[***]
type = identify
; ----
[***]
type = endpoint
context = incoming
; ----[registration-auth]
; описываем параметры авторизации для [REG-AUTH-***]
[registration]
; описываем параметры регистрации на удаленном сервере [REG-***]
[endpoint-auth]
; описываем параметры авторизации для исходящих звонков через провайдера
[identify]
; Секция отвечает за сопоставление регистрации и endpoint. При поступлении входящего звонка
; согласно INVITE будет проведена проверка соответствия identify параметров с endpoint.
[aor]
; Правка секции AOR для endpoint
[endpoint]
; Правка параметров endpointGET /v1/decisions/stream — полный snapshot решений в формате CrowdSec LAPI. Стоковый cs-firewall-bouncer дописывает этот путь к api_url сам.
GET /v1/whitelist — allow-list оператора как плоский JSON-массив (расширение MikoPBX, см. Whitelist).
Аутентификация: bouncer-токен принимается в двух заголовках:
X-Api-Key: <token> — соглашение CrowdSec, шлёт стоковый cs-firewall-bouncer.
Authorization: Bearer <token> — удобен для curl, Postman и кастомных HTTP-клиентов. Оба варианта валидируют одну и ту же строку в ApiKeys, path-restriction и ACL действуют одинаково.
Permission scope: firewall_bouncer. Создавайте токен с allowed_paths: {"/api/v3/firewall-bouncer": "read"} — пресет в UI ApiKeys уже делает это правильно.
Совместимость: тело ответа decisions/stream повторяет shape CrowdSec LAPI один-в-один — {new, deleted} на верхнем уровне, без обёртки. Существующие CrowdSec bouncer'ы (cs-firewall-bouncer, cs-cloudflare-bouncer, cs-nginx-bouncer и десятки community-плагинов) работают «из коробки».
GET /pbxcore/api/v3/firewall-bouncer/v1/decisions/stream
id
int
Стабильный положительный 32-битный ID — crc32(value + scenario) & 0x7fffffff.
origin
string
mikopbx-fail2ban
aggregated origin
Redis-ключи firewall:<cat>:<ip>
mikopbx-networkfilters
aggregated origin
На каждый poll возвращается полный snapshot текущих банов в массиве new. Bouncer'ы обновляют таймауты своих ipset / nftables- записей при каждом появлении IP, поэтому активный бан живёт ровно столько, сколько указал источник в поле duration.
Массив deleted содержит per-bouncer дифф с прошлого poll'а. MikoPBX хранит последний выданный snapshot per-ApiKey id (Redis-ключ _PH_REDIS_CLIENT:fwbouncer:cursor:<token-id>, TTL 1 ч, обновляется на каждом poll'е — курсор истекает только после часа молчания bouncer'а). Решения, исчезнувшие между двумя опросами — снятие бана оператором, истечение TTL, удаление записи NetworkFilters — попадают в deleted полными объектами на следующем poll'е, и bouncer удаляет запись из своего локального стора немедленно, не дожидаясь естественного истечения таймаута ipset.
update_frequency: 5–10s — рекомендованная частота опроса.
Поведение query-параметров от bouncer'а:
startup
startup=true игнорирует сохранённый cursor только для текущего poll'а — полный snapshot в new, пустой deleted — после чего записывает свежий snapshot в cursor. СЛЕДУЮЩИЙ poll уже диффится с этим свежим snapshot'ом штатно. Bouncer'ы посылают это на первом poll'е после рестарта. Прочие значения (включая false) трактуются как обычные опросы.
scopes
Принимается, но игнорируется. MikoPBX отдаёт только scope=Ip и scope=Range; server-side фильтрация не выполняется.
origins
Изоляция курсоров позволяет нескольким независимым bouncer'ам (например, один работает локально с nftables, второй гонит правила в Cloudflare) каждому вести свой дифф — выдавайте один ApiKey на bouncer. Совместное использование одного ApiKey несколькими bouncer'ами заставляет их делить один курсор: poll'ы разных bouncer'ов будут чередовать записи snapshot'а, давая недетерминированные тайминги deleted[] и пропущенные eviction-события для короткоживущих банов.
Обратите внимание: JSON-тело — это LAPI shape на верхнем уровне, без обёртки {result, data, ...} вокруг new/deleted.
GET /pbxcore/api/v3/firewall-bouncer/v1/whitelist возвращает allow-list оператора как плоский JSON-массив:
Источники, объединённые в ответ:
NetworkFilters с признаком newer_block_ip = '1',
Fail2BanRules.whitelist.
Эндпоинт — специфика MikoPBX. Стоковый cs-firewall-bouncer его не опрашивает: в CrowdSec LAPI нет типа решения «allow», bouncer ведёт собственный whitelists.yaml. Предоставлен для MikoPBX-aware интеграций, которым нужна согласованность whitelist на стороне сервера.
MikoPBX дополнительно проверяет whitelist на write-side (в DockerNetworkFilterService::isIpWhitelisted), но это защита в глубину — ваш bouncer всё равно должен вычитать whitelist из new перед применением блокировок.
Эндпоинт whitelist отдаёт операторские allow-list сети. Никогда не выставляйте его без аутентификации.
Bouncer-токен оптимально привязывать к NetworkFilter, разрешающему только IP хоста bouncer'а. При несовпадении источника API вернёт 403.
После compromise — отзовите токен через UI ApiKeys; bouncer перестанет получать новые решения и через 30 секунд начнут истекать его локальные блокировки (если такой режим включён).
{
"new": [
{
"id": 12345,
"origin": "mikopbx-fail2ban",
"type": "ban",
"scope": "Ip",
"value": "203.0.113.7",
"duration": "3600s",
"scenario": "mikopbx/sip"
},
{
"id": 678901,
"origin": "mikopbx-networkfilters",
"type": "ban",
"scope": "Range",
"value": "198.51.100.0/24",
"duration": "8760h",
"scenario": "mikopbx/manual"
}
],
"deleted": []
}# API-ключ bouncer-а читайте из переменной окружения / менеджера
# секретов на хосте, где выполняется команда — никогда не вставляйте
# ключ открытым текстом в скрипты, которые попадают в git.
TOKEN=$BOUNCER_API_KEY
# Стиль CrowdSec:
curl -H "X-Api-Key: $TOKEN" \
"https://pbx.example.com/pbxcore/api/v3/firewall-bouncer/v1/decisions/stream?startup=true" \
| jq
# Стиль Bearer (эквивалентен):
curl -H "Authorization: Bearer $TOKEN" \
"https://pbx.example.com/pbxcore/api/v3/firewall-bouncer/v1/decisions/stream" \
| jqimport requests, time
BASE = "https://pbx.example.com/pbxcore/api/v3/firewall-bouncer"
HEADERS = {"X-Api-Key": TOKEN}
# Локальный whitelist bouncer'а (обновляется реже, чем решения).
whitelist = set(requests.get(f"{BASE}/v1/whitelist", headers=HEADERS).json())
while True:
resp = requests.get(f"{BASE}/v1/decisions/stream", headers=HEADERS).json()
bans = {d["value"] for d in resp["new"]}
apply_iptables(bans - whitelist)
time.sleep(10)["10.0.0.0/8", "192.168.1.0/24"]ℹ️ Возможность доступна начиная с версии MikoPBX 2026.2.76. На более ранних версиях LAPI-эндпоинт
firewall-bouncer, баннер на странице файрвола и кнопка «Токен для bouncer» отсутствуют.
В Docker-режиме MikoPBX внутренние правила файрвола и fail2ban не защищают веб-интерфейс:
Контейнер не управляет iptables хоста.
При userland-proxy=true (поведение Docker по умолчанию) контейнер видит HTTP-клиента как docker0-шлюз (например 172.17.0.1), а не как реальный IP атакующего. ACL уровня Nginx и fail2ban-jail для веб-формы блокируют только этот шлюз — то есть никого.
SIP-защита при этом работает: UDP-DNAT сохраняет source IP, Asterisk видит реальный адрес, fail2ban пишет блокировку в Redis и module reload acl отбивает дальнейшие REGISTER. Сломан именно HTTP-сегмент.
Решение — экспортировать решения о блокировке наружу и применять их в настоящем файрволе хоста (или edge-CDN, или security-group облака) при помощи внешнего обработчика правил.
На странице Безопасность → Доступ к веб-интерфейсу есть жёлтый баннер «Docker bridge: требуется внешний обработчик правил». Если он показан — этот документ для вас.
Кнопка Проверить видимость моего IP запросит эндпоинт system:checkClientIpVisibility и покажет три значения:
ip_visible — реальный IP клиента виден, ничего не требуется.
ip_not_visible — IP клиента подменён на шлюз Docker bridge: правила HTTP-файрвола работать не будут.
proxy_detected — перед АТС стоит reverse-proxy, и АТС намеренно не доверяет proxy-заголовкам. Настройте прокси на отображение реального IP или разверните внешний bouncer.
Если хост — выделенный сервер для АТС и нет конфликтов портов, переключите контейнер в host-режим:
В этом режиме контейнер использует сетевой namespace хоста, Asterisk и Nginx видят реальные source-IP, а внутренний файрвол работает «как на bare metal». Подходит лучше всего для SIP-нагруженных инсталляций.
Ограничения: один host-режим на хост, нельзя поднять рядом несколько копий АТС, конфликты с другими процессами на стандартных портах.
Контейнер MikoPBX остаётся в bridge-режиме. На Linux-хосте ставится cs-firewall-bouncer (open-source, проект CrowdSec), который поллит эндпоинт MikoPBX каждые 10 секунд и переносит решения в iptables/nftables хоста.
Это рекомендуемый вариант для большинства инсталляций.
Откройте Система → API-ключи.
Нажмите кнопку Токен для bouncer (предзаполняет правильное ограничение пути).
Откроется форма создания ключа. Описание («Внешний firewall bouncer (CrowdSec-совместимый)») и API-ключ уже подставлены — при необходимости выберите Сетевой фильтр, чтобы ограничить source-IP, с которого можно опрашивать эндпоинт. Тумблер «Полные права доступа» оставьте выключенным: кнопка Токен для bouncer уже выставила нужное ограничение пути /api/v3/firewall-bouncer.
Сохраните. Откроется модальное окно с готовой конфигурацией cs-firewall-bouncer.yaml — скопируйте её сразу, API-ключ показывается только один раз.
Откройте /etc/crowdsec/bouncers/cs-firewall-bouncer.yaml и замените api_url / api_key на значения из шага 1:
📌
api_url— это базовый URL. cs-firewall-bouncer сам дописывает/v1/decisions/streamи отправляет токен в заголовкеX-Api-Key. Не указывайте полный путь кdecisions/streamвapi_urlи не добавляйте префиксBearerк ключу — bouncer всё делает сам.
⚠️ Если ваш MikoPBX слушает HTTPS с self-signed сертификатом, добавьте
insecure_skip_verify: trueили установите CA-сертификат на хост.
🚨
iptables_chains: [INPUT, FORWARD, DOCKER-USER]— это не дефолт CrowdSec (по умолчанию там толькоINPUT). БезDOCKER-USERтрафик, который Docker маршрутизирует в контейнер, идёт через цепочкуDOCKERи не доходит до DROP-правила bouncer'а — бан виден в iptables, но в реальности не работает. Это самая частая ловушка при подключении CrowdSec к Docker-развёрнутой АТС.
В логах bouncer должно появиться received N new decisions, 0 deleted.
sudo iptables -L CROWDSEC -n (или crowdsec-firewall-bouncer-iptables-v6 для IPv6) покажет добавленные блокировки.
Заблокируйте тестовый IP вручную через раздел Файрвол → Сети или спровоцируйте fail2ban-блокировку и убедитесь, что строка появилась в iptables хоста в течение 30 секунд.
Bouncer'ы CrowdSec блокируют на уровне IP, а не протокола — одна запись в ipset дропает все TCP- и UDP-пакеты с забаненного адреса. В том числе порт 22. Если IP оператора по ошибке попадёт в бан-лист (скажем, fail2ban зафиксировал три неудачных auth:login с NAT-IP офиса), то SSH тоже отрежется, и админ запрётся снаружи хоста.
Вставьте высокоприоритетный ACCEPT для админ-порта до DROP-правила bouncer'а, чтобы административный доступ оставался жив даже если IP самого оператора попадёт в бан:
Повторите для любых других портов, через которые вы администрируете машину (Wireguard, serial-консоль провайдера и т.д.) — для всего, что не должно падать под bouncer'а.
Для инсталляций, где потеря доступа к хосту дорого стоит, добавьте systemd-timer, периодически чистящий ipset bouncer'а. Bouncer перезальёт текущие баны на следующем poll'е, так что это безопасный safety-net с ограниченным blast radius, а не отключение функции:
30 минут — разумный дефолт: короче, чем время остывания кофе оператора, если он случайно себя забанит, и длинее, чем нужно реальной атаке, чтобы заметно ущербнуть.
CrowdSec мапит решения в один ipset на IP-семейство. Правила iptables дропают весь трафик с перечисленных IP, независимо от протокола и порта. Бан mikopbx/http (HTTP-брутфорс) автоматически отрезает тому же IP и SIP / IAX / AMI / SSH — и наоборот: бан mikopbx/sip (fail2ban-jail Asterisk) тоже дропнет HTTP и AMI от того же IP. MikoPBX отдаёт в bouncer-стрим все четыре категории банов (sip, http, ami, iax) одинаково, так что после подключения bouncer'а любая блокировка становится IP-wide.
Для большинства инсталляций это правильное поведение — если IP агрессивен к HTTP, в SIP его пускать тоже незачем, и наоборот. Но если нужно по-протокольное разделение (например, блокировать HTTP-брутфорсеров, не трогая их SIP), bouncer для этой АТС поднимать не нужно. Существующий путь защиты SIP внутри Docker'а (fail2ban → Redis → pjsip ACL внутри Asterisk) изолирует SIP-баны именно потому, что они не уходят в host ipset — а bouncer ровно это поведение и меняет.
GET /pbxcore/api/v3/firewall-bouncer/v1/decisions/stream возвращает снимок текущих решений в виде, который ожидает стоковый cs-firewall-bouncer — {new, deleted} на верхнем уровне, без обёртки MikoPBX:
Массив new[] всегда содержит полный снимок текущих банов — bouncer обновляет таймауты своих ipset/nftables-записей до значения duration на каждом poll'е, поэтому активный бан живёт ровно столько, сколько указал источник. Массив deleted[] считается per-token (MikoPBX хранит прошлый снимок по id'у ApiKey) и содержит решения, которые исчезли с предыдущего опроса. Снятие бана оператором доходит до ipset bouncer'а за один poll-цикл (≈ 5–10 секунд), а не ждёт естественного истечения TTL.
?startup=true на первом poll'е после рестарта bouncer'а сбрасывает per-token cursor и возвращает deleted: [] — свежезапущенный bouncer не получит фантомных удалений для состояния, которое он никогда не отслеживал.
Оба варианта заголовков аутентифицируют один и тот же токен:
GET /pbxcore/api/v3/firewall-bouncer/v1/whitelist возвращает whitelist оператора как плоский JSON-массив:
Этот эндпоинт — специфика MikoPBX. Стоковый cs-firewall-bouncer его не опрашивает (в CrowdSec LAPI нет типа решения «allow», bouncer ведёт собственный whitelists.yaml). Предоставлен для MikoPBX-aware интеграций, которым нужна согласованность whitelist с NetworkFilters АТС на стороне сервера.
Детальный формат, query-параметры и сопоставление категорий MikoPBX с полями CrowdSec описаны в разделе .





























Настройка сотрудников и основных телефонных номеров
Сотрудники в MikoPBX - это индивидуальные пользователи системы, которым назначены внутренние номера для совершения и приема звонков. Они имеют персональные учетные записи, позволяющие настроить права доступа, переадресацию вызовов и другие персональные настройки в системе.
В разделе Сотрудники представлен список внутренних учетных записей сотрудников. Слева от сотрудника отображается статус авторизованного устройства. Если устройство успешно авторизовано под данной внутренней учетной записью, то кружок отображается зеленым цветом, иначе серым.
В строке поиска можно найти необходимый контакт. Поиск можно осуществлять по имени сотрудника, внутреннему номеру, мобильному номеру, адресу электронной почты.
На форме также есть возможность сортировки списка сотрудников по имени, внутреннему номеру, мобильному номеру, адресу электронной почты. Имеются кнопки копирования пароля для SIP учетной записи в буфер обмена, редактирования учетной записи и её удаления.
mikopbx-fail2ban (Redis) или mikopbx-networkfilters (БД оператора).
type
string
Всегда "ban".
scope
string
"Ip" для одиночного адреса или "Range" для CIDR.
value
string
IP-адрес или CIDR.
duration
string
Оставшееся время до истечения, например "3600s" или "8760h".
scenario
string
mikopbx/sip, mikopbx/http, mikopbx/ami, mikopbx/iax, mikopbx/manual.
Таблица m_NetworkFilters.deny
mikopbx/sip
scenario tag
Категория sip в Redis
mikopbx/http
scenario tag
Категория http в Redis
mikopbx/ami
scenario tag
Категория ami в Redis
mikopbx/iax
scenario tag
Категория iax в Redis
mikopbx/manual
scenario tag
Записи оператора в UI «Файрвол»
Принимается, но игнорируется. Оба origin (mikopbx-fail2ban, mikopbx-networkfilters) всегда присутствуют в ответе. Bouncer'ы, желающие фильтровать, делают это на своей стороне.








Перевести вызов в отвеченное состояние.
channel status
Возвращает статус подключенного канала.
control stream file
Отправка в канал заданного звукового файла, с возможностью управления его проигрывания (пауза/перемотка/возобновление проигрывания) с помощью получаемых от абонента DTMF цифр, если заданы. (Asterisk 1.2)
database del
Удаление ключа/значения из базы данных.
database deltree
Удаление дерева ключей/значений из базы данных.
database get
Получить значение из базы данных.
database put
Добавление/изменение значения в базе данных.
exec
Выполнение заданной Команды. (Команды - это функции, которые Вы используете при описании плана набора в файле extensions.conf ).
get data
Получить данные из канала.
get option
Ведет себя аналогично команде «STREAM FILE», но используется с заданным значением для таймаута. (Asterisk 1.2)
get variable
Получить значение переменной канала.
hangup
Разорвать соединение (Hangup) на текущем канале.
noop
Пустая команда. Ничего не делает.
receive char
Принимает один символ из канала, если он поддерживает эту возможность.
receive text
Принимает текстовую строку из канала, если он поддерживает эту возможность.
record file
Производит запись в заданный файл.
say alpha
Проговаривает заданную строку символов. (Asterisk 1.2)
say date
Проговаривает дату. (Asterisk 1.2)
say datetime
Проговаривает дату и время, согласно заданному формату. (Asterisk 1.2)
say digits
Проговаривает заданную строку цифр.
say number
Проговаривает заданный номер.
say phonetic
Проговаривает заданную строку символов.
say time
Проговаривает время.
send image
Отправляет изображение в канал, если он поддерживает эту возможность.
send text
Отправляет текст в канал, если он поддерживает эту возможность.
set autohangup
Автоматическое завершение соединение (Autohangup) на канале в заданное время.
set callerid
Установка callerid для текущего канала.
set context
Установка контекста для текущего канала.
set extension
Изменение екстеншена для текущего канала.
set music
Включение/Выключение музыки ожидания (Music on hold), например: «SET MUSIC ON default».
set priority
Установка значения приоритета для следующей выполняемой команды для канала.
set variable
Установка переменной канала.
stream file
Отправка звукового файла в канал.
tdd mode
Установка режима TDD для канала, который может его поддерживать, для включения возможности взаимодействия с TDD.
verbose
Запись сообщения в verbose log сервера asterisk.
wait for digit
Ожидание нажатия DTMF кнопки



















services:
mikopbx:
image: mikopbx/mikopbx:latest
network_mode: host
# удалите все `ports:`# Debian / Ubuntu
curl -s https://install.crowdsec.net | sudo sh
sudo apt-get install -y crowdsec-firewall-bouncer-iptablesapi_url: http://<MIKOPBX-HOST>/pbxcore/api/v3/firewall-bouncer/
api_key: <token-from-modal>
update_frequency: 10s
mode: iptables
log_mode: stdout
log_level: info
# КРИТИЧНО для Docker-развёртываний: правило ОБЯЗАНО быть в цепочке
# DOCKER-USER, иначе трафик, который Docker пробрасывает в контейнер,
# обходит INPUT/FORWARD полностью, и бан в iptables есть, а атакующий
# проходит как ни в чём не бывало.
iptables_chains:
- INPUT
- FORWARD
- DOCKER-USER
# Отключите IPv6, если Docker без IPv6-bridge'а. На хостах без Docker
# IPv6 в ip6tables нет цепочки DOCKER-USER, и bouncer падает с
# fatal-ошибкой при запуске.
disable_ipv6: truesudo systemctl restart crowdsec-firewall-bouncer.service
sudo systemctl status crowdsec-firewall-bouncer.service# Always-accept SSH (port 22) — переживает любые изменения bouncer'а
sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT \
-m comment --comment "admin-protect"
# Сохранить между ребутами (Debian / Ubuntu)
sudo apt-get install -y iptables-persistent
sudo netfilter-persistent save# /etc/systemd/system/crowdsec-safety-flush.service
[Unit]
Description=Safety net - flush crowdsec ipset to prevent lockout
After=crowdsec-firewall-bouncer.service
[Service]
Type=oneshot
ExecStart=/usr/sbin/ipset flush crowdsec-blacklists# /etc/systemd/system/crowdsec-safety-flush.timer
[Unit]
Description=Run crowdsec ipset flush every 30 minutes
[Timer]
OnBootSec=30min
OnUnitActiveSec=30min
Unit=crowdsec-safety-flush.service
[Install]
WantedBy=timers.targetsudo systemctl daemon-reload
sudo systemctl enable --now crowdsec-safety-flush.timer{
"new": [
{
"id": 12345,
"origin": "mikopbx-fail2ban",
"type": "ban",
"scope": "Ip",
"value": "203.0.113.7",
"duration": "3600s",
"scenario": "mikopbx/sip"
}
],
"deleted": []
}# Стоковый cs-firewall-bouncer (соглашение CrowdSec):
curl -H "X-Api-Key: <token>" \
"http://<MIKOPBX-HOST>/pbxcore/api/v3/firewall-bouncer/v1/decisions/stream?startup=true"
# Эквивалент для ручных проб curl/Postman/Insomnia:
curl -H "Authorization: Bearer <token>" \
"http://<MIKOPBX-HOST>/pbxcore/api/v3/firewall-bouncer/v1/decisions/stream"["10.0.0.0/8", "192.168.1.0/24"]Существует возможность экспорта и импорта сотрудников для удобства настройки. Для этого, нажмите для стрелочку справа от кнопки "Добавить нового сотрудника".
Доступны 3 опции:
Импорт из CSV - загрузить сотрудников из CSV файла в MikoPBX.
Экспорт в CSV - загрузить сотрудников в CSV файл из MikoPBX (сотрудники не будут удалены со станции).
Скачать шаблон - загрузить шаблон CSV таблицы для заполнения и дальнейшего импорта в MikoPBX.
Нажмите на "Выбрать CSV файл" и выберите ранее оформленный файл с данными в таблице. Рекомендуется использовать шаблоны из вкладки "Шаблон".
После выбора файла, будет отображена информация по всем обнаруженным пользователям в таблице. Выберите стратегию обработки дубликатов и нажмите "Подтвердить импорт" для начала процесса.
После окончания процесса, Вы увидите статус создания сотрудников, а так же уведомление об окончании импорта.
Нажмите "Назад к списку" для возвращения к списку сотрудников.
Существует возможность экспорта CSV файла со всеми данными текущих сотрудников. Есть несколько форматов экспорта:
Минимальный:
number - Внутренний номер (обязательное)
user_username - ФИО сотрудника (обязательное)
user_email - Email адрес
mobile_number - Мобильный номер
sip_secret - Пароль SIP (если не указать будет сгенерирован)
fwd_ringlength - Время звонка (секунды) до переадресации
fwd_forwarding - Номер переадресации если не ответил
Стандартный:
Все параметры из Минимального.
mobile_dialstring - Номер для набора мобильного
sip_dtmfmode - DTMF режим (auto/rfc4733/info/inband/auto_info)
sip_transport - Транспорт (udp/tcp/tls), по умолчанию udp,tcp
sip_enableRecording - Запись разговоров (true/false)
fwd_forwardingonbusy - Номер переадресации если занят
fwd_forwardingonunavailable - Номер переадресации если недоступен
Полный:
Все параметры из Минимального и Стандартного.
user_avatar - URL фотографии
sip_acceptMultipleCalls - Принимать несколько вызовов одновременно (true/false)
sip_manualattributes - Дополнительные SIP параметры
Так же Вы можете указать диапазон внутренних номеров сотрудников, которых необходимо экспортировать (раздел "Фильтр по диапазону номеров").
Нажмите "Экспортировать сотрудников". Файл будет загружен на Ваше устройство.
На этой вкладке Вы можете скачать шаблон пустого файла с указанными "столбцами" для заполнения и дальнейшего импорта в MikoPBX.
Выберите формат шаблона (подробнее в разделе "Экспорт"), нажмите "Скачать CSV шаблон".
На вкладке Основные параметры задаются общие настройки внутренней учетной записи сотрудника:
ФИО пользователя - допускается использование кириллицы. Это значение будет использоваться при подстановке CALLERID(name) абонента, будет отображаться в соответствующем поле экрана телефона.
Внутренний номер - он же используется в качестве Логин при подключении телефона.
Мобильный номер - используется для дополнительной маршрутизации.
Адрес электронной почты - используется для email оповещений.
Пароль для SIP
Открываются путем нажатия на раскрывающийся список Расширенные настройки.
В поле Переопределение строки набора введите правило набора мобильного номера для Вашего провайдера. Например, в основных настройках номер мобильного телефона указан в формате 89164577878, согласно правилам исходящей маршрутизации для провайдера звонок возможен только на номера, начинающиеся с 7. Следовательно в поле Переопределение строки набора следует указать номер 79164577878.
Переключатель определяет поведение, когда сотруднику поступает новый вызов во время текущего разговора.
Если настройка выключена, сотрудник считается занятым уже при первом активном разговоре. Второй вызов пойдет по правилам переадресации по занятости.
Если настройка включена, телефон сотрудника может получить второй вызов в режиме ожидания вызова (call waiting). Сотрудник сможет принять его, удержать текущий разговор или отклонить новый вызов.
Если нужно задать порог в три и более одновременных вызова, используйте поле Дополнительные атрибуты PJSIP, например:
Настройка определяет, как DTMF-сигналы передаются через SIP.
Позволяет указать используемый транспортный протокол для данной учетной записи.
Подсеть, которая описана в разделе Cетевой экран. Указывает на разрешенную подсеть для этой учетной записи. Подключение из прочих подсетей будет вызывать ошибку авторизации.
Дополнительные атрибуты PJSIP
Данное поле служит для изменения или переопределения параметров PJSIP, которые MikoPBX генерирует для Asterisk.
Переопределять можно практически все параметры. К примеру при использовании chan_pjsip SIP аккаунт сотрудника описывается следующими секциями:
Для переопределения полей в секциях следует заполнить поле Дополнительные параметры следующим образом:
На данной вкладке вы можете настроить правила переадресации вызовов в случае, если сотрудник не может ответить на звонок, занят или недоступен.
Период времени в секундах определяет, сколько времени будет продолжаться попытка вызова на внутреннюю учетную запись сотрудника. Если в течение этого времени сотрудник не сможет ответить на вызов, вы можете указать на какой номер следует направить вызов дальше. По умолчанию, вызов будет переадресован на мобильный номер сотрудника.
Кроме того, вы можете указать номера, на которые следует направить вызов в случае занятости и недоступности сотрудника. Таким образом, если сотрудник занят или недоступен, вызов будет переадресован на указанные номера.
Вы можете настроить эти параметры в соответствии с вашими предпочтениями и требованиями.



[endpoint]
device_state_busy_at = 3[***]
type = aor
max_contacts = 10
; ----
[***]
type = auth
; ----
[***]
type = endpoint
context = all_peers
; ----
[acl_***]
deny = 0.0.0.0/0.0.0.0
permit = 0.0.0.0/0.0.0.0
; ----[acl]
; описываем параметры доступа из различных подсетей [acl_***]
[auth]
; описываем параметры авторизации для исходящих звонков
[aor]
; Правка секции AOR для endpoint
[endpoint]
; Правка параметров endpointУстановите сложные пароли на учетные записи (пароль для SIP)! Пароль должен удовлетворять следующим требованиям:
длина пароля должна быть длиннее восьми символов;
пароль должен содержать буквы ВЕРХНЕГО и нижнего регистра;
Установка MikoPBX с помощью docker compose
Для работы с MikoPBX в контейнере необходимо установить docker и docker compose, а также создать пользователя и папки для хранения настроек конфигурации и записей разговоров по инструкции
Установка докера и cоздание пользователя и каталоговВот пример файла docker-compose.yml, который может быть использован для управления вашим контейнером MikoPBX через Docker Compose:
services:
mikopbx:
container_name: "mikopbx"
image: "ghcr.io/mikopbx/mikopbx:latest"
network_mode: "host"
entrypoint: "/sbin/docker-entrypoint"
hostname: "mikopbx-in-a-docker"
volumes:
- /var/spool/mikopbx/cf:/cf
- /var/spool/mikopbx/storage:/storage
tty: true
environment:
- ID_WWW_USER=${ID_WWW_USER}
- ID_WWW_GROUP=${ID_WWW_GROUP}
# Изменение имени станции через переменные окружения
- PBX_NAME=MikoPBX-in-Docker
# Изменение стандартного порта SSH на 23
- SSH_PORT=23
# Изменение стандартного порта WEB на 8080
- WEB_PORT=8080
# Изменение стандартного порта WEB HTTPS на 8443
- WEB_HTTPS_PORT=8443Сохраните содержимое в файл docker-compose.yml, выполните необходимые корректировки и запускайте MikoPBX коммандой:
export ID_WWW_USER=$(id -u www-user)
export ID_WWW_GROUP=$(id -g www-user)
sudo docker compose -f docker-compose.yml up -dТакже можно оганизовать запуск нескольких контенеров MikoPBX на одном хосте, но здесь надо учитывать особенности работы Docker с портами, если не использовать режим –net=host то это приведет к высокой нагрузке на процессор хостовой системы, т.к. Docker создает для каждого выделенного порта отдельное правило в Iptables.
С включенным режимом –net=host вам необходимо вручную следить за распределением доступных портов между запускаемыми контейнерами и встроенными приложениями. Например, для запуска двух контейнеров с MikoPBX на одном хосте, можно использовать следующий конфигурационный файл:
services:
mikopbx-first:
container_name: "mikopbx-first"
image: "ghcr.io/mikopbx/mikopbx:latest"
network_mode: "host"
entrypoint: "/sbin/docker-entrypoint"
hostname: "mikopbx-in-docker-first"
volumes:
- /var/spool/mikopbx/first/cf:/cf
- /var/spool/mikopbx/first/storage:/storage
tty: true
environment:
- ID_WWW_USER=${ID_WWW_USER}
- ID_WWW_GROUP=${ID_WWW_GROUP}
- PBX_NAME=MikoPBXFirst
- PBX_FIREWALL_ENABLED=0
- PBX_FAIL2BAN_ENABLED=0
- SSH_PORT=123
- WEB_PORT=8080
- WEB_HTTPS_PORT=8443
- SIP_PORT=5060
- TLS_PORT=5061
- RTP_PORT_FROM=10000
- RTP_PORT_TO=10800
- IAX_PORT=4569
- AMI_PORT=5038
- AJAM_PORT=8088
- AJAM_PORT_TLS=8089
- BEANSTALK_PORT=4229
- REDIS_PORT=6379
- GNATS_PORT=4223
mikopbx-second:
container_name: "mikopbx-second"
image: "ghcr.io/mikopbx/mikopbx:latest"
network_mode: "host"
tty: true
entrypoint: "/sbin/docker-entrypoint"
hostname: "mikopbx-in-docker-second"
volumes:
- /var/spool/mikopbx/second/cf:/cf
- /var/spool/mikopbx/second/storage:/storage
environment:
- ID_WWW_USER=${ID_WWW_USER}
- ID_WWW_GROUP=${ID_WWW_GROUP}
- PBX_NAME=MikoPBXSecond
- PBX_FIREWALL_ENABLED=0
- PBX_FAIL2BAN_ENABLED=0
- SSH_PORT=2223
- WEB_PORT=8081
- WEB_HTTPS_PORT=9443
- SIP_PORT=6060
- TLS_PORT=6061
- RTP_PORT_FROM=20000
- RTP_PORT_TO=20800
- IAX_PORT=5569
- AMI_PORT=6038
- AJAM_PORT=9088
- AJAM_PORT_TLS=9089
- BEANSTALK_PORT=5229
- REDIS_PORT=7379
- GNATS_PORT=5223Сохраните содержимое в файл docker-compose.yml, выполните необходимые корректировки и запускайте MikoPBX коммандой:
Существует вариант запуска контейнеров с MikoPBX в режиме –net=bridge, но как описано выше для использования этого режима необходимо или существенно ограничить диапазон RTP портов, или открывать к ним доступ на хостовой машине не используя возможности Docker.
Для этого вам необходимо написать небольшой скрипт, для определения имени текущего мостового интерфейса и IP адреса каждого контейнера, и после запуска docker compose добавить необходимые правила iptables для диапазона RTP портов следующим образом:
Опишем несколько контейнеров в файле docker-compose.yaml, определим разные порты для веб интерфейса, SIP портов и диапазоны RTP портов, чтобы они не пересекались.
Создаем папку для скриптов
Сохраняем файлы start-multiple-mikopbx.sh и docker-compose.yaml в эту папку.
Устанавливаем необходимые зависимости для работы скрипта.
Переходим в нашу папку, добавляем права на выполнение и запускаем наш скрипт.
Пока ожидаем запуск контейнеров, проверяем настройки брендмауера на хосте, при необходимости открваем те порты, которые указаны в нашем docker-compose.yaml файле, а именно:
TCP/UDP порты 5060 и 6060 для SIP
UDP диапазоны 10000-10800 и 20000-20800 для передачи звука по RTP
TCP порты 8443 и 9443 для HTTPS протокола, для работы Web интерфейса.
Входим по очереди на каждую из станций по адресам:
https://<IP хостовой машины>:8443
https://<IP хостовой машины>:9443
Для входа в веб-интерфейс первой АТС MikoPBX используйте логин admin и пароль mikopbx-first-password
Для входа в веб-интерфейс второй АТС MikoPBX используйте логин admin и пароль mikopbx-second-password
В каждой машине должен быть включен режим NAT, указывая что контейнер находится за маршрутизатором в настройках сетевого интерфейса. Если станции будут использоваться внутри локальной сети, то в поле внешнего IP прописваем локальный IP адрес хостовой машины, в противном случе ее публичный IP адрес.
На этом настройка завершена, можно настраивать учетные записи и выполнять звонки.
Ниже перечислены некоторые переменные окружения, которые позволят скорректировать используемые MikoPBX порты и настройки.
SSH_PORT - порт для SSH (22)
WEB_PORT - порт для работы web интерфейса по протоколу HTTP (80)
WEB_HTTPS_PORT - порт для работы web интерфейса по протоколу HTTPS (443)
Полный список всех возможных параметров настроек доступен в исходном коде .
Описание настроек основных параметров системы
В этом разделе настраиваются основные параметры системы. Рекомендуется выполнить эти настройки сразу после установки АТС.
Название PBX системы — отображается на главной странице MikoPBX.
Дополнительное описание — видно только администраторам системы.
Язык звуковых сообщений системы — язык голосовых оповещений.
Максимальная длина внутренних номеров — максимальная длина внутреннего номера сотрудника.
Разрешить входящие звонки с любых серверов - разрешает принимать SIP звонки от неавторизованных устройств и серверов без регистрации.
Перезапуск PBX каждую ночь — автоматический рестарт Asterisk в ночное время (в 01:00 ночи по системному времени).
Отправлять разработчикам информацию о сбоях — при возникновении ошибки её описание отправляется разработчикам (требуется доступ в интернет).
Нажмите "Сохранить".
Запись разговоров — включить или отключить запись всех разговоров.
Запись внутренних разговоров — включить или отключить запись звонков между сотрудниками.
Ниже можно выбрать звуковые файлы, которые будут использоваться в качестве предупреждения о записи разговора (для входящих и исходящих звонков могут быть выбраны разные звуковые файлы).
Телефонные звонки сохраняются в формате WebM с кодеком Opus. Размер файла зависит от качества звонка: если хотя бы один из участников разговора использует качественный кодек (например, G.722 или Opus), запись сохраняется с повышенным битрейтом — это занимает больше места на диске, но улучшает качество распознавания речи.
Парковка — способ временно поставить клиента на удержание, пока вы уточняете информацию. Во время ожидания клиенту воспроизводится мелодия.
В MikoPBX доступны два способа парковки:
Введите *2 во время разговора — вызов будет поставлен на удержание, а вам сообщат номер парковочного слота. Любой сотрудник может забрать вызов, набрав этот номер.
В настройках задайте номер для парковки — при переадресации вызова на этот номер MikoPBX поставит звонок на удержание и сообщит номер слота. Вызов также может забрать любой сотрудник.
Диапазон парковочных слотов и номер для парковки настраиваются в этом же разделе:
Номер для парковки вызова — номер, на который нужно перевести вызов для постановки на удержание, по умолчанию 800.
Диапазон слотов для парковки — диапазон номеров парковочных слотов, по умолчанию 801–820.
MikoPBX поддерживает два вида переводов:
Консультативный (условный) перевод — вы можете предварительно поговорить с коллегой, прежде чем переключить на него вызов. Клиент в это время находится на удержании. Перевод завершается после того, как вы кладёте трубку.
Безусловный (слепой) перевод — вызов переводится сразу, без предварительного разговора с коллегой. Удобно, когда поступает второй звонок, а вы уже заняты — вызов можно мгновенно перевести на свободного сотрудника.
Комбинации клавиш для переводов можно изменить в этом же разделе:
Комбинация для консультативного перевода — по умолчанию ##.
Комбинация для безусловного перевода — по умолчанию **.
Время возврата вызова — если после консультативного перевода никто не ответил, вызов вернётся обратно. Задаётся в секундах, по умолчанию 45 сек.
Максимальный таймаут между цифрами при вводе добавочного номера — время ожидания следующей цифры при наборе номера. Задаётся в миллисекундах, по умолчанию 2500 мс.
Если звонит телефон коллеги, вы можете перехватить вызов, не вставая с места:
*8<НомерКоллеги> — перехватить вызов конкретного сотрудника.
*8 — перехватить любой входящий вызов, если номер коллеги неизвестен.
Комбинацию для перехвата можно изменить в поле «Комбинация для перехвата входящих вызовов», по умолчанию *8.
Session Initiation Protocol (SIP) — сигнальный протокол, используемый большинством VoIP-телефонов. Вы можете изменить SIP-порт (по умолчанию 5060) для повышения безопасности.
RTP (Real-time Transport Protocol) определяет стандартный формат передачи аудио и видео по IP-сетям. По умолчанию используется диапазон портов 10000–10800. Для некоторых маршрутизаторов и брандмауэров может потребоваться дополнительная настройка диапазона. Ещё одна причина для его расширения — большое количество параллельных звонков: каждый активный вызов использует два RTP-порта, то есть при 200 портах возможно не более 100 одновременных звонков. Если нагрузка выше — расширьте диапазон.
Порт SIP — порт для регистрации телефонов на станции, по умолчанию 5060. Изменение порта может повысить безопасность системы.
Порт SIP TLS — порт для шифрованных звонков, по умолчанию 5061.
Диапазон RTP портов — диапазон портов для передачи аудио, по умолчанию 10000–10800.
Адрес STUN сервера — помогает при работе АТС за NAT, в том числе при использовании WebRTC.
Префикс Auth Username — по умолчанию имя пользователя (username) для авторизации на SIP-аккаунте соответствует внутреннему номеру сотрудника (пример — 101). При заполнении этой настройки к имени авторизации будет добавляться указанный префикс: username останется 101, а AuthUsername станет 101MIKO. Такой подход значительно усложняет подбор пароля для SIP-аккаунта.
Некоторые брандмауэры закрывают порты после периода неактивности — в таких случаях стоит уменьшить таймаут регистрации. Также разные SIP-провайдеры могут требовать различные значения тайм-аутов.
Стандартное время Keep-alive — интервал отправки keep-alive пакетов в секундах, по умолчанию 120 секунд.
Минимальное время регистрации (SIPMiniExpiry) — по умолчанию 60 секунд.
Максимальное время регистрации (SIPMaxExpiry) — по умолчанию 3600 секунд.
В этом разделе настраиваются разрешённые аудио и видео кодеки для всей АТС.
Asterisk Manager Interface (AMI) — мощный и удобный программный интерфейс (API) Asterisk для управления системой из внешних программ. Благодаря AMI внешние программы могут осуществлять соединения с Asterisk посредством TCP-протокола, инициировать выполнение команд, считывать результат их выполнения, а также получать уведомления о происходящих событиях в реальном времени. AMI часто используют для интеграции с бизнес-процессами и системами, программным обеспечением CRM (Customer Relationship Management — управление взаимоотношениями с клиентами).
Asynchronous Javascript Asterisk Manager (AJAM) — технология, которая позволяет веб-браузерам или другим приложениям с поддержкой HTTP напрямую обращаться к интерфейсу Asterisk Manager (AMI) через HTTP/HTTPS.
Asterisk REST Interface (ARI) — RESTful API с поддержкой WebSocket, который даёт полный контроль над каналами, мостами и медиапотоками Asterisk в реальном времени. Предназначен для разработки собственных телефонных приложений.
Использовать AMI интерфейс — включить или отключить AMI.
Порт AMI — порт для подключения внешних программ к AMI, по умолчанию 5038. Клиентская программа подключается к AMI через этот порт и аутентифицируется, после чего Asterisk отвечает на запросы и отправляет извещения об изменениях состояния заданных подсистем.
HTTP порт (AJAM и ARI) — порт для подключения по HTTP, по умолчанию 8088.
HTTPS порт (AJAM и ARI) — порт для подключения по HTTPS, по умолчанию 8089.
Использовать AJAM интерфейс — включить или отключить AJAM.
Использовать ARI интерфейс — включить или отключить ARI. По умолчанию отключён.
Разрешённые источники CORS — домены, с которых разрешены запросы к ARI. CORS — механизм безопасности браузера, ограничивающий кросс-доменные запросы к API.
SSH (Secure Shell) — зашифрованный протокол, который часто используется для взаимодействия и удалённого управления серверами. SSH-сервер может выполнять аутентификацию пользователей с помощью различных алгоритмов. Самый популярный — аутентификация по паролю. Он достаточно прост, но не очень безопасен: пароли передаются по безопасному каналу, однако недостаточно сложны для противостояния попыткам перебора. Вычислительная мощность современных систем в сочетании со специальными скриптами делает перебор очень простым.
Существует более безопасный способ аутентификации — SSH-ключи. Каждая пара состоит из открытого и закрытого ключа: закрытый хранится у клиента, открытый загружается на сервер в файл ~/.ssh/authorized_keys. При подключении сервер отправляет сообщение, зашифрованное открытым ключом — если клиент расшифровывает его закрытым и возвращает правильный ответ, аутентификация считается пройденной.
SSH порт — порт для подключения по SSH, по умолчанию 22.
Логин для SSH консоли — имя пользователя для подключения.
Отключить авторизацию по паролю — по умолчанию включено в MikoPBX (авторизация по паролю отключена).
SSH пароль
Для повышения безопасности можно изменить HTTP-порт (по умолчанию 80) или активировать режим HTTPS. HTTPS шифрует трафик между браузером и АТС с помощью протоколов SSL/TLS. По умолчанию используется TCP-порт 443.
HTTP порт — порт для доступа к веб-интерфейсу по HTTP, по умолчанию 80.
HTTPS порт — порт для доступа к веб-интерфейсу по HTTPS, по умолчанию 443.
Редирект на HTTPS — при открытии веб-интерфейса по HTTP пользователь будет автоматически перенаправлен на HTTPS.
SSL/TLS сертификат — цифровой документ, подтверждающий подлинность сервера и обеспечивающий шифрование данных между браузером и АТС. В MikoPBX сертификат используется для:
HTTPS доступа к веб-интерфейсу
WebRTC соединений (обязательно для браузерных звонков)
Безопасных AJAM и ARI подключений через HTTPS
Защищённого REST API для интеграций
Сертификат должен быть в формате PEM — начинается с -----BEGIN CERTIFICATE----- и заканчивается -----END CERTIFICATE-----. Если у вас есть промежуточные сертификаты (intermediate), добавьте их после основного в том же поле.
Способы получения сертификата:
Модуль Let's Encrypt — автоматическое получение и обновление бесплатных сертификатов. Рекомендуемый способ.
Покупка у центра сертификации (DigiCert, Comodo, GlobalSign и др.)
Самоподписанный сертификат — генерируется автоматически при первом запуске АТС, но вызывает предупреждения в браузерах.
Секретный ключ для расшифровки SSL/TLS соединений. Должен точно соответствовать публичному сертификату — при несоответствии HTTPS работать не будет.
Ключ должен быть в формате PEM — начинается с -----BEGIN RSA PRIVATE KEY----- или -----BEGIN PRIVATE KEY-----.
Рекомендации по безопасности:
Храните резервную копию ключа в защищённом месте.
Используйте ключи длиной минимум 2048 бит (рекомендуется 4096).
Регулярно обновляйте сертификаты и ключи.
В этом разделе можно изменить логин и пароль для входа в веб-интерфейс, а также настроить вход с помощью Passkeys.
Логин — имя пользователя для входа в веб-интерфейс.
Пароль — пароль для входа в веб-интерфейс.
Passkeys — современный способ входа без пароля с использованием биометрии или аппаратного ключа безопасности: Face ID, Touch ID, Windows Hello или YubiKey. Это быстрее и безопаснее традиционных паролей.
Чтобы добавить Passkey, нажмите кнопку «+ Добавить Passkey» и следуйте инструкциям браузера.
Этот раздел позволяет полностью сбросить систему до заводского состояния. При удалении будут безвозвратно удалены все настройки, история вызовов, файлы записей разговоров и установленные модули расширений.
Для подтверждения введите в поле ввода фразу удалить всё и нажмите «Сохранить».
Обновление MikoPBX в LXC-контейнере Proxmox VE без копирования записей разговоров
Эта инструкция предназначена для MikoPBX, установленной в LXC-контейнере Proxmox VE. Все действия выполняются через web-интерфейс Proxmox и MikoPBX.
В LXC системные файлы MikoPBX и пользовательские данные находятся на разных томах:
Короткое описание ARI (Asterisk REST Interface)
ARI — это RESTful API с поддержкой WebSocket, который даёт полный контроль над каналами, мостами и медиапотоками Asterisk в реальном времени. В отличие от , ARI работает напрямую с ядром Asterisk и предназначен для разработки собственных телефонных приложений.
По умолчанию отключён — включите при необходимости в разделе «Система» → «Общие настройки» → «AMI&ARI».
ARI применяется когда стандартных возможностей АТС недостаточно и нужна собственная логика обработки звонков:
WebRTC приложения и софтфоны — веб-телефоны и мобильные клиенты с прямым управлением медиапотоками
пароль должен содержать цифры и специальные знаки: «-», «_», «[]», «{}», «@», «;».
















Использовать WebRTC — будут произведены дополнительные настройки для работы с WebRTC-соединением. Например, для внутреннего номера 201 будет создан дополнительный endpoint, подключиться к которому можно по протоколу WebRTC с использованием URL sip:201-WS@IP_PBX.
Авторизованные SSH ключи — добавьте сюда публичный SSH-ключ с помощью кнопки «+ Добавить ключ». Если ключей несколько - добавьте каждый отдельно.
Публичный SSH ключ системы — публичный SSH-ключ текущей АТС. Его можно скопировать в поле «Авторизованные SSH ключи» на другой станции — это позволит подключаться к удалённому серверу без дополнительной авторизации.
Включение этой опции может создать угрозу безопасности. Убедитесь, что ваша сеть надежно защищена и используются правила фильтрации!
Никогда не используйте * в продакшне. Указывайте только доверенные домены по HTTPS.
Никогда не передавайте приватный ключ третьим лицам. Компрометация ключа позволит злоумышленнику перехватывать зашифрованный трафик. При компрометации - немедленно замените пару ключей.
Это действие необратимо. Перед очисткой системы убедитесь, что у вас есть резервная копия всех важных данных.











TLS_PORT - порт для подключения SIP клиента с шифрованием (5061)
RTP_PORT_FROM - начало диапазона RTP портов, передача голоса (10000)
RTP_PORT_TO - конец диапазона RTP портов, передача голоса (10800)
IAX_PORT - порт для подключения IAX клиентов (4569)
AMI_PORT - порт AMI (5038)
AJAM_PORT - порт AJAM используется для подключения панели телефонии для 1С (8088)
AJAM_PORT_TLS - порт AJAM используется для подключения панели телефонии для 1С (8089)
BEANSTALK_PORT - порт для сервера очередей Beanstalkd (4229)
REDIS_PORT - порт для сервера Redis (6379)
GNATS_PORT - порт для сервера gnatsd (4223)
ID_WWW_USER - идентификатор пользователя www-user (можно задать выражением $(id -u www-user), где www-user имя НЕ root пользователя)
ID_WWW_GROUP - идентификатор группы www-user (можно задать выражением $(id -g www-user), где www-user имя НЕ root группы)
WEB_ADMIN_LOGIN - логин для доступа в Web интерфейс
WEB_ADMIN_PASSWORD - пароль для доступа в Web интерфейс
Важное замечание! Один из наших контейнеров использует проброс с SIP порта с изменением его значения 5060 -> 6060. В данном случае, для корректной работы системы, необходимо добавить внешнее значение SIP порта в настройках NAT в разделе сетевых интерфейсов MikoPBX. Эту настройку также можно сделать задав соответвующее значение переменной окружения EXTERNAL_SIP_PORT=6060 в файле docker-compose.
В bridge-режиме (по умолчанию) внутренний файрвол MikoPBX не защищает веб-интерфейс — контейнер не управляет iptables хоста. См. Внешний файрвол для Docker.
export ID_WWW_USER=$(id -u www-user)
export ID_WWW_GROUP=$(id -g www-user)
sudo docker compose -f docker-compose.yml up -d#!/bin/bash
COMPOSE_FILE="$1"
if [ -z "$COMPOSE_FILE" ]; then
echo "Usage: $0 path/to/docker-compose.yaml"
exit 1
fi
# Получим идентификатор пользователя для запуска контейнера
export ID_WWW_USER=$(id -u www-user)
export ID_WWW_GROUP=$(id -g www-user)
# Оставновим текущие контейнеры, если они запущены
docker compose -f "$COMPOSE_FILE" down
# Удалим их
docker compose -f "$COMPOSE_FILE" rm
# Запускаем контейнеры в фоне
docker compose -f "$COMPOSE_FILE" up -d
sleep 60
# Создадим метку для правил IPTABLES
IPTABLES_COMMENT="mikopbx-custom-rule"
# Определим идентификатор проекта, он используется при создании сетевого моста
project_prefix=$(cat "$COMPOSE_FILE" | yq e '.x-project-name' -)
# Если префикс не задан, устанавливаем значение по умолчанию
if [ -z "$project_prefix" ]; then
project_prefix="default_prefix"
fi
# Функция для получения IP адреса контейнера
function get_container_ip() {
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$1"
}
# Функция для получения имени мостового интерфейса
function get_bridge_name() {
local network_name="$1"
local prefix="$2"
local network_id=$(docker network inspect "${prefix}_${network_name}" -f '{{.Id}}')
if [ -z "$network_id" ]; then
echo "Error: Network ${prefix}_${network_name} not found."
return 1
fi
local bridge_name=$(ip link show type bridge | grep -o "br-${network_id:0:12}\b")
echo $bridge_name
}
echo "Delete tagged iptables rules"
# Удаляем все правила iptables промаркированные нашим комментарием
iptables -S | grep "$IPTABLES_COMMENT" | sed 's/-A /-D /' | while read rule; do
echo "Delete rule $rule"
iptables $rule
done
# Удаляем все NAT правила iptables промаркированные нашим комментарием
iptables -S -t nat | grep "$IPTABLES_COMMENT" | sed 's/-A /-D /' | while read rule; do
echo "Delete rule $rule"
iptables -t nat $rule
done
# Парсим docker-compose файл и получаем все необходимые параметры.
echo "Parsing docker-compose file and configuring iptables rules"
cat "$COMPOSE_FILE" | yq e '.services[] | select(.environment[] | test("RTP_PORT_FROM")) | {"container_name": .container_name, "environment": .environment, "network": .networks[0]}' -o=json | jq -c '.' | while read -r service; do
container_name=$(echo $service | jq -r '.container_name')
network_name=$(echo $service | jq -r '.network')
bridge_name=$(get_bridge_name "$network_name" "$project_prefix")
container_ip=$(get_container_ip "$container_name")
RTP_PORT_FROM=$(echo $service | jq -r '.environment[] | select(contains("RTP_PORT_FROM")) | split("=")[1]')
RTP_PORT_TO=$(echo $service | jq -r '.environment[] | select(contains("RTP_PORT_TO")) | split("=")[1]')
echo "Configuring iptables for $container_name ($container_ip) on $bridge_name from port $RTP_PORT_FROM to $RTP_PORT_TO"
iptables -A DOCKER -t nat ! -i "$bridge_name" -p udp -m udp --dport $RTP_PORT_FROM:$RTP_PORT_TO -j DNAT --to-destination $container_ip:$RTP_PORT_FROM-$RTP_PORT_TO -m comment --comment "$IPTABLES_COMMENT"
iptables -A DOCKER -d $container_ip/32 ! -i "$bridge_name" -o "$bridge_name" -p udp -m udp --dport $RTP_PORT_FROM:$RTP_PORT_TO -j ACCEPT -m comment --comment "$IPTABLES_COMMENT"
iptables -A POSTROUTING -t nat -s $container_ip/32 -d $container_ip/32 -p udp -m udp --dport $RTP_PORT_FROM:$RTP_PORT_TO -j MASQUERADE -m comment --comment "$IPTABLES_COMMENT"
echo "Don't forget to open UDP ports $RTP_PORT_FROM to $RTP_PORT_TO on external firewall if it exists"
done
echo "iptables configuration completed successfully."
services:
mikopbx-first:
container_name: "mikopbx-first"
image: "ghcr.io/mikopbx/mikopbx:latest"
entrypoint: "/sbin/docker-entrypoint"
hostname: "mikopbx-in-docker-first"
volumes:
- /var/spool/mikopbx/first/cf:/cf
- /var/spool/mikopbx/first/storage:/storage
tty: true
networks:
- network-bridge1
environment:
- ID_WWW_USER=${ID_WWW_USER}
- ID_WWW_GROUP=${ID_WWW_GROUP}
- PBX_NAME=MikoPBXFirst
- RTP_PORT_FROM=10000 # UPD дипазон 10000-10800 на хосте будет направлен в контейнер
- RTP_PORT_TO=10800
- WEB_ADMIN_PASSWORD=mikopbx-first-password
- ENABLE_USE_NAT=1
- PBX_FIREWALL_ENABLED=1
- PBX_FAIL2BAN_ENABLED=1
ports:
- "8443:443" # TCP порт 9443 на хосте направляется на порт 443 в контейнере
- "5060:5060/udp" # UDP порт 5060 на хосте направляется на порт 5060 в контейнере
mikopbx-second:
container_name: "mikopbx-second"
image: "ghcr.io/mikopbx/mikopbx:latest"
tty: true
networks:
- network-bridge2
entrypoint: "/sbin/docker-entrypoint"
hostname: "mikopbx-in-docker-second"
volumes:
- /var/spool/mikopbx/second/cf:/cf
- /var/spool/mikopbx/second/storage:/storage
environment:
- ID_WWW_USER=${ID_WWW_USER}
- ID_WWW_GROUP=${ID_WWW_GROUP}
- PBX_NAME=MikoPBXSecond
- RTP_PORT_FROM=20000 # UPD дипазон 20000-20800 на хосте будет направлен в контейнер
- RTP_PORT_TO=20800
- EXTERNAL_SIP_PORT=6060 # Расскажем MikoPBX какой у нее внешнить SIP порт
- WEB_ADMIN_PASSWORD=mikopbx-second-password
- ENABLE_USE_NAT=1
- PBX_FIREWALL_ENABLED=1
- PBX_FAIL2BAN_ENABLED=1
ports:
- "9443:443" # TCP порт 9443 на хосте направляется на порт 443 в контейнере
- "6060:5060/udp" # UDP порт 6060 на хосте направляется на порт 5060 в контейнере
x-project-name: mikopbx # Этот параметр обязательно должен присуствовать
networks:
network-bridge1:
driver: bridge
network-bridge2:
driver: bridgemkdir -p /usr/src/mikopbxsudo apt-get update
sudo apt-get install jq
sudo snap install yqcd /usr/src/mikopbx
sudo chmod +x start-multiple-mikopbx.sh
sudo ./start-multiple-mikopbx.sh docker-compose.yamlОстаётся у старого CT
/storage
Записи разговоров, история вызовов, модули, звуковые файлы и журналы
Переназначается новому CT
/cf
Настройки MikoPBX и основная база данных
Переназначается новому CT
Для обновления создаётся новый контейнер из актуального шаблона lxc.tar.gz. Старые тома /storage и /cf не копируются: Proxmox переназначает их новому контейнеру с помощью функции Reassign Owner.
В результате новая версия MikoPBX получает новую корневую файловую систему, но продолжает работать с прежними настройками, историей и записями разговоров.
Запланируйте техническое окно. После остановки старого CT телефония не будет работать до запуска нового контейнера.
Убедитесь, что у вас есть:
доступ администратора к Proxmox VE;
доступ администратора к MikoPBX;
резервная копия, сохранённая вне обновляемого контейнера.
Откройте старый CT в Proxmox и сохраните его параметры.
Resources - CPU, RAM, Swap, Root Disk (размер).
Network - bridge, IPv4/IPv6, VLAN, MAC-адрес и состояние Proxmox Firewall.
DNS - DNS-серверы.
Options — тип контейнера (привилигированный или нет)
В разделе Resources найдите строки, в которых указаны:
mp=/storage — том с записями и пользовательскими данными;
mp=/cf — том с конфигурацией.
Запишите их идентификаторы. Обычно это mp0 и mp1, но порядок может отличаться.
Откройте Модули → Маркетплейс модулей
Убедитесь, что Модуль резервного копирования установлен и включён.
Откройте модуль и нажмите Создать архивную копию.
Создайте архив и скачайте его на компьютер администратора или во внешнее хранилище.
В Proxmox откройте настройки старого контейнера (CT) → Backup. Нажмите Backup now.
Выберите внешнее или отдельное хранилище резервных копий. Запустите backup и дождитесь сообщения TASK OK.
Откройте страницу релизов MikoPBX.
Найдите требуемую версию и скопируйте ссылку на файл, имя которого заканчивается на lxc.tar.gz.
В Proxmox выберите хранилище local → CT Templates. Нажмите Download from URL.
Вставьте ссылку в поле URL и нажмите Query URL. Проверьте имя файла и нажмите Download.
Дождитесь сообщения TASK OK.
Нажмите Create CT в правом верхнем углу Proxmox.
Выберите тот же узел Proxmox, на котором расположен старый CT:
Укажите новый CT ID. Не используйте ID старого контейнера.
Задайте отличающееся имя, например mikopbx-update-test.
Установите такое же значение Unprivileged container, как у старого CT.
Нажмите Next.
Выберите загруженный шаблон новой версии lxc.tar.gz и нажмите Next.
Создайте новый Root Disk (rootfs). Выберите подходящее хранилище. Укажите размер системного диска - 1 ГБ.
Нажмите Next.
Укажите такое же количество ядер, Memory и Swap памяти, как у старого контейнера.
Повторите сетевые настройки старого CT. На время проверки рекомендуется использовать свободный временный IP-адрес и новый MAC-адрес, чтобы исключить конфликт со старым контейнером.
Если используется DHCP, новый CT может получить другой адрес автоматически. Если адрес закреплён на DHCP-сервере по MAC, заранее создайте отдельную привязку для нового MAC-адреса.
Повторите DNS-настройки старого CT:
На странице Confirm внимательно проверьте параметры.
Снимите флажок Start after created. Новый контейнер нельзя запускать до подключения /cf и /storage. Нажмите Finish и дождитесь сообщения TASK OK.
Откройте новый CT → Resources. На этом этапе в списке должен находиться новый Root Disk, но не должно быть mount points /cf и /storage.
Откройте старый CT → Resources. Выберите строку Mount Point, в параметрах которой указано mp=/storage. Нажмите Volume Action → Reassign Owner.
В поле Target выберите новый CT. В поле Add as оставьте Mount Point. Proxmox предложит свободный номер точки монтирования, например mp0. Убедитесь, что выбранный номер не занят.
Нажмите Reassign Volume.
После операции том исчезнет из раздела Resources старого CT и появится у нового. Proxmox изменит владельца тома и при необходимости переименует его под новый CT ID. Содержимое диска при этом не копируется и не форматируется.
Повторите те же действия для Mount Point с параметром mp=/cf:
Откройте старый CT → Resources. Выберите строку Mount Point, в параметрах которой указано mp=/cf. Нажмите Volume Action → Reassign Owner.
Выберите новый CT. Оставьте Add as → Mount Point. Выберите следующий свободный номер, например mp1. Нажмите Reassign Volume.
Откройте новый CT → Resources и проверьте итоговую конфигурацию:
Root Disk принадлежит новому CT;
один Mount Point содержит mp=/storage;
второй Mount Point содержит mp=/cf;
размеры /storage и /cf совпадают с размерами старых томов.
Номера mp0 и mp1 могут располагаться в другом порядке. Важны пути mp=/storage и mp=/cf.
Выберите новый CT и нажмите Start. Откройте вкладку Console.
Дождитесь полной загрузки MikoPBX и появления адреса web-интерфейса.
Откройте этот адрес в браузере и войдите с прежними логином и паролем MikoPBX.
Если новый CT сразу получил прежний рабочий IP-адрес, пропустите этот шаг.
Если для проверки использовался временный адрес:
Остановите новый CT.
Ещё раз убедитесь, что старый CT остановлен.
Откройте новый CT → Network и выберите интерфейс net0.
Укажите прежний IPv4/IPv6-адрес MikoPBX.
Если адрес закреплён на DHCP-сервере, перенесите привязку на новый MAC или назначьте новому CT прежний MAC-адрес.
Проверьте bridge, VLAN, gateway и настройки Proxmox Firewall.
При необходимости переключите внешний NAT, DNS и правила межсетевого экрана на новый адрес.
Запустите новый CT.
Одинаковый IP- или MAC-адрес разрешается использовать только при полностью остановленном старом контейнере.
Не удаляйте старый CT, пока не выполнены все проверки.
В web-интерфейсе убедитесь, что отображается новая версия MikoPBX.
Проверьте сотрудников, SIP-аккаунты, провайдеров, входящие и исходящие маршруты.
Откройте Телефония → История вызовов и убедитесь, что старая история доступна.
Прослушайте несколько старых записей разговоров за разные даты.
Проверьте установленные модули, их лицензии и настройки.
Убедитесь, что телефоны и провайдеры зарегистрированы либо имеют ожидаемый статус.
Выполните внутренний, исходящий и входящий тестовые звонки.
Проверьте, что новый разговор появился в истории и его запись воспроизводится.
Перезагрузите новый CT через Proxmox.
После перезагрузки повторно проверьте web-интерфейс, сеть, регистрации и тестовый звонок.
Если новая версия работает некорректно:
Остановите новый CT.
В его разделе Resources выберите Mount Point /storage.
Выполните Volume Action → Reassign Owner и верните том старому CT.
Таким же способом верните старому CT том /cf.
Проверьте, что у старого CT снова присутствуют mp=/storage и mp=/cf.
Верните старые IP-, MAC-, DNS- и NAT-настройки.
Запустите старый CT и проверьте его работу.
Сохраняйте старый остановленный CT и резервные копии несколько дней. Удалять старый контейнер рекомендуется только после того, как:
новая версия стабильно работает;
входящие и исходящие вызовы проверены;
новые записи разговоров создаются и воспроизводятся;
MikoPBX успешно пережила перезагрузку;
создана свежая резервная копия уже обновлённой станции.
Перед удалением старого CT ещё раз откройте его Resources и убедитесь, что тома /cf и /storage действительно переназначены новому контейнеру. После этого старый Root Disk можно удалить вместе со старым CT.
Root Disk
Рекомендуется производить обновления последовательно, «не перепрыгивая» через релизы и версии. Если в описании релиза указана промежуточная версия, сначала обновитесь до неё.
Системные файлы текущей версии MikoPBX
Не обновляйте LXC-контейнер файлом .img в разделе Обслуживание → Обновление PBX и не подключайте ISO-образ. Эти способы рассчитаны на полноценный системный диск виртуальной или физической машины. Для LXC используйте новый шаблон lxc.tar.gz.
Reassign Owner не создаёт резервную копию. Операция только меняет владельца существующего тома. Ошибка администратора, повреждение хранилища или несовместимое изменение базы данных могут потребовать восстановления из резервной копии.
Новая версия могла изменить структуру базы данных на /cf. Поэтому возврат томов не гарантирует совместимость со старой версией MikoPBX. Если старый CT не запускается корректно, восстановите его из Proxmox backup или восстановите настройки из архива MikoPBX, созданного до обновления.
При таком способе обновления многолетняя история записей остаётся на исходном диске /storage. Время переключения не зависит от объёма записей, поскольку Proxmox меняет владельца тома вместо копирования его содержимого.
Конференц-связь — программное управление мостами и участниками
Запись и обработка звонков — перехват аудио в реальном времени для аналитики или транскрибации
Голосовые боты и ассистенты — интеграция с внешними AI-сервисами
Продвинутые очереди — собственная логика распределения звонков
ARI состоит из трёх компонентов:
REST API — управление объектами Asterisk: каналами, мостами, записями
WebSocket (/asterisk/ari/events) — получение асинхронных событий в реальном времени: входящий звонок, завершение звонка, нажатие DTMF и т.д.
Stasis — приложение диалплана, которое передаёт канал под управление вашего ARI приложения
Типичный сценарий: звонок попадает в диалплан → Stasis() передаёт канал вашему приложению → приложение управляет звонком через REST API и получает события через WebSocket.
Перед началом, необходимо включить ARI интерфейс (по умолчанию он выключен). Для этого перейдите в раздел "Система" -> "Общие настройки".
Далее во вкладку "AMI&ARI", переключите тумблер "Использовать ARI интерфейс". В поле «Разрешённые источники CORS» укажите домены, с которых будут выполняться запросы к ARI. CORS — механизм безопасности браузера, который ограничивает кросс-доменные запросы к API.
(пусто)
Доступ только с того же домена
http://localhost:3000
Локальная разработка
https://app.mycompany.com
Перейдите в раздел «Система» → «Доступ к ARI».
Нажмите «Добавить пользователя».
Заполните следующие параметры:
Имя пользователя - логин для подключения, например ari_user.
Пароль - пароль для подключения.
Описание - описание для текущего пользователя, например "WebRTC Demo".
Приложения - укажите имена Stasis приложений, к которым имеет доступ пользователь. Оставьте поле пустым для доступа ко всем приложениям.
Сохраните настройки.
Обычный
ws://your-mikopbx.com:8088/asterisk/ari/events
Защищённый (TLS)
wss://your-mikopbx.com:8089/asterisk/ari/events
Замените [application] на имя вашего Stasis приложения.
HTTP
http://your-mikopbx.com:8088/asterisk/ari
HTTPS
https://your-mikopbx.com:8089/asterisk/ari/
Аутентификация: HTTP Basic Auth — логин и пароль ARI пользователя.
Это минимальный пример работы с ARI — канал входит в Stasis приложение, приложение воспроизводит звуковой файл и завершает звонок.
Пример взят из официальной документации Asterisk: Getting Started with ARI
В MikoPBX перейдите в «Маршрутизация» → «Приложения диалплана», создайте приложение с типом «Диалплан Asterisk» и кодом:
Назначьте приложение на нужный входящий маршрут.
При входящем звонке WebSocket получит событие StasisStart:
Откройте новое окно терминала и выполните следующую команду:
При успешном проигрывании Вы увидите следующий вывод в терминал:
После завершения звонка WebSocket пришлёт StasisEnd:
Живая таблица статусов сотрудников в терминале — не требует настройки входящих маршрутов и Stasis приложений. Работает через подписку на все события станции.
Установите зависимости:
При совершении вызовов, информация в таблице будет обновляться:
Полная документация по ARI — на сайте Asterisk: docs.asterisk.org
# REST API запрос через curl
curl -u username:password https://your-mikopbx.com:8089/asterisk/ari/asterisk/infowscat -c "wss://username:password@your-mikopbx.com:8089/asterisk/ari/events?app=hello-world"1,Answer()
n,Stasis(hello-world)
n,Hangup(){
"type": "StasisStart",
"timestamp": "2026-03-25T07:18:27.423+0300",
"args": [],
"channel": {
"id": "mikopbx-1774412307.28",
"name": "Local/10003258@internal-incoming-0000000a;2",
"state": "Up",
"protocol_id": "",
"caller": {
"name": "79257184275",
"number": "79257184275"
},
"connected": {
"name": "",
"number": "252"
},
"accountcode": "",
"dialplan": {
"context": "internal",
"exten": "10003258",
"priority": 2,
"app_name": "Stasis",
"app_data": "hello-world"
},
"creationtime": "2026-03-25T07:18:27.371+0300",
"language": "en-en"
},
"asterisk_id": "82:6a:9e:68:10:11",
"application": "hello-world"
}curl -u username:password -X POST \
"https://your-mikopbx.com:8089/asterisk/ari/channels/mikopbx-1774412307.28/play?media=sound:/storage/usbdisk1/mikopbx/media/custom/miko_hello"{
"id": "a0ee0d43-2af5-4250-a303-43825507a06c",
"media_uri": "sound:/storage/usbdisk1/mikopbx/media/custom/miko_hello",
"target_uri": "channel:mikopbx-1774412307.28",
"language": "en-en",
"state": "playing"
}{
"type": "StasisEnd",
"timestamp": "2026-03-25T07:19:44.982+0300",
"channel": {
"id": "mikopbx-1774412307.28",
"name": "Local/10003258@internal-incoming-0000000a;2",
"state": "Up",
"protocol_id": "",
"caller": {
"name": "79257184275",
"number": "79257184275"
},
"connected": {
"name": "",
"number": "252"
},
"accountcode": "",
"dialplan": {
"context": "internal",
"exten": "10003258",
"priority": 2,
"app_name": "Stasis",
"app_data": "hello-world"
},
"creationtime": "2026-03-25T07:18:27.371+0300",
"language": "en-en"
},
"asterisk_id": "82:6a:9e:68:10:11",
"application": "hello-world"
}pip install requests websocketsimport asyncio
import websockets
import json
import os
from datetime import datetime
ARI_HOST = 'your-mikopbx.com'
ARI_USER = 'ari_user'
ARI_PASS = 'your-ari-password'
peers = {}
STATES = {
'NOT_INUSE': ('🟢', 'Свободен'),
'BUSY': ('🔴', 'Занят'),
'UNAVAILABLE': ('⚫', 'Недоступен'),
}
def draw():
print('\033[2J\033[H', end='')
now = datetime.now().strftime('%H:%M:%S')
print(f'MikoPBX — монитор присутствия [{now}]')
print('─' * 50)
print(f' {"Номер":<10} {"Имя":<20} {"Статус":<15} {"Обновлён"}')
print('─' * 50)
for number, info in sorted(peers.items()):
icon, label = STATES.get(info['state'], ('❓', info['state']))
print(f' {number:<10} {info["name"]:<20} {icon} {label:<12} {info["updated"]}')
print('─' * 50)
print(f' Сотрудников: {len(peers)}')
async def run():
uri = (
f"wss://{ARI_USER}:{ARI_PASS}@{ARI_HOST}:8089/asterisk/ari/events"
f"?app=auto-receptionist&subscribeAll=true"
)
async with websockets.connect(uri) as ws:
draw()
async for message in ws:
event = json.loads(message)
etype = event.get('type')
if etype == 'DeviceStateChanged':
ds = event.get('device_state', {})
name = ds.get('name', '')
state = ds.get('state', '')
if not name.startswith('PJSIP/'):
continue
number = name.replace('PJSIP/', '')
if number not in peers:
peers[number] = {'name': number, 'state': state, 'updated': '—'}
peers[number]['state'] = state
peers[number]['updated'] = datetime.now().strftime('%H:%M:%S')
draw()
elif etype == 'PeerStatusChange':
ep = event.get('endpoint', {})
number = ep.get('resource', '')
state = ep.get('state', '')
if not number:
continue
if number not in peers:
peers[number] = {'name': number, 'state': 'unknown', 'updated': '—'}
if state == 'online':
peers[number]['state'] = 'NOT_INUSE'
elif state == 'offline':
peers[number]['state'] = 'UNAVAILABLE'
peers[number]['updated'] = datetime.now().strftime('%H:%M:%S')
draw()
elif etype == 'ContactStatusChange':
ep = event.get('endpoint', {})
number = ep.get('resource', '')
ci = event.get('contact_info', {})
status = ci.get('contact_status', '')
if not number:
continue
if number not in peers:
peers[number] = {'name': number, 'state': 'unknown', 'updated': '—'}
if status == 'Reachable':
peers[number]['state'] = 'NOT_INUSE'
elif status in ('Unreachable', 'NonQualified'):
peers[number]['state'] = 'UNAVAILABLE'
peers[number]['updated'] = datetime.now().strftime('%H:%M:%S')
draw()
asyncio.run(run())MikoPBX — монитор присутствия [11:34:43]
──────────────────────────────────────────────────
Номер Имя Статус Обновлён
──────────────────────────────────────────────────
202 202 🟢 Свободен 11:34:25
243 243 ⚫ Недоступен 11:34:43
252 252 🔴 Занят 11:34:41
──────────────────────────────────────────────────
Сотрудников: 3Никогда не используйте * в продакшне. Указывайте только доверенные домены по HTTPS.























bridge-app: Управление мостами вызовов
channel-spy:Прослушивание каналов
Продакшн приложение
*
Все источники — только для тестов





Инструкция по развёртыванию MikoPBX в AWS через Terraform скрипт
Данное руководство описывает развёртывание MikoPBX в AWS по принципу Infrastructure as Code (IaC) с помощью Terraform. Вся инфраструктура: EC2-инстанс, сетевые правила, диски и IP-адрес - описывается декларативно в коде, что обеспечивает воспроизводимость, версионирование и возможность быстрого повторного развёртывания в любом окружении.
Общий процесс:
Скачать .raw → Загрузить в S3 → Импортировать как AMI → Развернуть через TerraformTerraform >= 1.3.0
AWS CLI настроенный с ключами доступа (aws configure)
Bash (macOS / Linux)
Права IAM: ec2:*, s3:*, iam:CreateRole, iam:PutRolePolicy
Перейдите на страницу релизов MikoPBX:
Скачайте актуальный образ с расширением .raw
Перейдите в Amazon Web Services.
Далее перейдите в "Services" -> "Storage" -> "S3".
Нажмите "Create bucket". Введите уникальное имя бакета (поле "Bucket name"). Для других полей используйте значения по умолчанию.
Подтвердите создание бакета, нажав на "Create bucket".
Перейдите в созданный бакет, нажав на его название. Далее нажмите на "Upload" и выберите файл образа диска с расширением ".raw".
Для подтверждения, нажмите "Upload".
AWS требует специальную IAM-роль vmimport для импорта образов. Выполните эти шаги один раз для аккаунта.
Создайте файл trust-policy.json со следующим содержанием:
Создайте файл role-policy.json со следующим содержанием:
Замените
mikopbx-bucketна имя вашего S3-бакета.
Выполните следующие команды для применения описанных политик:
Сохраните скрипт ниже как import-image.sh и отредактируйте переменные DEFAULT_BUCKET, DEFAULT_IMAGE, DEFAULT_NAME
Запустите скрипт:
После завершения, скрипт выведет AMI ID — запишите его, он понадобится для Terraform.
Создайте все следующие файлы (структуру)
Далее мы пройдемся по каждому файлу и контенту, который необходимо добавить в каждый из них:
Основной файл конфигурации, описывает все создаваемые ресурсы AWS: EC2-инстанс, Security Group, EBS-диски и Elastic IP. По умолчанию Security Group открывает только порты, необходимые для работы MikoPBX: SSH, HTTP/HTTPS, SIP и RTP.
Объявляет переменные с их типами, описанием и значениями по умолчанию. Сам по себе не содержит конкретных значений - только схему.
Определяет, какие данные Terraform выведет после успешного apply: URL веб-интерфейса, логин и пароль для первой авторизации. Удобно для быстрого получения нужных реквизитов без входа в консоль AWS.
Содержит конкретные значения переменных для вашего окружения: регион, AMI ID, тип инстанса и т.д. Именно этот файл меняется при переезде между окружениями (dev/staging/prod).
Убедитесь, что все 4 файла созданы, после этого выполните следующие команды:
После выполнения Вы получите следующий вывод:
Выполните следующую команду для планирования конфигурации:
После выполнения Вы увидите конфигурацию, который terraform увидел и собирается создавать. Проверьте все параметры и преступайте к выполнению следующей команды:
Далее введите yes для подтверждения. В случае успешного создания инстанса с MikoPBX, будут выведены необходимые параметры:
После успешного terraform apply:
Скопируйте URL из выходных значений
Откройте его в браузере: https://<URL>
Для входа используйте данные, выведеные при создании инфраструктуры.
⚠️ После входа обязательно настройте Firewall в MikoPBX.
⚠️ AMI и S3-бакет с образом не удаляются автоматически — их нужно удалить вручную через AWS Console или CLI, если они больше не нужны.
Причина: AMI существует в другом регионе.
Решение: убедитесь, что регион в terraform.tfvars совпадает с регионом, в котором запускался скрипт импорта.
Причина: роль vmimport не создана или не имеет нужных прав.
Решение: повторите .
Причина: повреждённый .raw-файл или неправильный формат.
Решение: проверьте, что скачан оригинальный образ, и укажите правильное имя файла в DEFAULT_IMAGE.
Импорт большого образа может занять 10–30 минут. Скрипт автоматически ожидает завершения, опрашивая статус каждые 30 секунд.
Не забудьте настроить firewall в MikoPBX после первой авторизации в систему! Подробнее - здесь.






aws configure
# AWS Access Key ID: ваш_ключ
# AWS Secret Access Key: ваш_секретный_ключ
# Default region name: us-southeast-1 (Ваш регион)
# Default output format: json{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "vmie.amazonaws.com" },
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": { "sts:Externalid": "vmimport" }
}
}
]
}{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::mikopbx-bucket",
"arn:aws:s3:::mikopbx-bucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:ModifySnapshotAttribute",
"ec2:CopySnapshot",
"ec2:RegisterImage",
"ec2:Describe*"
],
"Resource": "*"
}
]
}# Создать роль
aws iam create-role \
--role-name vmimport \
--assume-role-policy-document "file://trust-policy.json"# Привязать политику к роли
aws iam put-role-policy \
--role-name vmimport \
--policy-name vmimport \
--policy-document "file://role-policy.json"#!/bin/bash
# -----------------------------------------------
# Настройки — измените под ваши значения
# -----------------------------------------------
DEFAULT_IMAGE="mikopbx-2026.1.223-x86_64.raw"
DEFAULT_BUCKET="mikopbx-bucket"
DEFAULT_DESCRIPTION="MikoPBX PBX on Asterisk"
DEFAULT_NAME="MikoPBX 2026.1.223"
# Переопределение через переменные окружения (опционально)
IMAGE="${IMAGE:-$DEFAULT_IMAGE}"
BUCKET="${BUCKET:-$DEFAULT_BUCKET}"
DESCRIPTION="${DESCRIPTION:-$DEFAULT_DESCRIPTION}"
NAME="${NAME:-$DEFAULT_NAME}"
# -----------------------------------------------
# Импорт снапшота из S3
# -----------------------------------------------
JSON_FILE="disk_container.json"
cat <<EOF > ${JSON_FILE}
{
"Description": "${DESCRIPTION} image",
"Format": "raw",
"UserBucket": {
"S3Bucket": "${BUCKET}",
"S3Key": "${IMAGE}"
}
}
EOF
echo "Запуск импорта снапшота..."
IMPORT_TASK_ID=$(aws ec2 import-snapshot \
--description "${DESCRIPTION} image" \
--disk-container "file://${JSON_FILE}" \
--query 'ImportTaskId' \
--output text)
echo "Задача импорта запущена: $IMPORT_TASK_ID"
# Ожидание завершения импорта
while true; do
STATUS=$(aws ec2 describe-import-snapshot-tasks \
--import-task-ids "$IMPORT_TASK_ID" \
--query 'ImportSnapshotTasks[0].SnapshotTaskDetail.Status' \
--output text)
echo "Статус: $STATUS"
if [ "$STATUS" == "completed" ]; then
break
elif [ "$STATUS" == "error" ]; then
echo "Ошибка импорта!"
exit 1
fi
sleep 30
done
# Получение ID снапшота
SNAPSHOT_ID=$(aws ec2 describe-import-snapshot-tasks \
--import-task-ids "$IMPORT_TASK_ID" \
--query 'ImportSnapshotTasks[0].SnapshotTaskDetail.SnapshotId' \
--output text)
echo "Снапшот создан: $SNAPSHOT_ID"
# -----------------------------------------------
# Регистрация AMI из снапшота
# -----------------------------------------------
AMI_ID=$(aws ec2 register-image \
--name "$NAME" \
--description "$DESCRIPTION" \
--architecture x86_64 \
--sriov-net-support simple \
--virtualization-type hvm \
--ena-support \
--boot-mode uefi \
--root-device-name "/dev/sda1" \
--block-device-mappings "[
{\"DeviceName\": \"/dev/sda1\", \"Ebs\": {
\"DeleteOnTermination\": true,
\"VolumeSize\": 1,
\"SnapshotId\": \"$SNAPSHOT_ID\"
}},
{\"DeviceName\": \"/dev/sdb\", \"Ebs\": {\"VolumeSize\": 50}}
]" \
--query 'ImageId' \
--output text)
echo ""
echo "=========================================="
echo "AMI успешно создан: $AMI_ID"
echo "Используйте этот ID в terraform.tfvars:"
echo " custom_ami_id = \"$AMI_ID\""
echo "=========================================="
# Удаление временного файла
rm -f "$JSON_FILE"sh import-image.sh==========================================
AMI успешно создан: ami-0c8820696110d0613
Используйте этот ID в terraform.tfvars:
custom_ami_id = "ami-0c8820696110d0613"
==========================================mikopbx-aws-custom/
├── main.tf
├── variables.tf
├── outputs.tf
├── terraform.tfvarsterraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
required_version = ">= 1.3.0"
}
provider "aws" {
region = var.aws_region
}
# --------------------------------------------------
# Security Group
# --------------------------------------------------
resource "aws_security_group" "mikopbx_sg" {
name = "${var.instance_name}-sg"
description = "Security group for MikoPBX"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = [var.allowed_ssh_cidr]
description = "SSH"
}
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
description = "HTTPS web UI"
}
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
description = "HTTP"
}
ingress {
from_port = 5060
to_port = 5060
protocol = "udp"
cidr_blocks = ["0.0.0.0/0"]
description = "SIP UDP"
}
ingress {
from_port = 5060
to_port = 5060
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
description = "SIP TCP"
}
ingress {
from_port = 10000
to_port = 10200
protocol = "udp"
cidr_blocks = ["0.0.0.0/0"]
description = "RTP media"
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "${var.instance_name}-sg"
}
}
# --------------------------------------------------
# SSH Key Pair (опционально)
# --------------------------------------------------
resource "aws_key_pair" "mikopbx_key" {
count = var.create_key_pair ? 1 : 0
key_name = "${var.instance_name}-key"
public_key = file(pathexpand(var.public_key_path))
}
# --------------------------------------------------
# EC2 Instance с кастомным AMI
# --------------------------------------------------
resource "aws_instance" "mikopbx" {
# Используем AMI, созданный скриптом import-image.sh
ami = var.custom_ami_id
instance_type = var.instance_type
key_name = var.create_key_pair ? aws_key_pair.mikopbx_key[0].key_name : var.existing_key_pair_name
vpc_security_group_ids = [aws_security_group.mikopbx_sg.id]
# Системный диск (1 ГБ)
root_block_device {
volume_size = 1
volume_type = "gp3"
}
tags = {
Name = var.instance_name
}
}
# --------------------------------------------------
# Диск для записей звонков (50+ ГБ)
# --------------------------------------------------
resource "aws_ebs_volume" "mikopbx_storage" {
availability_zone = aws_instance.mikopbx.availability_zone
size = var.storage_disk_size
type = "gp3"
tags = {
Name = "${var.instance_name}-storage"
}
}
resource "aws_volume_attachment" "storage_attach" {
device_name = "/dev/sdc"
volume_id = aws_ebs_volume.mikopbx_storage.id
instance_id = aws_instance.mikopbx.id
}
# --------------------------------------------------
# Elastic IP
# --------------------------------------------------
resource "aws_eip" "mikopbx_eip" {
instance = aws_instance.mikopbx.id
domain = "vpc"
tags = {
Name = "${var.instance_name}-eip"
}
}variable "aws_region" {
description = "AWS регион"
type = string
default = "us-east-1"
}
variable "custom_ami_id" {
description = "ID кастомного AMI, созданного скриптом import-image.sh"
type = string
# Значение обязательно передать через terraform.tfvars
}
variable "instance_name" {
description = "Имя EC2-инстанса"
type = string
default = "mikopbx-vm"
}
variable "instance_type" {
description = "Тип EC2-инстанса"
type = string
default = "t3.micro"
}
variable "storage_disk_size" {
description = "Размер диска для записей (ГБ)"
type = number
default = 50
}
variable "allowed_ssh_cidr" {
description = "CIDR для SSH-доступа"
type = string
default = "0.0.0.0/0"
}
variable "create_key_pair" {
description = "Создать SSH Key Pair (true) или использовать существующую (false)"
type = bool
default = true
}
variable "public_key_path" {
description = "Путь к публичному SSH-ключу"
type = string
default = "~/.ssh/id_rsa.pub"
}
variable "existing_key_pair_name" {
description = "Имя существующей Key Pair (если create_key_pair = false)"
type = string
default = ""
}output "first_login" {
description = "Данные для первого входа в веб-интерфейс MikoPBX"
value = <<-EOT
======================================
MikoPBX готова к работе!
======================================
URL: https://${aws_eip.mikopbx_eip.public_ip}
Логин: admin
Пароль: ${aws_instance.mikopbx.id}
======================================
EOT
}aws_region = "ap-southeast-1"
custom_ami_id = "ami-0c8820696110d0613" # <- ID из скрипта import-image.sh
instance_name = "mikopbx-vm"
instance_type = "t3.micro"
storage_disk_size = 50
allowed_ssh_cidr = "0.0.0.0/0"
create_key_pair = true
public_key_path = "~/.ssh/id_rsa.pub"cd mikopbx-aws-custom #Перейдите в директорию с созданными файлами
terraform initTerraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.terraform planterraform apply======================================
MikoPBX готов к работе!
======================================
URL: https://52.221.99.139
Логин: admin
Пароль: i-007352c23fa6d3b01
======================================terraform destroy# Удалить AMI
aws ec2 deregister-image --image-id ami-0a1b2c3d4e5f67890
# Удалить снапшот (ID можно найти в AWS Console → EC2 → Snapshots)
aws ec2 delete-snapshot --snapshot-id snap-xxxxxxxxxxxxxxxxx
# Удалить файл из S3
aws s3 rm s3://mikopbx-bucket/mikopbx-2026.1.223-x86_64.raw
# Удалить бакет (если пустой)
aws s3 rb s3://mikopbx-bucketError: InvalidAMIID.NotFound: The image id 'ami-xxxx' does not existError: OptInRequiredСтатус: error
Ошибка импорта!Инструкция с примерами по созданию и использованию API-ключей
Работа с REST API построена по стандарту OpenAPI. Для получения актуального списка эндпоинтов используйте раздел «Документация» внутри АТС. Ниже приведены примеры работы с основными возможностями REST интерфейса MikoPBX.
Для выполнения всех примеров из этой инструкции создайте API-ключ и настройте следующие права доступа (подробнее в ):
В этой статье, мы будем работать с Python, поэтому необходимо установить необходимые зависимости:
Ниже приведён шаблон подключения к станции через API-ключ. Используйте его перед всеми скриптами из этой инструкции. API-ключ передаётся напрямую в заголовке запроса — никакой дополнительной аутентификации не требуется:
Эндпоинт: POST /pbxcore/api/v3/employees
Ниже приведена таблица с параметрами для такого запроса.
Пример ответа API (HTTP 201):
Возможные коды ответов:
В случае успешного выполнения запроса вы увидите следующий вывод в консоль:
На станции будут созданы сотрудники 243 и 244.
В случае успешного выполнения запроса Вы увидите следующий вывод в консоль:
В случае успешного выполнения запроса вы увидите следующий вывод в консоль:
На станции будут создано 3 сотрудника.
Эндпоинт: POST /pbxcore/api/v3/sip-providers
В случае успешного выполнения запроса вы увидите следующий вывод в консоль:
На станции будет создан провайдер:
В случае успешного выполнения запроса вы увидите следующий вывод в консоль:
Эндпоинт: GET /pbxcore/api/v3/cdr — только чтение.
В случае успешного выполнения запроса вы увидите следующий вывод в консоль:
В случае успешного выполнения запроса вы увидите следующий вывод в консоль:
Эндпоинты: GET /pbxcore/api/v3/sip , GET /pbxcore/api/v3/sip-providers
В случае успешного выполнения запроса вы увидите следующий вывод в консоль:
Статусы сотрудников (поле status)
Статусы провайдеров (поле state)
Эндпоинт: GET /pbxcore/api/v3/pbx-status
В случае успешного выполнения запроса вы увидите следующий вывод в консоль:
Полный список эндпоинтов и интерактивная документация — в разделе
Employees Management
Чтение и запись
Создание и редактирование сотрудников
Providers
Чтение и запись
Создание и редактирование провайдеров
SIP
Чтение
Статусы регистрации сотрудников и транков
Call Records
Чтение
История звонков (CDR)
PBX Status
Чтение
Активные звонки в реальном времени
SIP Providers
Чтение и запись
Создание и редактирование SIP провайдеров
pip install requestsimport requests
BASE_URL = 'https://your-mikopbx.com/pbxcore/api/v3'
API_KEY = 'ваш-api-ключ'
HEADERS = {
'Authorization': f'Bearer {API_KEY}',
'Content-Type': 'application/json',
}number
✅
string, 2–8 цифр
Добавочный номер
def create_employee(
number: str,
name: str,
sip_secret: str,
email: str = '',
mobile: str = '',
record_calls: bool = True,
fwd_ringlength: int = 45,
) -> dict:
payload = {
'number': number,
'user_username': name,
'sip_secret': sip_secret,
'sip_enableRecording': record_calls,
'fwd_ringlength': fwd_ringlength,
}
if email: payload['user_email'] = email
if mobile: payload['mobile_number'] = mobile
r = requests.post(f'{BASE_URL}/employees', headers=HEADERS, json=payload)
result = r.json()
if result.get('result'):
print(f" Создан: {number} ({name}), id={result['data']['id']}")
else:
print(f" Ошибка: {result.get('messages', {}).get('error', [])}")
return result
# Минимальный пример (только обязательные поля)
create_employee(
number='243',
name='Иванов Иван',
sip_secret='Secure#Pass9201',
)
# Полный пример
create_employee(
number='244',
name='Петрова Анна',
sip_secret='Secure#Pass9202',
email='anna@company.ru',
mobile='79001234567',
record_calls=True,
fwd_ringlength=30,
){
"result": true,
"data": {
"number": "201",
"user_username": "Иванов Иван",
"sip_secret": "Secure#Pass9201",
"sip_dtmfmode": "auto",
"sip_transport": "udp",
"sip_enableRecording": true,
"sip_networkfilterid": "none",
"fwd_ringlength": 45,
"id": "1",
"extensions_length": 3
},
"messages": {"error": [], "info": [], "warning": []}
}201
Сотрудник успешно создан
400
Ошибка валидации (слабый пароль <5 символов, неверный формат номера)
401
Создан: 243 (Иванов Иван), id=113
Создан: 244 (Петрова Анна), id=114
Process finished with exit code 0def list_employees(search: str = '', limit: int = 100, offset: int = 0) -> list:
params = {'limit': limit, 'offset': offset}
if search: params['search'] = search
r = requests.get(f'{BASE_URL}/employees', headers=HEADERS, params=params)
return r.json().get('data', {}).get('data', [])
for emp in list_employees():
print(f" {emp.get('number'):>6} {emp.get('user_username', '')}") 202 Brown Brandon
203 Collins Melanie
201 Smith James
243 Иванов Иван
244 Петрова Анна
Process finished with exit code 0import time
employees = [
{'number': '251', 'name': 'Иванов Иван', 'secret': 'Pass#9201'},
{'number': '252', 'name': 'Петрова Анна', 'secret': 'Pass#9202'},
{'number': '253', 'name': 'Сидоров Пётр', 'secret': 'Pass#9203'},
]
created, failed = [], []
for emp in employees:
r = requests.post(
f'{BASE_URL}/employees',
headers=HEADERS,
json={
'number': emp['number'],
'user_username': emp['name'],
'sip_secret': emp['secret'],
}
)
result = r.json()
if result.get('result'):
created.append(emp['number'])
print(f" {emp['number']} {emp['name']}")
else:
failed.append(emp['number'])
print(f" {emp['number']}: {result.get('messages', {}).get('error', [])}")
time.sleep(0.2) # небольшая пауза между запросами
print(f'Создано: {len(created)}, Ошибок: {len(failed)}') 251 Иванов Иван
252 Петрова Анна
253 Сидоров Пётр
Создано: 3, Ошибок: 0
Process finished with exit code 0description
✅
string
Название провайдера
def create_sip_provider(
description: str,
host: str,
username: str = '',
password: str = '',
registration_type: str = 'outbound',
qualify: bool = True,
) -> dict:
payload = {
'description': description,
'host': host,
}
if username: payload['username'] = username
if password: payload['secret'] = password
if registration_type: payload['registration_type'] = registration_type
if not qualify: payload['qualify'] = qualify
r = requests.post(f'{BASE_URL}/sip-providers', headers=HEADERS, json=payload)
result = r.json()
if result.get('result'):
print(f" Провайдер создан: {description}")
else:
print(f" Ошибка: {result.get('messages', {}).get('error', [])}")
return result
create_sip_provider(
description='Zadarma',
host='sip.zadarma.com',
username='316811',
password='mysecretpass',
) Провайдер создан: Zadarma
Process finished with exit code 0def list_providers() -> list:
r = requests.get(f'{BASE_URL}/sip-providers', headers=HEADERS)
return r.json().get('data', [])
for prov in list_providers():
print(f" {prov.get('id'):<20} {prov.get('description', '')} [{prov.get('type', '')}]") SIP-TRUNK-34F7CAFE [SIP]
SIP-TRUNK-7B5977ED [SIP]
Process finished with exit code 0offset
integer
Смещение для пагинации (по умолч.: 0)
limit
integer
from datetime import datetime, timedelta
def get_cdr(
offset: int = 0,
limit: int = 20,
date_from: str = None,
date_to: str = None,
src_num: str = None,
dst_num: str = None,
disposition: str = None,
) -> list:
params = {'offset': offset, 'limit': min(limit, 100)}
if date_from: params['dateFrom'] = date_from
if date_to: params['dateTo'] = date_to
if src_num: params['src_num'] = src_num
if dst_num: params['dst_num'] = dst_num
if disposition: params['disposition'] = disposition
r = requests.get(f'{BASE_URL}/cdr', headers=HEADERS, params=params)
return r.json().get('data', {}).get('records', [])
now = datetime.now()
then = now - timedelta(days=7)
for row in get_cdr(
date_from=then.strftime('%Y-%m-%dT%H:%M:%S'),
date_to=now.strftime('%Y-%m-%dT%H:%M:%S'),
):
print(
str(row.get('start', ''))[:16],
row.get('src_num', ''), '→', row.get('dst_num', ''),
row.get('disposition', ''), row.get('totalBillsec', 0), 'с'
)2026-03-17 13:30 252 → 202 ANSWERED 48 с
2026-03-17 13:30 243 → 252 BUSY 0 с
2026-03-17 13:30 243 → 89161111111 CHANUNAVAIL 0 с
2026-03-17 13:29 202 → 243 NOANSWER 0 с
2026-03-17 13:29 202 → 202 ANSWERED 2 с
2026-03-17 13:29 202 → 243 NOANSWER 0 с
2026-03-17 13:29 202 → 10003246 NOANSWER 0 с
2026-03-17 13:28 202 → 243 NOANSWER 0 с
Process finished with exit code 0def cdr_stats(days: int = 1) -> dict:
now = datetime.now()
then = now - timedelta(days=days)
records = get_cdr(
date_from=then.strftime('%Y-%m-%dT%H:%M:%S'),
date_to=now.strftime('%Y-%m-%dT%H:%M:%S'),
limit=100
)
answered = [r for r in records if r.get('disposition') == 'ANSWERED']
missed = [r for r in records if r.get('disposition') in ('NO ANSWER', 'NOANSWER')]
total_dur = sum(r.get('totalBillsec', 0) for r in answered)
return {
'total': len(records),
'answered': len(answered),
'missed': len(missed),
'avg_sec': total_dur // len(answered) if answered else 0,
}
stats = cdr_stats(days=7)
print(f"Звонков за 7 дней: {stats['total']}")
print(f"Отвечено: {stats['answered']}")
print(f"Пропущено: {stats['missed']}")
print(f"Средняя длит.: {stats['avg_sec']}с")Звонков за 7 дней: 13
Отвечено: 2
Пропущено: 5
Средняя длит.: 25с
Process finished with exit code 0linkedid
string
Уникальный идентификатор звонка
start
datetime
from datetime import datetime
def show_employees():
r = requests.get(f'{BASE_URL}/sip:getStatuses', headers=HEADERS)
peers = r.json().get('data', {})
for number, info in peers.items():
icon = '🟢' if info.get('status') == 'Available' else '🔴'
print(f" {icon} {number:>6} {info.get('callerid', '')} [{info.get('status', '')}]")
def show_providers():
r = requests.get(f'{BASE_URL}/sip-providers:getStatuses', headers=HEADERS)
providers = r.json().get('data', {}).get('sip', {})
for prov_id, info in providers.items():
icon = '🟢' if info.get('state') == 'registered' else '🔴'
print(f" {icon} {info.get('description', prov_id):>20} {info.get('username', '')}@{info.get('host', '')} [{info.get('state', '')}]")
if __name__ == '__main__':
print(f'MikoPBX Monitor [{datetime.now().strftime("%Y-%m-%d %H:%M:%S")}]')
print('\n── Сотрудники ──────────────────────────────')
show_employees()
print('\n── Провайдеры ───────────────────────────────')
show_providers()MikoPBX Monitor [2026-03-17 16:47:35]
── Сотрудники ──────────────────────────────
🔴 201 Smith James [Unavailable]
🟢 202 Brown Brandon [Available]
🔴 203 Collins Melanie [Unavailable]
🔴 243 Иванов Иван [Unavailable]
🟢 244 Петрова Анна [Available]
🔴 251 Иванов Иван [Unavailable]
🟢 252 Петрова Анна [Available]
🔴 253 Сидоров Пeтр [Unavailable]
── Провайдеры ───────────────────────────────
🔴 Demo provider SIP-PROVIDER-122642725b9265fd7151c@demo.askozia.ru [rejected]
🟢 Zadarma 316811@sip.zadarma.com [registered]
Process finished with exit code 0Available
Зарегистрирован и доступен
Unavailable
Не зарегистрирован (оффлайн)
registered
Зарегистрирован на сервере провайдера
rejected
Регистрация отклонена сервером
unregistered
def get_active_calls() -> list:
r = requests.get(f'{BASE_URL}/pbx-status:getActiveCalls', headers=HEADERS)
return r.json().get('data', [])
calls = get_active_calls()
print(f'Активных звонков: {len(calls)}')
for call in calls:
print(f" {call.get('src_num', '?')} → {call.get('dst_num', '?')} [{call.get('src_name', '')} → {call.get('dst_name', '')}]")Активных звонков: 1
243 → 252 [Иванов Иван → Петрова Анна]
Process finished with exit code 0import urllib3
urllib3.disable_warnings()user_username
✅
string, 1–100 символов
ФИО сотрудника
sip_secret
✅
string, 5–100 символов
Пароль SIP-аккаунта
user_email
—
string email, ≤255
Email для уведомлений
mobile_number
—
string E.164, ≤50
Мобильный (+7...) для переадресации
mobile_dialstring
—
string, ≤255
Строка набора мобильного
sip_transport
—
udp / tcp / tls / udp,tcp
Транспорт SIP (по умолч.: udp)
sip_dtmfmode
—
auto / rfc4733 / inband / info
Режим DTMF (по умолч.: auto)
sip_enableRecording
—
boolean
Запись разговоров (по умолч.: true)
sip_networkfilterid
—
number | "none"
ID сетевого фильтра
sip_manualattributes
—
string, ≤1024
Дополнительные SIP-параметры
fwd_ringlength
—
integer, ≤180
Время дозвона до переадресации (сек, по умолч.: 45)
fwd_forwarding
—
number | hangup | busy
Безусловная переадресация
fwd_forwardingonbusy
—
number | hangup | busy
Переадресация при занятости
fwd_forwardingonunavailable
—
number | hangup | busy
Переадресация при недоступности
Неверный или отсутствующий API-ключ
403
Нет прав на запись для ресурса /employees
409
Конфликт — номер уже занят
host
✅
string
Адрес SIP-сервера провайдера
username
—
string
Логин на сервере провайдера
secret
—
string
Пароль
registration_type
—
string
inbound / outbound / none
qualify
—
boolean
Мониторинг доступности (по умолч.: true)
transport
—
string
udp / tcp / tls / udp,tcp (по умолч.: udp,tcp)
dtmfmode
—
string
auto / rfc4733 / inband / info (по умолч.: auto)
port
—
integer
Порт подключения (по умолч.: 5060)
disabled
—
boolean
Отключить провайдера (по умолч.: false)
Кол-во записей, макс. 100
dateFrom
string
Начало периода: %Y-%m-%dT%H:%M:%S
dateTo
string
Конец периода: %Y-%m-%dT%H:%M:%S
src_num
string
Фильтр по номеру звонящего
dst_num
string
Фильтр по номеру назначения
disposition
string
ANSWERED / NO ANSWER / BUSY / FAILED
Время начала звонка
src_num
string
Номер звонящего
src_name
string
Имя звонящего
dst_num
string
Номер назначения
dst_name
string
Имя вызываемого
disposition
string
ANSWERED / NO ANSWER / NOANSWER / BUSY / CHANUNAVAIL / FAILED
totalBillsec
integer
Длительность разговора (секунды)
totalDuration
integer
Полная длительность (включая дозвон)
records
array
Детальные записи по каждому плечу звонка
records[].recordingfile
string
Путь к файлу записи
records[].playback_url
string
URL для воспроизведения записи
records[].download_url
string
URL для скачивания записи
records[].dtmf_digits
string
DTMF цифры, нажатые в IVR
Не зарегистрирован




Описание документации и таблицы эндпоинтов для работы с REST API в MikoPBX
Работа с REST API MikoPBX построена по стандарту OpenAPI. Интерактивная документация встроена прямо в АТС и всегда содержит актуальный список эндпоинтов, параметров и схем для вашей версии системы.
Перейдите в раздел «Система» → «API ключи».
Нажмите кнопку «Документация API».
Документация построена на базе стандарта OpenAPI и предоставляет полное описание всех эндпоинтов REST API MikoPBX.
Навигация по эндпоинтам — в левой панели все эндпоинты сгруппированы по разделам.
Для каждого эндпоинта отображается краткое описание, метод запроса (GET, POST, PUT, PATCH, DELETE), endpoint с подставленым адресом АТС. Ниже отображаются все доступные параметры запроса.
Примеры кода — для каждого эндпоинта доступны готовые примеры запросов на разных языках. Переключатель находится под панелью параметров — по умолчанию показывается Shell / cURL, доступны также и другие языки (нажмите на название языка для его смены - в этой инструкции Python 3).
Ниже находится пример ответа сервера.
Выполнение запросов онлайн — документация позволяет отправлять реальные запросы прямо из браузера и получать ответы от вашей АТС. Сервер определяется автоматически по адресу текущей страницы.
Внизу страницы Вы найдете возможные номера ответов на запрос и краткое пояснение к ним. Так же будут отображены все параметры тела выбранного ответа.
Базовый префикс всех путей:
/pbxcore/api/v3
— экспорт решений о блокировке для внешних bouncer'ов (CrowdSec-совместимый формат). Доступен с MikoPBX 2026.1.76.
GET
/employees
Получить список сотрудников
POST
/employees
GET
/extensions
Получить список добавочных номеров
GET
/extensions/{id}
GET
/sip-providers
Получить список SIP провайдеров
POST
/sip-providers
GET
/iax-providers
Получить список IAX провайдеров
POST
/iax-providers
GET
/providers
Получить список всех провайдеров
GET
/providers/{id}
GET
/call-queues
Получить список очередей
POST
/call-queues
GET
/ivr-menu
Получить список IVR меню
POST
/ivr-menu
GET
/incoming-routes
Получить список входящих маршрутов
POST
/incoming-routes
GET
/outbound-routes
Получить список исходящих маршрутов
POST
/outbound-routes
GET
/off-work-times
Получить список временных условий
POST
/off-work-times
GET
/conference-rooms
Получить список конференц-комнат
POST
/conference-rooms
GET
/dialplan-applications
Получить список dialplan приложений
POST
/dialplan-applications
GET
/sound-files
Получить список звуковых файлов
POST
/sound-files
GET
/custom-files
Получить список пользовательских файлов
POST
/custom-files
GET
/pbx-status:getActiveCalls
Получить активные вызовы
GET
/pbx-status:getActiveChannels
GET
/sip:getStatuses
Получить статусы всех SIP устройств
GET
/sip:getPeersStatuses
GET
/sip-providers:getStatuses
Получить статусы всех SIP провайдеров
GET
/sip-providers/{id}:getStatus
GET
/iax-providers:getStatuses
Получить статусы всех IAX провайдеров
GET
/iax-providers/{id}:getStatus
GET
/providers:getStatuses
Получить статусы всех провайдеров
GET
/providers/{id}:getStatus
GET
/cdr
Получить список CDR записей
GET
/cdr/{id}
GET
/advice:getList
Получить список системных уведомлений
GET
/advice:refresh
POST
/auth:login
Войти в систему (логин/пароль)
POST
/auth:refresh
GET
/api-keys
Получить список API ключей
POST
/api-keys
GET
/asterisk-managers
Получить список AMI пользователей
POST
/asterisk-managers
GET
/asterisk-rest-users
Получить список ARI пользователей
POST
/asterisk-rest-users
GET
/passkeys
Получить список passkeys
POST
/passkeys
GET
/passwords:generate
Сгенерировать пароль
POST
/passwords:validate
GET
/users:available
Проверить доступность email
GET
/network-filters
Получить список сетевых фильтров
GET
/network-filters/{id}
GET
/system:ping
Проверить доступность системы
GET
GET
/general-settings
Получить общие настройки
PUT
/general-settings
GET
/network
Получить список сетевых интерфейсов
GET
/network/{id}
GET
/firewall
Получить список правил файервола
POST
/firewall
GET
/fail2ban
Получить настройки Fail2Ban
PUT
/fail2ban
GET
/time-settings:getAvailableTimezones
Получить список доступных часовых поясов
GET
/mail-settings
Получить настройки почты
PUT
/mail-settings
GET
/storage:usage
Получить статистику использования хранилища
GET
/storage:list
GET
/s3-storage
Получить конфигурацию S3 хранилища
PUT
/s3-storage
GET
/modules
Получить список модулей
POST
GET
/license:getLicenseInfo
Получить информацию о лицензии
GET
/license:ping
GET
/files/{id}
Получить содержимое файла
PUT
/files/{id}
GET
/sysinfo:getInfo
Получить системную информацию
GET
/sysinfo:getExternalIpInfo
GET
/syslog:getLogsList
Получить список лог файлов
POST
/syslog:getLogFromFile
GET
/openapi:getSpecification
Получить OpenAPI спецификацию
GET
/openapi:getAclRules
GET
/search:getSearchItems
Глобальный поиск
GET
/wiki-links:getLink
Получить ссылку на документацию
POST
/user-page-tracker:pageView
Зафиксировать просмотр страницы
POST
/user-page-tracker:pageLeave


Создать нового сотрудника
GET
/employees/{id}
Получить сотрудника по ID
PUT
/employees/{id}
Обновить сотрудника
PATCH
/employees/{id}
Частично обновить сотрудника
DELETE
/employees/{id}
Удалить сотрудника
GET
/employees:getDefault
Получить значения по умолчанию
POST
/employees:batchCreate
Массовое создание сотрудников
POST
/employees:batchDelete
Массовое удаление сотрудников
POST
/employees:import
Импортировать сотрудников (предпросмотр)
POST
/employees:confirmImport
Подтвердить импорт
POST
/employees:export
Экспортировать сотрудников
POST
/employees:exportTemplate
Экспортировать шаблон
Получить добавочный номер по ID
POST
/extensions:available
Проверить доступность номера
GET
/extensions:getForSelect
Получить добавочные для выпадающего списка
POST
/extensions/{id}:getPhoneRepresent
Получить представление телефона
POST
/extensions:getPhonesRepresent
Получить представление телефонов
Создать SIP провайдера
GET
/sip-providers/{id}
Получить SIP провайдера по ID
PUT
/sip-providers/{id}
Обновить SIP провайдера
PATCH
/sip-providers/{id}
Частично обновить SIP провайдера
DELETE
/sip-providers/{id}
Удалить SIP провайдера
GET
/sip-providers/{id}:copy
Скопировать SIP провайдера
GET
/sip-providers:getDefault
Получить шаблон SIP провайдера
Создать IAX провайдера
GET
/iax-providers/{id}
Получить IAX провайдера по ID
PUT
/iax-providers/{id}
Обновить IAX провайдера
PATCH
/iax-providers/{id}
Частично обновить IAX провайдера
DELETE
/iax-providers/{id}
Удалить IAX провайдера
GET
/iax-providers/{id}:copy
Скопировать IAX провайдера
GET
/iax-providers:getDefault
Получить шаблон IAX провайдера
Получить провайдера по ID
GET
/providers:getForSelect
Получить провайдеров для выпадающего списка
Создать новую очередь
GET
/call-queues/{id}
Получить очередь по ID
PUT
/call-queues/{id}
Обновить очередь
PATCH
/call-queues/{id}
Частично обновить очередь
DELETE
/call-queues/{id}
Удалить очередь
GET
/call-queues/{id}:copy
Копировать очередь
GET
/call-queues:getDefault
Получить значения по умолчанию
Создать новое IVR меню
GET
/ivr-menu/{id}
Получить IVR меню по ID
PUT
/ivr-menu/{id}
Обновить IVR меню
PATCH
/ivr-menu/{id}
Частично обновить IVR меню
DELETE
/ivr-menu/{id}
Удалить IVR меню
GET
/ivr-menu/{id}:copy
Копировать IVR меню
GET
/ivr-menu:getDefault
Получить значения по умолчанию
Создать входящий маршрут
GET
/incoming-routes/{id}
Получить входящий маршрут по ID
PUT
/incoming-routes/{id}
Обновить входящий маршрут
PATCH
/incoming-routes/{id}
Частично обновить входящий маршрут
DELETE
/incoming-routes/{id}
Удалить входящий маршрут
POST
/incoming-routes/{id}:copy
Копировать входящий маршрут
GET
/incoming-routes:getDefault
Получить значения по умолчанию
GET
/incoming-routes:getDefaultRoute
Получить маршрут по умолчанию
POST
/incoming-routes:changePriority
Изменить приоритет маршрутов
Создать исходящий маршрут
GET
/outbound-routes/{id}
Получить исходящий маршрут по ID
PUT
/outbound-routes/{id}
Обновить исходящий маршрут
PATCH
/outbound-routes/{id}
Частично обновить исходящий маршрут
DELETE
/outbound-routes/{id}
Удалить исходящий маршрут
GET
/outbound-routes/{id}:copy
Копировать исходящий маршрут
GET
/outbound-routes:getDefault
Получить значения по умолчанию
POST
/outbound-routes:changePriority
Изменить приоритет маршрутов
Создать временное условие
GET
/off-work-times/{id}
Получить временное условие по ID
PUT
/off-work-times/{id}
Обновить временное условие
PATCH
/off-work-times/{id}
Частично обновить временное условие
DELETE
/off-work-times/{id}
Удалить временное условие
GET
/off-work-times/{id}:copy
Копировать временное условие
GET
/off-work-times:getDefault
Получить значения по умолчанию
POST
/off-work-times:changePriorities
Изменить приоритеты условий
Создать конференц-комнату
GET
/conference-rooms/{id}
Получить конференц-комнату по ID
PUT
/conference-rooms/{id}
Обновить конференц-комнату
PATCH
/conference-rooms/{id}
Частично обновить конференц-комнату
DELETE
/conference-rooms/{id}
Удалить конференц-комнату
GET
/conference-rooms:getDefault
Получить шаблон конференц-комнаты
Создать dialplan приложение
GET
/dialplan-applications/{id}
Получить dialplan приложение по ID
PUT
/dialplan-applications/{id}
Обновить dialplan приложение
PATCH
/dialplan-applications/{id}
Частично обновить dialplan приложение
DELETE
/dialplan-applications/{id}
Удалить dialplan приложение
GET
/dialplan-applications/{id}:copy
Скопировать dialplan приложение
GET
/dialplan-applications:getDefault
Получить шаблон dialplan приложения
Создать звуковой файл
GET
/sound-files/{id}
Получить звуковой файл по ID
PUT
/sound-files/{id}
Обновить звуковой файл
PATCH
/sound-files/{id}
Частично обновить звуковой файл
DELETE
/sound-files/{id}
Удалить звуковой файл
GET
/sound-files:getDefault
Получить значения по умолчанию
GET
/sound-files:getForSelect
Получить для выпадающего списка
GET
/sound-files:playback
Воспроизвести звуковой файл
POST
/sound-files:uploadFile
Загрузить звуковой файл
POST
/sound-files:convertAudioFile
Конвертировать аудио файл
Создать новый пользовательский файл
GET
/custom-files/{id}
Получить пользовательский файл по ID
PUT
/custom-files/{id}
Обновить пользовательский файл
PATCH
/custom-files/{id}
Частично обновить пользовательский файл
DELETE
/custom-files/{id}
Удалить пользовательский файл
GET
/custom-files:getDefault
Получить значения по умолчанию
Получить активные каналы
Получить статусы SIP peers (legacy)
GET
/sip:getRegistry
Получить статус регистрации (legacy)
POST
/sip:processAuthFailures
Обработать ошибки аутентификации
GET
/sip/{id}:getStatus
Получить статус SIP устройства
GET
/sip/{id}:getStats
Получить статистику SIP устройства
GET
/sip/{id}:getHistory
Получить историю подключений
GET
/sip/{id}:getSecret
Получить SIP пароль
GET
/sip/{id}:getAuthFailureStats
Получить статистику ошибок аутентификации
POST
/sip/{id}:clearAuthFailureStats
Очистить статистику ошибок
POST
/sip/{id}:forceCheck
Принудительно проверить статус
Получить статус SIP провайдера
GET
/sip-providers/{id}:getHistory
Получить историю подключений
GET
/sip-providers/{id}:getStats
Получить статистику SIP провайдера
POST
/sip-providers/{id}:forceCheck
Принудительно проверить регистрацию
POST
/sip-providers/{id}:updateStatus
Обновить статус провайдера
Получить статус IAX провайдера
GET
/iax-providers/{id}:getHistory
Получить историю подключений
GET
/iax-providers/{id}:getStats
Получить статистику IAX провайдеров
POST
/iax-providers/{id}:forceCheck
Принудительно проверить регистрацию
POST
/iax-providers/{id}:updateStatus
Обновить статус провайдера
GET
/iax:getRegistry
Получить статус регистрации IAX провайдеров
Получить статус провайдера
GET
/providers/{id}:getHistory
Получить историю провайдера
GET
/providers/{id}:getStats
Получить статистику провайдера
POST
/providers/{id}:updateStatus
Обновить статус провайдера
Получить CDR запись по ID
DELETE
/cdr/{id}
Удалить CDR запись
GET
/cdr:getMetadata
Получить метаданные CDR
GET
/cdr:playback
Воспроизвести запись разговора
GET
/cdr:download
Скачать запись разговора
Обновить кеш уведомлений
Обновить токен доступа
POST
/auth:logout
Выйти из системы
Создать новый API ключ
GET
/api-keys/{id}
Получить API ключ по ID
PUT
/api-keys/{id}
Обновить API ключ
PATCH
/api-keys/{id}
Частично обновить API ключ
DELETE
/api-keys/{id}
Удалить API ключ
GET
/api-keys:getDefault
Получить значения по умолчанию
POST
/api-keys:generateKey
Сгенерировать новый ключ
Создать нового AMI пользователя
GET
/asterisk-managers/{id}
Получить AMI пользователя по ID
PUT
/asterisk-managers/{id}
Обновить AMI пользователя
PATCH
/asterisk-managers/{id}
Частично обновить AMI пользователя
DELETE
/asterisk-managers/{id}
Удалить AMI пользователя
GET
/asterisk-managers/{id}:copy
Копировать AMI пользователя
GET
/asterisk-managers:getDefault
Получить значения по умолчанию
Создать нового ARI пользователя
GET
/asterisk-rest-users/{id}
Получить ARI пользователя по ID
PUT
/asterisk-rest-users/{id}
Обновить ARI пользователя
PATCH
/asterisk-rest-users/{id}
Частично обновить ARI пользователя
DELETE
/asterisk-rest-users/{id}
Удалить ARI пользователя
GET
/asterisk-rest-users:getDefault
Получить значения по умолчанию
Создать новый passkey
GET
/passkeys/{id}
Получить passkey по ID
PATCH
/passkeys/{id}
Обновить passkey
DELETE
/passkeys/{id}
Удалить passkey
GET
/passkeys:checkAvailability
Проверить наличие passkeys
GET
/passkeys:authenticationStart
Начать аутентификацию через passkey
POST
/passkeys:authenticationFinish
Завершить аутентификацию через passkey
POST
/passkeys:registrationStart
Начать регистрацию passkey
POST
/passkeys:registrationFinish
Завершить регистрацию passkey
Проверить надежность пароля
POST
/passwords:checkDictionary
Проверить пароль в словаре
POST
/passwords:batchValidate
Пакетная проверка паролей
POST
/passwords:batchCheckDictionary
Пакетная проверка словаря
Получить сетевой фильтр по ID
GET
/network-filters:getForSelect
Получить фильтры для выпадающего списка
/system:checkAuth
Проверить аутентификацию
GET
/system:datetime
Получить системное время
GET
/system:getAvailableLanguages
Получить доступные языки
GET
/system:checkForUpdates
Получить детальную информацию об обновлении
GET
/system:checkIfNewReleaseAvailable
Быстрая проверка наличия новой версии
GET
/system:getDeleteStatistics
Получить статистику удаления
POST
/system:reboot
Перезагрузить систему
POST
/system:shutdown
Выключить систему
POST
/system:upgrade
Обновить систему
POST
/system:restoreDefault
Восстановить настройки по умолчанию
POST
/system:changeLanguage
Изменить язык системы
POST
/system:convertAudioFile
Конвертировать аудиофайл
POST
/system:executeBashCommand
Выполнить bash команду
POST
/system:executeSqlRequest
Выполнить SQL запрос
POST
/system:updateMailSettings
Обновить настройки почты
Обновить общие настройки
PATCH
/general-settings
Частично обновить общие настройки
GET
/general-settings/{id}
Получить конкретную настройку
GET
/general-settings:getDefault
Получить значения по умолчанию
POST
/general-settings:updateCodecs
Обновить настройки кодеков
Получить сетевой интерфейс по ID
DELETE
/network/{id}
Удалить сетевой интерфейс
GET
/network:getConfig
Получить полную конфигурацию сети
GET
/network:getNatSettings
Получить настройки NAT
POST
/network:saveConfig
Сохранить конфигурацию сети
Создать правило файервола
GET
/firewall/{id}
Получить правило файервола по ID
PUT
/firewall/{id}
Обновить правило файервола
PATCH
/firewall/{id}
Частично обновить правило файервола
DELETE
/firewall/{id}
Удалить правило файервола
GET
/firewall:getDefault
Получить значения по умолчанию
GET
/firewall:getBannedIps
Получить список заблокированных IP
POST
/firewall:unbanIp
Разблокировать IP адрес
POST
/firewall:enable
Включить файервол
POST
/firewall:disable
Выключить файервол
Обновить настройки Fail2Ban
PATCH
/fail2ban
Частично обновить настройки Fail2Ban
Обновить настройки почты
PATCH
/mail-settings
Частично обновить настройки почты
DELETE
/mail-settings
Сбросить настройки почты
GET
/mail-settings:getDefault
Получить значения по умолчанию
GET
/mail-settings:getDiagnostics
Получить диагностику настроек почты
GET
/mail-settings:getOAuth2Url
Получить URL авторизации OAuth2
POST
/mail-settings:refreshToken
Обновить OAuth2 токен
POST
/mail-settings:testConnection
Проверить подключение к SMTP серверу
POST
/mail-settings:sendTestEmail
Отправить тестовое письмо
Получить список доступных устройств хранения
POST
/storage:mount
Смонтировать устройство хранения
POST
/storage:umount
Размонтировать устройство хранения
POST
/storage:mkfs
Форматировать устройство хранения
POST
/storage:statusMkfs
Получить статус форматирования
Обновить конфигурацию S3 хранилища
PATCH
/s3-storage
Частично обновить конфигурацию S3
GET
/s3-storage:stats
Получить статистику синхронизации S3
GET
/s3-storage:testConnection
Тестировать S3 соединение
/modules
Создать модуль
GET
/modules/{id}
Получить модуль по ID
PUT
/modules/{id}
Обновить модуль
PATCH
/modules/{id}
Частично обновить модуль
DELETE
/modules/{id}
Удалить модуль
GET
/modules/{id}:getModuleInfo
Получить информацию о модуле
GET
/modules/{id}:getModuleLink
Получить ссылку на скачивание модуля
GET
/modules/{id}:getDownloadStatus
Получить статус загрузки
POST
/modules/{id}:startDownload
Начать загрузку модуля
POST
/modules/{id}:installFromRepo
Установить модуль из репозитория
POST
/modules:installFromPackage
Установить модуль из пакета
POST
/modules:getMetadataFromPackage
Получить метаданные из пакета
POST
/modules/{id}:enable
Включить модуль
POST
/modules/{id}:disable
Отключить модуль
POST
/modules/{id}:uninstall
Удалить модуль
POST
/modules:updateAll
Обновить все модули
GET
/modules:getAvailableModules
Получить доступные модули
GET
/modules:getInstallationStatus
Получить статус установки
GET
/modules:getDefault
Получить настройки модуля по умолчанию
Проверить связь с сервером лицензий
GET
/license:resetKey
Сбросить лицензионный ключ
GET
/license:sendPBXMetrics
Отправить метрики АТС
POST
/license:captureFeatureForProductId
Захватить функцию для продукта
POST
/license:processUserRequest
Обработать запрос пользователя
Загрузить/обновить файл
DELETE
/files/{id}
Удалить файл
POST
/files:upload
Загрузить файл (чанками)
GET
/files:uploadStatus
Проверить статус загрузки
POST
/files:downloadFirmware
Скачать прошивку
GET
/files:firmwareStatus
Проверить статус скачивания прошивки
Получить внешний IP адрес
GET
/sysinfo:getHypervisorInfo
Получить информацию о гипервизоре
GET
/sysinfo:getDMIInfo
Получить DMI информацию
Получить содержимое лога
POST
/syslog:getLogTimeRange
Получить временной диапазон лога
POST
/syslog:eraseFile
Очистить лог файл
POST
/syslog:startCapture
Начать захват пакетов
POST
/syslog:stopCapture
Остановить захват пакетов
POST
/syslog:prepareArchive
Подготовить архив логов
POST
/syslog:downloadArchive
Скачать архив логов
POST
/syslog:downloadLogFile
Скачать лог файл
Получить ACL правила API
GET
/openapi:getDetailedPermissions
Получить детальный список разрешений
GET
/openapi:getSimplifiedPermissions
Получить упрощенный список разрешений
GET
/openapi:getValidationSchemas
Получить схемы валидации
POST
/openapi:clearCache
Очистить кэш OpenAPI
Зафиксировать уход со страницы




