Asterisk на dd-wrt для мультифона ( ASUS RT-N16 ) Печать
03.05.12 15:51

Asterisk на dd-wrt ASUS RT-N16

 

Случайно совпало свободное время и желание и решил я таки скрестить свой asus rt-n16 на dd-wrt  и мультифон от мегафона (это такая шняжка  при которой можно поиметь доступ к номеру по SIP) подробнее о ценах тут - http://multifon.ru/tarifs
Делаем простенькую конфигурацию с одним sip телефоном и двумя мегафоновскими номерами с оповещением по jabber о тока что пропущенных звонках
никто не мешает количество sip телефонов сделать больше одного и сделать из asus rt-n16 свою АТС :)
как ставить dd-wrt на asus-rt-n16 можно поглядеть  тут
версия моей прошивки - DD-WRT v24-sp2 (08/07/10) mega
много букф - далее


1. Получение пароля для SIP
Ставим multifon с сайта multifon.ru , он есть и под андроид и под винду и под мак, проходим по мастеру и устанавливаем пароль, учитывайте что у мегафона пароль хранится в открытом виде и из того же мультифона его всегда можно восстановить,  пришлют смской на номер
2. Переключение входящих звонков на SIP
Для этого, как тру админы воспользуемся командной строкой
выполняем
curl 'https://sm.megafon.ru/sm/client/routing/set?login= Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. &password=password_from_item_1&routing=2'
последняя циферка означает 0-тока телефон, 1-тока сип, 2 - при входящем звонке будут звонить оба
3. Подготовка софта железяки
3.1 так как астериск хрен впихнется в jffs то обязательно нужна флешка, благо usb порты asus rt-n16 имеет (форматируем в ext3, втыкаем, в меню dd-wrt Services->USB включаем Core USB Support, USB 2.0 Support, USB Storage Support, ext2 / ext3 File System Support, FAT File System Support, Automatic Drive Mount, выбираем каталог /opt , сохраняем, ребутявимся
3.2 Ставим ipkg-opt как там описано
3.3 Ставим iksemel (ipkg-opt install iksemel) дабы астериск у нас умел делать jabber
3.4 Cтавим asterisk14 (ipkg-opt install asterisk14). Там есть и 1.6 и 1.8 и их можно поставить то у меня с ними результат был стабильный - "segmentation fault" при запуске, вычищая из загрузки ненужные модули в 1.8 я смог добиться тока того что "segmentation fault" стал появятся не в момент загрузки, а при вызове, когда дело заходило  до Playback. упс.
4. Настройка  asterisk
переходим в /opt/etc/asterisk/ и начинаем шаманить
отказываемся от загрузки ненужных  нам модулей а так же те которые не загружаются нефика  в modules.conf
[modules]
autoload=yes
;no need
noload => pbx_gtkconsole.so
noload => pbx_kdeconsole.so
noload => app_intercom.so
noload => chan_modem.so
noload => chan_modem_aopen.so
noload => chan_modem_bestdata.so
noload => chan_modem_i4l.so
noload => chan_capi.so
noload => chan_alsa.so
noload => cdr_sqlite.so
noload => chan_oh323.so
noload => chan_h323.so
noload => pbx_dundi.so
noload => format_jpeg.so
noload => app_nv_faxdetect.so
noload => res_agi.so
noload => res_adsi.so
noload => res_speech.so
;noload => res_features.so
noload => app_festival.so
noload => app_speech_utils.so
noload => func_curl.so
noload => chan_oss.so
;not loading
noload => cdr_odbc.so
noload => res_odbc.so
noload => format_ogg_vorbis.so
noload => codec_speex.so
noload => cdr_radius.so
noload => res_config_odbc.so
noload => res_snmp.so
noload => func_odbc.so


Делаем users.conf
обращаю внимание на nat= у меня провайдер дает реальные адреса, поэтому везде no, у вас может быть по другому
sip телефоном коннектимся на адрес модема с логином 100 и паролем 100

[general]
[multifon-out-1]
dtmfmode=inband
username=7xxxxxxxxx1
type=peer
secret=multifon-password1
host=sbc.megafon.ru
fromuser=7xxxxxxxxx1
fromdomain = multifon.ru
port=5060
nat=no
context=incoming
insecure=port,invite
hassip = yes
[multifon-out-2]
dtmfmode=inband
username=7xxxxxxxxx2
type=peer
secret=multifon-password2
host=sbc.megafon.ru
fromuser=7xxxxxxxxx2
fromdomain = multifon.ru
port=5060
nat=no
context=incoming
insecure=port,invite
hassip = yes
[100]
type=friend
username=100
secret=100
context=phones
host=dynamic
nat=no
hassip = yes

Делаем sip.conf
[general]
language=ru
tcpenable=yes
allow=all
context=incoming
register => 7xxxxxxxxx1@multifon.ru:multifon-password1:7xxxxxxxxx1@sbc.megafon.ru:5060/7xxxxxxxxx1
register => Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. :multifon-password2: Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. :5060/7xxxxxxxxx2

Делаем jabber.conf
в данном случае мы пользуем заранее созданный gtalk аккаунт который заранее добавлен в наш лист а мы - в его

[general]
debug=no  
autoprune=no
autoregister=yes
[asterisk] ;;label
type=client
serverhost=talk.google.com
username= Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. /asterisk
secret=gmail_password
priority=1
port=5222
usetls=yes
usesasl=yes
buddy= Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра.
status=available
statusmessage="working"
timeout=100


Делаем extensions.conf (они же правила для звонков) в этом конкретном случае все входящие вызовы с обоих телефонов будут поступать на номер 100 и звонить 30 секунд, если номер не ответит то отправиться jabber сообщение пользователю Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. с номером того кто звонил
а вызывающему скажут - извини, никто не отвечает, перезвони позже и положат трубку
для наглядности в incoming не используется макрос, хотя он туда прям таки просится :)
для звонка наружу через первый номер номер надо набирать через 9
а для использования второго номера  - через 0

