Читаем Asterisk™: будущее телефонии Второе издание полностью

Функции диалплана делают выражения более мощными; их можно рассматривать как интеллектуальные переменные. Функций диалпла- на позволяют вычислять длины строк, даты и время, контрольные суммы MD5 и т. д., и все в рамках выражения диалплана.

Синтаксис

Функции диалплана имеют следующий основной синтаксис:

ИМЯ_ФУНКЦИИ( аргумент) Как и для переменных, ссылка на имя функции выполняется, как показано выше, а чтобы использовать значение функции, необходимо поставить впереди знак доллара и заключить функцию в фигурные скобки:

$ {ИМЯ_ФУНКЦИИ( аргумент)} Также функции могут инкапсулировать (содержать в себе) другие функции:

${ ИМЯ_ФУНКЦИИ(${ ИМЯ_ФУНКЦИИ( аргумент)})}

2 3 4 4321

Как вы, вероятно, уже заметили, необходимо быть очень внимательным с открывающими и закрывающими скобками. В примере выше парные открывающие и закрывающие круглые и фигурные скобки обозначены одинаковыми числами.

Примеры функций диалплана

Часто функции используются в сочетании с приложением Set для получения или задания значения переменной. В качестве простого примера рассмотрим функцию LEN. Эта функция вычисляет длину строки, заданной в качестве ее аргумента. Вычислим длину строки переменной и воспроизведем это значение для абонента: exten => 123,1,Set(TEST=example) exten => 123,n,SayNumber(${LEN(${TEST})})

Приведенный пример определит, что строка example содержит семь символов, задаст это значение как длину переменной и воспроизведет это число пользователю с помощью приложения SayNumber.

Рассмотрим еще один простой пример. Если бы мы захотели задать время ожидания для одного из каналов, то могли бы использовать функцию TIMEOUT. Функция TIMEOUT принимает один из трех аргументов: absolute (абсолютное), digit (между цифрами) и response (ответ). Чтобы задать максимальный промежуток времени между вводом цифр с помощью функции TIMEOUT, можно воспользоваться приложением Set:

exten => s,1,Set(TIMEOUT(digit)=30) Обратите внимание на то, что функция не заключена в символы ${ }. Как и присвоение значения переменной, присвоение значения функции выполняется без использования символов ${ }.

Полный список доступных функций можно получить, введя команду core show functions в интерфейсе командной строки Asterisk. Также они представлены в приложении F.

Выполнение переходов по условию

После краткого ознакомления с выражениями и функциями пришло время использовать их на практике. Применение выражений и функций позволяет усложнить логику диалплана. Возможность принятия решений в диалплане обеспечивается выполнением переходов по условию. Остановимся на этом подробнее.

Приложение GotoIf

Ключ к выполнению переходов по условию - приложение GotoIf. GotoIf вычисляет выражение и отправляет абонента в соответствующее место назначения в зависимости от истинности или ложности выражения.

GotoIf использует особый синтаксис, который часто называют условным:

GotoIf(выражение?местоназначения1:местоназначения2) Если выражение истинно (возвращает значение true), абонент направляется на местоназначения1. Если выражение ложно (возвращает значение false), абонент направляется по второму адресу. Итак, что обеспечивает возвращение значения true или false? Пустая строка и номер 0 обеспечивают false, все остальное - true. В качестве места назначения может быть задано следующее:

• Метка приоритета в рамках того же добавочного номера, например weasels.

• Добавочный номер и метка приоритета в рамках того же контекста, например 123,weasels.

• Контекст, добавочный номер и метка приоритета, например incoming,123,weasels.

Любое из мест назначения может быть опущено, но не оба одновременно. Если согласно вычислениям переход должен осуществляться по месту назначения, которое не задано, Asterisk просто переходит к следующему приоритету текущего добавочного номера.

Применим GotoIf в примере:

exten => 345,1,Set(TEST=1)

exten => 345,n,GotoIf($[${TEST} = 1]?weasels:iguanas)

exten => 345,n(weasels),Playback(weasels-eaten-phonesys)

exten => 345,n,Hangup

exten => 345,n(lguanas),Playback(office-iguanas)

exten => 345,n,Hangup

Вы заметите, что за каждым приложением Playback следует приложение Hangup. Это делается для того, чтобы при переходе на метку weasels вызов заканчивался до того, как начинается воспроизведение звукового файла office-ig'uanas. Все чаще можно увидеть добавочные номера, разбитые на несколько компонентов (разделенных между собой командой Hangup), каждый из которых представляет собой этапы, выполняемые следом за GotoIf.

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT