Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

История изменений [назад]

нажмите, чтобы скрыть/показать версии 1
изначальная версия
редактировать

ответил 2012-11-30 00:04:29 +0400

Olpag Gravatar Olpag

Это происхходит потому, что аддпак отдает

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)

Это происхходит потому, что аддпак отдает

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)

Это происхходит потому, что аддпак отдает

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.