Asterisk™: будущее телефонии Второе издание
Шрифт:
Распространение и повторное использование кода
Приложение Adhearsion располагается в одной папке, поэтому полностью скопировать VoIP-приложение - не сложнее, чем архивировать файлы. Наверное, впервые в сообществе Asterisk разработчики могут запросто обмениваться друг с другом удачными приложениями и дорабатывать их. Кстати, весьма поощряется предоставление кода собственных приложений Adhearsion.
Кроме того, на локальном уровне расширения инфраструктуры Adhear- sion, называемые помощниками, могут использоваться повторно или создаваться самостоятельно. Помощниками могут быть как целые вспомогательные инфраструктуры, такие как Micromenus для интеграции с телефонными микроброузерами, так и обычный
Ниже представлен простой помощник Adhearsion, написанный на Ruby. Он создает новый метод, который будет существовать во всей инфраструктуре, включая диалплан. В целях сохранения простоты метод загружает XML-документ по заданному URL HTTP и преобразует его в Ruby-объект Hash (тип ассоциативного массива Ruby): def remote_parse url
Hash.from_xml open(url).read
end
Заметьте, что вспомогательный файл может включать только эти три строки. При загрузке Adhearsion выполняет сценарий таким образом, что все описанные методы или классы становятся доступными во всей системе.
Для некоторых задач, в частности задач масштабирования Adhearsion, может потребоваться обеспечить в узких местах эффективность короля производительности: языка программирования С. Ниже представлен пример помощника Adhearsion, который возвращает факториал заданного числа:
int fast_factorial(int input) { int fact = 1, count = 1; while(count <= input) { fact *= count++;
}
return fact;
Опять же, приведенный здесь код может составлять все содержимое вспомогательного файла. В данном случае, поскольку код написан на С, файл должен называться factorial.alien.c. Это указывает Adhearsion запустить алгоритм для чтения файла, добавить стандартные заголовки разработки языков С и Ruby, скомпилировать файл, кэшировать общий объект, загрузить его в интерпретатор и затем создать для С-ме- тода оболочку на Ruby. Ниже представлен диалплан, который просто воспроизводит факториал шести, используя этот помощник на С:
fast_test {
num = fast_factorial 6 play num
}
Заметьте, что С-метод становится первоклассным методом на Ruby. Числовые объекты Ruby, преданные в метод, преобразуются в элементарный тип С int, а затем возвращаемое значение преобразуется обратно в числовой объект Ruby.
Вспомогательные файлы предлагают простой, но надежный способ расширения инструментария 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'
• 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 по многим параметрам и обещает полностью обойти последнюю в ближайшем будущем.