[incoming]

exten => 7xxxxxxxxx1,1,Dial(SIP/100,30,rt)

exten => 7xxxxxxxxx1,n,Jabbersend(asterisk, Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. ,Missing call from${CALLERID(num)})

exten => 7xxxxxxxxx1,n,Playback(sorry)
exten => 7xxxxxxxxx1,n,Playback(vm-nobodyavail)
exten => 7xxxxxxxxx1,n,Playback(pls-try-call-later)
exten => 7xxxxxxxxx1,n,Hangup

exten => 7xxxxxxxxx2,1,Dial(SIP/100,30,rt)
exten => 7xxxxxxxxx2,n,Jabbersend(asterisk, Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. ,Missing call from${CALLERID(num)})
exten => 7xxxxxxxxx2,n,Playback(sorry)
exten => 7xxxxxxxxx2,n,Playback(vm-nobodyavail)
exten => 7xxxxxxxxx2,n,Playback(pls-try-call-later)
exten => 7xxxxxxxxx2,n,Hangup
[out]
exten=>_9.,1,Dial(SIP/${EXTEN:1}@multifon-out-1,30,r)
exten=>_0.,1,Dial(SIP/${EXTEN:1}@multifon-out-2,30,r)

[phones]
include => incoming
include => out
делам логинг звонков в простеньком csv формате
лог будет писаться в /opt/var/log/asterisk/cdr-csv/Master.csv
файл cdr.conf
[general]
enable=yes

[csv]
usegmtime=yes    ; log date/time in GMT.  Default is "no"
loguniqueid=yes  ; log uniqueid.  Default is "no"
loguserfield=yes ; log user field.  Default is "no"
запускаем asterisk безовсяких ключей и тестируем

SMS
пока не разбирался, как можно и можно ли вообще
Troubleshooting
повысить логинг в консоль можно в logger.conf
(console => notice,warning,error,debug,verbose)
дебажить при запуске лучше через запуск asterisk -vvvvvvdddddd
дебажить в процессе работе лучше через asterisk -rvvvvvvdddddd
в этой же консолке можно дать весьма полезные команды
sip show peers
sip show peer multifon-out-1
sip show peer multifon-out-2
jabber show connected



источник: sergeygals.blogspot.com
ссылка на материал: http://thin.kiev.ua/index.php?option=com_content&view=article&id=603:asterisk-dd-wrt&catid=31:general&Itemid=46
{jcomments on}
Последнее обновление 03.05.12 16:03