Модуль SIP канала Asterisk


Модуль SIP канала дает возможность серверу Asterisk работать с SIP телефонами и узлами. Сервер Asterisk может выступать в следующей роли:

  • SIP клиент: Это подразумевает, что Asterisk регистрируется как клиент на другом SIP сервере и совершает вызовы и принимает их через этот сервер. Входящие вызовы маршрутизируются на номер екстеншена, который прописан в Asterisk.
  • SIP сервер: Asterisk может быть сконфигурирован так, чтобы SIP клиенты (телефоны, программные клиенты) регистрировались на нем и устанавливали SIP сессии через этот сервер, т.е. совершали и отвечали на вызовы. Стоит отметить, что Asterisk - это не сервер, который может поддерживать всю функциональность SIP протокола, которую может предоставить, например, SIP express router. Если количество SIP телефонов у Вас исчисляется тысячами, Вам, наверно, стоит использовать SER а вызовы на голосовую почту и во внешний мир перенаправлять серверу Asterisk.
  • SIP шлюз: Сервер Asterisk может выступать в роли шлюза медиаданных между SIP, IAX, MGCP, H.323 и PSTN соединениями. Как пример, сервер Asterisk может быть соединен с общей телефонной сетью через ISDN, и предоставлять возможность Вашим SIP клиентам это соединение для выхода в публичную телефонную сеть.
  • Почему Asterisk не является SIP прокси сервером?

Замечания

  • Сервер Asterisk поддерживает ENUM — смотри: Asterisk config enum.conf.
  • Сервер Asterisk поддерживает DNS записи DNS SRV, где определяются SIP прокси сервера при вызовах с использованием Интернет доменов. Смотри: Asterisk SIP srvlookup
  • Когда и зачем Asterisk выступает в роли шлюза для медиаданных при использовании вызовов через SIP канал? - смотри: Asterisk SIP media path
  • Сервер Asterisk поддерживает вызовы с использованием SIP URL.
  • Сервер Asterisk поддерживает SIP коммуникацию по протоколу UDP, но не поддерживает TCP протокол в роли транспортного протокола.
  • Вы можете хранить конфигурацию Ваших SIP устройств в базе данных для использования динамической конфигурации , смотри: Asterisk Realtime Sip

Конфигурация SIP каналов

Конфигурация SIP каналов производиться редактированием файла конфигурации sip.conf. Смотри:


Использование команды Dial для SIP каналов

Запомните, что формат команды Dial выглядит примерно так:

Dial(type/identifier,timeout,options,URL)

Для каналов SIP, параметр type всегда имеет значение - SIP. Остальные аргумент: timeout, options и URL описаны на странице описания команды Dial.

Параметр identifier может состоять из следующих трех частей:

[ exten@]peer [ :portno]

  • peer: имя вызываемого клиента. Это может быть одним из следующих значений:
    • клиент типа "peer" или "friend", который описан в файле sip.conf.
    • IP адрес (типа 192.168.1.8)
    • имя домена (например: asterisk.org). Для имен доменов, сервер Asterisk сначала ищет запись DNS SRV для данного имени домена (Если параметр srvlookup установлен). Если запись найдена, то она сообщает серверу Asterisk, к какому компьютеру нужно соединиться. Если для данного домена нет SRV записи, тогда Asterisk будет пытаться напрямую соединиться с указанной машиной.
  • portno: используемый UDP порт. Если не указан, Asterisk будет использовать стандартный SIP порт - 5060.
  • exten: если задан этот параметр, тогда Asterisk будет запрашивать удаленный сервер соединение с екстеншеном exten.

Замечание: Если Вы используете в качестве идентификатора записи типа "peer" или "friend", (т.е. заголовки секций, описанные в файле sip.conf), то только в этом случае имеется возможность использовать соответствующие параметры для авторизации и других действий.

Ниже приведено несколько примеров использования команды Dial, в том виде, в каком она может присутствовать в Вашем плане набора:

exten => s,1,Dial(SIP/ipphone)
; Вызов SIP клиента "ipphone", в соответствии с его параметрами в файле sip.conf
exten => s,1,Dial(SIP/john@foo.com)
; Вызвать абонента "john" на сервере foo.com
exten => s,1,Dial(SIP/192.168.1.8:9999,20)
; Отправить вызов на адрес 192.168.1.8 по порту 9999, с таймаутом ожидания - 20 секунд.
exten => s,1,Dial(SIP/8500@sip.com:9876)
; Соединиться с sip.com по порту 9876, запросить соединение с екстеншеном 8500.

Различные стили сигналов вызова (звонка)

Пока еще не существует стандарта для того, чтобы сообщить SIP телефону, каким типом звонка должен звонить вызываемый Вами телефон. Для SIP аппаратов, которые поддерживают различные типы вызывного сигнала (звонка), точный метод его указания зависит от модели самого телефона и варьируется от одной модели к другой. Часто (или всегда?) тип звонка определяется при помощи отправки SIP заголовка: "Alert-info", но вот сами значения для этого заголовка обычно не совместимы для различных телефонов. Как мы выяснили, для определения звонка, Asterisk должен передать SIP заголовок: "Alert-info", теперь для того, чтобы Asterisk отправлял его, нам необходимо установить переменную канала "ALERT_INFO" в нужное значение, перед использованием команды Dial (для версий 1.0.x):

