Приходит в астериск звонок с CallerID 2222, то есть внутреннего пира, звонок переводится на AddPac GS1004, например 89138888888@3333, где 3333 - его пир, но это даже не важно. AddPac успешно дозванивается, связь работает.
Заметим, что на номере 89138888888 стоит переадресация по состоянию "не доступен". МТС даёт такую услугу. То есть вместо "Телефон выключен или вне зоны обслуживания" на сервере МТС происходит перевод на указанный в переадресации номер - 89139999999. Очень удобно - если выключен первый мобильный телефон, МТС сам звонит на второй.
Так вот, когда звонок приходит в астериск с десятизначным CallerID, например 3812ХХХХХХ (городской номер, подключен через другой канал, не GSM), по абсолютно той же схеме, что и двумя абзацами выше, то МТС считает, что телефон 89138888888 выключен в 90% случаев, и производит переадресацию на 89139999999.
Фактически имеем: если в GSM-сеть через AddPac идёт звонок с пира 2222, то GSM-оператор нормально соединяет. Если звонок идёт абсолютно так же через AddPac, но с пира 3812ХХХХХХ, то GSM-оператор считает, что GSM-номер, который мы вызываем, вне зоны действия, и переводит звонок на следующий номер, указанный в настройках переадресации. Причём не всегда, а в 8-9 случаях из десяти.
Разумеется, пробовали разные варианты - использовали разные мобильные аппараты и разные сим-карты с разными номерами. Всё равно звонок до GSM-телефона доходит один-два раза из десяти, остальные случаи происходит переадресация внутри GSM-сети.
AddPac второй номер, на который происходит переадресация, просто не знает. Его знает только сам GSM-оператор, так что с его стороны таких фокусов быть не может.
Раньше вместо AddPac использовали программу Oktell SIP GSM Gateway с модемом, всё срабатывало нормально. Переадресация включалась только тогда, когда 89138888888 был реально выключен.
У нас единственная мысль, что может AddPac пытается CallerID передавать в GSM-сеть (такое вообще возможно?), и мобильный оператор его пытается принять, а правильно обработать не может, и на всякий случай не соединяет с 89138888888.
_________________
http://zemlyakovmp.ru - Мой блог о VoIP, Linux, Asterisk.
| Цитата: |
| GS1004# 79 : ****** Call Created status(InitiatedByNet) ver(8.28:2006-02-06-00-00) time(1365792195) **** 80 : Receive INVITE Request 81 : Found inbound voip peer(10000) result(2) peer->fixedPatternSize(0) mostMatchingSize(-1) 82 : Found inbound voip peer by dest-pattern id(10000) 83 : From Net - calledParty(089138888888) callingParty(2222) используем префикс 0 для выбора порта, потом обрезаем 84 : MatchedAll 85 : MatchAllProcess After Sorted id(4584) dest(0T) prefer(0) selected(6) 86 : Initiate callee with dial-peer(0T) status(CalleeDeterminedAll) id(00000000-0000-0000-0000- 000000000000) 87 : InitiateOutCall : calledNum(089138888888), callingNum(2222), callerPort(ffffffff) type(GSM) 88 : Outbound call to CEP callId(00000000-0000-0000-0000-000000000000) callNum(9) 89 : SetLocalAudioFormats : outbound(FALSE) hqaEnable(FALSE) 90 : SetLocalAudioFormats : myVoipPeer is NULL, 888 91 : Audio Count(1) 92 : rtpSessionId(1) Second Audio Port(-1) 93 : SetAlerting 94 : PreConnected from(10000) 95 : SetLocalAudioFormats : outbound(FALSE) hqaEnable(FALSE) 96 : SetLocalAudioFormats : myVoipPeer is NULL, 888 97 : Add Local Audio MediaFormat : 0 98 : Call Forwarding No Answer timer timeout. 99 : Receive CANCEL Request 100 : Cancel received 101 : Terminated from(fffffffe) this(Remote:CallClear) before((null)) forced(0) time(1365792210) 102 : DisconnectCall at Busy 103 : StopSignal 104 : Disconnect (0) 105 : Call FROM terminated reason(Remote:CallClear) 106 : Receive ACK Request 107 : Disconnected(16) at Disconnecting |
Неудачная попытка звонка, звонили с пира 3812123456 (городской номер с кодом города), аппарат 89138888888 даже не пискнул. Оператор GSM сразу переадресовал звонок на номер 89139999999. Зазвонил соответственно 89139999999.
| Цитата: |
| GS1004# 219 : ****** Call Created status(InitiatedByNet) ver(8.28:2006-02-06-00-00) time(1365792343) **** 220 : Receive INVITE Request 221 : Found inbound voip peer(10000) result(2) peer->fixedPatternSize(0) mostMatchingSize(-1) 222 : Found inbound voip peer by dest-pattern id(10000) 223 : From Net - calledParty(089138888888) callingParty(3812123456) тоже префикс 0 для выбора порта 224 : MatchedAll 225 : MatchAllProcess After Sorted id(4584) dest(0T) prefer(0) selected( 226 : Initiate callee with dial-peer(0T) status(CalleeDeterminedAll) id(00000000-0000-0000-0000- 000000000000) 227 : InitiateOutCall : calledNum(089138888888), callingNum(3812123456), callerPort(ffffffff) type(GSM) 228 : Outbound call to CEP callId(00000000-0000-0000-0000-000000000000) callNum(11) 229 : SetLocalAudioFormats : outbound(FALSE) hqaEnable(FALSE) 230 : SetLocalAudioFormats : myVoipPeer is NULL, 888 231 : Audio Count(1) 232 : rtpSessionId(1) Second Audio Port(-1) 233 : SetAlerting 234 : PreConnected from(10000) 235 : SetLocalAudioFormats : outbound(FALSE) hqaEnable(FALSE) 236 : SetLocalAudioFormats : myVoipPeer is NULL, 888 237 : Add Local Audio MediaFormat : 0 238 : Receive CANCEL Request 239 : Cancel received 240 : Terminated from(fffffffe) this(Remote:CallClear) before((null)) forced(0) time(1365792351) 241 : DisconnectCall at Busy 242 : StopSignal 243 : Disconnect (0) 244 : Call FROM terminated reason(Remote:CallClear) 245 : Receive ACK Request 246 : Disconnected(16) at Disconnecting |
В обоих случаях звонок сбрасывали, цель была не поговорить, а проверить, какой GSM-аппарат зазвонит.
Мистика какая-то. Оба вызова в аддпак приходят с ip астериска, обслуживаются одним правилом. В аддпаке тоже проходят через один и тот же порт 1/0, тоже одно правило.
Вызов с 2222 коммутируется правильно всегда внутри МТС, приходит на 89138888888, на который и звоним. Вызов с 3812123456 иногда приходит на 89138888888, но в большинстве случаев переадресовывается на 89139999999, как будто вызываемый номер недоступен.
В личном кабинете на сайте МТС стоит:
| Цитата: |
| Условие: если недоступен Переадресовывается на: номер 89139999999. |
Повторимся, что пробовали менять и сим-карту (ставили другие номера в телефоны), и сами аппараты. Разве что оператора не пробовали менять, но задача стоит сделать именно на этом операторе. И аддпак номер 89139999999 не знает, его знает только МТС.
Added after 27 minutes:
Да, предыдущий дебаг был получен командой debug voip call.
Сделали более подробный с gsm на этом порту: debug gsm 1 0 all, он ниже.
удачный звонок с 2222:
| Цитата: |
| 1185 : ****** Call Created status(InitiatedByNet) ver(8.28:2006-02-06-00-00) time(1365794232) **** 1186 : Receive INVITE Request 1187 : Found inbound voip peer(10000) result(2) peer->fixedPatternSize(0) mostMatchingSize(-1) 1188 : Found inbound voip peer by dest-pattern id(10000) 1189 : From Net - calledParty(089139999999) callingParty(2222) 1190 : MatchedAll 1191 : MatchAllProcess After Sorted id(4584) dest(0T) prefer(0) selected(9) 1192 : Initiate callee with dial-peer(0T) status(CalleeDeterminedAll) id(00000000-0000-0000-0000-000000000000) 1193 : InitiateOutCall : calledNum(089139999999), callingNum(2222), callerPort(ffffffff) type(GSM) [3998.878] GSM-1/0: RTA CALL REQUEST, 89139999999 [3998.878] GSM-1/0: GSM event(0x80000002), state( [3998.878] GSM-1/0-DEV: DIAL to 89139999999 [3998.878] GSM-1/0: CMD=atd89139999999; 1194 : Outbound call to CEP callId(00000000-0000-0000-0000-000000000000) callNum(12) 1195 : SetLocalAudioFormats : outbound(FALSE) hqaEnable(FALSE) 1196 : SetLocalAudioFormats : myVoipPeer is NULL, 888 1197 : Audio Count(1) 1198 : rtpSessionId(1) Second Audio Port(-1) 1199 : SetAlerting 1200 : PreConnected from(10000) 1201 : SetLocalAudioFormats : outbound(FALSE) hqaEnable(FALSE) 1202 : SetLocalAudioFormats : myVoipPeer is NULL, 888 1203 : Add Local Audio MediaFormat : 0 [3998.975] GSM-1/0-DEV: DIALING [4004.375] GSM-1/0-DEV: REMOTE RINGING 1204 : SIP_TREGISTER timer timeout. 1205 : localPeer->registerStat(3) 1206 : ExistInRegList(localpeer) : TRUE 1207 : WriteREGISTER 1208 : Adding authentication information 1209 : Send REGISTER Request 1210 : Receive 100 Trying 1211 : Transaction (167 REGISTER) proceeding 1212 : Receive 401 Unauthorized 1213 : Transaction (167 REGISTER) completed 1214 : No opaque in authentication 1215 : WriteREGISTER 1216 : Adding authentication information 1217 : Send REGISTER Request 1218 : Receive 100 Trying 1219 : Transaction (168 REGISTER) proceeding 1220 : Receive 200 OK 1221 : Transaction (168 REGISTER) completed 1222 : localPeer->registerStat(0) 1223 : ExistInRegList(localpeer) : TRUE 1224 : localPeer->registerStat(0) 1225 : ExistInRegList(localpeer) : TRUE 1226 : Receive CANCEL Request 1227 : Cancel received 1228 : Terminated from(fffffffe) this(Remote:CallClear) before((null)) forced(0) time(1365794246) 1229 : DisconnectCall at Busy 1230 : StopSignal 1231 : Disconnect (0) [4012.427] GSM-1/0: RTA CALL DISCONNECT 1232 : Call FROM terminated reason(Remote:CallClear) 1233 : Receive ACK Request [4012.480] GSM-1/0: RSP[0]=+WIND: 5,1 [4012.480] GSM-1/0: RSP[1]=+WIND: 2 [4012.480] GSM-1/0-DEV: HOOK ON [4012.480] GSM-1/0: CMD=ath [4012.780] GSM-1/0: RSP[0]=OK [4012.780] GSM-1/0: CALL REQUEST CANCEL [4012.780] GSM-1/0: GSM event(0x80000004), state( [4012.780] GSM-1/0: CALL DISCONNECT [4012.780] GSM-1/0-DEV: HOOK ON [4012.780] GSM-1/0: CMD=ath [4012.880] GSM-1/0: RSP[0]=OK 1234 : Disconnected(16) at Disconnecting 1235 : Set Terminated Success for 167 REGISTER 1236 : Set Terminated Success for 168 REGISTER |
неудачный звонок с 3812123456:
| Цитата: |
| 1682 : ****** Call Created status(InitiatedByNet) ver(8.28:2006-02-06-00-00) time(1365795051) **** 1683 : Receive INVITE Request 1684 : Found inbound voip peer(10000) result(2) peer->fixedPatternSize(0) mostMatchingSize(-1) 1685 : Found inbound voip peer by dest-pattern id(10000) 1686 : From Net - calledParty(089139999999) callingParty(3812123456) 1687 : MatchedAll 1688 : MatchAllProcess After Sorted id(4584) dest(0T) prefer(0) selected(12) 1689 : Initiate callee with dial-peer(0T) status(CalleeDeterminedAll) id(00000000-0000-0000-0000-000000000000) 1690 : InitiateOutCall : calledNum(089139999999), callingNum(3812123456), callerPort(ffffffff) type(GSM) [4817.655] GSM-1/0: RTA CALL REQUEST, 89139999999 [4817.655] GSM-1/0: GSM event(0x80000002), state( [4817.655] GSM-1/0-DEV: DIAL to 89139999999 [4817.655] GSM-1/0: CMD=atd89139999999; 1691 : Outbound call to CEP callId(00000000-0000-0000-0000-000000000000) callNum(15) 1692 : SetLocalAudioFormats : outbound(FALSE) hqaEnable(FALSE) 1693 : SetLocalAudioFormats : myVoipPeer is NULL, 888 1694 : Audio Count(1) 1695 : rtpSessionId(1) Second Audio Port(-1) 1696 : SetAlerting 1697 : PreConnected from(10000) 1698 : SetLocalAudioFormats : outbound(FALSE) hqaEnable(FALSE) 1699 : SetLocalAudioFormats : myVoipPeer is NULL, 888 1700 : Add Local Audio MediaFormat : 0 [4817.752] GSM-1/0-DEV: DIALING [4824.952] GSM-1/0-DEV: REMOTE RINGING 1701 : SIP_TREGISTER timer timeout. 1702 : localPeer->registerStat(3) 1703 : ExistInRegList(localpeer) : TRUE 1704 : WriteREGISTER 1705 : Adding authentication information 1706 : Send REGISTER Request 1707 : Receive 100 Trying 1708 : Transaction (201 REGISTER) proceeding 1709 : Receive 401 Unauthorized 1710 : Transaction (201 REGISTER) completed 1711 : No opaque in authentication 1712 : WriteREGISTER 1713 : Adding authentication information 1714 : Send REGISTER Request 1715 : Receive 100 Trying 1716 : Transaction (202 REGISTER) proceeding 1717 : Receive 200 OK 1718 : Transaction (202 REGISTER) completed 1719 : localPeer->registerStat(0) 1720 : ExistInRegList(localpeer) : TRUE 1721 : localPeer->registerStat(0) 1722 : ExistInRegList(localpeer) : TRUE 1723 : Set Terminated Success for 102 CANCEL 1724 : Receive CANCEL Request 1725 : Cancel received 1726 : Terminated from(fffffffe) this(Remote:CallClear) before((null)) forced(0) time(1365795061) 1727 : DisconnectCall at Busy 1728 : StopSignal 1729 : Disconnect (0) [4827.435] GSM-1/0: RTA CALL DISCONNECT 1730 : Call FROM terminated reason(Remote:CallClear) 1731 : Receive ACK Request [4827.452] GSM-1/0: RSP[0]=+WIND: 5,1 [4827.452] GSM-1/0: RSP[1]=+WIND: 2 [4827.452] GSM-1/0-DEV: HOOK ON [4827.452] GSM-1/0: CMD=ath [4827.752] GSM-1/0: RSP[0]=OK [4827.752] GSM-1/0: CALL REQUEST CANCEL [4827.752] GSM-1/0: GSM event(0x80000004), state( [4827.752] GSM-1/0: CALL DISCONNECT [4827.752] GSM-1/0-DEV: HOOK ON [4827.753] GSM-1/0: CMD=ath [4827.852] GSM-1/0: RSP[0]=OK 1732 : Disconnected(16) at Disconnecting [4829.402] GSM-1/0: CMD=at+creg? [4829.502] GSM-1/0: RSP[0]=+CREG: 2,1,"03EA","0505" [4829.502] GSM-1/0: RSP[1]=OK GSM-1/0: MON, reg status = 1 1733 : Set Terminated Success for 201 REGISTER 1734 : Set Terminated Success for 202 REGISTER |
В логи влазят всякие самоопросы, типа:
| Цитата: |
| [4012.480] GSM-1/0: CMD=ath [4012.780] GSM-1/0: RSP[0]=OK |
Но от них не избавишься.
Added after 6 minutes:
И ещё одна особенность: сейчас несколько раз звонок с 2222 также переадресовался. Ничего не меняли.
Вывод: глюк не зависит от CallerID, просто при звонке с AppDac иногда получаем "Телефон выключен".....
Теперь ещё сложнее разобраться. Учитывая, что когда вместо аддпака стоял обычный модемчик хуавей E1550, всё соединялось на ура.
Added after 45 minutes:
И ещё дополнение:
Нашлась разница в логах удачных и неудачных звонков.
Когда включается переадресация, в логах появляются строчки:
| Цитата: |
| Set Terminated Success for 102 CANCEL |
Выше видно, где она выползает.
А в другом неудачном звонке, который здесь приводится, вообще вылезли между DIALING и RINGING:
| Код: |
| [7949.477] GSM-1/0-DEV: DIALING 3616 : Set Terminated Success for 331 REGISTER 3617 : Set Terminated Success for 332 REGISTER [7956.277] GSM-1/0-DEV: REMOTE RINGING |
А ниже уже не вылезли.