Asterisk™: будущее телефонии Второе издание
Шрифт:
<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 может использоваться
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=bsavage@digium.com |
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
Действие UPDATECONFIG используется для обновления одной или более настроек конфигурационного файла. Например, чтобы удалить пользователя,
Ответ, свидетельствующий об ошибке
Чтобы формировать все остальные команды, пользователь должен зарегистрироваться на веб-сервере. Если пользователь не аутентифици- рован, любая из обсуждаемых выше команд будет возвращать ошибку. Если он отправлен пользователем, не прошедшим аутентификацию, URIhttp://localhost:8088/asterisk/rawman?action=ping возвращает такой свидетельствующий об ошибке ответ: Response: Error
Message: Authentication Required
Ajax, AJAM и Asterisk
Аббревиатура Ajax расшифровывается как Asynchronous JavaScript and XML (Асинхронный JavaScript и XML). Хотя этот термин включает слова «асинхронный» и «XML», это не означает ни то, что можно делать только асинхронные запросы, ни то, что должен обязательно использоваться XML. Некоторые авторы описывают Ajax просто как комбинацию HTML, JavaScript, DHTML и DOM. Следующее поколение броузеров, таких как Mozilla/Firefox, для отправки асинхронного запроса на сервер используют XMLHttpRequest (объект JavaScript). Запрос выполняется в фоновом режиме и обрабатывается сервером. Назад в броузер результат передается посредством обратного вызова: все, что возвращает сервер, может сохраняться и использоваться для обновления отображаемой страницы. Для Internet Explorer 5 или более поздних версий той же цели служит объект ActiveX XMLHttp.
Обработка форм в традиционном веб-приложении
HTML-формы обычно передаются посредством кнопки SUBMIT (ПЕРЕДАТЬ) (type=submit). После щелчка пользователем по кнопке SUBMIT (ПЕРЕДАТЬ) обработка веб-приложения останавливается и не возобновляется до тех пор, пока сервер не возвратит новую страницу полностью:
<FORM action="login.php" method="POST"> <input type=text name="username"> <input type=password name="password"> <input type=submit> </FORM>
Прежде чем переходить к Ajax или JavaScript, давайте рассмотрим, как работает традиционное веб-приложение. Для описания формы, где определяются все параметры, которые пользователь хочет отправить на сервер, традиционные веб-приложения используют элемент <FORM>. Кроме того, атрибут action="login.php" информирует броузер, куда отправлять все эти переменные. method="POST" указывает броузеру, как отправлять эти переменные на сервер.
Обработка форм в приложении Ajax
Приложение Ajax для отправки содержимого формы на сервер использует JavaScript. Если выполнен асинхронный запрос, JavaScript-код не ожидает ответа сервера. Это также означает, что пользователи могут продолжать работать со страницей даже в том случае, если в фоновом режиме выполняется запрос. Это может представлять опасность, из-за чего, возможно, до завершения запроса потребуется ограничить некоторые действия. Броузер по умолчанию не обеспечивает визуальной индикации выполнения запроса в фоновом режиме. За информирование пользователя о выполнении запроса отвечаете вы. Вот код для передачи содержимого полей имени пользователя (username) и пароля (password) через Ajax:
<script language="javascript" type="text/javascript"> function submitform{
var uname = document.getElementById("username").value; var pwd = document.getElementById("password").value; // xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); // IE 7 // xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); // IE 5 xmlHttp = new XMLHttpRequest; // Mozilla или Firefox
var url = "/rawman9action=login&username=" + escape(uname) + "&secret=" + escape(pwd);
xmlHttp.open("GET", url, true); xmlHttp.onreadystatechange = dosomething; // вместо dosomething использовалась бы функция JavaScript xmlHttp.send(null);