PRZYKŁADYZa przykład zastosowania centralki Asterisk posłuży konfiguracja następującego
scenariusza:
Firma posiada dwa oddziały (bielsko i katowice), każdy oddział posiada swojego Asteriska,
oba będą połączone IAX Trunkiem w celu połączeń wewnętrznych między oddziałami.
Konfiguracje obu oddziałów będą identyczne.
Bielsko przyjmie numerację wewnętrznych 100, Katowice 200.
Każdy oddział będzie miał numer miejski u operatora VoIP oraz usługi:
- pocztę głosową użytkowników
- fax
- kolejkę połączeń dla sekretariatu
- pokój konferencyjny dla oddziału i wspólny dla obu
- nagrywanie połączeń
- zapowiedź powitalną
- własną muzykę na czekanie
SERWER Bielsko:
sip.conf:
register => andrzej007:haslovoip@sip.serwer.pl/339876543
...
...
[sipout]
type = friend
defaultuser = andrzej007
secret = haslovoip
host = sip.serwer.pl
insecure = port,invite
nat = yes
qualify = yes
canreinvite = no
canredirect = no
disallow = all
allow = alaw
allow = gsm
allow = ulaw
allow = g729
allow = g723
allow = g726
[user_100]
defaultusername=user_100
secret=pass100
type=friend
nat=yes
host=dynamic
disallow=all
allow=alaw
allow=ulaw
allow=gsm
context=main_dialplan
[user_101]
defaultusername=user_101
secret=pass101
type=friend
nat=yes
host=dynamic
disallow=all
allow=alaw
allow=ulaw
allow=gsm
context=main_dialplan
[user_102]
defaultusername=user_102
secret=pass102
type=friend
nat=yes
host=dynamic
disallow=all
allow=alaw
allow=ulaw
allow=gsm
context=main_dialplan
iax.conf:
[katowice]
type=user
requirecalltoken=no
host=192.168.1.113
secret=hasełkokatowice
context=polaczenia_z_katowic
peercontext=polaczenia_z_katowic
auth=plaintext
disallow=all
allow=alaw
qualify=yes
[do_katowic]
type=peer
host=192.168.1.113
requirecalltoken=no
username=bielsko
secret=hasełkobb
auth=plaintext
context=polaczenia_z_bielska
peercontext=polaczenia_z_bielska
qualify=yes
trunk=yes
disallow=all
allow=alaw
allow=ulaw
allow=gsm
extensions.conf:
[default]
exten => 339876543,1,Goto(sekretariat,s,1)
[sekretariat]
exten => s,1,Answer()
exten => s,2,Wait(1)
exten => s,3,Background(powitanie)
exten => s,4,WaitExten(3)
exten => t,1,Goto(sekretariat_konsultant,100,1)
exten => i,1,Goto(sekretariat,s,3)
exten => 100,Goto(sekretariat_konsultant,100,1)
exten => 101,Goto(sekretariat_konsultant,101,1)
exten => 102,Goto(sekretariat_konsultant,102,1)
[sekretariat_konsultant]
exten => _X.,1,MixMonitor(${CALLERID(num)}_${STRFTIME(${EPOCH},GMT+8,%C%y%m%d%H%M)}.WAV,b)
exten => _X.,2,Dial(SIP/user_${EXTEN},30,rjt)
exten => _X.,3,Queue(konsultanci,t)
exten => _X.,4,Hangup()
[main_dialplan]
exten => _1XX,1,Dial(SIP/user_${EXTEN},25,rtT)
exten => _1XX,2,VoiceMail(${EXTEN}@skrzynki,u)
exten => _1XX,3,Hangup()
exten => _2XX,1,Dial(IAX2/do_katowic/${EXTEN},,rtT)
exten => _2XX,2,Hangup()
exten => _X.,1,MixMonitor(${CALLERID(num)}_${STRFTIME(${EPOCH},GMT+8,%C%y%m%d%H%M)}.WAV,b)
exten => _X.,2,Dial(SIP/${EXTEN}@sipout,,)
exten => _X.,3,Hangup()
exten => 1000,1,Meetme(1000)
exten => 2000,1,Dial(IAX2/do_katowic/${EXTEN},,rtT)
exten => 3000,1,Meetme(3000)
exten => 500,1,VoiceMailMain(@skrzynki)
exten => 600,1,ReceiveFAX(/var/spool/asterisk/fax/${CALLERID(num)}_${STRFTIME(${EPOCH},GMT+8,%C%y%m%d%H%M)}.tif)
[polaczenia_z_katowic]
exten => _1XX,1,Goto(main_dialplan,${EXTEN},1)
exten => 1000,1,Goto(main_dialplan,1000,1)
exten => _X.,1,Congestion()
meetme.conf:
conf => 1000,1234
conf => 3000,4321
voicemail.conf:
[skrzynki]
100 => 1234,user 100,,,
101 => 5678,user 101,,,
102 => 9876,user 102,,,
queues.conf:
[konsultanci]
wrapuptime = 5
musiconhold = queen
strategy = ringall
timeout = 20
member => SIP/user_101,1
member => SIP/user_102,2
member => SIP/user_103,3
musiconhold.conf:
[queen]
mode=files
directory=moh/queen
SERWER Katowice:
sip.conf:
register => andrzej008:haslovoip@sip.serwer.pl/321234567
...
...
[sipout]
type = friend
defaultuser = andrzej008
secret = haslovoip
host = sip.serwer.pl
insecure = port,invite
nat = yes
qualify = yes
canreinvite = no
canredirect = no
disallow = all
allow = alaw
allow = gsm
allow = ulaw
allow = g729
allow = g723
allow = g726
[user_200]
defaultusername=user_200
secret=pass200
type=friend
nat=yes
host=dynamic
disallow=all
allow=alaw
allow=ulaw
allow=gsm
context=main_dialplan
[user_201]
defaultusername=user_201
secret=pass201
type=friend
nat=yes
host=dynamic
disallow=all
allow=alaw
allow=ulaw
allow=gsm
context=main_dialplan
[user_202]
defaultusername=user_202
secret=pass202
type=friend
nat=yes
host=dynamic
disallow=all
allow=alaw
allow=ulaw
allow=gsm
context=main_dialplan
iax.conf:
[bielsko]
type=user
requirecalltoken=no
host=192.168.1.112
secret=hasełkobb
context=polaczenia_z_bielska
peercontext=polaczenia_z_bielska
auth=plaintext
disallow=all
allow=alaw
qualify=yes
[do_bielska]
type=peer
host=192.168.1.112
requirecalltoken=no
username=katowice
secret=hasełkokatowice
auth=plaintext
context=polaczenia_z_katowic
peercontext=polaczenia_z_katowic
qualify=yes
trunk=yes
disallow=all
allow=alaw
allow=ulaw
allow=gsm
extensions.conf:
[default]
default => 321234567,1,Goto(sekretariat,s,1)
[sekretariat]
exten => s,1,Answer()
exten => s,2,Wait(1)
exten => s,3,Background(powitanie)
exten => s,4,WaitExten(3)
exten => t,1,Goto(sekretariat_konsultant,200,1)
exten => i,1,Goto(sekretariat,s,3)
exten => 200,Goto(sekretariat_konsultant,200,1)
exten => 201,Goto(sekretariat_konsultant,201,1)
exten => 202,Goto(sekretariat_konsultant,202,1)
[sekretariat_konsultant]
exten => _X.,1,MixMonitor(${CALLERID(num)}_${STRFTIME(${EPOCH},GMT+8,%C%y%m%d%H%M)}.WAV,b)
exten => _X.,2,Dial(SIP/user_${EXTEN},30,rjt)
exten => _X.,3,Queue(konsultanci,t)
exten => _X.,4,Hangup()
[main_dialplan]
exten => _2XX,1,Dial(SIP/user_${EXTEN},25,rtT)
exten => _2XX,2,VoiceMail(${EXTEN}@skrzynki,u)
exten => _2XX,3,Hangup()
exten => _1XX,1,Dial(IAX2/do_bielska/${EXTEN},,rtT)
exten => _1XX,2,Hangup()
exten => _X.,1,MixMonitor(${CALLERID(num)}_${STRFTIME(${EPOCH},GMT+8,%C%y%m%d%H%M)}.WAV,b)
exten => _X.,2,Dial(SIP/${EXTEN}@sipout,,)
exten => _X.,3,Hangup()
exten => 2000,1,Meetme(2000)
exten => 1000,1,Dial(IAX2/do_bielska/${EXTEN},,rtT)
exten => 3000,1,Meetme(3000)
exten => 500,1,VoiceMailMain(@skrzynki)
exten => 600,1,ReceiveFAX(/var/spool/asterisk/fax/${CALLERID(num)}_${STRFTIME(${EPOCH},GMT+8,%C%y%m%d%H%M)}.tif)
[polaczenia_z_bielska]
exten => _2XX,1,Goto(main_dialplan,${EXTEN},1)
exten => 2000,1,Goto(main_dialplan,2000,1)
exten => _X.,1,Congestion()
meetme.conf:
conf => 2000,1234
conf => 3000,4321
voicemail.conf:
[skrzynki]
200 => 1234,user 200,,,
201 => 5678,user 201,,,
202 => 9876,user 202,,,
queues.conf:
[konsultanci]
wrapuptime = 5
musiconhold = queen
strategy = ringall
timeout = 20
member => SIP/user_201,1
member => SIP/user_202,2
member => SIP/user_203,3
musiconhold.conf:
[queen]
mode=files
directory=moh/queen
Opis:
Obie lokalizacje mają przyjęty dialplan z numeracją wewnętrznych 100 oraz 200.
Wybranie numeru w danej lokalizacj powoduje połączenie lokalnie po SIP do zadanego usera.
Dla Katowic 200:
exten => _2XX,1,Dial(SIP/user_${EXTEN},25,rtT)
exten => _2XX,2,VoiceMail(${EXTEN}@skrzynki,u)
exten => _2XX,3,Hangup()
Jeżeli połączenie jest nieodebrane trafi na skrzynkę głosową zadanego numeru.
Dla Katowic wybierając numery 3 cyfrowe zaczynające się od 1 trafią po IAX2 do Bielska:
exten => _1XX,1,Dial(IAX2/do_bielska/${EXTEN},,rtT)
exten => _1XX,2,Hangup()
Zostaną odebrane w Bielsku w kontekscie "polaczenia_z_katowic":
[polaczenia_z_katowic]
exten => _1XX,1,Goto(main_dialplan,${EXTEN},1)
exten => 1000,1,Goto(main_dialplan,1000,1)
exten => _X.,1,Congestion()
Widać, że Bielsko i Katowice mają samodzielne pokoje konferencyjne pod 3000:
exten => 3000,1,Meetme(3000)
Natomiast 1000 to pokój dla Bielska, do którego mogą się dodzwonić Katowice:
exten => 1000,1,Dial(IAX2/do_bielska/${EXTEN},,rtT)
i odwrotnie 2000 pokój dla Katowic, do którego może się dodzwnić Bielsko.
Dzwoniąc pod 500 możemy po podaniu numeru skrzynki oraz pinu z pliku voicemail.conf
odsłuchać i sprawdzić pocztę głosową dla skrzynek z kontekstu "skrzynki":
exten => 500,1,VoiceMailMain(@skrzynki)
Wszystkie numery dłuższe, a więc _X. trafią na nasz SIP Trunk z operatorem,
zdefiniowanym jako sipout w pliku sip.conf. Połączenia są rejestrowane za pomocą
funkcji MixMonitor():
exten => _X.,1,MixMonitor(${CALLERID(num)}_${STRFTIME(${EPOCH},GMT+8,%C%y%m%d%H%M)}.WAV,b)
exten => _X.,2,Dial(SIP/${EXTEN}@sipout,,)
exten => _X.,3,Hangup()
Pod wewnętrznym 600 jest dostępny sygnał FAX-u, gdyby ktoś do nas zadzwonił i dał sygnał FAX-u,
możemy przełączyć połączenie na 600, gdzie FAX zostanie odebrany do pliku tif:
exten => 600,1,ReceiveFAX(/var/spool/asterisk/fax/${CALLERID(num)}_${STRFTIME(${EPOCH},GMT+8,%C%y%m%d%H%M)}.tif)
Połączenia przychodzące na numer uzyskany u operatora trafią do kontekstu:
[sekretariat_konsultant]
exten => _X.,1,MixMonitor(${CALLERID(num)}_${STRFTIME(${EPOCH},GMT+8,%C%y%m%d%H%M)}.WAV,b)
exten => _X.,2,Dial(SIP/user_${EXTEN},30,rjt)
exten => _X.,3,Queue(konsultanci,t)
exten => _X.,4,Hangup()
Gdzie rónież zaczynamy nagrywać rozmowę, gdy połączenie będzie nieodebrane przez 30 sekund przez domyślnego
konsultanta 100 dla Bielska lub 200 dla Katowic połączenie trafi do kolejki, gdzie będą odzywały się
wszyscy użytkownicy w strategii "ringall".
W kolejce jest podłączona muzyka "queen", którą należy wgrać jako WAV do folderu:
/var/lib/asterisk/moh/queen
Zdefiniowana jako:
[queen]
mode=files
directory=moh/queen |