Конфигурация популярных PBX
Раздел содержит практические инструкции по интеграции SIP Trunk с популярными программными АТС — FreePBX (Asterisk) и FusionPBX (Freeswitch).
Для FreePBX подробно описана пошаговая настройка SIP транка: заполнение параметров во вкладках General и SIP Settings, настройка исходящих и входящих вызовов, работа с типами клиентов (peer, user, friend), проверка доступности и маршрутизация через шаблоны Dial Pattern.
Для FusionPBX изложен процесс создания SIP Gateway, назначение параметров и организация маршрутизации исходящих вызовов. Информация ориентирована на системных администраторов и специалистов по IP-телефонии, знакомых с интерфейсами управления указанными PBX.
Также приведены пояснения по настройке маршрутов и формированию шаблонов номеров.
Создание SIP trunk для FreePBX (Asterisk)
Откройте меню администрирования транков во вкладке Trunks раздела Connectivity.

Нажмите кнопку «Add Trunk» и выберите тип создаваемого транка.


Выберите вариант Add SIP (chan_sip) Trunk.
Вкладка General
На вкладке задаются основные параметры транка.

Заполните поля формы:
- Trunk Name – название транка. В примере используем имя mango. Назначьте удобное для вас имя, для легкого распознавания среди других транков;
- Hide CallerID – опция скрытия CID при исходящем вызове;
- Outbound CallerID CID, который будет передаваться при исходящем вызове;
- CID Options – настройки передачи CID – разрешить все, запретить иностранные и т.д.;
- Maximum Channels – максимальное количество одновременных разговоров вне локальной сети;
- Asterisk Trunk Dial Options – модификация Dial options, в данном случае оставим опцию дефолтной;
- Continue if Busy – опция направления вызова на следующий транк даже если канал сообщает «BUSY» или «INVALID NUMBER»;
- Disable Trunk – опция выключения транка.
Далее необходимо выполнить настройку во вкладке sip Settings.
Вкладка «sip Settings»
Устанавливаем ключевые настройки SIP-пира. Во FreePBX они разделены на Outgoing и Incoming, которые отвечают за исходящие type=peer и входящие вызовы type=user соответственно.
Настройка исходящих вызовов в закладке «Outgoing»
Дублируете название транка в поле "Trunk Name".
В поле Peer Details размещаются настройки:

