| Руслан Валиев ( @ 2007-02-06 13:29:00 |
| Entry tags: | voip |
АТС дома на базе Asterisk
Как и обещал ранее, расскажу про свой домашний Asterisk-сервер.
Должен сразу признаться, что мой опыт с VoIP пока равен одной отметке выше нуля. Поэтому, прошу все критически всерьез не воспринимать.
Начну с железных характеристик, пожалуй.
- Intel Celeron 350MHz;
- 256MB RAM;
- 10GB;
- 3Com FastEthernet.
Итак, что касается этих карт, стоит обратить внимание на два ключевых акронима: FXO (Foreign Exchange Office) и FXS (Foreign Exchange Station). По идее, моя карта имеет один FXO и один FXS, но работает только FXO. Это значит, что пускать через сервер я могу только входящие звонки.
Теперь про дела технарьские.
Устанавливать Asterisk советуют либо на RedHat/CentOS, либо на Debian. В моем случае — выбор пал на второе.
Для успешной работы придется установить три вещи. Сам Asterisk, тел. драйвера Zapata (zaptel) и PRI-библиотеки (libpri). Я был удивлен обязательности в установке libpri, т.к. у меня нет ISDN, но эти библиотеки нужны.
Про саму установку написано больше, чем достаточно. Например, здесь.
Представим, что вы поставили все необходимое. Осталось отконфигурировать FXO-канал, настроить SIP и создать простенький dial-plan.
Файлы, которые мы заденем:
- zaptel.conf;
- zapata.conf;
- extensions.conf;
- sip.conf;
- voicemail.conf
Для начала отконфигурируем FXO в zaptel.conf следующим образом:
fxsks=1
loadzone=no
defaultzone=noНе вдаваясь сильно в подробности, прокомментирую три строки в zaptel.conf:
fxsks=1 ; Конфигурирую FXO на первом порте карты. «ks» расшифровывается как «kewlstart» и является сигнальным протоколом для аналоговых схем.
loadzone=no ; Загружаю зону (В моем случае — Norway).
defaultzone=no ; Задаю зону по умолчанию.
Время проверить проделанное:
asterisk:~# ztcfg -vv
Zaptel Configuration
======================
Channel map:
Channel 01: FXS Kewlstart (Default) (Slaves: 01)
1 channels configured.Следующим шагом будет файл zapata.conf, в котором описываются установки и конфигурация установленной X100P.
Мой файл выглядит так:
[trunkgroups]
[channels]
language=en
context=incoming
signalling=fxs_ks
usecallerid=yes
cidsignalling=dtmf
hidecallerid=no
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
canpark=yes
cancallforward=yes
callreturn=yes
echocancel=yes
echocancelwhenbridged=yes
echotraining=yes
rxgain=0.0
txgain=0.0
group=1
callgroup=1
pickupgroup=1
immediate=yes
musiconhold=default
channel => 1Как видите, почти каждая строка говорит сама за себя. Для полного описания функций смотрите http://www.voip-info.org/wiki-Aster
Теперь создадим dial-plan, который будет обрабатывать входящие PSTN-звонки. Делается это редатированием extensions.conf
Вот моя конфигурация с комментариями:
[general]
static=yes
writeprotect=yes
[globals]
timeout_incoming=60
options_incoming=
timeout_outgoing=60
timeout_outgoing=
[incoming]
exten => s,1,Answer() ;Открыть входящий звонок
exten => s,2,Background(me-ivr/away) ;Проигрывается сообщение «Здравствуйте. В настоящий момент меня нет на месте. Если это срочно, то нажмите "1" и ваш звонок будет перенаправлен на мой сотовый или нажмите "2", чтоб оставить сообщение».
exten => i,1,Goto(incoming,s,1) ;При нажатии любых других клавиш, кроме «1» и «2», проигрывать сообщение выше.
Здесь немного хитрый момент. На самом деле, при нажатии на «1», звонок не переадресовывается тут же на мой сотовый, а сначала переадресовывается на мой Soft Phone (X-LITE), установленный на ноутбуке. Если же я не отвечаю в течении пяти секунд, то тогда звонит мой сотовый.
exten => 1,1,Dial(SIP/ruslan,5)
exten => 1,2,Dial(SIP/004741128324@voipbuster) ;Так как я не могу управлять FXS-каналом моей карты, то наружние звонки я реализую, пользуясь услугами VoipBuster. Я могу, например, бесплатно звонить на домашние телефоны почти по всей Европе, а звонки на сотовые стоят копейки.
exten => 1,3,Hangup()
exten => 2,1,VoiceMail(4444@default) ;При нажатии на «2», записать голосовое сообщение для ящика «4444», который принадлежит мне.
exten => 2,2,Hangup()
exten => t,1,Hangup()
[internal]
exten => 1000,1,Dial(SIP/ruslan) ;Мой внутренний SIP-номер.
exten => 2000,1,Dial(SIP/olessia) ;SIP-номер жены.
[default]Осталось два файла: sip.conf и voicemail.conf
sip.conf
[general]
context=default
bindport=5060 ;SIP-порт по умолчанию.
bindaddr=0.0.0.0 ;Привязать к какому адресу/сетевой карте.
srvlookup=yes ;Делать DNS-запросы.
register => designerus:mypassword@sip.voipbuster.com:5 060 ;Регистрирую моего VoIP-провайдера.
[authentication]
[voipbuster]
type=peer
host=sip.voipbuster.com
username=designerus
fromuser=designerus
secret=mypassword
canreivite=no
[ruslan] ;SIP-пользователь «ruslan».
type=friend ;Может принимать и делать звонки.
callerid=("Ruslan Valiyev" <1000>) ;Caller ID, который будет высвечиваться на телефоне.
username=ruslan
secret=mysecret
qualify=yes ;Разрешить мониторинг аккаунта.
nat=no
host=dynamic
canreinvite=yes
context=internal
mailbox=4444@default ;Персональный голосовой ящик «4444».
[olessia]
type=friend
callerid=("Olessia Skuratovich" <2000>)
username=olessia
secret=mysecret
qualify=yes
nat=no
host=dynamic
canreinvite=no
context=internalvoicemail.conf я почти не трогал, а добавил только себя в конце:
[default]
4444 => 6774,Ruslan Valiyev,ruslan@localhost ;«6774» является пин-кодом, который я ввожу, когда хочу прослушать свои сообщенияНу вот вроде и все. Что касается голосовых меню или IVR, то в наборе идет английский пакет со звуками в /usr/share/asterisk/sounds
asterisk:~# sox inputfile.wav -r 8000 -c 1 outputfile.gsm resample -qlЕсть вопросы? Пишите здесь. С радостью отвечу.
Кстати, работающую версию написанного можно услышать в действии, набрав +47 55 27 63 37 :-)