355 500 произведений, 25 200 авторов.

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

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


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


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

Жанр:

   

ОС и Сети


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

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

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

Конфигурация Asterisk для работы с Festival

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

Запуск сервера Festival

Чтобы запустить сервер Festival для отладки, просто выполните команду festival с аргументом –server: [root@asterisk ~]# festival –server Убедившись в том, что сервер Festival работает и не отклоняет ваших соединений, можно запустить Festival, введя следующее: [root@asterisk ~]# 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, должен появиться такой вывод:

[root@asterisk ~]# 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 не был добавлен хост, вследствие чего соединение было отклонено:

[root@asterisk ~]# 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]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]132
  Обязательно должны быть сконфигурированы файлы dundi.conf и extensions.conf. Мы выбрали iax.conf для предоставления информации о нашем адресе по сети, но DUNDi является протоколо-независимым, и таким образом, вместо iax.conf мы могли бы использовать sip.conf, h323.conf или mgcp.conf.


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

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

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

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

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

; конфигурационный файл DUNDi

[general]

department=IT

organization= toronto.example.com

locality=Toronto

stateprov=ON

country=CA

[email protected] phone=+19055551212

; Задаем адрес привязки и номер порта. ПО умолчанию – 4520

;bindaddr=0.0.0.0

port=4520

entityid=FF:FF:FF:FF:FF:FF ttl=32

autokill=yes ;secretpath=dundi

Идентификатор объекта, заданный entityid, вообще должен быть адресом управления доступом к устройству (Media Access Control, MAC) интерфейса компьютера. По умолчанию в качестве идентификатора объекта используется первый Ethernet-адрес сервера, но его можно переопределить с помощью entityid, если ему присвоен MAC-адрес какого– то принадлежащего вам устройства. Рекомендуется использовать MAC-адрес основного внешнего интерфейса. С помощью этого адреса другие равноправные участники будут идентифицировать вас.

Поле Time To Live (ttl) определяет длину цепочки равноправных участников, от которых мы желаем получать ответы, и используется для прерывания циклов опроса. При каждой передаче запроса вниз по цепочке участников до тех пор, пока запрашиваемый номер не будет найден, значение поля TTL увеличивается на единицу, точно так же как это происходит с полем TTL пакета ICMP (Internet Control Message Protocol – межсетевой протокол контрольных сообщений, используемый для отладки и мониторинга в IP-сетях). Поле TTL также определяет максимальную продолжительность (в секундах) ожидания ответа.

Если вам необходимо найти номер, вашим равноправным участникам сети рассылается исходный запрос (называемый DPDISCOVER) об этом номере. Если вы не получаете подтверждение приема (ACK) своего запроса (DPDISCOVER) в течение 2000 мс (время, достаточное только для передачи сигнала) и параметр autokill имеет значение yes, Asterisk разошлет равноправным участникам сообщение CANCEL (отменить). (Заметьте, что подтверждение приема необязательно является ответом на запрос; это лишь подтверждение того, что участник получил запрос.) Назначение autokill – предотвращение задержек поиска из-за хостов с большим временем ожидания. Кроме опций yes и no, можно также задавать время ожидания в миллисекундах.

Модуль pbx_dundi создает циклически сменяющийся ключ и сохраняет его в локальной базе данных Asterisk (AstDB). Имя ключа secret хранится в семействе dundi. Значение ключа можно увидеть с помощью команды database show в консоли Asterisk. Семейство базы данных может быть переопределено опцией secretpath (путь к базе ключей).

Создание отображающихся контекстов

Файл dundi.conf определяет контексты DUNDi, отображаемые в контексты диалплана в файле extensions.conf. Контексты DUNDi – это способ описания особых и отдельных групп служб каталогов. Контексты раздела отображения указывают на контексты файла extensions.conf, управляющего номерами, информацию о которых вы предоставляете. При создании равноправного участника вы должны определить, по каким отображающимся контекстам он может выполнять поиск. Делается это с помощью выражения permit (у каждого равноправного участника может быть несколько выражений permit). Отображающиеся контексты связаны с контекстами диалплана в том смысле, что они являются границей зоны безопасности для ваших равноправных участников. Информация о телефонных номерах должна предоставляться в следующем формате:

