Установка asterisk-pbx. При установке и компиляции никаких проблем не было. Выкачал с CVS: # cd /usr/src # export CVSROOT=:pserver:[email protected]:/usr/cvsroot # cvs login- the password is anoncvs. # cvs checkout asterisk (zaptel libpri не стал выкачивать, так как нужны пока только H323-SIP-IAX2. Куплю карточку дигиум, буду пересобирать) Распаковал, отредактировал Makefile, указал нужный мне INSTALL_PREFIX (весь софт стараюсь ставить в отдельный путь, хотя это и в нарушение традиций юникс. Зато удобно потом по серверам разносить. Потом возможно приедтся сделать export LD_LIBRARY_PATH=/path/to/libs или добавить путь в /etc/ld.so.conf). # make Не спешу делать make install, так как решил собрать h323 модуль к астериску. Для этого понадобились pwlib и h323 с http://www.openh323.org Много софта завязанного на pwlib/openh323 почему-то ищут их в ~/pwlib и ~/openh323 либо в ../pwlib и ../openh323, поэтому лучше их распаковывть в домашней директории. Нужно перейти в директорию channels/h323 и отредактировать Makefile и указать правильные пути. Далее запустить make. Все должно собраться. После компиляции модуля h323 можно вернуться в корневую директорию asterisk и запустить make install. Он дособирает модуль h323 и перепишет все в INSTALL_PREFIX. (Потом выяснилось, что нужно точно выбрать версии asterisk и pwlib/openh323, иначе будут проблемы. Например, иногда астериск вылетает с segmentation fault.) Касательно asterisk + h323 можно найти тут: http://www.voip-info.org/wikiAsterisk+H323+channels. Еще полезно почитать файл README в channels/h323. Также версия 0.1.0 модуля h323 поддерживает только IP bases authentication, т.е. H235 security tokens не умеет. Надо посмотреть h323 модуль от http://www.inaccessnetworks.com/projects/asterisk-oh323, может он будет более зрелый. Ну вот и все, Asterisk установлен. Теперь можно заинтсталить примеры конфигурации коммандой make samples. После этого в etc/asterisk появятся конфиги к модулям. (make samples почему-то не копирует channels/h323/h323.conf.sample в etc/asterisk, надо руками) Конфигурация Так как были установлены демо конфиги, можно начинать шоу. При просмотре файла extensions.conf можно увидеть demo контекст с номером 500. Поэтому нужно только разрешить входящие звонки с h323/sip/iax и направить их в контекст demo. В двух словах о каналах, контекстах и экстеншинах. В астериск каждый пользователь/гейтвей должне быть описан в файле того канала, с которого он приходит/на который уходит. Например, все что касается SIP протокола, включая общие настройки типа порта и bind интерфейса, контекста по умолчанию, и заканчивая юзерами и гейтвеями подключаемыми по SIP, описываются в sip.conf. Далее в описании юзера/гейтвея нужно указать контекст, в который попадает звонок, приходящий от этого пользователя. Если контекст не указан, срабатывает defult context из раздела global. Контекст – это секция из файла extansions.conf, в котором указывается на какие номера может звонить данный пользователь. Контексты можно включать друг в друга. В контекстах указываются екстеншины, т.е. куда кто звонит что что при этом делать. А делать можно много чего (вот например встроенные возможности: http://www.voip-info.org/wiki-Asterisk++documentation+of+application+commands) Все, теперь натравливаем любой SIP телефон на машину с астеристкм и набираем номер 500. Сюрприз, вы набираете 1 и попадаете прямо в контору Digium, и вам говорят “hello?” :))) А теперь можно полазить по файлам sip.conf и extensions.conf и понять почему так получилось. Следующим шагом будет звонок с IAX телефона на SIP телефон и обратно. Грабли – некторые iax телефоны используют по умолчанию IAX (порт 5036), а не IAX2 (порт 4569). Может понадобиться в настройках сервера указать порт (192.168.0.6:4569). В качестве SIP телефона использовал FreeWorldDialup X-Lite Добавляем в iax.conf: [maxwiax] type=friend host=dynamic username=maxwiax secret=maxwiax context=maxwiax defaultip=192.168.0.222 и в sip.conf: [maxwsip] type=friend defaultip=192.168.0.222 username=maxwsip secret=maxwsip host=dynamic context=maxwsip и в extensions.conf: [maxwiax] exten => 001,1,Dial(SIP/maxwsip) [maxwsip] exten => 002,1,Dial(IAX2/maxwiax) И теперь свободно звоним с одного телефона на другой. Идем дальше – VoiceMailbox. Настройка VoiceMailbox (http://www.voip-info.org/wiki-Asterisk+VoiceMail) В папке исходников asterisk/contrib/scripts есть перловый скрипт addmailbox, если что, его надо подправить на реальные пути где asterisk уже установленный стоит. Enter Voicemail Context of the mailbox you are creating. The context is the value between the square brackets in the voicemail.conf file. (DEFAULT: default) Voicemail Context: Enter the Mailbox number of the voicemail box you are creating. Mailbox Number: 001 Creating Voicemail directory... Creating INBOX... Creating Default greetings... Complete. [max@navigator scripts]$ Enter Voicemail Context of the mailbox you are creating. The context is the value between the square brackets in the voicemail.conf file. (DEFAULT: default) Voicemail Context: Enter the Mailbox number of the voicemail box you are creating. Mailbox Number: 002 Creating Voicemail directory... Creating INBOX... Creating Default greetings... Complete. [max@navigator scripts]$ Скрипт создал в папке var/spool/asterisk/voicemail/default две папки 001 и 002. Далее ящики надо описать в voicemail.conf . Находим контекст [default]: [default] 001 => 1234,Max,max@localhost 002 => 7890,Root, root@localhost 1234 и 7890 это пароли на ящики. Модифицируем файл extensions.conf чтобы абоненты могли проверять почту: [maxwiax] exten => 001,1,Ringing exten => 001,2,Dial(SIP/maxwsip,2) exten => 001,3,Voicemail(u001) exten => 0010,1,VoiceMailMain(s001) [maxwsip] exten => 002,1,Ringing exten => 002,2,Dial(IAX2/maxwiax,2) exten => 002,3,Voicemail(u002@default) exten => 0020,1,VoiceMailMain(s002) Пояснения. Параметр 2 в комманде Dial означает timeout после которого ижет переход к приоритету 2. Буква 'u' перед номером ящика означает проиграть сообщение “User unavailable”. Буква 's' в приложении VoiceMailMain означает не спрашивать пароль. Если просто указать exten => 0020,1,VoiceMailMain тогда система спросит номер ящика и пароль к нему. А вообще по деталям VoiceMail читать тут: http://www.voip-info.org/wiki-Asterisk+cmd+VoiceMail и тут http://www.voip-info.org/wiki-Asterisk+cmd+VoiceMailMain. Настройка auto-dial out (http://www.voip-info.org/tiki-index.php?page=Asterisk+auto-dial+out) Dial-out можно реализовать двумя способами. Первый заключается в подключении на порт менеджера астериска 5038 телнетом (см. файл manager.conf), и вводе там комманд вручноую типа: Action: Login Username: user Secret: pass Action: Originate Channel: SIP/123testphone Context: default Exten: 7275551212 Priority: 1 Callerid: Asterisk Automatic Wardial Action: Logoff Втророй способ заключается в создании файла такого вот содержимого Channel: SIP/maxwsip MaxRetries: 2 RetryTime: 60 WaitTime: 30 Context: maxwsip Extension: 002 Далее этот файл нужно скопировать в в каталог var/spool/asterisk/outgoing. Только нельза сразу редактировать файл с данном каталоге, его на пол пути подцепит астериск и начнет отрабатывать. Как только я скопировал файл в очередь, зазвонил SIP телефон, я поднял трубку, услышал длинные гудки, зазвонил IAX телефон, я поднял на нем трубку и таков вот образом астериск соединил два звонка. ############ имя пользователя в iax телефоне должно совпадать с названием секции в iax.conf [iaxserg] - секция в телефоне имя юзера должно совпадать : iaxserg