Не смог даже придумать по каким словам поиск по форуму делать и даже нормально описать проблему в заголовке, за что прошу прощения.
Постараюсь развёрнуто описать проблему
Есть какой-то сервер, к которому мы подключаемся несколько раз для получения нескольких SIP линий. Это может быть GSM-шлюз на несколько сим-карт или облачная АТС от Укртелекома, суть общая: IP один, а учёток несколько.
Вот пример конфигурации при подключении к локальному GSM-шлюзу:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: sip.conf
[general]
limitonpeer=yes
register => gsm11:pass@172.16.0.51/0678хxxxxx
register => gsm12:pass@172.16.0.51/0990хxxxxx
register => gsm13:pass@172.16.0.51/0960хxxxxx
register => gsm14:pass@172.16.0.51/0630хxxxxx
context=incoming_fxo
language=ru
allowguest=no ;do not allow anonymous calls
alwaysauthreject=yes ;do not say whether wrong password or username
nat=force_rport,comedia
[mobiles](!)
type=friend
dtmfmode=rfc2833
disallow=all
allow=gsm
allow=ulaw
insecure=invite
deny=0.0.0.0/0.0.0.0
permit=172.16.0.51/32
callcounter=yes
nat=no
host=172.16.0.51
[gsm11](mobiles)
fromuser=gsm11
secret=pass1
[gsm12](mobiles)
fromuser=gsm12
secret=pass2
[gsm13](mobiles)
fromuser=gsm13
secret=pass3
[gsm14](mobiles)
fromuser=gsm14
secret=pass4
limitonpeer=yes
register => gsm11:pass@172.16.0.51/0678хxxxxx
register => gsm12:pass@172.16.0.51/0990хxxxxx
register => gsm13:pass@172.16.0.51/0960хxxxxx
register => gsm14:pass@172.16.0.51/0630хxxxxx
context=incoming_fxo
language=ru
allowguest=no ;do not allow anonymous calls
alwaysauthreject=yes ;do not say whether wrong password or username
nat=force_rport,comedia
[mobiles](!)
type=friend
dtmfmode=rfc2833
disallow=all
allow=gsm
allow=ulaw
insecure=invite
deny=0.0.0.0/0.0.0.0
permit=172.16.0.51/32
callcounter=yes
nat=no
host=172.16.0.51
[gsm11](mobiles)
fromuser=gsm11
secret=pass1
[gsm12](mobiles)
fromuser=gsm12
secret=pass2
[gsm13](mobiles)
fromuser=gsm13
secret=pass3
[gsm14](mobiles)
fromuser=gsm14
secret=pass4
1) При входящем звонке с любой линии они все отображаются как gsm11
2) Игнорируется контекст, отличный от контекста gsm11. Т.е. если прописать в [gsm11] другой контекст, а в других оставить по-умолчанию, то все будут с таким же, как gsm11. Если прописать в любую другую линию другой контекст, то всё равно будет incoming_fxo - контекст gsm11.
3) Проблема с выбором линии для исходящего звонка (главная проблема, которая сподвигла обратиться к сообществу): использую конструкцию
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: Выдержка из extensions.conf
same => n,gotoif($["${DEVICE_STATE(${OUT_GSM13})}" = "NOT_INUSE"]?:try2)
same => n,Dial(${OUT_GSM13}/${EXTEN})
same => n,Congestion()
same => n,Hangup()
same => n(try2),gotoif($["${DEVICE_STATE(${OUT_GSM14})}" = "NOT_INUSE"]?:try3)
same => n,Dial(${OUT_GSM14}/${EXTEN})
same => n,Congestion()
same => n,Hangup()
same => n,Dial(${OUT_GSM13}/${EXTEN})
same => n,Congestion()
same => n,Hangup()
same => n(try2),gotoif($["${DEVICE_STATE(${OUT_GSM14})}" = "NOT_INUSE"]?:try3)
same => n,Dial(${OUT_GSM14}/${EXTEN})
same => n,Congestion()
same => n,Hangup()
И тут я не уверен в своих выводах, но вероятно происходит что-то такое: gsm13 занят исходящим, приходит входящий звонок на gsm12 (но астериск думает что занята gsm11 - первая), при попытке позвонить система видит что gsm13 занят исходящим, проверяет gsm12 - он типа свободен, пытается позвонить - отбой, т.к. она на самом деле занята.
Можно ли как-то по-другому настроить SIP? Может лучше будет на IAX2? Или может по-другому можно выбирать исходящую линию? Может есть какое-то частное решение для GSM-шлюза Openvox? (для УТ некритично - там звонков очень мало)
Заранее благодарен за ответы