<код_страны><код_города><префикс><номер> Например, полный североамериканский номер был бы представлен так:14165551212.

Все отображающиеся контексты DUNDi принимают форму

dundi_контекст => локальный_контекст,вес,технология,местоназначения[,опции]] Приведенная ниже конфигурация создает отображающийся контекст DUNDi, который мы будем использовать для предоставления группе DUNDi-test информации о наших локальных телефонных номерах. Обратите внимание, что все это должно располагаться в одной строке: dundi-test => dundi-local,0,IAX2,dundi:${SECRET}@toronto.example.com/ ${NUMBER},nounsolicited,nocomunsolicit,nopartial

В этом примере отображающийся контекст – это dundi-test. Он указывает на контекст dundi-local в файле extensions.conf (предоставляющий список телефонных номеров, звонки с которых он обрабатывает). Для номеров офисной АТС вес равен нулю (соединение выполняется напрямую). Вес номера, отличный от 0, свидетельствует о наличии нескольких переходов или путей на маршруте достижения места назначения. Это значение может быть полезно при получении нескольких ответов на один поиск; предпочтительным будет путь с меньшим весом. Если мы можем ответить на запрос поиска, наш ответ будет содержать метод, с помощью которого другой конец линии сможет соединиться с системой. Сюда относится используемая технология (такая, как IAX2, SIP, H.323 и т. д.), имя пользователя и пароль, по которым выполняется аутентификация, хост, на который следует отправлять ау– тентификационную информацию, и наконец добавочный номер. Asterisk предоставляет несколько сокращенных записей, что позволяет создавать «шаблон», по которому можно построить наши ответы. В шаблоне могут использоваться следующие переменные канала: ${SECRET}

Замещается шаблоном, хранящимся в локальной AstDB.

${NUMBER}

Запрашиваемый номер.

Обычно безопаснее статически конфигурировать имя хоста, I а не использовать переменную $ 11PADDR j. Переменная $ 11PADDR j иногда предоставляет адрес в частном пространстве 1Р-адре– сов, недоступном из Интернета.

Описание равноправных участников DUNDi

Равноправные участники DUNDi описываются в файле dundi.conf и идентифицируются уникальным MAC-адресом второго уровня интерфейса удаленной системы. Файл dundi.conf – это то место, где мы определяем, в каком контексте выполнять поиск для равноправных участников, запрашивающих поиск, и каких равноправных участников мы хотим использовать при выполнении поиска для конкретной сети:

[00:00:00:00:00:00] ; Удаленный офис

model = symmetric

host = montreal.example.com

inkey = montreal

outkey = toronto

include = dundi-test

permit = dundi-test

qualify = yes

dynamic=yes

Идентификатор удаленного равноправного участника (MAC-адрес) заключается в квадратные скобки ([]). inkey и outkey – это пара ключей (открытый и закрытый), используемых для аутентификации. Пары ключей генерирует сценарий astgenkey, располагающийся в подпапке ./asterisk/contrib/scripts/ папки исходного кода. Не забывайте использовать флаг -n, чтобы не приходилось создавать пароли при каждом запуске Asterisk:

# cd /var/lib/asterisk/keys

# /usr/src/asterisk/contrib/scripts/astgenkey -n toronto Полученные в результате ключи, toronto.pub и toronto.key, будут помещены в папку /var/lib/asterisk/keys/. Файл toronto.pub – это открытый ключ, который должен быть отправлен веб-серверу, чтобы он был доступен всем участникам, с которым вы желаете установить одноранговую связь. При установлении одноранговой связи вы можете передать равноправным участникам открытый ключ, доступный по протоколу HTTP, который они могут поместить в свои папки /var/lib/ asterisk/keys/.

${IPADDR}

IP-адрес для соединения.

После загрузки ключей необходимо повторно загрузить модули res_ crypto.so и pbx_dundi.so в Asterisk:

*CLI> module reload res_crypto.so

– Reloading module 'res_crypto.so' (Cryptographic Digital Signatures)

– Loaded PRIVATE key 'toronto'

– Loaded PUBLIC key 'toronto'

*CLI> module reload pbx_dundi.so

