VoIP, мои эксперименты

Опубликовано

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

Все действия производятся в каталоге /etc/asterisk (применительно к моей системе, у кого-то это будет /usr/local/etc/asterisk или еще где-нибудь). Первым делом создадим парочку аккаунтов-абонентов примерно вот так

vi users.conf[111]type=friend ;может звонить и принимать звонкиhost=dynamic ;не имеет постоянного IPusername=111 ;логинmd5secret=641b4f168c6117a4badd3d743e21cfe6 ;пароль в md5language=ru ;локализацияnat=no ;не за натомcanreinvite=nocontext=home ;контекст в нашем плане номеровcallerid="First number" <111> ; АОНmailbox=111@home ; голосовая почта в контекстеdisallow=all ; сначала отключаем кодеки и включаем нижеallow=ulawallow=alawallow = g729allow = g723allow = gsmcall-limit=2 ; 1 входящий + 1 исходящий

Теперь надо описать правила для соединения абонентов иначе даже при наличии аккаунта позвонить никуда мы не сможем. Делается это так

vi extensions.conf[home]exten => 111,1,Macro(stdexten,555,SIP/555) ;звоним с помощью макросаexten => user1,1,Goto(555|1) ;делаем алиас в виде ника к номеру

Упомянутый мною макрос уже есть в конфиге, так что делать нам практически ничего не придется, нужно только чуть-чуть его подправить приведя для нашего примера вот к такому виду

[macro-stdexten]exten => s,1,Dial(${ARG2},20)exten => s,2,Goto(s-${DIALSTATUS},1)exten => s-NOANSWER,1,Voicemail(${ARG1}@home,u)exten => s-NOANSWER,2,Goto(default,s,1)exten => s-BUSY,1,Voicemail(${ARG1}@home,b)exten => s-BUSY,2,Goto(default,s,1)exten => _s-.,1,Goto(s-NOANSWER,1)exten => a,1,VoicemailMain(${ARG1}@home)

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

vi voicemail.conf[home]111 => 1234,Test User1,user1@mail.ru

Теперь уже можно даже позвонить друг другу, для этого нужен какой-нибудь телефон, например SJphone, а можно и MSN Messanger'ом обойтись.Побаловавшись вдоволь звонками с ноута на домашний комп и обратно я подумал, что все-таки полезность сего мероприятия весьма сомнительна без возможности позвонить куда-нибудь за пределы собственного дома, как оказалось в этом тоже нет никаких проблем, достаточно настроить Asterisk на работу с каким-нибудь провайдером IP-телефонии, коих сейчас предлагается великое множество.Рассмотрим вариант подобной настройки на примере Sipnet. Название почему-то на слуху, хотя надо сказать, что это не самый лучший вариант и для себя я выбрал другого провайдера, не русского, но позволяющего совершать бесплатные звонки на стационарные телефоны почти по всей России (и еще в кучу стран), за исключением, кажется, Сахалина и Алтайского края.И так, для начала создадим пользователя в users.conf

[sipnet]secret = Ваш_пароль_в_sipnetusername = Ваш_ID_в_sipnettrunkname = sipnetcallerid =hasexten = nohassip = yeshasiax = noregisteriax =registersip = yeshost = sipnet.rucontext = sipnet-ininsecure = invitefromuser = Ваш_ID_в_sipnetfromdomain = sipnet.rucontact = 300disallow=allallow = alawallow = ulawallow = g729allow = g723allow = gsmnat = nocanreinvite = nonatdtmfmode = info

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

vi extensions.conf[sipnet-in]exten => 300,1,Set(CALLERID(name)="Sipnet call")exten => 300,2,Answerexten => 300,3,Wait,3exten => 300,4,BackGround(sipnet-welcome)exten => 300,5,Queue(incoming)include => home[sipnet-out-int]exten => _XXXXXXX,1,Set(CALLERID(all)=SipPhone <6034937>)exten => _XXXXXXX,2,Dial(SIP/sipnet/${EXTEN},120)exten => _XXXXXXX,3,PlayBack(noanswer)exten => _XXXXXXX,4,HangUpexten => _XXXXXXX,305,PlayBack(busy)exten => _XXXXXXX,306,HangUp; Sipnet balance checkexten => 00,1,Set(CALLERID(all)=SipPhone <6034937>)exten => 00,2,Dial(SIP/sipnet/${EXTEN},120)exten => 00,3,PlayBack(noanswer)exten => 00,4,HangUpexten => 00,305,PlayBack(busy)exten => 00,306,HangUpexten => _73952XXXXXX,1,Set(CALLERID(all)=SipPhone <6034937>)exten => _73952XXXXXX,2,Dial(SIP/sipnet/${EXTEN},120)exten => _73952XXXXXX,3,PlayBack(noanswer)exten => _73952XXXXXX,4,HangUpexten => _73952XXXXXX,305,PlayBack(busy)exten => _73952XXXXXX,306,HangUp

В указанном примере я сделал возможность звонить внутри sipnet набирая ID пользователя и проверять баланс по номеру 00 и набирать стационарные Иркутские телефоны с использованием полного номера в международном формате. Входящие звонки будут слышать приветсвие, которое можно записать, и переводиться в очередь вот такую

vi queues.conf[incoming]musicclass = defaultstrategy = ringallmember => SIP/111member => SIP/112

Т.е. звонок будет приходить на все телефоны, а уж кто-нибудь трубку да возьмет.Кстати если не хочется сидеть за компьютером с наушниками и микрофоном, можно подключить в локальную сеть железку, например вот такуюata_151_1а в нее подключить обычный телефон и звонить как все нормальные люди.Вот такой вот небольшой опыт. Ни в коем случае не претендую на полноту и правильность изложения, ведь конфигурятор астериска это своего рода профессия, а может быть даже призвание.З.Ы. Для звонков наружу я использовал Voipcheap. Звонится нормально, качество голоса вполне устроило, задержка небольшая, эха нету, цены приемлемые. Стационарные телефоны бесплатно после пополнения баланса (при чем не только Россия), мобильник по рублю.З.З.Ы. Если хочется чтобы люди могли не парясь дозвониться до Вашего IP-телефона с обычного можно сходить на ipkall.com и получить нахаляву американский телефонный номер.