1 | изначальная версия редактировать | |
Это происхходит потому, что аддпак отдает
Got SIP response 480 "Temporarily Unavailable" back from XXX.XXX.XXX.XXX
"Dial failed for some reason with DIALSTATUS = CONGESTION and HANGUPCAUSE = 19"
а должен
Got SIP response 486 "Busy Here" back from XXX.XXX.XXX.XXX
Второй случай с точностью до наоборот:
Вы решили сделать несколько транков на аддпак и осуществляете перебор транков на астериске... В этом случае, если порт аддпака, с которого начинается перебор, занят(например порт 0/0), то перебор на следующий транк не переходит... Перебор заканчивается и слышно короткие гудки, потому что астериск получает ответ от аддпака:
Got SIP response 486 "Busy Here" back from XXX.XXX.XXX.XXX
А должно приходить - транк недоступен, а не BUSY :
Got SIP response 480 "Temporarily Unavailable" back from XXX.XXX.XXX.XXX
На аддпаке эта проблема не решается никак... во всяком, случаае, в документации я не нашел... Но можно решить ее на астериске. Используйте ремап DIALSTATUS и HANGUPCAUSE
Здесь есть хороший пример Example 3: Macro for handling hangupcause
Для случая с эластиксом, сделайте так:
В extensions_custom.conf опишите контекст [macro-dial-result]. Вместо НОМЕР_ТРАНКА_НА_АДДПАК подставьте свой номер
[macro-dial-result]
; Handles Disconnect Cause Codes
; @param ${ARG1} - cause code (optional - will try to use DIALSTATUS or HANGUPCAUSE if not set)
; @usage exten => s,1,Macro(dial-result,${HANGUPCAUSE})
exten => s,1,NoOp(Macro-dial-result)
exten => s,n,GotoIf($[${OUT_${DIAL_TRUNK}} != НОМЕР_ТРАНКА_НА_АДДПАК]?noremap)
;если транков несколько:
;exten => s,n,GotoIf($[$[${OUT_${DIAL_TRUNK}} != НОМЕР_1_ТРАНКА_НА_АДДПАК] | $[${OUT_${DIAL_TRUNK}} != НОМЕР_2_ТРАНКА_НА_АДДПАК]]?noremap)
exten => s,n,NoOp(DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE})
exten => s,n,GotoIf($[${ARG1}=17]?rc-${ARG1},1)
exten => s,n,GotoIf($[${ARG1}=19]?rc-${ARG1},1)
exten => s,n(noremap),NoOp(Not changed DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE})
; remapping USER BUSY to CONGESTION
exten => rc-17,1,Set(HANGUPCAUSE=19)
exten => rc-17,n,Set(DIALSTATUS=CONGESTION)
; remapping CONGESTION to USER BUSY
exten => rc-19,1,Set(HANGUPCAUSE=17)
exten => rc-19,n,Set(DIALSTATUS=BUSY)
Перепишите контекст [macro-dialout-trunk] из extensions_additional.conf в extensions_override_freepbx.conf и добавьте строку:
exten => s,n,Macro(dial-result,${HANGUPCAUSE}
перед строкой (она там в двух местах, надо перед обеими)
exten => s,n,Goto(s-${DIALSTATUS},1)
2 | No.2 Revision редактировать |
Это происхходит потому, что аддпак отдает
Got SIP response 480 "Temporarily Unavailable" back from XXX.XXX.XXX.XXX
"Dial failed for some reason with DIALSTATUS = CONGESTION and HANGUPCAUSE = 19"
а должен
Got SIP response 486 "Busy Here" back from XXX.XXX.XXX.XXX
Второй случай с точностью до наоборот:
Вы решили сделать несколько транков на аддпак и осуществляете перебор транков на астериске... В этом случае, если порт аддпака, с которого начинается перебор, занят(например порт 0/0), то перебор на следующий транк не переходит... Перебор заканчивается и слышно короткие гудки, потому что астериск получает ответ от аддпака:
Got SIP response 486 "Busy Here" back from XXX.XXX.XXX.XXX
А должно приходить - транк недоступен, а не BUSY :
Got SIP response 480 "Temporarily Unavailable" back from XXX.XXX.XXX.XXX
На аддпаке эта проблема не решается никак... во всяком, случаае, в документации я не нашел... Но можно решить ее на астериске. Используйте ремап DIALSTATUS и HANGUPCAUSE
Здесь есть хороший пример Example 3: Macro for handling hangupcause
Для случая с эластиксом, сделайте так:
В extensions_custom.conf опишите контекст [macro-dial-result]. Вместо НОМЕР_ТРАНКА_НА_АДДПАК подставьте свой номер
[macro-dial-result]
; Handles Disconnect Cause Codes
; @param ${ARG1} - cause code (optional - will try to use DIALSTATUS or HANGUPCAUSE if not set)
; @usage exten => s,1,Macro(dial-result,${HANGUPCAUSE})
exten => s,1,NoOp(Macro-dial-result)
exten => s,n,GotoIf($[${OUT_${DIAL_TRUNK}} != НОМЕР_ТРАНКА_НА_АДДПАК]?noremap)
;если транков несколько:
;exten => s,n,GotoIf($[$[${OUT_${DIAL_TRUNK}} != НОМЕР_1_ТРАНКА_НА_АДДПАК] | & $[${OUT_${DIAL_TRUNK}} != НОМЕР_2_ТРАНКА_НА_АДДПАК]]?noremap)
exten => s,n,NoOp(DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE})
exten => s,n,GotoIf($[${ARG1}=17]?rc-${ARG1},1)
exten => s,n,GotoIf($[${ARG1}=19]?rc-${ARG1},1)
exten => s,n(noremap),NoOp(Not changed DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE})
; remapping USER BUSY to CONGESTION
exten => rc-17,1,Set(HANGUPCAUSE=19)
exten => rc-17,n,Set(DIALSTATUS=CONGESTION)
; remapping CONGESTION to USER BUSY
exten => rc-19,1,Set(HANGUPCAUSE=17)
exten => rc-19,n,Set(DIALSTATUS=BUSY)
Перепишите контекст [macro-dialout-trunk] из extensions_additional.conf в extensions_override_freepbx.conf и добавьте строку:
exten => s,n,Macro(dial-result,${HANGUPCAUSE}
s,n,Macro(dial-result,${HANGUPCAUSE})
перед строкой (она там в двух местах, надо перед обеими)
exten => s,n,Goto(s-${DIALSTATUS},1)
3 | No.3 Revision редактировать |
Это происхходит потому, что аддпак отдает
Got SIP response 480 "Temporarily Unavailable" back from XXX.XXX.XXX.XXX
"Dial failed for some reason with DIALSTATUS = CONGESTION and HANGUPCAUSE = 19"
а должен
Got SIP response 486 "Busy Here" back from XXX.XXX.XXX.XXX
Второй случай с точностью до наоборот:
Вы решили сделать несколько транков на аддпак и осуществляете перебор транков на астериске... В этом случае, если порт аддпака, с которого начинается перебор, занят(например порт 0/0), то перебор на следующий транк не переходит... Перебор заканчивается и слышно короткие гудки, потому что астериск получает ответ от аддпака:
Got SIP response 486 "Busy Here" back from XXX.XXX.XXX.XXX
А должно приходить - транк недоступен, а не BUSY :
Got SIP response 480 "Temporarily Unavailable" back from XXX.XXX.XXX.XXX
На аддпаке эта проблема не решается никак... во всяком, случаае, в документации я не нашел... Но можно решить ее на астериске. Используйте ремап DIALSTATUS и HANGUPCAUSE
Здесь есть хороший пример Example 3: Macro for handling hangupcause
Для случая с эластиксом, сделайте так:
В extensions_custom.conf опишите контекст [macro-dial-result]. Вместо НОМЕР_ТРАНКА_НА_АДДПАК подставьте свой номер
[macro-dial-result]
; Handles Disconnect Cause Codes
; @param ${ARG1} - cause code (optional - will try to use DIALSTATUS or HANGUPCAUSE if not set)
; @usage exten => s,1,Macro(dial-result,${HANGUPCAUSE})
exten => s,1,NoOp(Macro-dial-result)
exten => s,n,GotoIf($[${OUT_${DIAL_TRUNK}} s,n,GotoIf($[${DIAL_TRUNK} != НОМЕР_ТРАНКА_НА_АДДПАК]?noremap)
;если транков несколько:
;exten => s,n,GotoIf($[$[${OUT_${DIAL_TRUNK}} s,n,GotoIf($[$[${DIAL_TRUNK} != НОМЕР_1_ТРАНКА_НА_АДДПАК] & $[${OUT_${DIAL_TRUNK}} $[${DIAL_TRUNK} != НОМЕР_2_ТРАНКА_НА_АДДПАК]]?noremap)
exten => s,n,NoOp(DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE})
exten => s,n,GotoIf($[${ARG1}=17]?rc-${ARG1},1)
exten => s,n,GotoIf($[${ARG1}=19]?rc-${ARG1},1)
exten => s,n(noremap),NoOp(Not changed DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE})
; remapping USER BUSY to CONGESTION
exten => rc-17,1,Set(HANGUPCAUSE=19)
exten => rc-17,n,Set(DIALSTATUS=CONGESTION)
; remapping CONGESTION to USER BUSY
exten => rc-19,1,Set(HANGUPCAUSE=17)
exten => rc-19,n,Set(DIALSTATUS=BUSY)
Перепишите контекст [macro-dialout-trunk] из extensions_additional.conf в extensions_override_freepbx.conf и добавьте строку:
exten => s,n,Macro(dial-result,${HANGUPCAUSE})
перед строкой (она там в двух местах, надо перед обеими)
exten => s,n,Goto(s-${DIALSTATUS},1)
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.