Данный текст больше как документирование процесса как памятки для себя, хотя может кому и пригодится, а может кто то скажет что я делаю все не правильно и расскажет как нужно.
В общем имеем идею сделать из FusionPBX телефонную станцию провайдера, хотя бы частично. Задача возможно и тривиальная, но делаю я это первый раз, руки кривые поэтому забывать и пропускать некоторые моменты не хочется.
Что желательно получить на выходе:
Телефонная станция способная обслуживать около 10к телефонных аппаратов (GPON авторизуются через ONT, аналоги через IADы, SIP телефоны).
SIP номера для АТС клиентов.
Маршрутизация вызовов по более выгодным направлениям.
Гибкая и удобная система как для нас так и для клиентов.
По ходу дело тут будут дополнения.
Что имеем и на чем будем тренироваться:
Серверная сторона: FusionPBX на виртуальной машине, транк наш со станции на 30 каналов и 4 внешними номерами.
Тестовые клиенты: IssabelPBX(16 Asterisk), FreePBX(18 Asterisk), 2шт Yealink t21,4шт Atcom A10, 3cx Phone на 2 ПК.
Задача разобраться с FusionPBX и понять справится ли она с нашими задачами и есть ли все нужные функции. Вопросы появляются по ходу дела и тащут за собой другие вопросы.
В общем, вперед, начнем
Установку расписывать смысла нет. Сразу к настройкам.
Так как все в локальной сети, то я завел сразу записи на внутреннем DNS sip001.domain.my sip002, sip003, sip004 по аналогии. После создал соответвующие домены на FusionPBX.
В основном работа будет в домене sip001 значит переходим в него, остальные до некоторой поры не трогаем.
Теперь настраиваем транк (Gateway), у нас он в отдельном VLANe, на второй сетевой карте, поэтому есть свои нюансы.
Переходим Accounts- Gateways и нажимаем add
Поля жирным шрифтом обязательны для заполнения, но в нашем случае не все.
По пунктам и подробнее:
Gateway - жирный, просто имя шлюза.
Username - вообще по задумке тут вроде как должен быть номер, если оставить пустым то в поле from будет подставляться Freeswitch@proxy в качестве исходящего номера. Сначала я вставлял туда внешний номер и вроде как работало, но только с 1 номером. Не подходит поэтому в итоге оказалось что Caller ID In From True решает данные вопрос и в данном поле можно писать что угодно.
Password- у нас шлюз без регистрации, поэтому данное поле мы оставляем пустым.
From User | From Domain- так же пустые, нам не нужны.
Proxy- важный пункт. Тут указывается адрес сип сервера провайдера.
Register- в нашем случае регистрация не требуется, при значении false поля Username и Password станут не обязательными, но жизными останутся.
Отальное не трогаем до поля Caller ID In From
Caller ID In From- подставляет в поле From внешний номер, вот это то что нам просто необходимо.
Все остальные поля остаются по умолчанию, на данный момент.
Неясно с полем Channels, как оно работает на данный момент не понятно. Звонки спокойно проходят в обе стороны независимо от числа указанного в это поле (сейчас не важно, в дальнейшем хотелось бы что бы работало).
Переходим в внутренним номерам (Extensions)
В последствии внутренний номер будет соответствовать внешнему номеру, то есть внутренний 7значный городской номер вида 2XXXXXX или 3XXXXXX. Поэтому заводить будем такие же. Так как номера подаются пачками заведением проблем не будет.
Важных пунтов в настройках Exstension особо нет, всё создается автоматически. Дописывать только поле Toll Allow которое в будущем пригодится для разрешения вызовов на определённые направления.
Из не понятного Limit Max который не работает или работает но не так.
Теперь можно подключить SIP аппараты для проверки внутренних вызовов и дальнейшей работы.
Sip Profiles
Важный пункт без которого внешние звонки у нас работать не будут это Advanced- Sip Profiles
Первое что просто необходимо сделать это бэкап этих самых профилей.
Заходим в профиль, нажимаем Copy, пишем имя и отключаем его что бы не мешал. Важно потому что после каких то манипуляций у меня профиль internal куда то потерял все настройки что было неожиданно и очень неприятно.
Профиль для внутренних вызовов Internal остается без изменений, изменения вносим в external.
Нас интересуют поля:
ext-rtp-ip наш IP адрес второй сетевой карты
ext-sip-ip наш IP адрес второй сетевой карты
rtp-ip наш IP адрес второй сетевой карты
sip-ip наш IP адрес второй сетевой карты
sip-port 5060, по умолчанию 5080, но нам через него подать не могут.
Теперь важный момент ACL, переходим в Advanced- Access Controls
Разрешаем ip нашего провайдера и сохраняем.
Теперь можно перейти в Status-SIP Status и посмотреть поднялся ли транк и запустились ли профили.
Если всё хорошо то можно переходить непосредственно к маршрутизации вызовов.
Inbound Routes / входящие маршруты
Входящий маршрут у нас не так прост как на обычных АТС, мы точно не знаем какой на какой номер на прилетит звонок.
Поэтому будем делать так: переходим в Dialplan - Inbound Routes и жмём Add
Дальше нас интересует кнопка Advanced, жмём её
и заходим в созданный маршрут видим что тут получилось
Объясняю, к нам из транка потенциально прилетают DID семизначные цифры, то есть вида 2XXXXXX и 3XXXXXX, если такой номер есть то мы его принимаем и отправляем на соответвующий Exstension. Возможно это криво и не правильно, пока другого варианта максимально безкостыльно и не сложно сделать это я не нашел.
На данном этапе настройки можно проверить входящие вызовы которые должны работать.
Outbound Routes / Исходящие маршруты
Для исходящих переходим в Dialplan- Outbound Routes
Добавляем маршрут
В принципе данный маршрут правильный, но не в нашем случае. Нам что бы вызов прошел необходимо подствить внешний номер с префиксом кода города к внутреннему номеру.
И для удобства я добавлю ещё и вариант когда человек звонит с кодом города или с 727 впереди (для примера звонок на телефон приходит с кодом города 727XXXXXXX если нажать кнопку перезвонить то 727 тоже улетят в транк и вызов не пройдёт, может это у нас только так, хз).
В общем финально должно получиться так:
аналогично делается для мобильных, междугородних и международных
звонки на городские Алматы ^(?:8727|727|)(\d{7})$
звонки межгород ^(?:8|7)(7[12]0-8)(\d{7}))$
мобильные ^(?:8|7)(704567)(\d{8}))$
международные ^(810\d+)$
На этом моменте должны работать вызовы в обе стороны и продолжение будет в следующей серии.
Напоминаю, что это больше инструкция для себя, критика и советы приветствуются.