KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программное обеспечение » Джим Меггелен - Asterisk™: будущее телефонии Второе издание

Джим Меггелен - Asterisk™: будущее телефонии Второе издание

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Джим Меггелен, "Asterisk™: будущее телефонии Второе издание" бесплатно, без регистрации.
Перейти на страницу:

Чтобы запустить сервер Festival для отладки, просто выполните команду festival с аргументом --server: [ [email protected] ~]# festival --server Убедившись в том, что сервер Festival работает и не отклоняет ваших соединений, можно запустить Festival, введя следующее: [ [email protected] ~]# festival_server 2>&1 >/dev/null &

Вызов Festival из диалплана

Теперь, когда Festival сконфигурирован и сервер Festival запущен, организуем его вызов в простом диалплане:

exten => 123,1,Answer()

exten => 123,2,Festival(Asterisk and Festival are working together)

Перед вызовом Festival() всегда должно быть вызвано приложение Answer(), чтобы гарантировать установление соединения по каналу.

Когда Asterisk соединяется с Festival, на терминале, с которого был запущен сервер Festival, должен появиться такой вывод:

[ [email protected] ~]# festival --server

server Sun May 1 18:38:51 2005 : Festival server started on port 1314 client(1) Sun May 1 18:39:20 2005 : accepted from asterisk.localdomain client(1) Sun May 1 18:39:21 2005 : disconnected

Еще один способ использования Festival с Asterisk

Некоторые участники сообщества разработчиков Asterisk сообщают о том, что им удалось передать текст в утилиту Festival text2wave и воспроизвести в Asterisk результирующий WAV-файл. Например, это можно сделать так:

exten => 124,1,Answer()

exten => 124,2,System(echo "Это проверка Festival" | /usr/bin/text2wave -scale 1.5 -F 8000 -o /tmp/festival.wav) exten => 124,3,Playback(/tmp/festival) exten => 124,4,System(rm /tmp/festival.wav) exten => 124,5,Hangup()

Этот метод также позволяет вызывать другие механизмы речевого воспроизведения текста, такие как популярный речевой механизм производства компании Cepstral (http://www.cepstral.com), который является недорогой коммерческой производной Festival с очень приятными голосами. Для этого примера будем считать, что Cepstral установлен в папку /usr/local/cepstral/: exten => 125,1,Answer()

exten => 125,2,System(/usr/local/cepstral/bin/swift -o /tmp/swift.wav

"Это проверка Cepstral")

exten => 125,3,Playback(/tmp/swift)

exten => 125,4,System(rm /tmp/swift.wav)

exten => 125,5,Hangup()

Появление следующего вывода означает, что в список доступа в файле festival.scm не был добавлен хост, вследствие чего соединение было отклонено:

[ [email protected] ~]# festival --server

server Sun May 1 18:30:52 2005 : Festival server started on port 1314 client(1) Sun May 1 18:32:32 2005 : rejected from asterisk.localdomain not in access list

Файлы вызовов

Файлы вызовов позволяют создавать вызовы в оболочке Linux. Эти мощные события запускаются путем размещения файла .call в папке /var/spool/asterisk/outgoing/. Фактически имя файла не имеет значения, но хорошей практикой является давать ему информативное имя и заканчивать его расширением .call.

Когда файл вызова появляется в папке исходящих вызовов, Asterisk практически немедленно начинает действовать согласно содержащимся в нем инструкциям[131].

Файлы вызовов записываются в следующем формате. Сначала определяем, куда будем звонить:

Channel: канал

Можно задать время ожидания ответа на звонок (по умолчанию 45 с), время между повторными попытками дозвониться и максимальное число попыток. Если параметр MaxRetries (максимальное число попыток) опущен, выполняется только одна попытка вызова:

WaitTime: число RetryTime: число MaxRetries: число

Если ответ на звонок получен, здесь мы определяем, где он должен обрабатываться:

Context: имя-контекста Extension: добавочный номер Priority: приоритет

В качестве альтернативы можно задать только приложение и передавать аргументы в него:

Application: Playback() Data: hello-world

Далее задаем Caller ID (ID звонящего) исходящего звонка:

CallerID: Asterisk 800-555-1212

Задаем переменные канала следующим образом:

SetVar: john=Zap/1/5551212 SetVar: sally=SIP/1000

и добавляем код учетной записи CDR:

Account: документация

Нельзя создавать файл вызова из папки, в которой находится очередь. Asterisk активно отслеживает подкачку и попытается захватить файл даже еще до того, как он будет закончен! Файлы вызовов должны создаваться в какой-то другой папке, потом в той же папке создается копия этого файла и эта копия с помощью команды mv перемещается в папку подкачки. Заметьте, что мы назвали команду mv, не cp. Это важно, потому что процесс копирования в Linux реализован таким образом, что файл появляется в папке назначения еще до того, как он оказывается там полностью. В противоположность этому, использование операции mv не позволит файлу появиться в папке назначения до полного завершения операции перемещения. При копировании очень велика вероятность того, что Asterisk начнет читать файл до того, как он весь будет перенесен туда, что приведет к непредвиденным результатам.

DUNDi

Если бы возникли опасения, что Марк Спенсер может исчерпать свой запас интересных идей, система Distributed Universal Number Discovery (DUNDi) с легкостью пресекла бы их. DUNDi является такой же революционной разработкой, как и Asterisk. Лучшее определение дано на веб-сайте DUNDi (http://www.dundi.com): «DUNDi™ - это одноранговая система для поиска интернет-шлюзов в сервисы телефонии. В отличие от традиционных централизованных сервисов (таких, как необыкновенно простой и лаконичный стандарт ENUM; http://www.faqs.org/rfc/ rfc2916.txt), DUNDi является полностью распределенным и вообще не имеет никакой централизованной службы». DUNDi - это в некотором роде протокол маршрутизации для VoIP.

Как работает DUNDi

DUNDi можно рассматривать как большую телефонную книгу, которая позволяет запрашивать у равноправных участников сети альтернативный VoIP-маршрут к добавочному номеру или телефонному номеру PSTN.

Например, предположим, вы подключены к сети DUNDi-test (это бесплатная и открытая сеть, которая обеспечивает звонки на традиционные номера PSTN). Вы спрашиваете своего друга Боба, знает ли он, как связаться с номером 1-212-555-1212, к которому у вас нет прямого доступа. Боб отвечает: «Я не знаю, как позвонить на этот номер, но сейчас спрошу у своей подружки Салли (которая является равноправным участником сети)».

Боб спрашивает Салли, не знает ли она, как связаться с требуемым номером, и она отвечает: «С этим номером можно связаться по адресу IAX/ dundi:очень_длинный_пароль@имяхоста/добавочный номер». Боб сохраняет этот адрес в своей базе данных и передает вам информацию о том, как связаться с 1-800-555-1212 через VoIP, предоставляя альтернативный метод достижения той же цели по другой сети. Поскольку Боб сохранил найденную информацию, он сможет предоставлять ее всем равноправным участникам сети, которые будут запрашивать этот же номер у него позже, таким образом, им не придется продолжать свои поиски. Это способствует снижению нагрузки на сеть и сокращает время ответа для часто запрашиваемых номеров. (Однако следует отметить, что DUNDi создает циклически сменяющийся ключ, таким образом, хранящаяся информация остается действительной лишь ограниченный период времени.)

DUNDi выполняет поиск динамически или с помощью выражения switch => в вашем файле extensions.conf, или используя приложение DUNDiLookup(). DUNDi доступен только в Asterisk версии 1.2 и выше.

DUNDi-протокол может использоваться и в локальной сети. Скажем, вы администратор системы Asterisk в очень большой корпорации и желаете упростить процесс управления добавочными номерами. В этой ситуации мог бы использоваться DUNDi, обеспечивая возможность нескольким серверам Asterisk (предположительно расположенным в разных офисах компании и объединенным в одноранговую сеть) выполнять динамические поиски VoIP-адресов добавочных номеров в сети.

Конфигурация Asterisk для использования с DUNDi

Для работы с DUNDi необходимо сконфигурировать три файла: dundi. conf, extensions.conf и iax.conf[132]. Файл dundi.conf управляет аутентификацией равноправных участников, которым мы разрешаем выполнять поиск в нашей системе. Этот файл также содержит список равноправных участников сети, которым мы можем направлять свои запросы поиска. Поскольку на одном сервере могут выполняться несколько разных сетей, для каждого равноправного участника необходимо определить собственный раздел и затем сконфигурировать сети, в которых ему разрешено выполнять поиски. Кроме того, необходимо определить, каких равноправных участников мы желаем использовать для осуществления поисков.

Общее пиринговое соглашение

Общее пиринговое соглашение, или General Peering Agreement (GPA), - это имеющее обязательную юридическую силу лицензионное соглашение, разработанное для предотвращения злоупотреблений с протоколом DUNDi. Перед подключением к группе DUNDi-test необходимо подписать GPA. GPA используется для защиты членов группы и для установления между ними доверительных отношений. Обязательным требованием группы DUNDi-test является указание полной и точной контактной информации в файле dundi.conf, чтобы остальные участники одноранговой группы могли связаться с вами. GPA можно найти в подпапке doc/ папки исходного кода Asterisk.

Общая конфигурация

Раздел [general] файла dundi.conf содержит параметры, относящиеся к общим вопросам работы клиента и сервера DUNDi:

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*