Джим Меггелен - Asterisk™: будущее телефонии Второе издание
Если у вас не установлен AsteriskNOW, необходимо скачать и установить файлы Asterisk GUI. После загрузки эти файлы просто компилируются и устанавливаются как часть Asterisk.
Для использования Asterisk GUI необходима Asterisk версии 1.4 или более поздней.
Самую последнюю версию файлов GUI можно найти в хранилище Subversion компании Digium2. Если на вашем компьютере установлено Subversion, код GUI можно загрузить, используя следующую команду:
Возможно, вы спрашиваете себя: «Почему веб-сервер встроен в Asterisk? Почему бы просто не использовать внешний веб-сервер?» Внешний веб-сервер может использоваться для обслуживания Asterisk GUI, но это выходит за рамки рассмотрения данной главы, поскольку модель безопасности, лежащая в основе Ajax, разрешает Ajax направлять запросы только к тому домену, порту и по тому протоколу, по которым поступила HTML-страница. Обычно такое поведение называют политикой единства происхождения. В настоящее время нет способа загрузить GUI через FTP. Эта ситуация может измениться в любой момент, поэтому не стесняйтесь и свободно проверяйте, не появилась ли обновленная информация на веб-сайте Asterisk.
# cd /usr/src # или любая папка, в которую вы хотите загрузить исходный код
# svn co http://svn.digium.com/svn/asterisk-gui/trunk asterisk-gui
Установить GUI очень просто:
# cd asterisk-gui
# ./configure
# make
# make install
# make samples
После выполнения представленных выше команд файлы GUI будут установлены и станут частью вашего дистрибутива Asterisk.
Настройка httpd.conf и manager.conf
Конфигурация веб-сервера Asterisk для обработки запросов AJAM включает несколько простых шагов. В файл /etc/asterisk/http.conf необходимо добавить (или раскомментировать) следующее:
[general] enabled=yes
enablestatic=yes ; без этого вы можете только посылать команды AMI, ; но не отображать html-содержимое
bindaddr=0.0.0.0 ; адрес, на который HTTP-сервер Asterisk должен отвечать bind po rt=8088 ; порт, по которому HTTP-сервер Asterisk должен отвечать prefix=asterisk ; будет формировать часть URI, соответствующую имени папки
Теперь, когда httpd.conf настроен, можно передать содержимое в броузер. Чтобы веб-клиент мог посылать команды в Asterisk, необходимо внести некоторые изменения в Asterisk Manager Interface (AMI). Для этого добавим несколько строк в раздел [general] файла manager.conf и учетную запись пользователя с набором разрешений config. Откроем файл manager.conf и отредактируем его следующим образом: [general]
enabled=yes ; возможно, AMI уже активирован, если используется для других целей webenabled=yes ; это активирует взаимодействие между веб-сервером Asterisk и AMI
[asterisk_http] ; пользователю может быть присвоено любое имя secret = gooey
read = system,call,log,verbose,command,agent,user,config write = system,call,log,verbose,command,agent,user,config
Сохраните изменения и перезапустите Asterisk. У вас должно получиться подключиться в веб-серверу Asterisk посредством следующего URI:
http://localhost:8088/asterisk/static/ajamdemo.html Если по какой-то причине возникли проблемы с переходом на демонстрационную страницу, вернитесь в папку исходного кода asterisk-gui и выполните команду
# make checkconfig
Вот и все! Asterisk теперь поддерживает веб-доступ. Пора переходить к реальной разработке с использованием Asterisk GUI.
Формирование Asterisk GUI
После установки файлов для Asterisk GUI можно приступать к формированию GUI. В следующих нескольких разделах поэтапно рассматриваются настройка и объединение различных компонентов с целью улучшения и расширения возможностей GUI.
Передача команд интерфейса Manager по HTTP
Asterisk GUI формирует команды для Asterisk, вызывая специально созданные URL на веб-сервере Asterisk. В этом разделе представлены примеры некоторых обычно используемых команд (действий) и соответствующие ответы веб-сервера. Эти URL AMI имеют следующую общую структуру:
http://hostname:8088/asterisk/rawman9action=KOMaHfla&.. . .пары параметр=значение... http://hostname:8088/asterisk/manager?action=KOMaHfla&. ...пары параметр=значение... http://hostname:8088/asterisk/mxml9action=KOMaHfla&... .пары параметр=значение.. .
Разница между URL rawman, manager и mxml важна. Веб-сервер экспортирует три разных представления интерфейса AMI. Если используется URL rawman, сервер возвращает в HTTP-ответе последовательность пар ключевое слово/значение. Если используется URL manager, сервер возвращает результат в HTML-формате. Аналогично, если используется URL mxml, сервер возвращает результаты в XML-формате. Для современных приложений в стиле Ajax формы rawman и mxml, пожалуй, более полезны[108].
Действия с параметрами, которые могут быть переданы на сервер, являются обычными командами интерфейса управления, описываемыми в приложении F. Обратите внимание: действия LOGIN и CHALLENGE уникальны тем, что посылаются не непосредственно в Asterisk, а обрабатываются интерфейсом Manager для аутентификации пользователя. Если пользователь не прошел аутентификацию, сервер не передает действие на обработку в Asterisk, а возвращает ошибку.
Ознакомимся с некоторыми широко используемыми действиями и рассмотрим, как их можно использовать для управления сервером.
LOGIN
Команда LOGIN аутентифицирует учетные данные для доступа к HTML- представлению интерфейса Manager. Как только вы зарегистрировались, Asterisk сохраняет в вашем броузере объект cookie (который действителен в течение времени, заданного настройкой httptimeout). Этот cookie используется для подключения к одному и тому же сеансу. URL
http://localhost:8088/asterisk/rawman?action=login&username= asterisk_http &secret=gooey
отправляет на веб-сервер команду на регистрацию, которая включает учетные данные. Если регистрация прошла успешно, сервер отвечает следующим образом:
Response: Success
Message: Authentication accepted
Это, конечно, очень упрощенное представление принципа работы регистрации. Отправка имени пользователя и пароля в URL является плохой практикой, хотя и очень полезной при формировании GUI. Более подходящим способом реализации регистрации и примером более сложной обработки команды является использование последовательности запрос/ответ. Сформируйте такой запрос:
http://localhost:8088/ asterisk / rawman? action=challenge&AuthType=md5
Команда CHALLENGE запускает последовательность запрос/ответ, которая может использоваться для регистрации пользователя. Сервер отвечает, отправляя запрос (произвольную строку) в ответе:
Response: Success Challenge: 113543555
Ваше приложение отвечает на запрос, вычисляя хеш MD5 запроса, конкатенированного с паролем пользователя. Вот как пользователь может вручную вычислить хеш MD5:
# echo -n 113543555gooey | md5sum
50a0f43ad4c9d99a39f1061cf7301d9a -После этого вычисленный хеш может использоваться как ключ регистрации в URL:
http://localhost:8088/asterisk/rawman?action=login&username=asterisk_ http&authtype=md5&key=50a0f43ad4c9d99a39f1061cf7301d9a
В целях безопасности регистрация должна произойти в течение пяти секунд после запроса. Также обратите внимание: чтобы система запрос/ответ работала, в броузере должен быть активирован прием объектов cookie, поскольку именно cookie гарантирует, что действие регистрации использует тот же ID сеанса интерфейса управления, что и действие запроса.
Если для запроса используется URL manager (а не rawman), ответ будет получен в формате HTML:
<title>Asterisk™ Manager Interface</title> <body bgcolor="#ffffff">
<table align=center bgcolor="#f1f1f1" width="500"> <tr><td colspan="2" bgcolor="#f1f1ff"><h1> Manager Tester</h1></td> </tr>
<tr><td>Response</td><td>Success</td></tr>
<tr><td>Challenge</td><td>113543555</td></tr>
</table>
</body>
Аналогично, если используется представление mxml, будет получен ответ в формате XML:
<Ajax-response>
<response type='object' id='unknown'>
<generic response='Success' challenge='113543555' /> </response> </Ajax-response>
Кроме формата, эти три типа ответов больше ничем не отличаются. Для большинства приложений в подобной ситуации, когда нет необходимости отображать HTML-страницу пользователю, извлечь запрос из пар ключевое слово/значение будет намного проще, чем использовать
rawman или mxml.
Передача вызова
Действие REDIRECT может использоваться для передачи вызова. Просто сформируйте такой URL:
http://localhost:8088/ asterisk / rawman? action=redirect&channel=SIP / John-ae201e78&priority=1&exten=6001
Этот URL передает заданный канал в другой добавочный номер и приоритет диалплана. Ответ на это действие такой:
Response: Success Message: Redirect Successful
Чтение конфигурационного файла
Команда GETCONFIG возвращает содержимое конфигурационного файла или его часть. HTTP-запрос
http://localhost:8088/asterisk/rawman?action=getconfig&filename= users.conf
возвращает содержимое файла users.conf. Asterisk GUI использует эту функциональность для представления текущей конфигурации Asterisk конечному пользователю. Ответ выглядит следующим образом:
Response: Success
Category-000000: general Line-000000-000000: fullname=New User Line-000000-000001: userbase=6000 Line-000000-000002: hasvoicemail=yes Line-000000-000003: hassip=yes Line-000000-000004: hasiax=yes Line-000000-000005: hasmanager=no
Line-000000-000006: callwaiting=yesLine-000000-000006: callwaiting=yes Line-000000-000007: threewaycalling=yes Line-000000-000008: callwaitingcallerid=yes Line-000000-000009: transfer=yes Line-000000-000010: canpark=yes Line-000000-000011: cancallforward=yes Line-000000-000012: callreturn=yes Line-000000-000013: callgroup=1 Line-000000-000014: pickupgroup=1 Line-000000-000015: host=dynamic Category-000001: 6007 Line-000001-000000: fullname=Bill Savage Line-000001-000001: secret=1234 Line-000001-000002: [email protected] Line-000001-000003: cid_number=6001 Line-000001-000004: zapchan= Line-000001-000005: context=numberplan-custom-1 Line-000001-000006: hasvoicemail=yes Line-000001-000007: hasdirectory=no Line-000001-000008: hassip=yes Line-000001-000009: hasiax=yes Line-000001-000010: hasmanager=no Line-000001-000011: callwaiting=yes Line-000001-000012: threewaycalling=yes Line-000001-000013: mailbox=6007 Line-000001-000014: hasagent=yes Line-000001-000015: group=Обновление конфигурационных файлов с помощью UPDATECONFIG