412 000 произведений, 108 200 авторов.

Электронная библиотека книг » Джим Меггелен » Asterisk™: будущее телефонии Второе издание » Текст книги (страница 25)
Asterisk™: будущее телефонии Второе издание
  • Текст добавлен: 7 октября 2016, 17:17

Текст книги "Asterisk™: будущее телефонии Второе издание"


Автор книги: Джим Меггелен


Соавторы: Джаред Смит,Лейф Мадсен

Жанр:

   

ОС и Сети


сообщить о нарушении

Текущая страница: 25 (всего у книги 41 страниц)

; почты

После обновления файла extensions.conf не забудьте перезагрузить диалплан:

*CLI> dialplan reload Можно или включить (с помощью выражения include) контекст odbc_ vm_test в контекст, доступный существующему пользователю, или создать отдельного пользователя для тестирования. Если выбран второй вариант, нового SIP-пользователя можно описать в файле sip.conf следующим образом (при условии, что телефон подключен к локальной сети LAN): [odbc_test_user] type=friend secret=supersecret context=odbc_vm_test host=dynamic qualify=yes disallow=all allow=ulaw allow=gsm

Не забудьте перезагрузить SIP-модуль:

*CLI> module reload chan_sip.so и убедиться в том, что SIP-пользователь существует: *CLI> sip show users like odbc_test_user

Username Secret Accountcode Def.Context ACL NAT

odbc_test_user supersecret odbc_vm_test No RFC3581

Затем задаем для телефона или клиента имя пользователя odbc_test_ user и пароль supersecret, а потом звоним на добавочный номер 100, чтобы оставить сообщение голосовой почты. В случае успеха вы должны увидеть примерно следующее:

– Executing VoiceMail("SIP/odbc_test_user-10228cac", "1000@default") in new stack

– Playing 'vm-intro' (language 'en') – Playing 'beep' (language 'en') – Recording the message – x=0, open writing: /var/spool/asterisk/voicemail/default/1000/tmp/dlZunm format: wav49, 0x101f6534 – User ended message by pressing # – Playing 'auth-thankyou' (language 'en') == Parsing '/var/spool/asterisk/voicemail/default/1000/INBOX/msg0000.txt': Found

Теперь можно снова использовать приложение psql и убедиться, что запись в базу данных действительно осуществляется:

# psql -h localhost -U asterisk asterisk

Password:

С помощью запроса SELECT проверим наличие некоторых данных в таблице voicemessages:

localhost=# SELECT id,dir,callerid,mailboxcontext, recording FROM voicemessages;

id | dir | callerid | mailboxcontext | recording —+ + + +

1 | /var/spool/asterisk/ | +18005551212 | default | 47395

voicemail/default/1000/INBOX (1 row)

Если запись была помещена в базу данных, должна быть возвращена соответствующая строка. Вы заметите, что в столбце recording имеется номер (он, скорее всего, будет отличаться от приведенного здесь), который на самом деле является идентификатором большого объекта, хранящегося в системной таблице. Давайте проверим существование большого объекта в этой системной таблице с помощью команды lo_ list:

localhost=# lo_list Large objects

ID | Description +

47395 | (1 row)

Проверяем, соответствует ли ID объекта в таблице voicemessages указанному в системной таблице больших объектов. Также можно извлечь информацию из базы данных и сохранить ее на жестком диске, чтобы воспроизвести и убедиться, что сообщение было сохранено правильно: localhost=# lo_export 47395 /tmp/voicemail-47395.wav lo_export

Теперь проверьте аудиозапись, используя свое любимое приложение для работы с аудиоданными, например приложение play: # play /tmp/voicemail-47395.wav


Input FilenameInput Filename/tmp/voicemail-47395.wav
Sample Size8-bits
Sample Encodingwav
Channels1
Sample Rate8000

Time: 00:06.22 [00:00.00] of 00:00.00 ( 0.0%) Output Buffer: 298.36K Done.

И теперь, когда мы убедились, что все было сохранено в базе данных правильно, можно попытаться прослушать запись с помощью приложения VoicemailMain(), позвонив на добавочный номер 200:

*CLI>

– Executing VoiceMailMain("SIP/odbc_test_user-10228cac", "1000@default")

in new stack – Playing 'vm-password' (language 'en') – Playing 'vm-youhave' (language 'en') – Playing 'digits/1' (language 'en') – Playing 'vm-INB0X' (language 'en') – Playing 'vm-message' (language 'en') – Playing 'vm-onefor' (language 'en') – Playing 'vm-INB0X' (language 'en') – Playing 'vm-messages' (language 'en') – Playing 'vm-opts' (language 'en') – Playing 'vm-first' (language 'en') – Playing 'vm-message' (language 'en') == Parsing '/var/spool/asterisk/voicemail/default/1000/INB0X/msg0000.txt': Found

Заключение

В данной главе мы рассмотрели несколько областей интеграции Asterisk с реляционной базой данных. Это полезно для систем, в которых необходимо реализовать масштабирование через кластеризацию нескольких серверов Asterisk, работающих с общей централизованной информацией, или когда требуется создавать внешние приложения для изменения информации без перезагрузки системы (то есть без необходимости изменения плоских файлов).13

Управление системой Asterisk

Это не будет рассматриваться в книге. Исходный код тоже должен на что-то сгодиться, в конце концов.

– Ларри Уолл

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

Запись параметров вызовов

Даже без всяких указаний Asterisk предполагает, что вы хотите сохранять информацию CDR1.

По умолчанию Asterisk создает CSV-файл и помещает его в папку /var/log/asterisk/cdr-csv/2. На первый взгляд в этом файле ничего не

CDR (Call Detail Record) – запись параметров вызова. В телекоммуникационной сфере это файл, содержащий информацию о работе оборудования, такую как идентификатор источника звонка, идентификатор назначения, длительность и стоимость каждого звонка, общее время работы за тарифицированный период, оставшееся время и списанная за данный период сумма. Формат CDR определяется телекоммуникационным оператором или программой. Некоторые программы позволяют конфигурирование формата CDR пользователем. - Примеч. науч.ред.

Файл в формате с разделяющими запятыми (Comma Separated Values, CSV) – общепринятый метод представления данных в текстовом файле. CSV-файл можно открыть в любом текстовом редакторе, но большинство программ обработки крупноформатных таблиц и баз данных также будут читать такие файлы и правильно разбивать их на строки и столбцы.

понятно1. Однако, если разделить его на строки соответственно расположению запятых, можно заметить, что в каждой строке содержится информация об отдельном вызове и что запятые разделяют следующие значения:

accountcode

Присваивается, если оно задано для канала в конфигурационном файле канала (то есть в sip.conf). Код счета задается для каждого канала. Это значение можно также менять из диалплана, задавая

CDR(accountcode).

Полученный идентификатор вызывающего абонента (строка, 80 символов).

Вызываемый добавочный номер.

dcontext

Вызываемый контекст.

clid

Идентификатор вызывающего абонента с текстом (80 символов).

channel

Используемый канал (80 символов).

dstchannel

Вызываемый канал, если требуется (80 символов).

lastapp

Последнее приложение, если требуется (80 символов).

lastdata

Данные последнего приложения (аргументы, 80 символов).

start

Начало звонка (дата/время).

answer

Ответ на звонок (дата/время).

end

Окончание звонка (дата/время).

duration

Общая продолжительность в системе, в секундах (целое число), от набора номера до разъединения.

Если вас удивляет, почему такая простая на вид вещь считается чем-то особенным, вспомните, что многие традиционные офисные АТС не обладают такой встроенной возможностью. Для этих систем даже для того, чтобы просто фиксировать данные вызовов, не обрабатывая их, необходимо приобретать оборудование сторонних производителей. Asterisk просто сохраняет их. Никаких мучений. Никаких затрат. Никаких шуток.

billsec

Общее время вызова, в секундах (целое число), от ответа до разъединения.

disposition

Что произошло с вызовом (возможные значения – ANSWERED, NO ANSWER, BUSY). amaflags

Какие флаги использовать (DOCUMENTATION, BILL, IGNORE и т. д.), задаются для каждого канала в отдельности, как accountcode. AMA расшифровывается как Automated Message Accounting (автоматизированные учетно-расчетные операции услуг связи). AMA-флаги являются стандартными (предположительно) в отрасли. userfield

