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

Транзит пользовательских SIP HEADERS

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

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

Ответить
AlexeyFatnev
Сообщения: 29
Зарегистрирован: 26 май 2022, 18:04

Транзит пользовательских SIP HEADERS

Сообщение 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 не транслируется автоматически? В какой момент он удаляется?
ded
Сообщения: 15688
Зарегистрирован: 26 авг 2010, 19:00

Re: Транзит пользовательских SIP HEADERS

Сообщение 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/
Glukinho
Сообщения: 694
Зарегистрирован: 07 янв 2011, 20:05

Re: Транзит пользовательских SIP HEADERS

Сообщение Glukinho »

Первое плечо ко второму с точки зрения астериска вообще не имеет отношения, это два разных независимых канала. Одним звонком их делает только то, что они добавлены в один bridge, ну и некоторые переменные типа CALLERID прокидываются, для общего удобства. Так что пробрасывать какие-то там кастомные SIP заголовки Астериск точно не обещал, но может, если специально это сделать в диалплане.
Аватара пользователя
Zavr2008
Сообщения: 2245
Зарегистрирован: 27 янв 2011, 00:35
Контактная информация:

Re: Транзит пользовательских SIP HEADERS

Сообщение Zavr2008 »

Астериск не SIP-прокси - это верно.
Но Астериск и конструктор..
Никто не мешает через AGI парсить все X- SIP-хедеры и добавлять их.
При этом заранее ручками прописывать их не придется..
Российские E1 шлюзы Alvis. Модернизация УПАТС с E1, настройка Asterisk/FreePBX, подключение CRM
AlexeyFatnev
Сообщения: 29
Зарегистрирован: 26 май 2022, 18:04

Re: Транзит пользовательских SIP HEADERS

Сообщение AlexeyFatnev »

Здравствуйте, все.

ded, Zavr2008:

Как транслировать заголовки понятно, но непонятно само поведение системы.

Получается что строка в контексте от входящего провайдера (он же исходящий до абонента)

same => n,SIPAddHeader(X-number:${SIP_HEADER(X-number)})

добавляет заголовок на второе плечю, при этом значение берет из такого же заголовка первого плеча?
С точки зрения программирования это выглядит как присвоение некой переменной ее же собственное значения (но если этого не сделать, то значение переменной удаляется вместе с ней самой). И получается я сразу и "на входе" и "на выходе".

ded, подскажите, где вход и выход? Возможно тут ссылка на мое старое сообщение:

viewtopic.php?t=23914
Glukinho
Сообщения: 694
Зарегистрирован: 07 янв 2011, 20:05

Re: Транзит пользовательских SIP HEADERS

Сообщение Glukinho »

С точки зрения программирования это выглядит как присвоение некой переменной ее же собственное значения
Нет, это выглядит как создание переменной в одной области видимости и присвоение ей значения из переменной с таким же именем из другой области видимости.
AlexeyFatnev
Сообщения: 29
Зарегистрирован: 26 май 2022, 18:04

Re: Транзит пользовательских SIP HEADERS

Сообщение AlexeyFatnev »

Glukinho,

Подскажите, как тогда обратиться (получить значение) к каждой из этих двух переменных? Как к первой, понятно из моего примера. А как ко второй?
Glukinho
Сообщения: 694
Зарегистрирован: 07 янв 2011, 20:05

Re: Транзит пользовательских SIP HEADERS

Сообщение 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 - какие тогда заголовки прокидывать?

Написали одну строчку в диалплане - теперь нужный заголовок пробрасывается, ну и всё на этом. Гибко и удобно.
AlexeyFatnev
Сообщения: 29
Зарегистрирован: 26 май 2022, 18:04

Re: Транзит пользовательских SIP HEADERS

Сообщение AlexeyFatnev »

Glukinho,

В целом понятно, большое спасибо. Нужно это осмыслить. :-)
AlexeyFatnev
Сообщения: 29
Зарегистрирован: 26 май 2022, 18:04

Re: Транзит пользовательских SIP HEADERS

Сообщение AlexeyFatnev »

ded, Zavr2008:

Вам тоже спасибо за ответы.
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH