Обычно Asterisk позиционируется как решение для IP-PBX. То есть для обслуживания нужд офисов с достаточно хитрой системой обработки входящих звонков и сложной внтуренней номерацией, однако в ряде случаев asterisk окажется удобен для использования и в домашних условиях. Пример такого использования будет показан далее.
Никого уже не удивишь тем, что домашний телефон заходит в квартиру не "лапшой", а по тому же кабелю что и интернет в цифровом виде. Чаще всего используя протокол SIP. Разные SIP-провайдеры предлагаю разные условия и разные тарифы на разные направления, так что наиболее выгодным будет использование одновременно нескольких SIP-провайдеров, "разруливая" исходящие звонки между каналами с учётом их стоимости.
Для примера возьмём казанского SIP-оператора «Мэлт» и федерального оператора «Мегафон» с его услугой «Мультифон», которая технически представляет собой тот же SIP.
Итак, у нас есть номер от «Мэлта» "2009111" с паролем "pass1" и номер от «Мегафона» "+79271111111" с подключенной услугой «Мультифон» и паролем от ней "pass2". Задача: поднять на домашнем сервере asterisk, завести на нём SIP-аккаунт для домашнего телефона, "зацепить" внешние транки и настроить следующее:
- Все входящие звонки для обоих транков попадают на домашний телефон;
- Исходящие звонки внутри города идут через «Мэлт»;
- Исходящие звонки на мобильные номера и межгород идут через «Мегафон«
На сервере у нас установлена Ubuntu Server 11.04. Установим asterisk:
apt-get install asterisk
Для начала создадим SIP-аккаунт для домашнего телефона. Логин будет "200" и пароль "p4ssw0rd". Для этого приведём файл "/etc/asterisk/users.conf" к виду:
[general] fullname = New User userbase = 6000 hasvoicemail = yes vmsecret = 1234 hassip = yes hasiax = yes hasmanager = no callwaiting = yes threewaycalling = yes callwaitingcallerid = yes transfer = yes canpark = yes cancallforward = yes callreturn = yes callgroup = 1 pickupgroup = 1 [200] secret = p4ssw0rd nat = yes host = dynamic username = home fullname = Home Phone vmsecret = p4ssw0rd hassip = yes hasiax = no hash323 = no hasmanager = no callwaiting = no context = international host = dynamic context=sip-dialout hasvoicemail = yes
Теперь настроим внешние транки. Для этого в файл "/etc/asterisk/sip.conf" добавим строки:
register => 2009111:pass1@voice.melt.ru/2009111 register => 79271111111@multifon.ru:pass2:79271111111@sbc.megafon.ru:5060/79271111111 [melt] type=friend secret=pass1 username=2009111 host=voice.melt.ru dtmfmode=rfc2833 canreinvite=no disallow=all allow=ulaw allow=alaw allow=gsm insecure=port,invite fromdomain=voice.melt.ru context=incoming [multifon] type=peer username=79271111111 secret=pass2 host=sbc.megafon.ru dtmfmode=inband canreinvite=no allow=all insecure=port,invite fromdomain=multifon.ru fromuser=79271111111 context=incoming-multifon ;transport=tcp nat=yes port=5060
Теперь в настройках планов дозвона ("dialplans") настроим соответствующие контексты. Эти настройки выполняются в файле "/etc/asterisk/extensions.conf". Для этого допишем следующие строки:
;=============================================================================== ; Этот контекст описывает исходящие звонки [sip-dialout] ; Звонки на семизначные номера, начинающиеся на 2 или 5 exten => _[25]XXXXXX,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN} through Melt) exten => _[25]XXXXXX,n,Dial(SIP/melt/${EXTEN},60) exten => _[25]XXXXXX,n,Playtones(congestion) exten => _[25]XXXXXX,n,Hangup() ; Тоже самое, но с указанием кода города (в данном случае Казани) exten => _[78]843[25]XXXXXX,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN} through Melt) exten => _[78]843[25]XXXXXX,n,Dial(SIP/melt/${EXTEN:4},60) exten => _[78]843[25]XXXXXX,n,Playtones(congestion) exten => _[78]843[25]XXXXXX,n,Hangup() ; Межгород и мобильные exten => _[78]XXXXXXXXXX,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN} through Multifon) exten => _[78]XXXXXXXXXX,n,Dial(SIP/multifon/7${EXTEN:1},60) exten => _[78]XXXXXXXXXX,n,Playtones(congestion) exten => _[78]XXXXXXXXXX,n,Hangup() ;=============================================================================== ; В этом контексте описаны входящие звонки, пришедшие через Мэлт [incoming] exten => 2009456,1,Log(NOTICE, Incoming call from ${CALLERID(all)}) exten => 2009456,2,Dial(SIP/200,20,t) exten => 2009456,3,Voicemail(200@home, u) exten => 2009456,4,Hangup() ;=============================================================================== ; В этом контексте описаны входящие звонки, пришедшие через Мегафон [incoming-multifon] exten => 79271111111,1,Log(NOTICE, Incoming call from ${CALLERID(all)}) exten => 79271111111,2,Dial(SIP/200,20,t) exten => 79271111111,3,Voicemail(200@home, u) exten => 79271111111,4,Hangup()
Теперь надо "все" входящие на мегафон на SIP, для этого нужно выполнить команду:
curl https://sm.megafon.ru/sm/client/routing?login=79271111111@multifon.ru\&password=pass2
На этом настройка закончена и можно перезапустить asterisk:
invoke-rc.d asterisk restart
Теперь остаётся только настроить SIP-клиент (или SIP-адаптер) для подключения к нашему asterisk и можно пользоваться. Чтобы проверить состояние внешних транков нужно ввести команду:
asterisk -rx 'sip show registry'
А для просмотра всех SIP-соединений:
asterisk -rx 'sip show peers'
Более детальную информацию по работе с asterisk можно найти в официальной документации. На этом всё. Приятной работы!
Anonymous 2011-09-04 15:36:24 (#)
ломают этот чертов астериск как за здрасьте.