Asterisk™: будущее телефонии Второе издание - Меггелен Джим Ван
Также применим необязательную опцию nocallerid, чтобы тон воспроизводился только в случае, если входящий вызов не предоставляет информации о Caller ID (ID звонящего). Вот пример использования приложения Zapateller() в добавочном номере контекста [incoming]:
[incomimg]
exten => s,1,Zapateller(nocallerid) exten => s,n,Playback(enter-ext-of-person)
Парковка вызова
Еще одна удобная функция - парковка вызова. Она обеспечивает возможность перевести вызов в состояние ожидания, поставить его на «парковку», чтобы он мог быть принят на другом добавочном номере. Все параметры парковки вызовов (такие, как используемые добавочные номера, количество мест и т. д.) задаются в конфигурационном файле features.conf. Раздел [general] файла features.conf содержит четыре настройки, касающиеся парковки вызовов: parkext
Это добавочный номер для парковки. Передайте вызов на этот добавочный номер - и система сообщит, в какой парковочный слот он помещен. Добавочный номер для парковки по умолчанию - 700.
parkpos
Эта опция определяет количество парковочных слотов. Например, задав номера 701-720, вы создадите 20 парковочных слотов с нумерацией от 701 до 720.
context
Это имя контекста парковки. Чтобы иметь возможность парковать вызовы, необходимо включить этот контекст.
parkingtime
Если эта опция задана, она определяет, как долго (в секундах) вызов может оставаться на парковке. Если вызов не принят в течение заданного времени, выполняется звонок на добавочный номер, с которого вызов поступил на парковку.
После редактирования файла features.conf необходимо перезагрузить Asterisk, потому что чтение этого файла выполняется только при запуске системы. Выполнение команды reload не обеспечит чтения файла features.conf.
Также обратите внимание, что, поскольку пользователю необходимо иметь возможность переводить вызовы на добавочный номер парковки, в приложении Dial() должны использоваться опции t и/или T. Итак, давайте создадим простой диалплан для демонстрации парковки вызовов: [incoming]
include => parkedcalls
exten => 103,1,Dial(SIP/Bob,,tT) exten => 104,1,Dial(SIP/Charlie,,tT)
Проиллюстрируем принцип работы парковки вызовов. Скажем, Элис звонит в систему и набирает добавочный номер 103, чтобы поговорить с Бобом. Через некоторое время Боб переводит вызов на добавочный номер 700, который сообщает ему, что звонок от Элис был припаркован в слот 701. После этого Боб звонит Чарли на добавочный номер 104 и говорит ему, что Элис ожидает по номеру 701. Чарли набирает добавочный номер 701 и разговаривает с Элис. Это простой и эффективный способ обеспечить возможность переключения вызывающих абонентов между пользователями системы.
Аргументы t и T приложения Dial() нужны не для всех типов каналов. Например, многие SIP-телефоны реализуют это с помощью функциональной или обычной кнопки и обмена сигналами по протоколу SIP.
Организация конференц-связи с помощью MeetMe()
Не менее полезной функцией является установление аудиоконференц- связи с помощью приложения MeetMeQ[78]. Это приложение обеспечивает возможность одновременного общения множества абонентов так, как если бы они все физически находились в одном месте. К основным функциям относятся:
• Возможность создания защищенных паролем конференций.
• Администрирование конференции (отключение звука конференции, блокировка конференции, исключение участников).
• Опция отключения звука всех участников, кроме одного (полезна для объявлений по компании, широковещательных рассылок и т. д.).
• Создание статических или динамических конференций.
Давайте поэтапно рассмотрим процесс настройки базового конференц- зала. Конфигурационные опции для системы конференц-связи MeetMe располагаются в файле meetme.conf. В этом конфигурационном файле задаются конференц-залы и необязательные числовые пароли. (Если пароль задан, он будет необходим для входа на все конференции, проводимые с использованием этого конференц-зала.) Для нашего примера настроим конференц-зал по добавочному номеру 600. Сначала зададим все настройки в файле meetme.conf. Назовем этот конференц-зал 600 и на этот раз не будем задавать пароль: [rooms] conf => 600
Закончив работу с конфигурационным файлом, необходимо перезагрузить Asterisk, чтобы она могла повторно прочитать файл meetme.conf. Далее добавим поддержку конференц-зала в диалплан, используя приложение MeetMe(). MeetMe() принимает три аргумента: имя конференц- зала (заданное в meetme.conf), набор опций и пароль, который пользователь должен ввести, чтобы присоединиться к конференции. Настроим простую конференцию, используя конференц-зал 600, опцию i (которая обеспечивает оповещение о том, что кто-то присоединился или покинул конференцию) и пароль 54321:
exten => 600,1,MeetMe(600,i,54321) Вот и все! Когда абоненты попадут на добавочный номер 600, им будет предложено ввести пароль. Если они правильно введут 54321, то попадут на конференцию. Полный список всех опций, поддерживаемых приложением MeetMe(), представлен в приложении В. Другое полезное приложение - MeetMeCount(). Как следует из его имени, это приложение подсчитывает, сколько пользователей находится в том или ином конференц-зале. Оно принимает два аргумента: конференц-зал, где необходимо подсчитать количество участников, и необязательное имя переменной, в которой нужно сохранить это число. Если второй аргумент, то есть имя переменной, не задан, полученное число воспроизводится вызывающему абоненту: exten => 601,1,Playback(conf-thereare) exten => 601,n,MeetMeCount(600) exten => 601,n,Playback(conf-peopleinconf)
Если вторым аргументом в MeetMeCount() передается переменная, итоговое количество участников присваивается этой переменной, а само число не воспроизводится. Так можно ограничивать количество участников:
; ограничить конференц-зал 10 участниками exten => 600,1,MeetMeCount(600,CONFCOUNT)
exten => 600,n,GotoIf($[${CONFCOUNT} <= 10]?meetme:conf_full,1) exten => 600,n(meetme),MeetMe(600,i,54321)
exten => conf_full,1,Playback(conf-full) Разве Asterisk не забавна?
Заключение
В данной главе было рассмотрено еще несколько приложений диалпла- на Asterisk. Надеемся, что это обеспечит вам фундамент, на основе которого можно экспериментировать с созданием собственных диалпла- нов. Как и в предыдущей главе, мы рекомендуем вернуться назад и перечитать разделы, в которых для вас остались неясные моменты. В следующих главах мы немного отвлечемся от Asterisk, чтобы поговорить о некоторых технологиях, используемых во всех системах телефонной связи. Мы будем часто упоминать Asterisk, но то, что мы собираемся обсуждать, в большой мере присуще многим телекоммуникационным системам.
7
Что такое телефония
Один телефон - это необходимость, два телефона - богатство, три телефона - роскошь, а ни одного телефона - блаженство.
- Дуг Ларсон
Теперь мы собираемся отдохнуть от Asterisk на протяжении пары главы, потому что хотим посвятить некоторое время обсуждению технологий, с которыми придется взаимодействовать системе Asterisk. В данной главе мы поговорим о некоторых технологиях традиционной телефонной сети, особенно о тех, которые люди чаще всего хотят подключить к Asterisk. (Передача голоса по IP-протоколу обсуждается в следующей главе.)
О технологиях, используемых в телекоммуникационных сетях, можно было бы написать многотомные книги, но материал для данной главы был отобран на основании нашего опыта работы в сообществе, который помог определить круг вопросов, представляющих наибольшую ценность. Хотя эти знания могут и не потребоваться непосредственно для конфигурации системы Asterisk, они будут очень полезны при соединении с системами (и общении с людьми) из мира традиционных телекоммуникаций.