Вопрос: есть-ли у данного решения критические недостатки, или может существует более оптимальный способ решения задачи?
sip.conf:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
[general]
;*******************
register=UserID:Password@sipnet.ru/1234
;*******************
;Номера телефонов
[100] ; первый номер
type=friend
host=dynamic
username=100
secret=NumberPass
dtmfmode=rfc2833
canreinvite=no
context=office
callerid="User1" <100>
allow=ulaw
allow=alaw
[101] ; второй номер
type=friend
host=dynamic
username=101
secret=NumberPass
dtmfmode=rfc2833
canreinvite=no
context=office
callerid="User2" <101>
allow=ulaw
allow=alaw
[sipnet]
type=peer
username=UserID
secret=Password
callerid=sipnet
host=sipnet.ru
nat=no
fromuser=sipnet
fromdomain=sipnet.ru
dtmfmode=rfc2833
insecure=invite
context=sipnet-in
allow=ulaw:30
allow=alaw:30
;*******************
register=UserID:Password@sipnet.ru/1234
;*******************
;Номера телефонов
[100] ; первый номер
type=friend
host=dynamic
username=100
secret=NumberPass
dtmfmode=rfc2833
canreinvite=no
context=office
callerid="User1" <100>
allow=ulaw
allow=alaw
[101] ; второй номер
type=friend
host=dynamic
username=101
secret=NumberPass
dtmfmode=rfc2833
canreinvite=no
context=office
callerid="User2" <101>
allow=ulaw
allow=alaw
[sipnet]
type=peer
username=UserID
secret=Password
callerid=sipnet
host=sipnet.ru
nat=no
fromuser=sipnet
fromdomain=sipnet.ru
dtmfmode=rfc2833
insecure=invite
context=sipnet-in
allow=ulaw:30
allow=alaw:30
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
;контексты:
;контекст внутренних/исходящих
[office]
exten => 100,1,Macro(dialtone,SIP/100)
exten => 101,1,Macro(dialtone,SIP/101)
;исходящий звонок с добавочным номером 98 через транк sipnet
exten => _98XXXXXXXXXX,1,Macro(dialtone,SIP/sipnet/${EXTEN:2})
;контекст транка
[sipnet-in]
exten => 1234,1,Set(CALLERID(name)="Sipnet call")
exten => 1234,n,Playback(WarningRecord)
exten => 1234,n,Dial(SIP/101,,m)
exten => 1234,n,Hangup()
;макросы:
;звонок на номер с выводом тонового предупреждения в обе стороны
[macro-dialtone]
exten => s,1,Set(LIMIT_PLAYAUDIO_CALLER=yes)
exten => s,n,Set(LIMIT_PLAYAUDIO_CALLEE=yes)
exten => s,n,Set(LIMIT_WARNING_FILE=ToneSignal)
exten => s,n,Set(MaxSpeakTime=$[3*60*60000])
exten => s,n,Dial(${ARG1},,L(${MaxSpeakTime}:$[${MaxSpeakTime}-15000]:15000)m)
exten => s,n,Playback(vm-goodbye)
exten => s,n,Hangup()
;исходящий звонок с голосовым предупреждением
[macro-outwarning]
exten => s,1,Set(LIMIT_PLAYAUDIO_CALLER=yes)
exten => s,n,Set(LIMIT_PLAYAUDIO_CALLEE=yes)
exten => s,n,Set(LIMIT_CONNECT_FILE=WarningRecord)
exten => s,n,Dial(${ARG1},,L($[3*60*60000])m)
exten => s,n,Playback(vm-goodbye)
exten => s,n,Hangup()
;контекст внутренних/исходящих
[office]
exten => 100,1,Macro(dialtone,SIP/100)
exten => 101,1,Macro(dialtone,SIP/101)
;исходящий звонок с добавочным номером 98 через транк sipnet
exten => _98XXXXXXXXXX,1,Macro(dialtone,SIP/sipnet/${EXTEN:2})
;контекст транка
[sipnet-in]
exten => 1234,1,Set(CALLERID(name)="Sipnet call")
exten => 1234,n,Playback(WarningRecord)
exten => 1234,n,Dial(SIP/101,,m)
exten => 1234,n,Hangup()
;макросы:
;звонок на номер с выводом тонового предупреждения в обе стороны
[macro-dialtone]
exten => s,1,Set(LIMIT_PLAYAUDIO_CALLER=yes)
exten => s,n,Set(LIMIT_PLAYAUDIO_CALLEE=yes)
exten => s,n,Set(LIMIT_WARNING_FILE=ToneSignal)
exten => s,n,Set(MaxSpeakTime=$[3*60*60000])
exten => s,n,Dial(${ARG1},,L(${MaxSpeakTime}:$[${MaxSpeakTime}-15000]:15000)m)
exten => s,n,Playback(vm-goodbye)
exten => s,n,Hangup()
;исходящий звонок с голосовым предупреждением
[macro-outwarning]
exten => s,1,Set(LIMIT_PLAYAUDIO_CALLER=yes)
exten => s,n,Set(LIMIT_PLAYAUDIO_CALLEE=yes)
exten => s,n,Set(LIMIT_CONNECT_FILE=WarningRecord)
exten => s,n,Dial(${ARG1},,L($[3*60*60000])m)
exten => s,n,Playback(vm-goodbye)
exten => s,n,Hangup()