Джим Меггелен - Asterisk™: будущее телефонии Второе издание
Вспомогательные файлы предлагают простой, но надежный способ расширения инструментария VoIP-специалиста. Но главное - полезными помощниками можно обмениваться, отчего выиграет все сообщество.
Интеграция с настольным телефоном с использованием Micromenus
В условиях все возрастающей конкуренции между производителями современных настольных телефонов, поддерживающих IP, появление микроброузера прошло относительно незамеченным и используется он крайне редко. Принцип прост: физические настольные телефоны создают интерактивные меню, принимая XML по HTTP или что-то подобное. Однако конфликт интересов сыграл с этой технологией злую шутку: каждый производитель создает собственный XML, микроброузеры часто имеют какие-то странности и доступные возможности сильно разнятся. Инфраструктура Micromenus (Микроменю) существует как помощник Adhearsion и предназначена устранять различия между телефонами разных производителей. В этой очень специальной области разработки (то есть создании меню) для четкой реализации логики независимо от марок телефонов Micromenus использует очень простой основанный на Ruby «доменный язык». Вот простой пример Micromenu: image 'company-logo' item "Call an Employee" do
# Создаем список сотрудников из активных ссылок в базе данных. Employee.find(:all).each do |someone|
# Просто выбираем кого-то, чтобы позвонить ему по телефону. call someone.extension, someone.full_name
end
end
item "Weather Information" do
call "Hear the weather report" do play weather_report("Portland, OR")
end
item "Current: " + weather("Portland, OR")[:current][:temp]
end
item "System Uptime: " + 'uptime' Список item (элемент) отображается двумя способами. Если дается только строка текста (String), Micromenus формирует лишь текстовый элемент. Если аргументы содержат блок do/end вложенной информации, этот текст становится ссылкой на подстраницу, которая формирует визуальное представление этого вложенного содержимого. Элемент call (вызов) также имеет два варианта использования, каждый из них формирует ссылку, которая при выборе инициирует вызов. Когда call получает блок do/end, он моделирует физический набор номера, заданного в качестве первого аргумента. Если блок do/end существует и все вызовы направляются через Adhearsion, выбор этого элемента обеспечивает выполнение функциональности диалплана в рамках блока. Это замечательный пример того, как выгодно выполнять обработку диалпланов и экранных микроброузеров в одной инфраструктуре. Из этого примера можно сделать еще некоторые четкие выводы о Micro- menus:
• Micromenus поддерживает отправку изображений. Если запрашивающий телефон не поддерживает изображения, в ответе они не будут упоминаться.
• Все помощники Adhearsion работают и здесь. В данном примере использовался помощник сводки погоды.
• Вспомогательная инфраструктура Micromenus может использовать интеграцию Adhearsion с базой данных.
• Ruby может выполнять команду, заключенную в открывающие кавычки, и возвращать результат как строку (String). В нашем случае возвращается время безотказной работы (uptime).
Конечно, этот пример предполагает, что вы сконфигурировали интеграцию своего приложения с базой данных соответствующим образом и имеете класс Employee, соответствующий таблице со столбцами extension (расширение) и full_name (полное имя).
Поскольку Micromenus просто формирует визуальное представление различных ответов, поступающих по HTTP, обычный веб-броузер тоже может прислать запрос на сервер Micromenus. Для таких более высокотехнологичных конечных точек Micromenus формирует красивый интерфейс с загрузкой Ajax, эффектами DHTML и окнами, которые можно перетаскивать.
Micromenus - это еще одна возможность сделать ваши Adhearsion-при- ложения для VoIP более надежными.
Интеграция с веб-приложением
Хотя Adhearsion конструктивно может интегрироваться с практически любым приложением, включая PHP или сервлеты Java, Ruby на платформе Rails является особенно мощным партнером. Rails - среда разработки веб-приложений, широко обсуждаемая в прессе в последнее время, причем абсолютно заслуженно. Ее разработчики используют весь потенциал Ruby, демонстрируя, как метапрограммирование действительно избавляет разработчика от ненужной работы. Поразительная ясность кода Rails и использование принципа Don't Repeat Yourself (Не повторяйся), или DRY, вдохновили дизайнеров на создание Adhearsion в том виде, в каком она существует сейчас. Начиная с версии 0.8.0, каталог приложений Adhearsion располагается поверх существующего Rails-приложения, совместное использование данных происходит автоматически. Если требуется разработать сложный веб-интерфейс для функциональности VoIP, обратите внимание на этот сногсшибательный дуэт.
Использование Java
Весь мир пришел в изумление, когда Sun объявила о приеме на работу двух основных специалистов проекта по разработке интерпретатора JRuby Чарльза Наттера (Charles Nutter) и Томаса Энебо (Thomas Enebo) в сентябре 2006 года. JRuby - это интерпретатор Ruby, написанный не на С, а на Java. Поскольку JRuby может компилировать части приложения на Ruby в байт-код Java, JRuby фактически превосходит С-реализа- цию Ruby 1.8 по многим параметрам и обещает полностью обойти последнюю в ближайшем будущем.
Приложение на Ruby, выполняемое в JRuby, имеет преимущество использования не только библиотек Ruby, но и любых библиотек Java. Выполнение Adhearsion в JRuby обеспечивает потрясающий ассортимент библиотек Java сторонних производителей для написания диал- плана офисной АТС. Если окружение вашей компании требует тесной интеграции с другими технологиями Java, внедрение Adhearsion в стек J2EE может предложить необходимую гибкость.
Дополнительная информация
Больше информации о быстро развивающемся сообществе разработчиков Adhearsion, включая полные разборы примеров по шагам, можно найти на официальном веб-сайте Adhearsion по адресу http://adhearsion.com, в официальном блоге, посвященном Adhearsion, по адресу http://blog. adhearsion.com, на веб-сайте консалтинговой компании-учредителя Adhearsion по адресу http://codemecca.com. За помощью в изучении Ruby обращайтесь на сайт http://jicksta.com.
11
Инфраструктура Asterisk GUI
..Я конструировал маяк, в то время как все остальные строили корабли.
- Чарльз Саймик
В данной главе представлены компоненты, которые составляют графический пользовательский интерфейс (GUI) и помогают работать с Asterisk. Для тех, кто не использует дистрибутив AsteriskNOW, здесь приводится установка веб-сервера и компонентов GUI. Показано, как настраивать GUI в соответствии со своими задачами. Также предоставлена техническая информация, чтобы разработчики, желающие создать собственный GUI или приложение, могли использовать веб-сервер и компоненты GUI. Мы выражаем благодарность сотрудникам Digium, помогавшим писать эту главу, и особое спасибо за примеры кода, которые они разработали и протестировали.
Зачем нужен GUI для Asterisk
Asterisk всегда была телефонной системой для смелых. Раньше от нас требовались недюжинные усилия и больше чем просто упорство, чтобы заставить Asterisk выполнять свои распоряжения. Те, кто в своем стремлении освоить ее принимался за конфигурационные файлы и боролся за свои звонки, были вознаграждены, получив мощную и гибкую систему телефонной связи (а также пользующийся большим спросом набор навыков). Однако массовый потребительский рынок не был и до сих пор не готов к написанию сценариев для обработки добавочных номеров, управлению равноправными участниками сети и решению других задач, составляющих суть администрирования Asterisk.
Еще с самых ранних времен, до версии 1.0, люди пытаются приручить могучую систему Asterisk с помощью генераторов конфигурационных файлов, связанных с базами данных и управляемых посредством различных графических пользовательских интерфейсов (Graphical User Interfaces, GUI). Самым успешным удалось создать приложение, основанное на Asterisk, но ни один из них не обеспечил полной гибкости, которую предлагает самостоятельная среда для написания сценариев. После замены цифрового хокку диалплана на ограниченный список опций полученная система превратилась из собственно Asterisk в систему, основанную на Asterisk. Неплохо, но не достаточно[107]. Чтобы GUI был именно GUI Asterisk, в нем должны быть сохранены создаваемые вручную конфигурационные файлы, которые являются лингва-франка Asterisk испокон веков. Он должен предоставлять простые графические средства конфигурации без оказания воздействия на базовое программное обеспечение Asterisk или жесткой фиксации решений, которые должны оставаться открытыми для конечного пользователя. Также он должен обеспечивать расширенную функциональность, не загружая компьютер и не захватывая ценные ресурсы, необходимые для выполнения основной задачи - обработки вызовов.
Одновременно с выходом версии Asterisk 1.4 Digium начала разработку проекта Asterisk GUI. Изначально GUI задумывался как компонент встроенного устройства Asterisk от Digium. Устройство, продаваемое и как Asterisk Appliance Developers Kit (AADK - комплект для разработчиков устройств Asterisk), и как самостоятельная конфигурация, представляет собой небольшой полупроводниковый компьютер с необязательными аналоговыми (и в перспективе цифровыми) интерфейсами. GUI был создан с использованием гибкой и расширяемой инфраструктуры, которая переносит максимум задач по отображению и логику проверки достоверности на компьютер клиента. Также была учтена необходимость сохранения возможности создания конфигурационных файлов вручную, но при этом предоставлены автоматизированные средства их редактирования. Созданная в результате инфраструктура получила название AJAM (обыгрывается название популярной технологии Web 2.0 Ajax), что является аббревиатурой от Asynchronous JavaScript and Asterisk Manager (Асинхронный диспетчер JavaScript и Asterisk). Основной AJAM-код, наборы поддерживающих AJAM веб-страниц и расширение диспетчера Asterisk - все вместе, взаимодействуя, формируют инфраструктуру Asterisk GUI.