Страница 1 из 2
Транзит пользовательских SIP HEADERS
Добавлено: 30 июл 2025, 16:34
AlexeyFatnev
Здравствутйе, коллеги.
Подскажите, как в chan_sip работает механизм транзита Х заголовков с входящего плеча (SIP оператор) на плечо пользователя?
Нужно транслировать входящие X заголовки от оператора. Например, по умолчанию Х-number не транслируtтся, но добавление строк:
same => n,SIPAddHeader(X-number:${SIP_HEADER(X-number)})
same => n,Dial(SIP/abonent@SIP_CHANEL,180)
Решает задачу.
Не совсем понятно, почему заголовок Х-number не транслируется автоматически? В какой момент он удаляется?
Re: Транзит пользовательских SIP HEADERS
Добавлено: 31 июл 2025, 06:58
ded
Записывайте на входе все X-SIP_HEADERS в переменные (или в массив переменных) и добавляйте их на выходе через SIPAddHeader.
Заголовки Х-number, и любые кастомные, не транслируется автоматически, потому что "Астериск не SIP прокси" (c). Говоря техническим языком - он является софсвичем 5-го класса, а не 4-го.
https://ru.wikipedia.org/wiki/Softswitch
Asterisk is not a SIP proxy in the traditional sense. While it can handle SIP communication, it functions more as a back-to-back user agent (B2BUA), maintaining state for each call leg rather than simply forwarding SIP messages like a proxy.
https://www.voip-info.org/asterisk-sip-not-proxy/
Re: Транзит пользовательских SIP HEADERS
Добавлено: 31 июл 2025, 19:29
Glukinho
Первое плечо ко второму с точки зрения астериска вообще не имеет отношения, это два разных независимых канала. Одним звонком их делает только то, что они добавлены в один bridge, ну и некоторые переменные типа CALLERID прокидываются, для общего удобства. Так что пробрасывать какие-то там кастомные SIP заголовки Астериск точно не обещал, но может, если специально это сделать в диалплане.
Re: Транзит пользовательских SIP HEADERS
Добавлено: 02 авг 2025, 02:02
Zavr2008
Астериск не SIP-прокси - это верно.
Но Астериск и конструктор..
Никто не мешает через AGI парсить все X- SIP-хедеры и добавлять их.
При этом заранее ручками прописывать их не придется..
Re: Транзит пользовательских SIP HEADERS
Добавлено: 14 авг 2025, 18:26
AlexeyFatnev
Здравствуйте, все.
ded, Zavr2008:
Как транслировать заголовки понятно, но непонятно само поведение системы.
Получается что строка в контексте от входящего провайдера (он же исходящий до абонента)
same => n,SIPAddHeader(X-number:${SIP_HEADER(X-number)})
добавляет заголовок на второе плечю, при этом значение берет из такого же заголовка первого плеча?
С точки зрения программирования это выглядит как присвоение некой переменной ее же собственное значения (но если этого не сделать, то значение переменной удаляется вместе с ней самой). И получается я сразу и "на входе" и "на выходе".
ded, подскажите, где вход и выход? Возможно тут ссылка на мое старое сообщение:
viewtopic.php?t=23914
Re: Транзит пользовательских SIP HEADERS
Добавлено: 14 авг 2025, 18:44
Glukinho
С точки зрения программирования это выглядит как присвоение некой переменной ее же собственное значения
Нет, это выглядит как создание переменной в одной области видимости и присвоение ей значения из переменной с таким же именем из другой области видимости.
Re: Транзит пользовательских SIP HEADERS
Добавлено: 14 авг 2025, 20:10
AlexeyFatnev
Glukinho,
Подскажите, как тогда обратиться (получить значение) к каждой из этих двух переменных? Как к первой, понятно из моего примера. А как ко второй?
Re: Транзит пользовательских SIP HEADERS
Добавлено: 14 авг 2025, 20:37
Glukinho
В вашем примере вообще нет переменных - там есть установка SIP-заголовка для следующего канала (application SIPAddHeader) из функции, возвращающей SIP-заголовок из текущего канала (функция SIP_HEADER). Про переменные вы заговорили, ради аналогии с языком программирования.
Если уж так хочется переменные, то сделайте так:
Код: Выделить всё
Set(MY_HEADER_LEG_1=${SIP_HEADER(X-number)})
Set(__MY_HEADER_LEG_2=${MY_HEADER_LEG_1})
И потом обращайтесь к переменным MY_HEADER_LEG_1 и MY_HEADER_LEG_2 откуда угодно.
Вообще, вы что-то переусложняете. Достаточно знать, что каналы в астериске независимые и по умолчанию информация между ними не пробрасывается, уж SIP заголовки точно. На мой взгляд, это логично, ведь каналы могут быть разных технологий - например, SIP и IAX - какие тогда заголовки прокидывать?
Написали одну строчку в диалплане - теперь нужный заголовок пробрасывается, ну и всё на этом. Гибко и удобно.
Re: Транзит пользовательских SIP HEADERS
Добавлено: 15 авг 2025, 11:19
AlexeyFatnev
Glukinho,
В целом понятно, большое спасибо. Нужно это осмыслить.

Re: Транзит пользовательских SIP HEADERS
Добавлено: 15 авг 2025, 11:19
AlexeyFatnev
ded, Zavr2008:
Вам тоже спасибо за ответы.