Asterisk™: будущее телефонии Второе издание
Шрифт:
fxoks=1
fxsks=2
loadzone=us
defaultzone=us
После загрузки драйверов для своего оборудования можно проверить статус оборудования с помощью команды /sbin/ztcfg -vv:
Zaptel Configuration Channel map:
Channel 01: FXO Kewlstart (Default) (Slaves: 01)
Channel 02: FXS Kewlstart (Default) (Slaves: 02)
Конфигурация оборудования Zapata
Следующая конфигурация аналогична настройке канала FXO, добавлен только раздел для FXS-порта и строка immediate=no. Контекстом FXS-порта является phones, протокол обмена сигналами - fxoks (kewlstart), номер канала - 1.
Каналы FXS можно сконфигурировать на выполнение одного из двух различных действий при снятии трубки телефона. Наиболее часто используемым (и обычно предпочтительным) вариантом для Asterisk является воспроизведение тонального сигнала готовности линии и ожидание ввода пользователя. Это действие конфигурируется строкой immediate=no.
59
Это также называют методом Batphone или, более формально, автоматическим прямым вызовом (Automatic Ringdown) либо автоматическим прямым вызовом частной линии (Private Line Automatic Ringdown, PLAR). Этот метод широко применяется на стойках оформления проката автомобилей и в аэропортах.
Вот наш новый файл zapata.conf:
[trunkgroups]
; описание всех магистральных групп
[channels]
; аппаратные каналы
; значения по умолчанию
usecallerid=yes
hidecallerid=no
callwaiting=no
threewaycalling=yes
transfer=yes
echocancel=yes
echotraining=yes
immediate=no
; описание каналов
context=phones ; Используется контекст [internal], описанный в ex.tensions.conf signalling=fxo_ks ; Для канала FXS используется протокол обмена сигналами FXO
channel => 1 ; Телефон подключается к порту 1
context=incoming ; Входящие вызовы направляются в контекст [incoming],
; описанный в extensions.conf signalling=fxs_ks ; Для канала FXO используется протокол обмена сигналами FXS channel => 2 ; PSTN подключается к порту 2
Конфигурация диалплана
Мы воспользуемся простейшим диалпланом, сконфигурированным ранее в данной главе для тестирования FXS-порта с помощью приложения Echo. Соответствующий раздел, который уже должен присутствовать в диалплане, выглядит следующим образом:
[internal]
exten => 500,1,Verbose(1|Echo test application) exten => 500,n,Echo exten => 500,n,Hangup
[phones]
include => internal Приложение Echo будет возвращать все, что вы скажете.
Конфигурация SIP-телефонов
Протокол Session Initiation Protocol (SIP) [60] , обычно применяемый в VoIP-телефонах (как аппаратных, так и программных), отвечает за установку и разъединение соединения, а также за любые изменения, происходящие во время соединения, такие как переадресации. Назначение SIP - помочь двум конечным точкам поговорить друг с другом (по возможности напрямую). Протокол SIP - это просто протокол обмена сигналами, то есть его задачей является лишь обеспечить возможность двум конечным точкам говорить друг с другом, но не работа с носителем вызова (голосом). Передача голоса осуществляется с помощью другого протокола - Real-Time Transport Protocol (транспортный протокол реального времени - RTP; RFC 3550) - для передачи медиа-данных непосредственно между двумя конечными точками.
60
RFC 3261 доступен по адресуhttp://www.ietf.org/rfc/rfc3261.txt. Документ довольно объемный, но тем, кто желает стать специалистом в Asterisk, рекомендуем прочитать по крайней мере первые 100 страниц и разобраться, как устанавливать соединения, поскольку эти знания будут необходимы для работы с историей SIP (sip debug из консоли Asterisk) и поиска с ее помощью причины невозможности установления соединений.
Термин «медиа-данные» используется здесь для обозначения данных, передаваемых между конечными точками и используемых для воссоздания голоса на противоположном конце провода. Также он может использоваться в случае воспроизведения музыки или голосовых сообщений офисной АТС.
В мире SIP конечные точки называются агентами пользователя, которые могут быть двух типов: клиент и сервер. Клиент - это конечная точка, формирующая запрос, а сервер обрабатывает этот запрос и формирует ответ. Когда конечная точка желает выполнить вызов другой конечной точки (например, наш программный телефон звонит на другой программный телефон), она формирует запрос и отправляет его на прокси-сервер SIP [61] .
Прокси-сервер принимает запрос, определяет его место назначения и направляет его туда. Если два агента пользователя успешно договорились и установили вызов, переносимый сигнал передается по RTP-протоколу и пересылается непосредственно от одного агента пользователя другому. SIP-прокси не обрабатывают медиа-данные; они просто работают с SIP-пакетами.61
OpenSER - превосходный прокси-сервер SIP с открытым исходным кодом, доступен по адресуhttp://www.ovenser.ors..
С другой стороны, Asterisk называют Back-To-Back User Agent (B2BUA). Это означает, что Asterisk действует как агент пользователя или в роли сервера (принимающий), или в роли клиента (посылающий). Итак, когда программный телефон звонит на добавочный номер, соединение устанавливается непосредственно между программным телефоном и Asterisk. Если логика, реализованная в Asterisk, определяет, что вызов адресован другому агенту пользователя, Asterisk действует как клиент и устанавливает другое соединение (известное как канал) с другим телефоном. При этом медиа-информация передается от телефона к телефону прямо через Asterisk [62] . С точки зрения телефонов они взаимодействуют непосредственно с Asterisk.
62
Максимальная длина имени пользователя - 255 символов.
Обычно это происходит в 4 часа утра после бессонных выходных перед ответственной встречей, назначенной на 8 часов утра. Red Bull, наверное, самый популярный напиток разработчиков Asterisk. Dr. Pepper - на втором месте. Кому Red Bull?
FTP является более предпочтительным, чем TFTP, потому что телефон Polycom способен различать временные метки файлов FTP. Это позволяет телефону избежать повторной загрузки конфигурационных файлов и обновлений встроенных программ, которые у него уже имеются, что сокращает время загрузки.
Базовая конфигурация SIP-телефонов в Asterisk
Конфигурация SIP-телефона для работы с Asterisk не требует много усилий и времени. Однако здесь можно легко запутаться из-за обилия опций как в Asterisk, так и в конфигурации конкретного телефонного аппарата или программного телефона. Добавьте к этому тот факт, что одни и те же вещи могут называться по-разному, - вот и прекрасный повод для того, чтобы впасть в отчаяние. Поэтому мы собираемся рассмотреть лишь самые основные вопросы. У тех, кто последует нашим советам, должно получиться заставить работать рассматриваемые здесь аппараты (а также уверенно справиться с неупомянутыми здесь телефонами). Мы не говорим, что это лучший или даже верный путь, но это самый простой путь. Намного проще взять уже работоспособную базу и настраивать ее, добиваясь необходимого решения.
Точно так же, как мы делали это для файла extensions.conf, выполните следующие команды в оболочке bash:
# mv sip.conf sip.conf.sample
# touch sip.conf
Определение SIP-устройства в Asterisk
Если внести следующие строки в файл sip.conf, можно будет зарегистрировать телефон в системе.
[general]
[1000] type=friend context=phones host=dynamic
Несимпатично, небезопасно, не обладает гибкостью, неполнофункцио- нально, но это будет работать.
Даже несмотря на то что это SIP-устройство названо 1000 и, вероятно, ему будет присвоен именно этот добавочный номер, следует отметить, что имя устройства может быть произвольным. mysipset, john, 0004f201ab0c - все эти имена действительны, широко используются и даже, возможно, больше отвечают требованиям пользователей1. Главное, чтобы присваиваемое имя было уникальным идентификатором устройства, который станет частью мандата при выполнении вызова по каналу SIP. Поскольку мы хотим как направлять вызовы в программный телефон, так и обеспечить клиенту возможность размещать вызовы, параметр type (тип) был определен как friend (друг). Существует еще два параметра: user (пользователь) и peer (равноправный участник сети). С точки зрения Asterisk user задается для входящих вызовов, а peer - для исходящих звонков (через приложение Dial). friend - это просто краткая запись, определяющая и пользователя, и равноправного участника. Если есть сомнения, задавайте тип friend.
Опция host (хост) используется для определения местонахождения клиента в сети, когда Asterisk необходимо направить ему вызов. Это значение может быть задано статически, например host=192.168.1.100, или, если клиент имеет динамический IP-адрес, задается host=dynamic. Если для опции host задано значение dynamic и клиент сконфигурирован для автоматической регистрации, Asterisk получит от конечной точки (то есть от телефонного аппарата или программного телефона) пакет REGISTER, из которого Asterisk сможет узнать, какой IP-адрес использует равноправный SIP-участник.