VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Как вернуть кастомный SIP код

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

Ответить
stronciy
Сообщения: 2
Зарегистрирован: 24 фев 2013, 12:32

Как вернуть кастомный SIP код

Сообщение stronciy »

Понимаю, что вопрос покажется странным, тем не менее, возникла такая задача.

В asterisk если клиент не отвечает на звонок нужно вернуть SIP код 487 а не 486 (как сейчас), не могу нигде найти в документации, как это сделать, и вообще такое возможно, возвращать кастомный SIP код ?

Заранее благодарен.
ded
Сообщения: 15627
Зарегистрирован: 26 авг 2010, 19:00

Re: Как вернуть кастомный SIP код

Сообщение ded »

Recommended SIP <-> ISDN Cause codes (from RFC3398)
Note: Asterisk 1.8 will allow to read SIP response codes in the dialplan via

${HASH(SIP_CAUSE,<channel-name>)}

So slave SIP channels now set HASH(SIP_CAUSE,<slave-channel-name>) on each response. This permits the master channel to know how each channel dialed in a multi-channel setup resolved in an individual way.

Asterisk 1.8 also comes with a 'use_q850_reason' configuration option for generating and parsing, if available:

Reason: Q.850;cause=<cause code>

It is implemented in some gateways for better passing PRI/SS7 cause codes via SIP.
Tilghman: "The only reason we implemented the passing back of the raw SIP code in the dialplan is that the conversion to cause is lossy. That is, several SIP status codes all map back to a single ISUP cause code, and there are legitimate reasons for wanting to know which status code was received. What SHOULD happen is that if use_q850_reason is set, then the cause sent to the core should simply be the cause code in this new SIP header ("Reason: ..."), which you should be able to read in ${HANGUPCAUSE}."
The destination channel dies right after your Dial statement exits, but you can retrieve the info in the channel that's still alive :
exten => _XXX,n,Dial(SIP/${EXTEN})
exten => _XXX,n,NoOp(SIP return code : ${HASH(SIP_CAUSE,${CDR(dstchannel)})})
http://www.voip-info.org/wiki/view/Aste ... angupcause
Находится с первого клика.
stronciy
Сообщения: 2
Зарегистрирован: 24 фев 2013, 12:32

Re: Как вернуть кастомный SIP код

Сообщение stronciy »

Спасибо за ответ, уже почти разобрался но ...
Приведу живой пример, у меня есть такое правило

Код: Выделить всё

[lcall]
exten => s,1,Dial(SIP/SOFTSWITCH/${CALLERID(dnid)},,tT)
exten => s,n,NoOp(SIP return code : ${DIALSTATUS})
exten => s,n,goto(status,${DIALSTATUS})

exten => status,1,NoOp(Enter status handler)
exten => status,n(BUSY),Hangup(17)
exten => status,n(NOT_INUSE),Hangup(18)
exten => status,n(UNAVAILABLE),Hangup(18)
exten => status,n(INVALID),Hangup(18)
exten => status,n(CONGESTION),Hangup(41)

А вот дамп астериска

Код: Выделить всё

[2013-12-01 15:25:19] VERBOSE[29164][C-00004a57] chan_sip.c: -- Got SIP response 603 "Decline" back from 175.45.38.10:5060
[2013-12-01 15:25:19] VERBOSE[5403][C-00004a57] app_dial.c: -- SIP/SOFTSWITCH-00008450 is busy
[2013-12-01 15:25:19] VERBOSE[5403][C-00004a57] app_dial.c: == Everyone is busy/congested at this time (1:1/0/0)
[2013-12-01 15:25:19] VERBOSE[5403][C-00004a57] pbx.c: -- Executing [s@lcall:3] NoOp("SIP/SOFTSWITCH-0000844f", "SIP return code : BUSY") in new stack
[2013-12-01 15:25:19] VERBOSE[5403][C-00004a57] pbx.c: -- Executing [s@lcall:4] Goto("SIP/SOFTSWITCH-0000844f", "status,BUSY") in new stack
[2013-12-01 15:25:19] VERBOSE[5403][C-00004a57] pbx.c: -- Goto (lcall,status,2)
[2013-12-01 15:25:19] VERBOSE[5403][C-00004a57] pbx.c: -- Executing [status@lcall:2] Hangup("SIP/SOFTSWITCH-0000844f", "17") in new stack
Так вот GOIP в случае если клиент не отвечает на звонок отправляет мне b]"Got SIP response 603 "Decline""[/b] который астериск принемает за status,BUSY а нужно что бы было NO_USER_RESPONSE как это сделать, то есть как заставить астериску при ответе GOIP 603 понимать что это не ответили на звонок, а не то что клиент занят ?
ded
Сообщения: 15627
Зарегистрирован: 26 авг 2010, 19:00

Re: Как вернуть кастомный SIP код

Сообщение ded »

Есть определённые RFC ответы
http://www.voip-info.org/wiki/view/SIP+Response+class6
http://www.voip-info.org/wiki/view/SIP+Response+class4
и ответ Got SIP response 603 "Decline" совершенно очевидный. По этому ответу можно сделать обработку хоть голосовым сообщением, но скорее всего не через ${DIALSTATUS}.
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH