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

Поле Reason: Q.850; Cause=xx; text=bla-bla-bla - как выдрать

Добавлено: 18 мар 2012, 15:06
Lonely_Ghost
Всем привет.

Такая задача: в CDR(userfield) записывать коды отбоев по Q.850. Астериск их выдает, к примеру в этом SIP Response:

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

SIP/2.0 503 Service Unavailable
From: "3XXXXXX" <sip:3XXXXXX@XX.XX.XX.XX>;tag=r9ymemKZm09Hc
To: <sip:093XXXXXXX@YY.YY.YY.YY>;tag=as66f5b3c6
Call-ID: b7417c10-e2e3-122f-1599-0007e90acb8e
CSeq: 25222119 INVITE
Server: Session Border Controller
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH
Supported: replaces, timer
Reason: Q.850;cause=34;text="no circuit/channel available"
Content-Length: 0
Вот и интересует, как выдрать из SIP Response значение поля:

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

Reason: Q.850;cause=34;text="no circuit/channel available"
И загнать в переменную? Хочу загнать потом в ${CDR(userfield)}. Дабы бородатым дядям-телефонистам, сенсеям по ОКС-7 была понятнее причина отбоя:)

${SIP_HEADER(Reason)} не канает, ибо работает только с INVITE.

Asterisk 10.2.1. Есть идеи?

Re: Поле Reason: Q.850; Cause=xx; text=bla-bla-bla - как выд

Добавлено: 18 мар 2012, 15:18
ys1797
Бздыч в "use_q850_reason" в sip.conf и смотрим hangupcause

Re: Поле Reason: Q.850; Cause=xx; text=bla-bla-bla - как выд

Добавлено: 18 мар 2012, 15:26
Lonely_Ghost
Это не ответ.

Поле

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

Reason: Q.850;cause=34;text="no circuit/channel available"
приходит от Астериска благодаря use_q850_reason=yes в sip.conf.
И ${HANGUPCAUSE} тут не поможет. Перечитайте плз вопрос более вдумчиво.
Я хочу получить полностью весь текст

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

Q.850;cause=34;text="no circuit/channel available"
и загнать в CDR.

Re: Поле Reason: Q.850; Cause=xx; text=bla-bla-bla - как выд

Добавлено: 18 мар 2012, 15:55
Vlad1983
сенсеи по ОКС-7 помнят все коды наизусть.
им достаточно только номера без текста.

Re: Поле Reason: Q.850; Cause=xx; text=bla-bla-bla - как выд

Добавлено: 19 мар 2012, 10:05
Obi Van
Lonely_Ghost
Уже давно юзаю такое:

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

exten => log,n(send),JabberSend(asterisk,${JABBER_PEER_ADDR},"Исходящий вызов в ${STRFTIME(,,%Y-%m-%d)}_${STRFTIME(,,%H-%M-%S)} от ${CDR(src)} на номер ${dialed_num} длительностью ${ANSWEREDTIME} сек. был завершён со статусом HANGUPCAUSE = ${HANGUPCAUSE}. Статус вызова ${DIALSTATUS}. Оператор связи был '${CDR(accountcode)}'.")
Собсно говоря, тоже были мыслишки загонять статус в CDR, а также иметь текстовое поле для описания, вместо статусов 17 и 16. Не пришло вголову ничего иного как запилить базу, в которой сопоставлять цифры с текстом и валить в жабер. Чем даже сейчас удобна такая оповещалка. Человек после каждого вызова (если ему нужно) получает в джабер сообщение о прошлом вызове, что даёт возможность понять "почему всё время занято" и т.п. С текстом будет удобнее само собой. Вот времени запилить нет. :roll:

Re: Поле Reason: Q.850; Cause=xx; text=bla-bla-bla - как выд

Добавлено: 19 мар 2012, 16:31
Lonely_Ghost
Да, с базой отбоев чем не варик... :)
Спс, щас бум мутить.

Re: Поле Reason: Q.850; Cause=xx; text=bla-bla-bla - как выд

Добавлено: 19 мар 2012, 23:36
Lonely_Ghost
Та ниче не мешало :) Спросил на нескольких ресурсах. И что? Может у кого другая идея возникнет.
Это нормально, switch, не вижу причины возникать.