Модуль управления телефонными группами для MikoPBX. Позволяет организовывать сотрудников в группы с гибкими правами на звонки, контролем исходящих маршрутов и изоляцией групп.
- Организация сотрудников в телефонные группы
- Управление правами на исходящие звонки по группам
- Настройка Caller ID для каждой группы на каждом маршруте
- Изоляция групп: участники могут звонить только внутри группы и на разрешенные номера
- Изоляция перехвата вызовов внутри групп
- Автоматическое назначение новых сотрудников в группу по умолчанию
- REST API для интеграции с внешними системами
- Откройте веб-интерфейс MikoPBX
- Перейдите в Система > Модули расширений
- Найдите ModuleUsersGroups в маркетплейсе и установите
- Скачайте последний релиз со страницы GitHub Releases
- Перейдите в Система > Модули расширений
- Нажмите Загрузить модуль и выберите скачанный файл
- Включите модуль
- Перейдите в Маршрутизация > Управление телефонными группами
- Нажмите Добавить группу и введите название
- При необходимости настройте изоляцию и разрешенные шаблоны номеров
- Назначьте пользователей на вкладке Пользователи
- Настройте исходящие маршруты и Caller ID на вкладке Исходящие правила
- Сохраните группу
- При желании задайте группу по умолчанию для автоматического назначения новых сотрудников
Настройки хранятся в SQLite модуля и преобразуются в dialplan без AstDB и set_var в endpoint:
users-group-members— одна запись на внутренний номер участника, возвращающая ID группы;users-group-policy-<ID>— разрешённые исходящие маршруты группы и Caller ID для каждого маршрута;users-group-profile— поиск группы и политики маршрута. Суффиксы-WSи-TLSудаляются только из временной копии номера;FROM_PEERне изменяется.
Доступ к маршруту проверяется по инициатору (FROM_PEER). При переадресации Caller ID берётся из группы сотрудника, настроившего переадресацию (FW_SOURCE_PEER), без изменения прав инициатора. Сотрудники без группы сохраняют поведение без групповых ограничений. Для назначенной группы отсутствие маршрута в политике означает запрет. Caller ID поддерживает простой номер или текстовый идентификатор, а также форматы Имя <номер> и "Имя" <номер> (например, 101 <101>). Составной формат передаётся целиком через опцию Dial f(Имя <номер>): Asterisk получает имя и номер, но их передача и отображение у получателя зависят от провайдера. Допустимый набор для имени, номера и простого идентификатора: только латиница A–Z, a–z, цифры 0–9, обычный ASCII-пробел и символы +, -, _, ., *, #. Кириллица, буквы с диакритикой, combining marks и другие Unicode-символы не поддерживаются. Угловые скобки и двойные кавычки допустимы только как синтаксис составного формата, например "Sales Team" <101>. Управляющие символы, некорректный составной формат и небезопасные символы в имени или номере (включая запятые, скобки и подстановки dialplan) не допускаются при сохранении настроек. Формат проверяется на сервере до изменения группы, участников и правил: при ошибке сохранение целиком отклоняется. Ранее сохранённые неподдерживаемые значения остаются видимыми в форме с предупреждением; их нужно исправить или отключить соответствующий маршрут. До исправления генератор пропускает их подмену без отмены разрешения маршрута.
Источник подмены выбирается после проверки прав: непустой групповой Caller ID имеет приоритет; при его отсутствии применяется OUTGOING_CID, заданный в all-outgoing-custom или провайдерском custom-контексте до хука модуля. Значение из custom dialplan считается доверенным и не ограничивается ASCII-валидатором формы; автор custom-контекста отвечает за его корректность для опции Dial f().
Подмена действует только в пределах одной попытки Dial: для обоих источников модуль сохраняет CALLERID(num), CALLERID(name), OUTGOING_CID и DOPTIONS, а после возврата из Dial восстанавливает их, включая пустые значения. Добавленный модулем f(...) не накапливается между попытками. Исходный custom OUTGOING_CID сохраняется и может быть заменён custom-контекстом следующего маршрута; групповая подмена его не затирает. Если оба источника пусты, эти значения не изменяются.
Custom dialplan: контекст SIP-<ID маршрута>-outgoing-ug-custom вызывается после применения выбранной подмены и должен штатно возвращаться через Return(). При активной подмене изменения этих четырёх значений внутри custom-контекста также считаются локальными для текущей попытки и откатываются после Dial. Переходы Goto, уводящие канал из маршрута в обход after-hook, автоматическим восстановлением не покрываются. Вложенные вызовы исходящих маршрутов через Gosub из custom-контекста не поддерживаются: для резервных попыток следует использовать штатный последовательный перебор маршрутов Core.
Миграция: пользовательский dialplan, читающий ${DB(UsersGroups/...)} или использующий GR_VARS, нужно адаптировать к новой схеме. Модуль больше не обновляет семейство AstDB UsersGroups; старые записи автоматически не удаляются.
Проверка генерации без установленного Core:
php tests/UsersGroupsConfTest.php
php tests/CallerIdSaveTest.phpБазовый URL: http://<your-pbx>/pbxcore/api/modules/ModuleUsersGroups/
| Действие | Описание |
|---|---|
getUserGroup |
Получить группу пользователя |
updateUserGroup |
Изменить группу пользователя |
getDefaultGroup |
Получить группу по умолчанию |
setDefaultGroup |
Установить группу по умолчанию |
MikoPBX версии 2023.2.179 или выше.
- Документация (RU): docs.mikopbx.com
- Документация (EN): docs.mikopbx.com
- Баг-трекер: GitHub Issues
- Email: help@miko.ru