Asterisk™: будущее телефонии Второе издание - Меггелен Джим Ван
два), можно использовать и его. Просто помните, что в этом случае понадобится изменить приложение Dial() так, чтобы вызовы направлялись на SIP-телефон по SIP-протоколу, а не IAX2 (то есть строку
Dial(IAX2/${EXTEN},30) необходимо заменить на Dial(SIP/${EXTEN},30)). Файл extensions.conf для Торонто:
[globals]
[general]
autofallthrough=yes [default] [incoming_calls] [phones]
include => internal include => remote
[internal]
exten => _1XXX,1,NoOp()
exten => _1XXX,n,Dial(IAX2/${EXTEN},30)
exten => _1XXX,n,Playback(the-party-you-are-calling&is-curntly-unavail) exten => _1XXX,n,Hangup()
[remote]
exten => _2XXX,1,NoOp()
exten => _2XXX,n,Dial(IAX2/toronto/${EXTEN}) exten => _2XXX,n,Hangup()
[toronto_incoming] include => internal
Файл extensions.conf для Осаки:
[globals]
[general]
autofallthrough=yes [default] [incoming_calls] [phones]
include => internal include => remote
[internal]
exten => _2XXX,1,NoOp()
exten => _2XXX,n,Dial(IAX2/${EXTEN},30)
exten => _2XXX,n,Playback(the-party-you-are-calling&is-curntly-unavail) exten => _2XXX,n,Hangup()
[remote]
exten => _1XXX,1,NoOp()
exten => _1XXX,n,Dlal(IAX2/osaka/${EXTEN})
exten => _1XXX,n,Hangup()
[osaka_lncomlng] include => internal
Использование шаблонов в конфигурационных файлах
С конфигурационными файлами Asterisk связан один очень малоизвестный факт, но он настолько замечательный, что заслуживает отдельного небольшого раздела.
Скажем, имеется 20 SIP-телефонов, практически идентичных с точки зрения конфигурации. Согласно документации они должны описываться путем задания параметров для каждого телефона в отдельности. Фрагмент подобного файла sip.conf мог бы выглядеть так:
[1000]
type=friend
context=internal
host=dynamic
disallow=all
allow=ulaw
dtmfmode=rfc2833
maibox=1000
secret=AllYourSetsAreBelongToUs
[1001]
type=friend
context=internal
host=dynamic
disallow=all
allow=ulaw
dtmfmode=rfc2833
maibox=1001
secret=AllYourSetsAreBelongToUs
[1002]
type=friend
context=internal
host=dynamic
disallow=all
allow=ulaw
dtmfmode=rfc2833
maibox=1002
secret=AllYourSetsAreBelongToUs
Слишком много ввода текста, копирования и вставки, правда? А что если требуется изменить имя контекста для телефонов. Не очень удобно, не так ли?
Вводим шаблон. Давайте создадим таких же участников сети типа friend, как делали выше, только на этот раз используя шаблон:
[sets](!) ; <== обратите внимание, восклицательный знак ; взят в круглые скобки. Это признак шаблона. type=friend context=internal host=dynamic disallow=all allow=ulaw dtmfmode=rfc2833 secret=AllYourSetsAreBelongToUs
1000] (sets) ; <== обратите внимание, имя шаблона взято
; в круглые скобки. Все настройки этого шаблона ; будут унаследованы.
maibox=1000
1001] (sets) maibox=1001
1002] (sets) maibox=1002
Это одна из самых малоизвестных возможностей создания конфигурационного файла. Очень немногие пользуются этой возможностью, но лишь потому, что мало кто знает о ней. Итак, пришло время перемен. С этого момента мы хотим видеть, что шаблонами пользуются все; и да, мы будем проверять.
Отладка
В Asterisk предлагается несколько методов отладки. Подключившись к консоли, можно управлять отладкой и уровнем детальности сообщений, а также трассировкой пакетов протокола. В данном разделе рассмотрим доступные варианты.
Подключение к консоли
Чтобы подключиться к консоли Asterisk, можно или запустить сервер непосредственно из консоли (в этом случае невозможно будет выйти из консоли, не завершив работу Asterisk), или запустить Asterisk как демон и затем подключиться к удаленной консоли.
Чтобы запустить процесс Asterisk непосредственно из консоли, используйте флаг консоли: # /usr/sbin/asterisk -c
Чтобы подключиться к удаленной консоли, сначала запустите демон, а затем выполните подключение, используя флаг -r:
# /usr/sbin/asterisk
# /usr/sbin/asterisk -r
Если какой-то модуль не загружается или Asterisk не загружается из- за какого-то модуля, запустите Asterisk с флагом -c, чтобы отслеживать статус загружаемых модулей. Например, если при попытке загрузить драйвер канала OSS (который позволяет использовать канал CONSOLE (консоль)) Asterisk не может открыть /dev/dsp, при запуске будет получено сообщение о такой ошибке:
WARNING[32174]: chan_oss.c:470 soundcard_init: Unable to open /dev/dsp:
No such file or directory
== No sound card detected -- console channel will be unavailable
== Turn off OSS support by adding 'noload=chan_oss.so' in /etc/asterisk/ modules.conf
WARNING[32174]: chan_oss.c:470 soundcard_init: Не получается
открыть /dev/dsp:
Файл или каталог не существует
== Звуковая карта не найдена - канал консоли будет недоступен
== Отключите поддержку OSS, добавив 'noload=chan_oss.so' в /etc/asterisk/modules.conf
Изменение детальности сообщений и включение отладки
Asterisk может выводить отладочную информацию в форме сообщений WARNING (предупреждение), NOTICE (извещение) и ERROR (ошибка). Эти сообщения предоставляют информацию о системе, такую как регистрационные данные, статус, последовательность вызовов и другие полезные сведения. Обратите внимание, что сообщения WARNING и NOTICE не являются сообщениями об ошибках; а вот к сообщениям ERROR необходимо относиться внимательно. Уровень детальности сообщений можно задать с помощью команды set verbose и числового значения. Диапазон допустимых значений - от 3 до 10. Например, чтобы задать самый высокий уровень детальности, используется команда
# set verbose 10
Также можно активировать вывод основных сообщений отладки с помощью команды set debug и числового значения. Чтобы активировать вывод сообщений DEBUG (отладка) в консоли, возможно, понадобится в файле logger.conf добавить debug в выражение console =>:
console => warning,notice,error,event,debug Диапазон допустимых значений для set debug - от 3 до 10. Например:
# set debug 10
Заключение
Проработав все разделы данной главы, вы должны получить пару сконфигурированных аналоговых интерфейсов, локальные каналы SIP и IAX2, подключенные к программному и/или аппаратному телефону, и иметь возможность передавать вызовы через серверы по протоколам SIP и IAX2. Эти настройки элементарны, но благодаря им мы имеем функциональные каналы, с которыми можно работать. Мы будем использовать их в следующих главах, пока не научимся создавать более функциональные диалпланы.5
Основы диаллана
Все должно быть сделано настолько просто, насколько это возможно, но не проще. - Альберт Эйнштейн (1879-1955)
Диалплан, поистине, - сердце любой системы Asterisk, поскольку он определяет, как Asterisk обрабатывает входящие и исходящие вызовы. По сути, он состоит из списка инструкций или шагов, которым будет следовать Asterisk. В отличие от традиционных систем телефонной связи, диалплан Asterisk является полностью настраиваемым. Чтобы добиться успеха в построении собственной системы Asterisk, необходимо понять концепцию диалплана.
Если вы пытались прочитать некоторые примеры диалпланов и сочли их невыполнимыми или пробовали написать диалплан Asterisk и не достигли успеха, не отчаивайтесь, помощь близка. Данная глава шаг за шагом объяснит, как работает диалплан. Прочитав ее, вы приобретете навыки, необходимые для создания собственного диалплана. Все примеры дополняют друг друга, поэтому можно свободно вернуться назад и перечитать раздел, если что-то непонятно. Однако, пожалуйста, обратите внимание, что данная глава ни в коем случае не является исчерпывающим обзором всех возможностей диалплана; наша цель - рассмотреть только основы. Более глубокие аспекты настройки диал- плана будут затронуты в последующих главах.