– Reloading module 'pbx_dundi.so' (Distributed Universal Number Discovery (DUNDi))

== Parsing '/etc/asterisk/dundi.conf': Found Затем в файле iax.conf создаем пользователя dundi, чтобы обеспечить возможность соединения с вашей системой Asterisk. После аутентификации вызова запрашиваемый добавочный номер передается в контекст dundi-local файла extensions.conf, где выполняется его обработка.

Обеспечение возможности удаленных соединений

Вот описание канала типа user для пользователя dundi:

[dundi] type=user

dbsecret=dundi/secret

context=dundi-local

disallow=all

allow=ulaw

allow=g726

Вместо использования статического пароля Asterisk повторно создает пароль каждые 3600 с (1 ч). Это значение сохраняется в /dundi/secret базы данных Asterisk и предоставляется посредством переменной $ {SECRET}, описанной в отображающемся контексте в файле dundi.conf. Увидеть текущие ключи для всех равноправных участников, включая свои локальные открытый и закрытый ключи, можно, выполнив команду show keys в интерфейсе командной строки Asterisk.

Запись context=dundi-local определяет контекст в extensions.conf, в который направляются прошедшие авторизацию вызывающие абоненты. Оттуда мы можем обрабатывать звонок, точно так же как делали бы это в диалплане любого другого входящего соединений.

Конфигурация диалплана

Файл extensions.conf определяет, информацию о каких номерах вы предоставляете и что делаете с вызовами, адресованными им. Контекст dundi-local выполняет две задачи:

• Управляет номерами, информацию о которых мы предоставляем. Они указаны в отображающемся контексте dundi в файле dundi.conf.

• Определяет то, что должно быть сделано с вызовом, указанным в описании пользователя dundi в iax.conf.

Для предоставления информации о диапазонах номеров и управления входящими вызовами используется мощная возможность сопоставления с шаблонами, доступная в диалплане. В следующем диалплане предоставляется информация только о номере +1-416-555-1212, но так же просто можно применить сопоставление с шаблоном для предоставления информации о диапазоне номеров или добавочных номеров: [dundi-local]

exten => 14165551212,1,NoOp(dundi-local: Number advertisement and incoming)

exten => 14165551212,n,Answer()

exten => 14165551212,n(call),Dial(SIP/1000)

exten => 14165551212,n,Voicemail(u1000)

exten => 14165551212,n,Hangup()

exten => 14165551212,n(call)+101,Voicemail(b1000)

exten => 14165551212,n,Hangup()

Альтернативные методы хранения голосовой почты

Обычный способ хранения голосовой почты Asterisk – простая запись сообщения в файл, размещаемый на локальном жестком диске в папке /var/spool/asterisk/voicemail. Этот метод хорош для простых офисных АТС, но в больших распределенных сетях или окружениях, в которых желательна более тесная интеграция с внешними приложениями, потребуются более сложные методы хранения.

Хранение голосовой почты на IMAP-сервере

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

Естественно, Asterisk отбрасывает все эти глупости и просто позволяет интегрировать ящик голосовой почты в среду IMAP. Хранение голосовой почты на IMAP-сервере обеспечивает несколько преимуществ. После прослушивания по телефону сообщение голосовой почты переводится в состояние read (прочитано) на IMAP-сервере. Это означает, что клиентское почтовое приложение также отметит это сообщение как прочитанное. Аналогичным образом, если сообщение прослушивается из клиентского почтового приложения, система голосовой почты отключает сигнал уведомления о наличии непрочитанного сообщения на всех телефонах, закрепленных за этим почтовым ящиком. Удаление сообщения в одном месте обеспечит его удаление везде. Таким образом, однажды удаленное сообщение действительно уничтожается. Такова универсальная система передачи и обработки сообщений, «священный грааль» интеграции голосовой и электронной почты, но Asterisk скромно предпочитает не акцентировать на этом особое внимание. Интеграция с IMAP по-прежнему является новой функциональностью, поэтому для ее активации необходимо кое-что добавить. Первым делом для работы с IMAP-сервером Asterisk необходимо установить IMAP– клиент. Подойдет практически любой IMAP-сервер (даже Exchange Server). Авторы лично протестировали поддержку голосовой почты по протоколу IMAP с IMAP-серверами Courier-IMAP и Dovecot. IMAP– сервер физически может располагаться на одном компьютере с установленной Asterisk или находиться в другой части земного шара. Чтобы иметь возможность доступа к IMAP-серверу, Asterisk требует наличия библиотеки IMAP-клиента. Эта библиотека является бесплатным IMAP-клиентом под именем c-client, созданным в Вашингтонском университете. Чтобы установить c-client, надо просто перейти в свою папку /usr/src и выполнить следующие команды:

# wget ftp://ftp.cac.washington.edu/mail/imap.tar.Z

Это обеспечит загрузку исходного кода. Извлеките его из архива следующим образом:

# tar zxvf imap.tar.Z

Обратите особое внимание на имя папки, создаваемой этой командой, поскольку оно, вероятно, изменится к тому времени, когда вы будете читать данную книгу. Пока книга готовилась к выходу, имя папки менялось четыре раза. Последним было /usr/src/imap-2006h.

Перейдите в созданную папку и выполните команду

# make lrh IP6=4

Это обеспечит компиляцию всего, что необходимо Asterisk для использования библиотек IMAP-клиента[133]133
  Опция lrh указывает компилятору, что это система Linux Red Hat. Опция IP6=4 говорит о том, что мы не хотим выполнять компиляцию с поддержкой IPv6. Остальные опции можно найти в Makefile. Для систем RHEL 5 или CentOS 5 вместо lrh необходимо использовать lr5.
  Сравните с клубной страницей IETF, которая гласит: «IETF – не организация со специальными атрибутами членства (никаких карточек, никаких взносов, никаких секретных рукопожатий :-)... Она открыта для всех, кому это интересно. Добро пожаловать в IETF». Вот это сообщество!


[Закрыть]
.

Теперь необходимо повторно скомпилировать Asterisk с возможностями IMAP. Понадобится перейти в ту папку, в которой располагаются исходные файлы Asterisk (к примеру, /usr/src/asterisk), и выполнить следующую команду:

# /configure –with-imap=/usr/src/imap-2006h

Теперь необходимо повторно выполнить команду make menuconfig, чтобы включить IMAP-хранилище в компиляцию. В разделе Voicemail Build Options (Параметры создания голосовой почты) выберите параметр IMAP STORAGE (ХРАНИЛИЩЕ IMAP) и нажмите кнопку x, чтобы сохранить изменения и выйти. Теперь при компиляции Asterisk будет выполнена и сборка модуля IMAP. Очевидно, что следующий шаг – повторная компиляция и установка Asterisk. Для этого просто выполните в вашем терминале следующую команду:

# make && make install

Итак, модуль скомпилирован и установлен. Пришло время его сконфигурировать.

Добавим несколько строк в раздел [general] файла voicemail.conf, хранящегося в папке /etc/asterisk:

imapserver=localhost

imapport=143

expungeonhangup=yes

authuser=vmail

authpassword=vmailsecret

imapfolder=Voicemail

Поскольку Dovecot доступен в хранилище пакетов CentOS, установить небольшой IMAP-сервер для обработки виртуальных пользователей (голосовой почты) на сервере Asterisk просто:

# yum install dovecot

Обеспечим активацию поддержки IMAP в файле /etc/dovecot.conf, раскомментировав строку protocols, чтобы она выглядела следующим образом:

protocols = imap imaps Активировав поддержку IMAP, создадим учетную запись пользователя для сохранения почты:

# groupadd vmail

# useradd vmail -g vmail -s /bin/true -c "asterisk voicemail user" -p vmailsecret -d /var/spool/asterisk/imap-voicemail vmail

# chown -R vmail.vmail /var/spool/asterisk/imap-voicemail

Теперь перезапустим Dovecot и Asterisk – и все должно быть готово.

# service dovecot restart

# service asterisk restart

