Asterisk™: будущее телефонии Второе издание
Asterisk™: будущее телефонии Второе издание читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Ниже представлен простой помощник 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' Список 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.