Asterisk™: будущее телефонии Второе издание
Шрифт:
sudo port install ruby rb-rubygems
Также может понадобиться добавить /opt/local/bin в переменную PATH в/etc/profile.
Ruby/RubyGems в Windows
Для Windows существует замечательная программа установки «одним щелчком». Этот инсталлятор за несколько минут автоматически установит Ruby, RubyGems и несколько других обычно используемых пакетов. Инсталлятор можно скачать по адресуhttp://rubyforge.org/ projects/rubyinstaller.
Установка Adhearsion из RubyGems
Выполнив
gem install adhearsion
Если обнаружены какие-либо зависимости, вероятно, необходимо разрешить их установку, чтобы обеспечить нормальную работу Adhearsion.
Создание нового проекта Adhearsion
После того как Adhearsion установлена, можно приступать к созданию и запуску нового проекта Adhearsion с использованием новой команды ahn, утилиты командной строки, которая выполняет в Adhearsion практически все.
Вот пример команды для создания нового проекта Adhearsion:
ahn create ~/новыйпроект При этом в заданной папке создается подпапка, содержащая папку и иерархию файлов, необходимые для работы Adhearsion. У вас сразу же должно получиться запустить новое приложение по команде
ahn start ~/новыйпроект Чтобы ознакомиться с системой Adhearsion, просмотрите папки приложения и прочитайте сопутствующую документацию.
Написание диалплана в Adhearsion
Как правило, новички начинают с использования возможности написания диалпланов в Adhearsion. Поскольку Ruby допускает тонкую настройку самого языка во время выполнения, одна из функций, выполняемых Adhearsion, - реализация эстетических изменений, которые призваны упростить процесс разработки диалпланов.
Ниже приведено приложение Hello World (Здравствуй, мир), написанное в Adhearsion:
мой_первый_контекст { play "hello-world"
}
Это абсолютно допустимый синтаксис Ruby, но не все приложения Ruby так выглядят. В Adhearsion очень удобно объявлять имена контекстов, поскольку сценарий диалплана здесь обрабатывается особым образом. Ваши сценарии будут располагаться в корневой папке вновь созданного приложения Adhearsion.
Когда вызовы поступают в Asterisk и потом в Adhearsion, Adhearsion вызывает собственную версию имени контекста, из которого происходит AGI-запрос. Таким образом, имя контекста в файле extensions.conf должно гарантированно быть таким же, чтобы обеспечить соответствующее перенаправление вызовов в Adhearsion.
Синтаксис направления вызовов в Adhearsion следующий:
[мой_первый_контекст]
exten => _.,1,AGI(agi://127.0.0.1)
Любой набранный шаблон фиксируется здесь и отправляется в Adhearsion через AGI для реализации инструкций по обработке вызова. Предоставленный здесь IP, конечно, должен быть заменен на IP, который обеспечит доступ к вашему серверу Adhearsion.
Теперь, имея базовое понимание того, как взаимодействуют Adhearsion и Asterisk,
internal {
case extension when 10..99
dial SIP/extension when 6000..6020, 7000..7030
# Присоединяемся к конференции MeetMe с помощью join join extension
when _'21XX'
if Time.now.hour.between? 2, 10
dial SIP/"berlin-office"/extension[2..4] else speak "The German office is closed" end
when US_NUMBER
dial SIP/'us-trunk-out'/extension when /~\d{11,}$/ # Perl-подобное регулярное выражение
# Передаем все остальные длинные номера прямо в наш
# магистральный канал связи.
dial IAX/'intl-trunk-out'/extension else
play %w'sorry invalid extension please-try-again' end
Такой небольшой фрагмент кода реализует довольно многое. Даже имея ограниченные познания в Ruby или не зная его вовсе, вы поймете следующее:
• Переменная extension (которую Adhearsion создает для нас) используется в условном выражении.
• Набор номера от 10 до 99 направляет нас к равноправному участнику SIP с соответствующим числовым именем пользователя.
• Любой номер в диапазоне от 6000 до 6200 или от 7000 до 7030 направляется в конференцию MeetMe под тем же номером. Конечно, для этого требуется, чтобы номера данных конференций были сконфигурированы в meetme.conf.
• Опция 21XX' точно отвечает стилю шаблонов Asteris. Начало строки с символа подчеркивания в Adhearsion обеспечивает неявный вызов метода, который возвращает регулярное выражение Ruby. В Ruby-выражении case регулярные выражения могут использоваться в выражении when для выполнения сопоставления с шаблоном. Конечный результат должен быть очень хорошо знаком тем, кто имеет опыт написания extensions.conf.
• Синтаксис Adhearsion для представления каналов также происходит непосредственно из традиционного формата Asterisk. SIP/123 может использоваться как есть для представления равноправного участника SIP 123. Если бы использовался магистральный канал, синтаксис был бы такой: SIP/имяканала/имяпользователя.
• Метод speak обобщает лежащий в основе механизм преобразования текста в речь. Он может быть сконфигурирован на использование наиболее популярных механизмов.
• В выражении when для осуществления более сложного сопоставления с шаблонами, если шаблонов Asterisk недостаточно, может использоваться полноценное Perl-подобное регулярное выражение.
• Adhearsion определяет несколько констант, которые могут быть полезны при написании диалпланов. Константа US_NUMBER здесь - это регулярное выражение, соответствующее телефонному номеру в США.
• Если необходимо воспроизводить несколько файлов последовательно, play принимает массив имен файлов. К счастью, в Ruby есть удобный способ создания массива строковых значений (String).
Конечно, это только простой пример, демонстрирующий лишь самые основы возможностей Adhearsion для создания диалплана.