Страница 1 из 1

Получение HANGUPCAUSE из Reason: Q.850

Добавлено: 21 июн 2021, 07:41
kt72ru
Добрый день!

Подскажите пожалуйста, как можно получить код отбоя из поля Reason: Q.850;cause=<cause code>?
Пробовал читать переменную HANGUPCAUSE, но возвращается не тот код что присылает оператор. Оператор присылает 99, а астериск возвращает 29. Опция use_q850_reason включена. Версия Asterisk 13.18.2

Re: Получение HANGUPCAUSE из Reason: Q.850

Добавлено: 21 июн 2021, 09:53
Zavr2008
Что мешает прямо читать SIP header и парсить regexp нужный текст и код сам?

Re: Получение HANGUPCAUSE из Reason: Q.850

Добавлено: 21 июн 2021, 09:55
ded
Вопрос не понятен.
Ответы протокола SIP - response codes - вторичны по отношению к ISDN кодам,
99 - Information element nonexistent or not implemented.
29 - Facility rejected.
https://downloads.avaya.com/elmodocs2/i ... (isdn).htm

https://www.3cx.com/pbx/sip-responses/

Так что ориентироваться можно именно на первичные ISDN коды. При Hangup можно пробовать указывать код в некоторых пределах, типа
exten => Hangup(99)

Re: Получение HANGUPCAUSE из Reason: Q.850

Добавлено: 21 июн 2021, 09:59
kt72ru
Я бы с удовольствием спарсил и разобрал, но нужного инструмента не нашел. SIP_HEADER читает только INVITE.

Re: Получение HANGUPCAUSE из Reason: Q.850

Добавлено: 21 июн 2021, 10:01
kt72ru
вопрос простой, как и чем можно получить код отбоя из Reason: Q.850;cause=<cause code>.

Re: Получение HANGUPCAUSE из Reason: Q.850

Добавлено: 21 июн 2021, 11:29
ded
Вопрос не простой. 11 лет назад такой вопрос возникал,
https://asterisk-dev.digium.narkive.com ... ause-codes
и на него был получен ответ:
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 header,
which you should be able to read in ${HANGUPCAUSE}.
Те есть несколько статусов SIP мапятся на один и тот же ISDN (ISUP) код, и, если включена поддержка Q.850, в ядро должен отправляться тот код отбоя, который содержиться в переменной ${HANGUPCAUSE}.