Определенное пользователем поле, максимум 255 символов.

Хранение CDR в базе данных

CDR также могут храниться в базе данных. В настоящее время Asterisk поддерживает СУБД SQLite, PostgreSQL, MySQL и unixODBC, но в данной книге рассматривается только ODBC (см. главу 12). Многие предпочитают хранить CDR в базе данных, чтобы управлять счетами и ресурсами с помощью запросов.

Работа с журналами регистрации

В ходе работы Asterisk формирует события, которые будут обусловливать создание записи или в основных системных журналах регистрации, или в собственных файлах журнала Asterisk. В сильно загруженной системе (или системе, в которой возникла существенная проблема) эти файлы могут быстро достигать очень больших размеров. Если включить отладку, процессы, участвующие в записи файлов журнала, могут начать оказывать влияние на производительность системы. По умолчанию Asterisk будет просто наращивать эти файлы до тех пор, пока жесткий диск не будет полностью заполнен. К счастью, Linux предоставляет утилиты для реализации чередования файлов журнала (чтобы ни один из файлов не разрастался слишком сильно), а также удаления старых файлов журнала (что не даст засорить ими систему).

Утилита logrotate обычно запускается операционной системой раз в день1. К сожалению, без специального сценария, который проинс-Подробнее о работе с утилитой logrotate и настройке ее параметров можно узнать с помощью команды man logrotate. - Примеч. науч.ред.

труктирует logrotate, как работать с Asterisk, файлы журнала Asterisk будут разрастаться без всякого контроля. Чтобы этого не произошло, необходимо настроить параметры для Asterisk в специальном файле в папке /etc/logrotate.d. Этот файл должен будет сменить текущий файл журнала и послать Asterisk инструкции о необходимости смены журнала Asterisk (что заставит ее прекратить использовать теперь уже устаревший журнал и сформировать новый файл).

Создадим новый файл /etc/logrotate.d/asterisk и поместим в него следующие строки:

/var/log/asterisk/* /var/log/asterisk/cdr-csv {

missingok

sharedscripts

monthly

rotate 12

postrotate

asterisk -rx "logger rotate" > /dev/null 2> /dev/null

endscript }

Этот файл указывает утилите logrotate чередовать журналы Asterisk каждый месяц, сохраняя их в течение 12 месяцев. По завершении этого периода утилита сообщает Asterisk, что все файлы журнала были использованы (это заставит Asterisk создать новые файлы журнала и начать записывать информацию в них). Мы выбрали эти значения произвольно, вы можете назначить собственные соответственно своим нуждам.

Выполнение Asterisk под учетной записью пользователя, не обладающего правами администратора

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

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

дополнительных шагов. Кроме того, отладка может привести в уныние, если не понимать принцип распределения прав доступа в Linux. Но с точки зрения безопасности это стоит затраченных усилий. Мы собираемся запустить Asterisk под учетной записью пользователя asterisk, поэтому необходимо сначала создать этого пользователя в нашей системе. Следующие команды будут выполняться под учетной записью администратора. Мы скажем, когда перейти к использованию учетной записи asterisk, которую собираемся сейчас создать:

# adduser -c "Asterisk PBX" asterisk

# passwd asterisk

Теперь, создав пользователя asterisk, переключимся на этого пользователя, под учетной записью которого будем выполнять все остальные команды. Как только мы переключились на пользователя asterisk с помощью команды su[124]124
  Буквосочетание su исторически означает super-user (суперпользователь), но теперь оно также могло бы означать switch-user (другой пользователь) или substitute-user (пользователь-заместитель). Символ – в команде указывает su использовать среду для этого пользователя (например, использовать PATH для этого пользователя).для этого пользователя).


[Закрыть]
, можно загружать копию Asterisk через SVN, FTP или WGET, компилировать и устанавливать ее. В следующем примере мы собираемся взять копию Asterisk из хранилища SVN.

1.4.5 – текущая выпущенная версия на момент написания данной книги. Пока книга готовилась к публикации, могла выйти новая версия, поэтому проверьте последнюю версию на веб-сайте Asterisk. Другими словами, не надо бездумно вводить 1.4.5 в своем коде, копируя наши примеры. Выясните, какова текущая версия, и используйте ее.

# su – asterisk

$ svn co http://svn.digium.eom/svn/asterisk/tags/1.4.5 asterisk-1.4.5 $ cd asterisk-1.4.5

$ ./configure –prefix=$HOME/asterisk-bin –sysconfdir=$HOME/asterisk-bin

–localstatedir=$HOME/asterisk-bin $ make menuselect $ make install

Выполняя сценарий ./configure с флагом –prefix, мы указываем системе установить двоичные компоненты в подпапку asterisk-bin папки $HOME[125]125
  HOME – системная переменная, определяющая путь к домашней папке для текущего пользователя, то есть по умолчанию /home/asterisk.


[Закрыть]
. Флаг –sysconfdir указывает системе, куда поместить конфигурационные файлы, а флаг –localstatedir – куда установить дополнительные файлы, например звуковые. Главное здесь то, что, поскольку загрузка, компиляция и установка выполняются от лица пользователя asterisk, все, что создается, будет закреплено за этим пользователем и будет иметь права, предоставленные этому пользователю. Теперь можно установить файлы примеров, тоже в папку $HOME/ asterisk-bin/asterisk:

$ make samples

Выполним тестовый запуск Asterisk с помощью следующей команды:

$ ./asterisk-bin/sbin/asterisk -cvvv Обычно Asterisk должна выполняться как сервис. Во время установки команда make config устанавливает сценарии инициализации. К сожалению, этого не произойдет, если вы зарегистрированы как пользователь asterisk, потому что только пользователь root имеет право изменять команды запуска системы. Кажется, что надо зарегистрироваться как root, перейти к папке /home/asterisk/asterisk-1.4.5 и снова выполнить команду make config (теперь с правами, которые позволят действительно ее выполнить). И проблема решена, не так ли? Да, но не совсем. Если вы выполните команду service asterisk start, система сообщит, что не может найти asterisk. Знаете, почему? Потому, что сценарий инициализации считает, что исполняемый файл asterisk должен быть установлен в /usr/sbin, где он должен был бы находиться, если бы мы установили asterisk под учетной записью root. Итак, мы должны сообщить сценарию инициализации, где искать asterisk и сценарий safe_asterisk:

# ln -s /home/asterisk/asterisk-bin/sbin/asterisk /usr/sbin/asterisk

# ln -s /home/asterisk/asterisk-bin/sbin/safe_asterisk /usr/sbin/safe_asterisk

Поскольку наш сценарий инициализации использует сценарий safe_ asterisk и по умолчанию пытается запустить Asterisk под учетной записью администратора, необходимо изменить сценарий safe_asterisk, указав ему запускать Asterisk под учетной записью пользователя, не обладающего правами администратора. Итак, откроем сценарий safe_ asterisk в своем любимом текстовом редакторе и найдем переменную

ASTARGS (это примерно 78-я строка). Вставим в кавычки -U asterisk:

#

# Don't fork when running "safely"[126]126
  Не выполнять ветвления при запуске в безопасном режиме «safely» - Примеч. перев.


[Закрыть]

#

ASTARGS="-U asterisk" Пойдем дальше и запустим Asterisk, выполнив команду service asterisk start. С помощью команды ps убедимся, что Asterisk запущена под учетной записью пользователя asterisk:

# service asterisk start

# ps aux | grep asterisk

503 30659 0.0 1.8 26036 8692 pts/2 Sl 15:07 0:00 /home/asterisk/asterisk-bin/sbin/asterisk -U asterisk -vvvg -c

Фактически 503 – это наш пользователь asterisk; проверяем это, заглянув в файл /etc/passwd: # cat /etc/passwd

asterisk:x:503:503:Asterisk PBX:/home/asterisk:/bin/bash Выполним перезагрузку системы, чтобы убедиться, что все идет, как надо. Помните, что многие операции, осуществляемые с Asterisk, могут предполагать ее выполнение под учетной записью администратора, поэтому необходимо следить за возможными ошибками, касающимися ограниченных прав доступа. Ваш процесс Asterisk может считать себя суперпользователем, но мы немножко подрезали ему крылышки.

Зачем создавать проблемы? Суть в том, что если какое-либо слабое место системы безопасности Asterisk[127]127
  Если зайти в любую систему, выполняющую Asterisk с настройками безопасности по умолчанию, подключить к ней клавиатуру и монитор и нажать сочетание клавиш ALt+ F9, вы подключитесь к интерфейсу командной строки Asterisk. Нажмите клавиши ! и Return – и вы зашли в оболочку. Если Asterisk запущена от имени пользователя root, вы теперь владеете этой системой.


[Закрыть]
обеспечит кому-либо доступ к серверу через учетную запись asterisk, его возможности в системе будут ограничены правами данной учетной записи. Если Asterisk выполняется под учетной записью root, нарушение правил безопасности обеспечивает злоумышленнику полный контроль над вашей системой.

Настройка голосовых сообщений системы

Благодаря своей практически безграничной гибкости Asterisk можно менять голосовые сообщения системы. Это очень просто объяснить, но, как правило, сложно хорошо выполнить.

Основной дистрибутив включает 300 голосовых сообщений системы, плюс еще 600 в дополнении asterisk-sounds. Если вы задумали настроить их все, необходимо иметь или кучу денег, или массу времени. Звукотехнику рекомендуется обеспечить нормализацию всех записей до -3 дБ и их корректное начало и завершение (с соответствующей паузой в начале и конце сообщения).

Имея в распоряжении готовые записи, применить их легко – просто замените файлы в папке /var/lib/asterisk/sounds теми, которые вы создали.

Голос

Если вас интересует, кто является «голосом» Asterisk, то ее зовут Эллисон Смит (Allison Smith). Она может записать специальные сообщения и для вашей системы.

Это мощная концепция, потому что очень немногие офисные АТС предоставляют возможность использовать один и тот же голос и в собственных, и в системных сообщениях. Эллисон – «голос» сообщений системы как на английском, так и на испанском языках.

Также доступны сообщения на французском. «Голосом» французского Asterisk является Джун Уоллак (June Wallack) из Montreal's own (она также озвучивает сообщения на безупречном английском[128]128
  Мы хотели сказать «на английском без акцента», но тогда нам пришлось бы извиняться перед жителями Британских островов, Австралии, Южной Африки и прочими. Мы не являемся специалистами в языках, диалектах и т. п., но можем различить акцент, свойственный профессиональным дикторам Северной Америки. Этот акцент распространен на Тихоокеанском побережье от Сан-Диего до Сиэтла, а также в большей части англоговорящей Канады. Джун и Эллисон говорят с таким акцентом, и, по нашему мнению, это звучит прекрасно.


[Закрыть]
, если вы захотите, чтобы сообщения на обоих языках были записаны одним голосом).

Чтобы узнать, как получить собственные голосовые сообщения, посетите веб-сайт Digium по адресуhttp://www.digium.com/products/ voice.

В качестве альтернативы можно записать сообщения самостоятельно и поместить их любую папку по своему выбору. В приложениях Playback() или Background() можно указывать полный путь к звуковым файлам или любую подпапку /var/lib/asterisk/sounds/.

Обратите внимание, что стандартные звуки Asterisk записаны в формате GSM. Хранить их в этом формате целесообразно, только если система будет взаимодействовать со множеством каналов, использующих кодек GSM). Конечно, файлы в формате GSM занимают меньше места на жестком диске, но, на наш взгляд, дополнительная нагрузка на ЦП для их преобразования (не говоря уже о более низком качестве звука в целом) делает нежелательным применение GSM. При использовании файлов без сжатия (таких, как .wav, .ulaw или .alaw) ЦП не придется так напряженно работать. И как дополнительный приз – лучшее качество звучания сообщений.

Запись звука из диалплана

Удивительно, но один из самых простых способов получить записи приличного качества – не с помощью ПК с невообразимым ПО для редактирования, а через телефонный аппарат. На это есть масса причин, но самое важное то, что телефон, как правило, обеспечивает запись без фонового шума (такого, как белый шум, создаваемый оборудованием отопления, вентиляции и кондиционирования воздуха) и с постоянным уровнем громкости. Это небольшое дополнение в диалплан позволит без труда создавать записи, которые будут помещаться в папку /tmp/ вашей системы (где их можно переименовать, а затем перенести в любое другое место):

exten => _66XX,1,Wait(2)

exten => _66XX,n,Record(/tmp/prompt${EXTEN:2}:wav) exten => _66XX,n,Wait(1)

exten => _66XX,n,Playback(/tmp/prompt${EXTEN:2}) exten => _66XX,n,Wait(2) exten => _66XX,n,Hangup()

Данный фрагмент кода обеспечит возможность звонить на номера от 6600 до 6699 и записывать сообщения в папку /tmp/ под именами от prompt00.wav до prompt99.wav. После завершения записи (о чем вы сообщите, нажав кнопку #) ваше сообщение будет воспроизведено и соединение завершится.

Не забудьте перенести свои сообщения из папки /tmp/ в папку для звуковых файлов Asterisk. Чтобы диалплан оставался понятным, присвойте файлам prompt более осмысленные имена. Например:

mv /tmp/prompt00.wav /var/lib/asterisk/sounds/custom/welcome-message.wav

Музыка во время ожидания

Любая широко распространенная система АТС предлагает возможность воспроизведения музыки во время ожидания ответа. В этом вопросе Asterisk предоставляет широкое поле для творчества. Сегодня все хорошо знакомы с музыкальным форматом MP3 и использование MP3-файлов в качестве источника музыки во время ожидания представляет большой интерес. Конечно, это кажется хорошей идеей, но есть некоторые вопросы, над которыми, по нашему мнению, следует задуматься:

• MP3-файлы чрезвычайно сложны, и их декодирование налагает серьезную нагрузку на ЦП. Если имеется много каналов, извлекающих музыку из системы (например, иногда люди любят слушать

музыку по телефону или сразу несколько абонентов ожидают ответа информационно-справочной службы), требования к ЦП сильно возрастают, что связанно с необходимостью воспроизведения хранящихся МР3-файлов. Компьютер, который в других условиях обеспечивал бы нужды системы, может оказаться непригодным.

• Современные жесткие диски могут хранить большие объемы данных, поэтому, вероятно, нет никакой причины беспокоиться о сокращении пространства, занимаемого звуковыми файлами. Сжатие звука имеет смысл с точки зрения передачи по сетям (МР3-файл намного меньше и удобнее для скачивания, чем эквивалентный ему файл в формате .wav), но в рамках системы на самом деле неважно, сколько места занимают эти файлы.

• При использовании МР3-файлов обычно возникают проблемы с лицензированием. ;-)

Учитывая все это, рекомендуем преобразовать используемые музыкальные файлы в собственный формат различных кодеков, которые поддерживает ваша система. Например, если для внутренних телефонов поддерживается plaw и G.729 в VoIP-сетях, музыку лучше хранить в обоих форматах, чтобы Asterisk не приходилось выполнять перекодировки для воспроизведения музыки в этих каналах. Мы часто используем в своих системах общедоступную музыку (или музыку, лицензированную Creative Commons). Музыка Creative Commons

Свободно распространяемая музыка

Многие не знают, что воспроизведение музыки во время ожидания требует специальной лицензии, даже если вы используете музыку с приобретенного вами CD или передаваемую по радио. Во избежание недоразумений мы рекомендуем вам использовать только музыку, предлагаемую в музыкальной индустрии, которая не обременена никакими видами лицензий. Существует множество веб-сайтов, на которых можно найти музыку, лицензированную так, что она подходит для использования в качестве музыки во время ожидания. Мы нашли два таких сайта: http://en.wikipedia.0rg/wiki/Wikipedia:S0und/list и http:// www.opsound.org/.

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

Чтобы найти больше свободно распространяемой музыки, выполните поиск по словам Creative Commons music (музыка Creative Commons).

часто поступает в формате ogg-Vorbis (который концептуально аналогичен MP3, но несовместим с ним). Чтобы воспроизводить файлы .ogg или .mp3 в системе Asterisk, необходимо преобразовать их в формат, с которым может работать Asterisk. Для этого сделаем следующее:

• Убедимся, что установлена утилита SoX (Sound eXchange). Если нет, выполняем следующую команду для ее установки:

$ yum install sox

• Скачаем выбранную музыку в рабочую папку в своей системе (/tmp, пожалуй, подходящее место). Например, следующая команда обеспечивает загрузку красивой фортепьянной музыки композитора Пахельбеля:

$ wget http://upload.wikimedia.org/wikipedia/commons/6/62/PachelbelX27s_Canon.ogg

• Теперь надо преобразовать эту запись из формата ogg-Vorbis в более подходящий для Asterisk формат:

$ sox Pachelbel's_Canon.ogg -r 8000 -c 1 -s -w moh1.wav resample -ql *-i

Возможно, понадобится также скорректировать амплитуду з помощью опции -V.

JA*

Итак, мы взяли исходный файл, преобразовали его в WAV-файл, подходящий для Asterisk[129]129
  Обратите внимание, что можно использовать любой формат, совместимый с Asterisk; .wav был выбран в данном примере лишь потому, что ЦП легко выполнять преобразования ^law/alaw/slin «на лету» и при этом с ним также легко работать в других средах.
  Пожалуй, самый замечательный пример применения Festival – в ZoIP Симона Дитнера (Simon Ditner). Это порт популярной игры Zork с механизмом полной поддержки речи, работающим в Asterisk (ZoIP также использует Sphinx, но это не будет рассматриваться в данной книге). Мы собираемся придумать новое название для таких вещей. Это не видеоигра, поскольку нет экрана; вероятно, поэтому она должна называться аудиоигрой. Найти ее и оценить всю ее прелесть можно по адресуhttp://www.zoip.org.


[Закрыть]
и сохранили получившийся в результате файл как moh1.wav.

• Практически все сделано. Осталось только создать папку для постоянного хранения новых файлов (/tmp, конечно, не место для них):

$ mkdir /var/lib/asterisk/mohwav и перенести их туда: $ mv *.wav /var/lib/asterisk/mohwav

• Поскольку мы разместили наши музыкальные файлы в другой папке, а не в той, куда Asterisk устанавливает свои образцы музыки, необходимо внести изменения в конфигурационный файл, чтобы отразить это. Редактируем файл /etc/asterisk/musiconhold.conf следующим образом:

[default] mode=files

directory=/var/lib/asterisk/mohwav random=yes

Скажем несколько слов о том, какую музыку использовать. Это будет зависеть от того, какое впечатление вы желаете произвести на своих абонентов. Независимо от вашего выбора, следует помнить, что:

• Люди на самом деле не хотят ждать, поэтому обычно они не планируют слишком долго оставаться в таком состоянии. Это означает, что нет особого смысла давать им прослушивать серьезные музыкальные произведения. Их мысли сейчас заняты другим, и у них не будет времени проникнуться этой музыкой.

• Телефонная система не обеспечивает качества, необходимого для точного воспроизведения звуков. Низкие басы обычно звучат ужасно, а высокие частоты воспринимаются просто как шум. Музыка должна быть простой, тогда ей, скорее всего, обеспечено хорошее звучание.

• Музыкальные предпочтения различных людей очень разнообразны, и, хотя может показаться хорошей идеей охватить широкий диапазон стилей, такая эклектичная музыкальная подборка вызовет скорее раздражение, чем расположение.

Классическая музыка удовлетворяет всем перечисленным выше критериям, и ее легко достать. Также она обладает превосходным звучанием (и не без основания!), так что это наиболее приемлемый выбор, хотя, следует признать, под эту музыку не хочется пуститься в пляс. В пакете для скачивания Asterisk вместе с исходным кодом имеется три композиции, лицензированных для использования с Asterisk. Эти композиции являются лишь образцами. Поскольку их только три, они быстро надоедят людям, которые будут часто вам звонить. Только в кошмарном сне можно себе представить, что Asterisk обязана своим

Случайный выбор музыки во время ожидания

В традиционной офисной АТС музыка во время ожидания поступает из одного источника. В один момент времени все слышат одну и ту же музыку, и даже если никого нет в режиме ожидания, музыка все равно воспроизводится. В Asterisk музыка не воспроизводится, если в ней нет необходимости, и каждому вызывающему абоненту предоставляется собственный источник музыки. Если бы Asterisk просто начинала воспроизводить композиции в том порядке, в каком их находит, для каждого вызова, переведенного в режим ожидания, всегда проигрывалась бы одна и та же мелодия с начала. Чтобы смоделировать традиционное поведение при задержке вызова, Asterisk может (и обычно должна) быть настроена на воспроизведение музыки в случайном порядке. Это означает, что система будет случайным образом выбирать файл для воспроизведения. Если в каталоге музыки во время ожидания достаточно различных композиций, можно свести к минимуму вероятность того, что тот, кто звонит вам часто, будет вынужден постоянно слушать одну и ту же мелодию.

всемирным успехом радости людей от прослушивания одних и тех же трех мелодий при ожидании ответа на звонок. Поэтому мы написали этот раздел.

Заключение

Данная глава могла бы стать книгой (и, возможно, однажды так и произойдет). Мы выбрали для рассмотрения несколько тем, которые, на наш взгляд, представляют ценность для большинства читателей, но, несомненно, тем для обсуждения намного больше. Как и многие вопросы в данной книге, они были затронуты лишь в самых общих чертах.

14

Попурри

На 90% задачи уходит 90% времени, а на оставшиеся 10% уходит еще 90% времени.

– Правило девяносто к десяти

Самым сложным при создании данной книги было выбрать не то, о чем писать, а то, о чем не будет возможности рассказать. Теперь, когда базовые вопросы рассмотрены, вы готовы к тому, чтобы услышать правду: мы вовсе не научили вас всему тому, что необходимо знать об Asterisk.

Теперь, пожалуйста, поймите, что это не потому, что мы не хотели дать все самое лучшее, а лишь из-за того, что Asterisk безгранична (во всяком случае, нам так кажется).

В данной главе мы хотим дать вам почувствовать вкус некоторых диковинок, которые Asterisk приберегла для вас. Практически каждый раздел этой главы мог бы стать отдельной книгой (и они станут книгами, если Asterisk добьется того успеха, который мы ей предвещаем).

Festival

Festival – популярный механизм речевого воспроизведения текста с открытым исходным кодом. Основная идея использования Festival с Asterisk заключается в том, что диалплан может передавать тело текста в Festival, который будет «читать» этот текст вызывающему абоненту. Вероятно, самое очевидное применение Festival – чтение электронной почты вслух, когда вы в дороге1.

Настройка и подготовка Festival к работе с Asterisk

В настоящее время существует два способа использования Festival с Asterisk. Первый (самый простой) метод, без доработки и повторной компиляции Festival, – загрузить в конфигурационный файл Festival следующий текст (festival.scm обычно располагается в папке /etc/ или /usr/share/festival/):

(define (tts_textasterisk string mode) "(tts_textasterisk STRING MODE)

Apply tts to STRING. This function is specifically designed for use in server mode so a single function call may synthesize the string. This function name may be added to the server safe functions."[130]130
  Применяем tts к STRING. Эта функция специально разработана для использования в режиме сервера, чтобы можно было синтезировать строку одним вызовом функции. Это имя функции может быть добавлено в список безопасных функций сервера. - Примеч. перев.


[Закрыть]

(let ((wholeutt (utt.synth (eval (list 'Utterance 'Text string))))) (utt.wave.resample wholeutt 8000) (utt.wave.rescale wholeutt 5) (utt.send.wave.client wholeutt)))

Этот текст можно поместить в любом месте файла, но только так, чтобы он не попал в другие круглые скобки.

Второй (и более традиционный) способ – скомпилировать Festival со специальным патчем для Asterisk (располагающимся в подпапке contrib/ папки исходного кода Asterisk).

Информация по обоим методам имеется в файле README.festival, который находится в подпапке contrib/ папки исходного кода Asterisk. Для любого метода вам придется изменить список доступа Festival в файле festival.scm. Просто выполните поиск по слову localhost и замените его полным доменным именем своего сервера.


    Ваша оценка произведения:

Популярные книги за неделю