На скриншоте приведены наиболее распространенные параметры. Точная настройка делается администратором пользователя, в зависимости от конфигурации PBX. Очередность параметров не является обязательной.
type=friend
- peer: SIP-запись, которую Asterisk может использовать для совершения исходящих вызовов (например, SIP-провайдер). А также для входящих вызовов, если Вам необходимо сопоставить эту запись не с именем пользователя из поля FROM, а с IP-адресом, указанным для этой записи. Для записи этого типа, для входящих вызовов, никогда не будет проверяться соответствие имени пользователя и пароля, а только соответствие с IP-адресом и номером порта источника вызова. SIP-клиент, типа peer, при совершении исходящих вызовов использует авторизацию, если она будет затребована вызываемой стороной.
- user: SIP-запись, через которую вызовы могут поступать извне в Asterisk (телефон, который может только совершать вызовы). Пользователи, для которых назначены доступные им сервисы в определенных для них контекстах.
- friend: Запись, которая одновременно user и peer. Этот тип наиболее подходит для телефонов и других устройств. Для SIP пользователей этого типа Asterisk создаст два объекта: один типа peer и один типа user, с одинаковыми именами.
qualify=yes – Посылать SIP запросы OPTIONS для проверки доступности устройства
host= – SIP сервер провайдера, предоставляется Mango Office
port= – Порт сигнализации SIP сервера, предоставляется Mango Office
transport=udp – Транспорт для SIP протокола
insecure=port,invite
port – Не требовать совпадения порта в инвайте
invite – Не требовать аутентификации в инвайте
dtmfmode=rfc2833 – Использовать спецификацию RFC2833 для передачи DTMF сигналов
disallow=all – Запретить использование всех кодеков, чтобы затем разрешить определенные.
allow=alaw – Разрешить использование кодеков.
peer – SIP-запись, которую Asterisk может использовать для совершения исходящих вызовов (например, SIP-провайдер). А также для входящих вызовов, если Вам необходимо сопоставить эту запись не с именем пользователя из поля FROM, а с IP-адресом, указанным для этой записи. Для записи этого типа, для входящих вызовов, никогда не будет проверяться соответствие имени пользователя и пароля, а только соответствие с IP-адресом и номером порта источника вызова.
SIP-клиент, типа peer, при совершении исходящих вызовов использует авторизацию, если она будет затребована вызываемой стороной.
Если клиент типа peer (тип friends включает в себя peer) определен с параметром host=dynamic, то он должен зарегистрироваться на Asterisk, для того, чтобы сервер мог найти его (IP-адрес или имя хоста), и для того, чтобы сервер знал, что данный клиент доступен для совершения вызовов в его сторону.
Сопоставление входящих вызовов с клиентами и пирами
Обычно, Asterisk ищет подходящего SIP-клиента, при поступлении входящего вызова, по полю From: username (без доменной части). Однако, если Asterisk не смог найти подходящего пользователя для поступившего вызова, то он будет использовать IP-адрес звонящего для поиска подходящего SIP пира с соответствующим адресом. Если же и после этого нет совпадений, тогда вызов будет отправлен на обработку в контекст, определенный в секции [general] файла sip.conf.
Проверка правильности заполнения полей
Нажмите Submit и Apply Config
ПОЯСНЕНИЕ: Для простоты можно сказать, что контекст транка определяет, как обрабатывать входящие вызовы, а контекст внутреннего номера - исходящие. Когда внутренний абонент куда-то звонит, в назначенном ему контексте определяется, через какие транки и куда он может позвонить. Исходящая связь через транк определяется в контекстах внутренних номеров и никак не упоминается в контексте, назначенном непосредственно транку.
Настройка входящих вызовов в закладке «Incoming»
Закладка Incoming остается пустой.

Как проверить состояние транка
Проверить состояние транка можно через меню Reports-Asterisk Info: 
Исходящая маршрутизация
Outbound Routes – исходящая маршрутизация FreePBX.
На основании набранного номера выбирается направление (транк) для исходящего вызова. Набираемый номер делится на префикс и паттерн и может модифицироваться после набора.
Connectivity → Outbound Routes (Подключения → Исходящая Маршрутизация)




Route name – имя маршрута
Trunk Sequence for Matched Routes – выбор транка для данного маршрута
Вкладка Dial Pattern
Шаблон набора номера (Dial Pattern) – это уникальный набор цифр, который позволяет отправить вызов в нужный SIP–транк. Если шаблон совпадает, то вызов отправляется через SIP–транк в сторону провайдера.
Шаблон набора номера имеет 4 поля настройки: Prepend, Prefix, Match Pattern и CallerID.
Формат шаблона: (prepend) prefix | [ match pattern / caller ID ], где
- X – любое целое число от 0 до 9
- Z – любое целое число от 1 до 9
- N – любое целое число от 2 до 9
[#####]– любое целое число в скобках. Например, перечисление – [1.2.7], или диапазон чисел –[1.2.6-9], в который попадают числа 1,2,6,7,8,9- .(точка) - любой набор символов

Поля, доступные для заполнения:
- Prepend – данная часть будет добавлена к номеру, перед отправкой в SIP-транк в случае совпадения шаблона.
- Prefix – префикс – это часть шаблона, которая будет удалена
- Match Pattern – Набранный номер.
Важно
Asterisk ищет совпадения сопоставляя поле Prefix и Match Pattern.
CallerID – данный звонок будет выполнен только в случае, если звонок инициирован с указанного CallerID. В данном поле можно использовать шаблоны. Полезно, если компания имеет несколько офисов с нумерацией виду 1XXX, 2XXX и так далее.
Указанный на скриншоте шаблон 795ХХХХХХХ соответствует номерам из 10 цифр начинающимся на 795.