exten => s,1,SET(ALERT_INFO=something)
exten => s,2,Dial(SIP/myphone)

В SVN версии и с версии Asterisk 1.0.x - переменная ALERT_INFO более не является специальной переменной, которая используется в канале для совершения исходящего вызова. Вместо этого, используется механизм, где специальные переменные определяются путем добавления префикса "_" к ее имени. В версии CVS HEAD, должна использоваться следующая конструкция, вместо той, что приведена выше:

exten => s,1,SET(_ALERT_INFO=something)
exten => s,2,Dial(SIP/myphone)

Для того, чтобы узнать, как сделать, чтобы именно Ваш SIP телефон звонил различными сигналами вызовов, попробуйте поискать информацию по этому поводу в следующих местах:
  • Замечания по настройке различных телефонов для Asterisk
  • Google
  • В описании на Ваш телефон.
  • На сайте производителя Вашего телефона.

Смотри также: MySQL custom ringtones

VXML_URL

Телефоны, которые используют SCCP (skinny) firmware, имеют некоторую поддержку для получения XML страниц. Если Вы хотите проверить это, установите переменную VXML_URL указатель на то место, где находиться файл "Cisco XML" на web сервере.

При этом добавиться информация к SIP заголовку "To:" в сообщении. Эта возможность может использоваться в различных целях, если телефоны имеют возможность получить указанную дополнительную информацию, когда она указана. Например:

exten => s,1,SetVar(VXML_URL=foobar)
exten => s,2,Dial(SIP/john)

В результате, SIP заголовок "To:" будет выглядеть примерно так:

To: ;foobar

Входящие вызовы по протоколу SIP

Когда сервер Asterisk принимает входящий SIP вызов , Модуль SIP канала делает следующее:
  • сначала пробует найти секцию [user] из файла sip.conf, совпадающую с именем вызывающего абонента (заголовок "From: username"),
  • потом пробует найти секцию [peer] из файла sip.conf, где IP адрес совпадает с адресом вызывающего клиента.
  • Если не найдено подходящих клиентов или пиров, вызов будет передан в контекст, определенный в секции [general] файла sip.conf.
Смотри: Asterisk SIP user vs peer

Имена установленных соединений по протоколу SIP

Когда у вас имеется установленное соединение по протоколу SIP, то имя канала будет иметь такой формат:

SIP/peer-id

Поле peer - идентифицирует клиента, а id - это случайный идентификатор, используемый для уникальной идентификации канала, потому что с одним SIP клиентом может быть установлено несколько сеансов связи.

SIP/ipphone-45ed721c — SIP вызов, поступивший от клиента "ipphone"
SIP/192.168.1.8-01fb34d6 — SIP сеанс с IP адреса: 192.168.1.8

Замечание: Когда вы используете команду ChanIsAvail, возвращаемое имя канала будет именно в этом формате.

Очень часто используется команда Cut для извлечения части с типом канала из полного имени канала. Предположим, что переменная Foo содержит значение: "SIP/ipphone-45ed721c":

Cut(ChannelType=Foo,/,1)

Теперь переменная ChannelType имеет значение "SIP". С помощью команды GotoIf, Вы можете проверить, является ли канал - SIP каналом:

GotoIf($[${ChannelType} = SIP]?10)

Если Вам необходимо извлечь имя клиента из имени канала, то можно использовать две команды Cut. Если переменная Foo содержит значение: "SIP/ipphone-45ed721c", то, после выполнения следующих двух команд, переменная Bar будет содержать значение: "ipphone":

Cut(Bar=Foo,/,2)
Cut(Bar=Bar,-,1)

Обратите внимание, что Вы не должны определять SIP клиентов в файле sip.conf, имена секций которых содержат дефис. В противном случае, попутка использовать команду Cut для таких клиентов, когда имя канала выглядит примерно так: "SIP/my-name-83ee2891", приведет к тому, что Вы получите только "my"!

Консоль сервера Asterisk

Модуль SIP канала добавляет дополнительные команды, которые могут использоваться в Asterisk CLI консоли. Например, для следующих целей:

  • для проверки состояния Ваших SIP регистраций на других серверах, с помощью команды: "sip show registry";
  • для получения списка клиентов, которые зарегистрировались на Вашем сервере, с помощью команды: "sip show peers";
  • для того, чтобы после того как Вы внесли изменения в файл sip.conf, перегрузить модуль SIP канала, при помощи команды: "sip reload".

Смотри раздел: Asterisk CLI Console, чтобы получить полный список доступных для канала SIP и примеры их использования.

Ссылки по теме:



Asterisk | Каналы Asterisk