Содержание статьи:
Для памятки опишу как настроить SIP транк от оператора du.ae (Дубаи) в FreePBX.
Оператор DU.ae предоставляет SIP транк через кабель от провайдера со следующими данными по подключению SIP транка:
В общих настройках во вкладке General SIP Settings убедимся что поле External Address пустое.
Настройка FreePBX (Добавление SIP-транка)
Настраивать SIP транк будем через PJSIP.
На вкладке General в поле Trunk Name вводим произвольное, понятное название транка, в моем случае я использовал USERNAME, остальное все оставляем по-умолчанию.
На вкладке pjsip Settings во вкладке General заполняем отмеченные поля, подставляем из таблицы с данные по подключению:
- Username — USERNAME
- SIP Server — DOMAIN
- SIP Server Port — PORT
Во вкладке Advanced заполняем отмеченные поля все так же используя данные из таблицы:
- Outbound Proxy — sip:SBC/HOSTNAME:5060\;lr
- Contact User — USERNAME
- From Domain — DOMAIN
- From User — USERNAME
- Client URI — sip:USERNAME@DOMAIN
- Server URI — sip:USERNAME@DOMAIN
- AOR Contact — sip:USERNAME@DOMAIN
- Match (Permit) — SBC/HOSTNAME;DOMAIN
- Trust RPID\PAI — Yes
- Send RPID\PAI — Send P-Asserted-Identity header
Сохраняем и применяем изменения. Результат подключения:
asterisk -rx "pjsip show endpoint 97148888700p" Endpoint: <Endpoint/CID.....................................> <State.....> <Channels.> I/OAuth: <AuthId/UserName...........................................................> Aor: <Aor............................................> <MaxContact> Contact: <Aor/ContactUri..........................> <Hash....> <Status> <RTT(ms)..> Transport: <TransportId........> <Type> <cos> <tos> <BindAddress..................> Identify: <Identify/Endpoint.........................................................> Match: <criteria.........................> Channel: <ChannelId......................................> <State.....> <Time.....> Exten: <DialedExten...........> CLCID: <ConnectedLineCID.......> ========================================================================================== Endpoint: 97148888700p Not in use 0 of inf OutAuth: 97148888700p/97148888700p Aor: 97148888700p 0 Contact: 97148888700p/sip:97148888700p@du.ae 76354d9fd5 Avail 141.307 Transport: 0.0.0.0-udp udp 3 96 0.0.0.0:5060 Identify: 97148888700p/97148888700p Match: 10.59.108.25/32
asterisk -rx "pjsip show registration 97148888700p" <Registration/ServerURI..............................> <Auth....................> <Status.......> ========================================================================================== 97148888700p/sip:97148888700p@du.ae 97148888700p Registered (exp. 248s)
Настройка FreePBX (Входящие вызовы)
Оператор DU.ae передает входящий номер как 048888788 от исходного 97148888700, т.е. код страны 971 отметается, вместо него указывают 0 и дальше номер.
Настройка FreePBX (Исходящие вызовы)
Для настройки исходящих вызовов во вкладке Route Settings указываем Trunk Sequence for Matched Routes добавленный SIP транк.
Во вкладке Dial Patterns указываем маску шаблона для звонков на внешние номера.
В случае если вам провайдер предоставил диапазон номеров и вам необходимо реализовать так что какие то внутренние номера должны выходить во вне под определенными номерами, то нужно для внутреннго номера в поле Outbound CID указать внешний номер который должен быть присвоен при звонке на внешние номера.
Далее нужно в SIP заголовке P-Preferred-Identity передать информацию провайдеру о CID. В FreePBX нужно модифицировать секцию func-apply-sipheaders в dialplan.
В файле /etc/astersik/extensions_override_freepbx.conf прописываем следующее:
[func-apply-sipheaders] exten => s,1,Noop(Modify func-apply-sipheaders in extensions_custom.conf for DU.AE) exten => s,n,Set(USEROUTCID=${DB(AMPUSER/${CALLERIDNUMINTERNAL}/outboundcid)}) exten => s,n,GotoIf($["${USEROUTCID}" = ""]?defcid:outcid) exten => s,n(outcid),Set(PJSIP_HEADER(add,P-Preferred-Identity)=<sip:${USEROUTCID}@du.ae>) exten => s,n(defcid),Return
Сохраняем и применяем изменения во FreePBX. Проверяем работу.
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА ДОНАТОМ