Поздравляем! Вы успешно установили базовую поддержку голосовой почты IMAP в Asterisk! Однако это лишь верхушка айсберга. Имея хранилище голосовой почты, работающее по протоколу IMAP, можно без труда реализовать совместно используемую (например, по отделам) голосовую почту с помощью совместно используемых IMAP-папок. Многие компании уже имеют совместно используемую по отделам электронную почту, так что совместно используемый ящик голосовой почты – весьма естественное и логичное развитие технологии. При наличии IMAP-хранилища голосовой почты каждый сотрудник может работать с несколькими ящиками голосовой почты, не смешивая личные и рабочие сообщения. С точки зрения Asterisk в конфигурации нет ничего необычного; вы просто вызываете приложение VoiceMail() с указанием желаемого почтового ящика и контекста и обеспечиваете, чтобы совместно используемая IMAP-папка была включена в список папок почтового клиента служащего отдела.

Наконец, вместо глобального IMAP-пользователя Asterisk может быть реализована авторизация для каждого почтового ящика в отдельности (то есть каждый ящик голосовой почты аутентифицируется как отдельный пользователь). Asterisk поддерживает это с помощью опций imapuser и imapsecret в индивидуальных описаниях ящиков голосовой почты:

[imapvoicemail]

# => 1234,Sue's Mailbox,,,[email protected]|imapsecret=suesimapsecret

# => 5555,Bob's Mailbox,,,[email protected]|imapsecret=bobsimapsecret

В этом конкретном примере, если сообщение оставлено в почтовом ящике IMAP 100 контекста imapvoicemail, Asterisk будет проходить аутентификацию на IMAP-сервере как [email protected], используя в качестве пароля suesimapsecret. Аналогично, если сообщение оставлено в почтовом ящике 101 того же контекста голосовой почты, будут использоваться соответственно [email protected] и bobimapsecret.

Хранение голосовой почты в базе данных ODBC

На всякий случай повторяю, что голосовая почта также может храниться в базе данных посредством ODBC-коннектора. Этому посвящена глава 12!

Asterisk и Jabber (XMPP)

Jabber – на самом деле первоначальное имя протоколов IETF XMPP (RFC 3920-3923). Поскольку имя Jabber, несомненно, лучше, чем XMPP, оно и закрепилось. Этот протокол изначально разрабатывался для обеспечения децентрализованной, общедоступной инфраструктуры обмена сообщениями и контроля присутствия, поддерживающей открытые стандарты. Она поддерживает доставку сообщений в автономном режиме и шифрование и «доросла» до голосовых сообщений, которые поддерживает Asterisk.

Интересно отметить, что вначале Jabber рассматривался как конкурент протокола SIMPLE, основывающегося на SIP. XMPP разработан как более универсальный протокол и, конечно, на основе XML. Asterisk можно сконфигурировать на использование XMPP в нескольких видах. XMPP может выступать в роли инфраструктуры контроля присутствия (например, добавочный номер 205 не отвечает или занят) или инфраструктуры обмена голосовыми сообщениями JINGLE для полной поддержки телефонной связи с другими сервисами, такими как Google Talk.

В отличие от других сетей обмена сообщениями, таких как MSN и Yahoo!, XMPP децентрализована. Кто угодно может иметь свой собственный Jabber-сервер и выполнять на нем любое количество сервисов. Сообщения отправляются практически так же, как сообщения электронной почты: используемый Jabber-сервер связывается с Jabber-сер– вером другого человека и устанавливается прямое соединение. Если этот человек не в сети, сообщение сохраняется, и, когда он регистрируется на своем Jabber-сервере, выполняется доставка всех хранящихся сообщений. Учитывая возможность шифрования (протокол XMPP поддерживает TLS), неудивительно, что многие коммерческие организации переходят к реализации внутренних сетей обмена сообщениями с использованием этого замечательного протокола. И Asterisk может органично интегрироваться в эти сети связи.

Заключение

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

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

Asterisk – будущее телефонии

Сначала они не замечают вас, потом осмеивают, затем начинают бороться и наконец – проигрывают.

– Махатма Ганди

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

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

Проблемы традиционной системы телефонной связи

Чаще всего создателем телефона называют Александра Грэхема Белла, но на самом деле во второй половине 19 века десятки умов работали над задачей передачи голоса по телеграфным линиям. Эти люди в большинстве своем были ребятами с деловой жилкой, жаждущими создать продукт, который помог бы им сколотить состояние.

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


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

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