Ньюансы настройки GSM-шлюзов Addpac

в 9:58, , рубрики: Песочница, метки: ,

В сети встречается много вариантов конфигураций для шлюзов 1000-ной серии. Но все они не описывают ряд ньюансов, которые я хочу написать в одном месте. Конфигурация применительно к голому Asterisk с регистрацией пиров на сервере.

За подробностями — под кат!

Файл sip.conf с комментариями
addpac_channels;_ шаблон дублирующихся настроек для каналов шлюза
host=dynamic;
____ IP адрес или имя хоста. Для самостоятельной регистрации пира используется dynamic
type=friend;__ двусторонние звонки(входящие и исходящие)
context=from_addpac;_ входящие сначала обрабатываются здесь для получения callerid звонящего из
;
____ remote-party-id, а затем уйдут для обработки прочих правил в контекст _sip
qualify=yes;_____ контроль активности sip-пиров, а не GSM-каналов шлюза
nat=no;__ использую шлюз в локальной сети asterisk
canreinvite=no;____ сервер Asterisk никогда не будет производить процедуру re-invite
insecure=port,invite;____ игнорировать порт и поле invite
disallow=all;_сначала запрещаем все кодеки
allow=alaw; и разрешаем нужные
allow=ulaw
allow=gsm
maxcallbitrate=64
dtmfmode=rfc2833
call-limit=1;
в каждом слоте одна SIM-карта — максимум один звонок на канал.
relaxdtmf=yes;____ часто выручает при плохой слышимости в канале (помогает от пропуска или дублирования цифр)
sendrpid = yes;____ Asterisk добавит Remote-Party-ID: "имя sip-пира" <sip: номер звонящего@ip-адрес>
trustrpid = no;_____ Asterisk возьмет номер из RPI header (вместо From) из запроса при входящем вызове

; __детали пиров каналов шлюза
79220000001;_ 1-й GSM-слот, в котором стоит SIM с соответствующим номером
description=Addpac-1004-246 1-й слот;_ удобная вещь — увидите в выводе команды sip show peers в консоли астериска
username=79220000001;____
no comments
secret=Vm1;__no comments
permit=192.168.1.24;___ ip-адрес GSM-шлюза
fromdomain=192.168.1.24

; остальные каналы по аналогии

В конфигурации подставьте свои данные. Обратите внимание на прописанные команды called-party-number to-field и
remote-party-id — именно они позволяют транслировать входящий номер в Asterisk.

Конфигурация шлюза(Addpac-1004c)

!
! APOS(tm) configuration saved from vty
! 2016/01/26 00:41:19
!
version 8.51.004
!
hostname GS1004-24
!
username root password router administrator
!
!
script ntpdate default
resynchronize 12 10
server ip ntp1.dlink.com
!
interface Loopback0
ip address 127.0.0.1 255.0.0.0
!
interface FastEthernet0/0
ip address "IP-адрес шлюза" 255.255.255.0
speed auto
no qos-control
!
ip route 0.0.0.0 0.0.0.0 "IP-адрес Asterisk" 16
!
!
!
ftp server
!
!
dns name-server "IP-адрес шлюза в интернет"
logging command
logging event 4-warning
logging on
!
!
!
!
! VoIP configuration.
!
!
! Voice service voip configuration.
!
voice service voip
protocol sip
dtmf-relay out-of-band
fax protocol t38 redundancy 0
fax rate 9600
h323 call start fast
h323 call tunnel enable
timeout tinit 15
timeout tidt 5
static-jitter-buffer 35
ignore-dtmf-abcd-tone
no call-barring unconfigured-ip-address
no voip-inbound-call-barring enable
!
!
! Voice port configuration.
!
!
!
! GSM
voice-port 1/0
connection plar 79220000001
ring detect-timeout 70
caller-id enable
caller-id type etsi
caller-id name disable
!
! GSM
voice-port 1/1
connection plar 79220000002
ring detect-timeout 70
caller-id enable
caller-id type etsi
caller-id name disable
!
! GSM
voice-port 1/2
connection plar 79220000003
ring detect-timeout 70
caller-id enable
caller-id type etsi
caller-id name disable
!
! GSM
voice-port 1/4
connection plar 79220000001
ring detect-timeout 70
caller-id enable
caller-id type etsi
caller-id name disable
!
! Pots peer configuration.
!
dial-peer voice 0 pots
destination-pattern 00T
port 1/0
call-waiting
user-name 79220000001
user-password Vm1
translate-outgoing called-number 0
!
dial-peer voice 1 pots
destination-pattern 01T
port 1/1
call-waiting
user-name 79220000002
user-password Vm2
translate-outgoing called-number 1
!
dial-peer voice 2 pots
destination-pattern 02T
port 1/2
call-waiting
user-name 79220000003
user-password Vm3
translate-outgoing called-number 2
!
dial-peer voice 3 pots
destination-pattern 03T
port 1/3
user-name 79220000004
user-password Vm4
translate-outgoing called-number 3
!
!
!
! Voip peer configuration.
!
dial-peer voice 2000 voip
destination-pattern T
session target sip-server
session protocol sip
voice-class codec 1
no vad
dtmf-relay rtp-2833
!
!
!
dial-peer call-hold h
dial-peer call-transfer h
!
!
!
gatekeeper
!
!
! Gateway configuration.
!
gateway
h323-id voip."IP-адрес Asterisk"
ignore-msg-from-other-gk
shutdown
!
!
! Codec classes configuration.
!
voice class codec 0
codec preference 1 g711alaw
codec preference 2 g711ulaw
codec preference 3 g729
!
!
!
! Translation Rule configuration.
!
translation-rule 0
rule 0 007T 8T
!
translation-rule 1
rule 0 017T 8T
!
translation-rule 2
rule 0 027T 8T
!
translation-rule 3
rule 0 037T 8T
!
!
!
! SIP UA configuration.
!
sip-ua
user-register
sip-server "IP-адрес Asterisk" 5060 1
called-party-number to-field
remote-party-id
session-refresh update
register e164
!
!
! Tones
!
!
!
!
! SMTP sendmail configuration
!
sms-delivery
!
!
!
line console
!
line vty
!
gsm dev-restart-by-unreg 300
!
gsm 1/0
sms-language utf8
!
gsm 1/1
sms-language utf8
!
gsm 1/2
sms-language utf8
!
gsm 1/3
sms-language utf8
!

