Руслан Валиев ([info]designerus) wrote,
@ 2007-02-06 13:29:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Entry tags:voip

АТС дома на базе Asterisk
Как и обещал ранее, расскажу про свой домашний Asterisk-сервер.

Должен сразу признаться, что мой опыт с VoIP пока равен одной отметке выше нуля. Поэтому, прошу все критически всерьез не воспринимать.

Начну с железных характеристик, пожалуй.

  • Intel Celeron 350MHz;
  • 256MB RAM;
  • 10GB;
  • 3Com FastEthernet.
Так как я, вдобавок к SIP, хотел обрабатывать входящие звонки с моей обычной телефонной линии (PSTN), появилась нужда в приобретении AIC (Analog Interface Card), которая поддерживается Asterisk'ом. Выбор пал на дешевенькую X100P. Это клон знаменитых и дорогих карт от Digium. Для изучения в самый раз.

Итак, что касается этих карт, стоит обратить внимание на два ключевых акронима: 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
Foreign Exchange Office отсылает сигнал Foreign Exchange Station. Следовательно, для того, чтоб отконфигурировать FXO-канал (входящие звонки), нужно отконфигурировать FXS-канал и наоборот.

Для начала отконфигурируем 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-Asterisk+config+zapata.conf

Теперь создадим 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:5060 ;Регистрирую моего 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=internal


voicemail.conf я почти не трогал, а добавил только себя в конце:

[default]

4444 => 6774,Ruslan Valiyev,ruslan@localhost ;«6774» является пин-кодом, который я ввожу, когда хочу прослушать свои сообщения


Ну вот вроде и все. Что касается голосовых меню или IVR, то в наборе идет английский пакет со звуками в /usr/share/asterisk/sounds
[info]romik_g любезно раздает русскую версию. Если вы хотите записать свои звуки, то, например, я делаю это в Audacity, сохраняю в wav, а потом конвертирую в gsm путем:

asterisk:~# sox inputfile.wav -r 8000 -c 1 outputfile.gsm resample -ql

Есть вопросы? Пишите здесь. С радостью отвечу.
Кстати, работающую версию написанного можно услышать в действии, набрав +47 55 27 63 37 :-)


(Post a new comment)


[info]ente
2007-02-06 12:42 pm UTC (link)
По идее, моя карта имеет один FXO и один FXS, но работает только FXO. Это значит, что пускать через сервер я могу только входящие звонки.
Мелкая неточность, не "пускать входящие звонки", а "подключать к городской линии". FXO порт домашнего AddPac отлично звонит по подсунутым номерам, правда в моем случае не всегда четко определяет busy, но это уже особенности чудо-АТС. А на FXS портах у меня висят обычные телефоны на которые отправляется звонок при необходимости.

(Reply to this)(Thread)


[info]designerus
2007-02-06 12:45 pm UTC (link)
Да-да, у меня в FXS тоже воткнут телефон, с которого я звоню.

(Reply to this)(Parent)


[info]vpol
2007-02-06 12:53 pm UTC (link)
А я потестил твой автоответчик :)

(Reply to this)(Thread)


[info]designerus
2007-02-06 01:01 pm UTC (link)
Ага, Питеру тоже привет :-)

(Reply to this)(Parent)


[info]ilya666
2007-02-06 02:47 pm UTC (link)
Добро пожаловать! Игрушка эта заразная.

# wc /etc/asterisk/extensions.conf
1233 5379 50022 /etc/asterisk/extensions.conf

А VoipBuster давно пользуешься? Надежно?

(Reply to this)(Thread)


[info]designerus
2007-02-06 02:53 pm UTC (link)
Бр-р-р. Только не говори, что все в одном файле :-)

Около года. В связке с Asterisk'ом — не больше месяца. У меня рабочий IAX-trunk вообще, так что VoipBuster'ом редко пользуюсь.

(Reply to this)(Parent)


Create an Account
Forgot your login?
Login w/ OpenID
English • Español • Deutsch • Русский…