Witam,
zacznijmy od sip.conf:
nie wiem jaka jest Pana specyfika sieci (userzy za natem czy nie) - jeżeli tak, to warto dodać parametr nat=yes (w sekcji [general] lub też w samym koncie użytkownika). warto także dodać parametr dtmf=auto do sekcji general.
oraz oczwyiście register dla obu kont (o ile oba konta są z numerem i chce Pan przez nie odbierać połączenia.
w samych kontach np. gadulec proponowałbym jeszcze dodać kilka parametrów pedantic=no dtmfmode=rfc2833 ;zdecydowanie lepszy wybór niż info (info - najgorszy wybór z możliwych). qualify=yes ;opcja ułatwia monitorowanie połączenia -> sip show peers. nat=no|yes ;w zależności czy asterisk stoi na publicznym IP.
disallow=all
allow=alaw ;kodek alaw zużywa więcej pasma niż gsm, ale pozwala juz na w miarę bezproblemową obsługę faxu i zdecydowanie zapewnia lepszą jakość dźwięku (mniej kompresji).
polecam korzystać z ALAW a nie z ULAW, dlatego, że polskie sieci PSTN używają alaw (są mniejsze problemy np. z echem i nawiązaniem poprawnego połączenia).
co do extension.conf, połaczenia przychodzące obsługiwane są w kontekscie default.
Warto moim zdaniem rozdzielić obsługę połączeń przychodzących i dial plan dla połączeń wychodzących z prostem przyczyny - osiągamy łatwość manipulacji kto gdzie może dzwonić.
Nie napisał Pan ile lini jest podpiętych do asteriska i czy tylko VoIP. Ja obsługuję centrale gdzie są obsługiwane ISDNy, ZAPy, E1, SS7. Asterisk pod tym względem jest bardzo prostym narzędziem do administracji ruchem głosowym.
moja propozycja extensions.conf:
;konteksty, w których będą się znajdować użytkownicy - konteksty będą się różniły możliwością wykonywania połączeń -> dodanie usera w sip.conf w danym kontekscie
[1]
include => wewnetrzne
include => komorkowe
include => krajowe
include => zagraniczne
include => blokada700
[2]
include => wewnetrzne
include => komorkowe
include => krajowe
include => blokada700
[3]
include => wewnetrzne
[global] ;definicja zmiennych globalnych
CONSOLE=Console/dsp ;obsługa konsoli asteriskowej
TRUNK1=gadulec/ ;taka definicja zmiennych globalnych pozwoli Panu na zmiane połączeń wychodzących bez przebudowy dial planu. TRUNK2=naglos/
[general]
static=yes
writeprotect=yes
[default]
;obsługa tylko i wyłączeń połączeń przychodzących, zgodnie z numeracją i potrzebami
np.:
include => bezodp
include => zajete
exten => _X., 1, GoTo(s,1) ;wszystko co przyjdzie przesyłamy do wewnętrznego kontekstu s do linii 1.
exten => s,1,Answer
exten => s,n,NVBackgroundDetect(/var/lib/asterisk/sound/disa,t) ;NVBackgroundDetect -> autowykrywanie sygnału faxu podczas odtwarzania disy (wymaga dokomilowania nvbackgrounddetect przynajmniej w wersji 1.2). Można użyć także Background - odtwarzanie disy z możliwością wyboru przez DTMF np. numeru wewnętrznego (też wymaga dokompilowania nvbackground - przynajmniej w wersji 1.2)
exten => s,n,Set(TIMEOUT(response)=4)
exten => s,n,Set(TIMEOUT(digit)=2)
exten => _XX,1,Dial(SIP/${EXTEN},60,t)
exten => _XX,n,GoToIf($["${DIALSTATUS}" = "BUSY"]?zajete,1:)
exten => _XX,n,GoToIf($["${DIALSTATUS}" = "NOANSWER"]?bezodp,1:)
exten => _XX,n,GoToIf($["${DIALSTATUS}" = "CONGESTION"]?bezodp,1:)
;fax
exten => fax,1,Dial(SIP/19,,tT)
exten => fax,n,Dial(SIP/20,,tT)
exten => fax,n,Hangup
;kiedy nic nie wybierzemy:
exten => t,1,Queue(first,t,,,20)
exten => t,n,Queue(second,t,,,30)
exten => t,n,GoTo(bezodp,1)
;kiedy wybierzemy niepoprawnie to wracamy do zapowiedzi:)
exten => i,1,GoTo(s,2)
[zajete]
include => bezodp
exten => zajete,1,Background(/var/lib/asterisk/sound/zajete)
exten => zajete,n,Set(TIMEOUT(response)=3)
exten => zajete,n,Set(TIMEOUT(digit)=2)
exten => t,1,Queue(first,t,,,15)
exten => t,2,Queue(second,t,,,15)
exten => t,3,GoTo(bezodp,1)
exten => i,1,Background(/var/lib/asterisk/sound/disa)
exten => i,n,Goto(zajete,2)
[bezodp]
exten => bezodp,1,Background(/var/lib/asterisk/sound/nieodebrane)
exten => bezodp,n,Set(TIMEOUT(response)=3)
exten => bezodp,n,Set(TIMEOUT(digit)=2)
exten => t,1,Queue(first,t,,,15)
exten => t,2,Queue(second,t,,,15)
exten => t,3,GoTo(bezodp,1)
exten => i,1,Background(/var/lib/asterisk/sound/disa)
exten => i,n,Goto(bezodp,2)
[wewnetrzne]
;przy zalozeniu, ze np. klienci/użytkownik centrali loguje się jako 2 cyfrowy nr.
exten => _XX,1,Dial(SIP/${EXTEN},60,mtT) ;m - obsługujemy musiconhold; tT - transfery
exten => _XX,n,Hangup
[zagraniczne]
;00X.
exten => _00X.,1,SetCallerID(${CALLERIDNUM}) ;warto wiedziec kto gdzie dzwonił -> niezbędny parametr w konci użytkownika callerid=numer|text jeżeli korzysta Pan z CDR-a. Jezeli callerid=text to musi Pan zastosować SetCallerID(${CALLERIDNAME}).
exten => _00X.,n,Dial(${TRUNK1}${EXTEN}) ;TRUNK1 lub TRANK2 w zależności np. który operator ma tańsze połączenia.
exten => _00X.,n,Hangup
[blokada700]
;070X., 70X.
exten => _70XXXXXXX,1,SetCallerID(${CALLERIDNUM})
exten => _70XXXXXXX.,n,PlayTone(/var/lib/asterisk/sound/numer_zablokowany)
exten => _70XXXXXXX.,n,Hangup
exten => _070XXXXXXX,1,SetCallerID(${CALLERIDNUM})
exten => _070XXXXXXX.,n,PlayTone(/var/lib/asterisk/sound/numer_zablokowany)
exten => _070XXXXXXX,n,Hangup
[komorkowe]
;idea
exten => _050XXXXXXX,1,SetCallerID(${CALLERIDNUM})
exten => _050XXXXXXX,n,Dial(${TRUNK1}${EXTEN})
exten => _050XXXXXXX,n,Hangup
exten => _50XXXXXXX,1,SetCallerID(${CALLERIDNUM})
exten => _50XXXXXXX,n,Dial(${TRUNK1}0${EXTEN})
exten => _50XXXXXXX,n,Hangup
exten => _051XXXXXXX,1,SetCallerID(${CALLERIDNUM})
exten => _051XXXXXXX,n,Dial(${TRUNK1}${EXTEN})
exten => _051XXXXXXX,n,Hangup
exten => _51XXXXXXX,1,SetCallerID(${CALLERIDNUM})
exten => _51XXXXXXX,n,Dial(${TRUNK1}0${EXTEN})
exten => _51XXXXXXX,n,Hangup
;i dalej dla każdej z sieci
[krajowe]
;0xxxxxxxxx, xxxxxxxxx
;dolnoslaskie
exten => _071XXXXXXX,1,SetCallerID(${CALLERIDNUM})
exten => _071XXXXXXX,n,Dial(${TRUNK1}${EXTEN})
exten => _071XXXXXXX,n,Hangup
exten => _71XXXXXXX,1,SetCallerID(${CALLERIDNUM})
exten => _71XXXXXXX,n,Dial(${TRUNK1}0${EXTEN})
exten => _71XXXXXXX,n,Hangup
exten => _074XXXXXXX,1,SetCallerID(${CALLERIDNUM})
exten => _074XXXXXXX,n,Dial(${TRUNK1}${EXTEN})
exten => _074XXXXXXX,n,Hangup
exten => _74XXXXXXX,1,SetCallerID(${CALLERIDNUM})
exten => _74XXXXXXX,n,Dial(${TRUNK1}0${EXTEN})
exten => _74XXXXXXX,n,Hangup
exten => _075XXXXXXX,1,SetCallerID(${CALLERIDNUM})
exten => _075XXXXXXX,n,Dial(${TRUNK1}${EXTEN})
exten => _075XXXXXXX,n,Hangup
exten => _75XXXXXXX,1,SetCallerID(${CALLERIDNUM})
exten => _75XXXXXXX,n,Dial(${TRUNK1}0${EXTEN})
exten => _75XXXXXXX,n,Hangup
exten => _076XXXXXXX,1,SetCallerID(${CALLERIDNUM})
exten => _076XXXXXXX,n,Dial(${TRUNK1}${EXTEN})
exten => _076XXXXXXX,n,Hangup
exten => _76XXXXXXX,1,SetCallerID(${CALLERIDNUM})
exten => _76XXXXXXX,n,Dial(${TRUNK1}0${EXTEN})
exten => _76XXXXXXX,n,Hangup
;i dalej dla poszczególnych kierunków
Uważam, że warto wyspecyfikować wszystko możliwe kierunki, gdyż wtedy mamy możliwość zezwalania i blokowania połączeń i jesteśmy w stanie zapanować całkowicie nad centralą. Warto więc poświęcić kilkanaście minut na przygotowanie dialplanów, i korzystać ze zmiennych, bo wszystko to potem ułatwia administrowanie.
[wróć]
|