Идём дальше… Таким образом в переменных прописываю GSM-каналы для удобства — пропадает необходимость править диалплан по мелочам. Обратите внимание MEG-Channel-1=SIP/79220000001/00 — выбор канала для исходящего звонка. Соответствие найдете в конфиге addpac-а:

dial-peer voice 0 pots
destination-pattern 00T
port 1/0

Лишние цифры в начале строки обрезаются — 007 заменяется на 8, остальное транслируется без изменений.

translation-rule 0
rule 0 007T 8T

Определение каналов в переменных

[globals]
MEG-Channel-1=SIP/79220000001/00; GSM1 канал на шлюзе Addpac 1004c — 192.168.1.24 — 1 слот
MEG-Channel-2=SIP/79220000002/01; GSM2 канал на шлюзе Addpac 1004c — 192.168.1.24 — 2 слот
MEG-Channel-3=SIP/79220000003/02; GSM1 канал на шлюзе Addpac 1004c — 192.168.1.24 — 3 слот
MEG-Channel-4=SIP/79220000004/02; GSM1 канал на шлюзе Addpac 1004c — 192.168.1.24 — 4 слот

Комментарии внутри...

Контекст для получения входящих номеров из заголовка Remote-Party-ID

[from_addpac]; — актуально для шлюзов Addpac

exten => _X.,1,NoOP(${EXTEN}); номер шлюзовой SIM-карты, на которую поступил звонок
same => n,NoOP(${SIP_HEADER(Remote-Party-ID)}); весь заголовок до выборки
same => n,Set(whoid=${SIP_HEADER(Remote-Party-ID)}); присваиваем переменной whoid значение rpid
;(т.е whoid=sip:79221112233@172.16.128.228;screen=yes;party=calling)
same => n,Set(whoid=${CUT(whoid,@,1)}); выдираем из whoid подстроку "<sip:79221112233" — строка до собаки
same => n,Set(whoid=${CUT(whoid,:,2)}); выдираем сам номер — 79221112233 — после двоеточия
same => n,Set(CALLERID(num)=${whoid}); ну тут и так понятно
same => n,Goto(_sip,${EXTEN},1); уходим в основной контекст приема звонков _sip (замените на свой)

Комментарии внутри...

Входящие с шлюзовых SIM-карт

[sip]
; DISA-Call numbers — exten =>
[7,8]922000000[1,2,3,4],1,Goto(VoiceDisa,s,1); входящие c шлюзовых номеров
exten =>
[7,8]922000000[1,2,3,4]/79221112233,1,Dial(SIP/1001,30,mtT); простое перенаправление
; звонка в зависимости от номера звонящего.

Комментарии внутри...

Исходящие через каналы шлюза

[macro-dial-to-megafon]

… Dial(${MEG-Channel-1}7${ARG1:1:10},45,mgtF); Звоним через 1-й канал в макросе — ARG это EXTEN,
; отправленный в макрос

Буду рад советам и корректировкам в комментариях.

Автор: устаршой по званию

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js