
IP-телефоны от Cisco, например, популярный 7911G (на анигифе именно он) и более старшие модели, поддерживают возможность выполнения http-запросов для создания сервисов, в частности, телефонного справочника организации.
Как всё это работает. Мы настраиваем скрипт на веб-сервере, которых в ответ на GET-запрос от телефона возвращает строго определённый XML, отображаемый телефоном. Для телефонной книги сначала отображается список отделов:
<CiscoIPPhoneMenu> <MenuItem> <Name>Administration</Name> <URL>http://webserver/phone/telbook.asp?depid=10</URL> </MenuItem> </CiscoIPPhoneMenu>
При выборе отдела телефон делает второй запрос по адресу из URL и отображает уже список сотрудников и их телефонов.
Вот картинка и пример структуры для списка из официального хелпа:
<CiscoIPPhoneDirectory> <Title>Заголовок</Title> <Prompt>Подсказка/подзаголовок</Prompt> <DirectoryEntry> <Name>Имя</Name> <Telephone>Телефон</Telephone> </DirectoryEntry> </CiscoIPPhoneDirectory>

Со стороны администратора телефонов требуется прописать вызов нашего скрипта при нажатии какой-то из клавиш или выборе пункта меню, конкретно с 7911G мы используем Application->Help. В настройках телефона вызов задается как <InformationURL> webserver/phone/directory.asp </InformationURL>. А вот модель 7965G имеет отдельную клавишу для телефонного справочника, и её нажатие вызывает уже адрес из <DirectoryURL>. Поэтому у нас у всех телефонов все возможные *URL просто указывают на один и тот же скрипт.
Доступны мелкие удобства, такие как кнопка «Назад» и выбор отдела или телефона по индексу. Важным удобством является то, что телефон сам преобразует запись вида 8(495)555-11-22 в номер для набора 84955551122, это позволяет показывать людям удобно читаемый номер.
Как именно скрипт генерирует нужные нам XML, каждый может выбрать сам. У нас этот же скрипт используется для отображения телефонной книжки в браузере, через XSL. Для этого мы добавляем в генерируемый XML одну строчку
<?xml-stylesheet type="text/xsl" href="http://<%=servernamepath%>/telbook.xsl"?>и дополнительно выводим элементом RusName с русским написанием ФИО. Поскольку RusName телефоном воспринимается как ошибка в структуре, а скрипт один, банальным способом определяем, кто вызвал скрипт:
if InStr(1,Request.ServerVariables(«http_user_agent»),«allegro»,1)>0 then isphone=1
А еще телефон умеет воспринимать данные от пользователя, мы пробно делали поиск телефонов контрагентов по их внутреннему коду, фича работала, но не прижилась:
<CiscoIPPhoneInput> <Title>Vuz search</Title> <Prompt>Enter vuz kod: </Prompt> <URL>http://webserver/phone/search.asp?type=vuz</URL> <InputItem> <DisplayName>KOD</DisplayName> <QueryStringParam>kod</QueryStringParam> <InputFlags>T</InputFlags> </InputItem> </CiscoIPPhoneInput>
Вызов самого CiscoIPPhoneInput это еще одна строчка в главном CiscoIPPhoneMenu, а после ввода пользователем числа телефон передаёт параметр KOD скрипту и тот отображает найденный список телефонов через CiscoIPPhoneDirectory.
Кроме того, в теории телефон может делать запросы к скриптам в режиме idle, а также можно использовать refresh header и периодически автоматом запрашивать свежие данные. Это может быть курс доллара, хотя мы хотели сделать мониторинг нагрузки серверов, хотя бы в числовом виде – бросишь взгляд на телефон и сразу видно, что все ядра кто-то занял.