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

Сброшенный вызов с мобильного

0

Привет, Еластикс 2.0.3 + GSM AddPac

При сбросе с мобильного, Еластикс отвечает что все номера заняты, где прописать чтобы система отвечала пи-пи-пи ... грубо говоря.

Спасибо!

удалить закрыть спам изменить тег редактировать

спросил 2012-11-29 16:21:50 +0400

Sherkhan Gravatar Sherkhan
155 14 3 15

2 Ответа

3

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

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($[${DIAL_TRUNK} != НОМЕР_ТРАНКА_НА_АДДПАК]?noremap)
;если транков несколько:
;exten => s,n,GotoIf($[$[${DIAL_TRUNK} !=  НОМЕР_1_ТРАНКА_НА_АДДПАК] & $[${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)
ссылка удалить спам редактировать

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

Olpag Gravatar Olpag
2024 3 6 30

обновил 2012-12-02 18:01:11 +0400

Comments

Вот это ответ!!! Спасибо! Попробую и отпишусь :)

Sherkhan ( 2012-11-30 07:38:22 +0400 )редактировать

В Addpac в cli есть много опций с разделом GSM. Покопайтесь в них, может там есть настраиваемая конвертация кодов сигнализации GSM и SIP.

Evgen ( 2012-11-30 08:56:45 +0400 )редактировать
  1. В аддпаке копался долго и тщательно, документацию перечитал вдоль и поперек, настроек кодов сигнализации не нашел....

  2. GSM здесь ни при чем, ровно такая же ситуация с FXO портами...

Olpag ( 2012-11-30 13:54:00 +0400 )редактировать

у меня не назначается переменная ${HANGUPCAUSE}, присваеваю ей "19" а когда вывожу то она "0"

romariosar ( 2014-02-12 12:52:48 +0400 )редактировать
0

у меня не стаивться переменная Hangupcause диалплан:

[incoming]
exten => 104,1,Noop(incomint start)
exten => 104,n,Set(GROUP()=test)
exten => 104,n,GotoIf($[${GROUP_COUNT(test)} > 1]?busy,s,1)
exten => 104,n,NoOp(GROUP_COUNT(test) = ${GROUP_COUNT(test)})
exten => 104,n,Answer
exten => 104,n,BackGround(hello-world)
exten => 104,n,WaitExten(5)

exten => 1,1,Dial(SIP/200)
exten => 2,1,Dial(SIP/201)
exten => h,1,HangUp
;end of incoming

[busy]
exten => s,1,Set(DIALSTATUS=CONGESTION)
exten => s,n,Set(HANGUPCAUSE=19)
exten => s,n,NoOp(DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE})
; end of busy

вот лог звонка когда звонит 2 абонент:

-- Executing [104@incoming:1] NoOp("SIP/trunk-00000016", "incomint start") in new stack
-- Executing [104@incoming:2] Set("SIP/trunk-00000016", "GROUP()=test") in new stack
-- Executing [104@incoming:3] GotoIf("SIP/trunk-00000016", "1?busy,s,1") in new stack
-- Goto (busy,s,1)
-- Executing [s@busy:1] Set("SIP/trunk-00000016", "DIALSTATUS=CONGESTION") in new stack
-- Executing [s@busy:2] Set("SIP/trunk-00000016", "HANGUPCAUSE=19") in new stack
-- Executing [s@busy:3] NoOp("SIP/trunk-00000016", "DIALSTATUS = CONGESTION and HANGUPCAUSE = 0") in new stack
-- Auto fallthrough, channel 'SIP/trunk-00000016' status is 'CONGESTION'

почему hangupcause = 0? я же вроде поставил что она 19...

[СЧИТАЙ РЕШЕНО]

назначаю значение hangupcause вот так:

exten => s,n,Hangup(19)

все выводится правильно теперь, но мне бы хотелось эту переменную задавать с помощью SET. а то у меня не задается.

теперь у меня такой диалплан

[incoming]
exten => 104,1,Noop(incomint start)
exten => 104,n,Set(GROUP()=test)
exten => 104,n,GotoIf($[${GROUP_COUNT(test)} > 1]?busy,s,1)
exten => 104,n,NoOp(GROUP_COUNT(test) = ${GROUP_COUNT(test)})
exten => 104,n,Answer
exten => 104,n,BackGround(hello-world)
exten => 104,n,WaitExten(5)

exten => 1,1,Dial(SIP/200)
exten => 2,1,Dial(SIP/201)
exten => t,1,Goto(104,2)
exten => i,1,Goto(104,2)
exten => h,1,HangUp
;end of incoming

[busy]
exten => s,1,Set(DIALSTATUS=CONGESTION)
exten => s,n,Hangup(19)
exten => h,1,NoOp(dialstatus = ${DIALSTATUS} and hangupcause = ${HANGUPCAUSE})



; end of busy
ссылка удалить спам редактировать

ответил 2014-02-12 14:46:49 +0400

romariosar Gravatar romariosar flag of Russian Federation
588 93 11 44
http://www.webunix.ru/

обновил 2014-02-12 16:00:12 +0400

Comments

http://www.voip-info.org/wiki/view/Asterisk+cmd+Dial

Note that causecode 0 is effectively a notice that the causecode has not been set.

Если не было вызова приложения Dial и, соответственно, не было кода причины завершения звонка, то невозможно изменить HANGUPCAUSE с помощью Set...

Если же был вызов Dial, то он помещает hangup result code в переменную канала HANGUPCAUSE, и после этого можно менять его с помощью Set...

То ли это баг, то ли фича астериска...

Какая версия астера у Вас? Проверил на 1.6, такой же результат...

Olpag ( 2014-02-14 15:54:34 +0400 )редактировать

11.5 походу это фича:) хотя очень жаль. Буду теперь через SET устанавливать только после DIAL.

romariosar ( 2014-02-14 21:54:53 +0400 )редактировать

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: 2012-11-29 16:21:50 +0400

Просмотрен: 4,462 раз

Обновлен: Feb 12 '14

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.