extensions.conf
Kontexty
Dialplán lze dělit na kontexty - oddělené “routovací pravidla” hovorů
tel.čísla v kontextu nemohou využít funkcí (směrování) jiného kontextu není-li to vysloveně nakonfigurováno.
Pomocí kontextů lze tedy definovat oprávnění volání (např.interní,externí,mezinárodní) či definovat rozdílné IVR pro různé skupiny telefonů apod.
kontexty jsou definovány názvem (max.79 znaků) v hranatých závorkách - nesmí se jmenovat global,general či default
speciální kontexty: [general] a [global]
[general] - zde bývají speciální nastavení týkajcí se dialplánu, která však v drtivé většině případů necháváme defaultní
[globals] -
Extensions
exten ⇒ name, priority, application()
např. exten ⇒ 123,1,Answer()
Priority
Číslované priority:
exten => 123,1,Answer()
exten => 123,2,do something
exten => 123,3,do something else
exten => 123,4,do one last thing
exten => 123,5,Hangup()
Nečíslované priority:
exten => 123,1,Answer()
exten => 123,n,do something
exten => 123,n,do something else
exten => 123,n,do one last thing
exten => 123,n,Hangup()
'same =>' operator
exten => 123,1,Answer()
same => n,do something
same => n,do something else
same => n,do one last thing
same => n,Hangup()
Priority labels
exten => 123,n(label),application()
Applications
každá aplikace provádí nějakou činnost - přehrání hudby, přijetí volby, select do DB, vytočení kanálu, zavěšení hovoru apod.
Progress()
Answer()
Přijme hovor
Nemá žádné argumenty
Hangup()
Zavěsí hovor, je vhodné jej použít vždy na konci kontextu, aby se účastníkovi zamezilo v nějaké další nepředvídatelné činnosti.
Bez argumentů, lze ale použít ISDN cause code např. Hangup(16)
Playback()
Přehraje zadaný zvukový soubor
Ignoruje event.zadané volby uživatelem
Zdroj souborů /etc/asterisk/sounds/
Synatxe Playback(filename), kde filename se píše bez přípony a odkazuje na soubor filename.wav
Použití relativní cesty (k adr./etc/asterisk/sounds): Playback(subdir/filename)
Lze také použít absolutní cestu: Playback(/home/lukas/filename)
Je-li v adresáři více souborů se stejným názvem a rozdílnou příponou, asterisk si vybere ten nejvhodnější dle náročnosti na CPU (náročnost formátů na CPU lze zjistit *CLI> show translation)
Playback(digits/1) - řekne zadanou číslovku (jedna)
Playback(silence/1&auth-thankyou) - další příklad 1s ticho pak thankyou
Background(), WaitExten()
Přijímají stisknutá čísla od volajícího
Background navíc při čekání na volbu přehrává zadaný zvukový soubor, přijme-li nějaké číslo či čísla, přeruší přehrávání zvuku a přeskočí na příslušnou extenzi
Takto se dají dělat hlasová menu
Vhodné je kombinovat obě aplikace, čímž zajistíme, že uživatel může zadat volbu i po přehrání celého zvukového souboru
[TestMenu]
exten => start,1,Answer()
same => n,Background(main-menu) ;přehraje soubor main-menu, přičemž očekává volbu
same => n,WaitExten(5) ;čeká na volbu dalších 5s
SayDigits()
Goto()
same ⇒ Goto(context,extension,priority)
má tři argumenty, ale všechny nejsou povinné
Počet zadaných argumentů:
1 - (priority) - asterisk jej vyhodnotí jako prioritu v této extenzi
2 - (extension,priority)
3 - (context,extension,priority)
[TestMenu]
exten => start,1,Answer()
same => n,Background(main-menu)
same => n,WaitExten(5)
exten => 1,1,Playback(digits/1)
same => n,Goto(TestMenu,start,1)
exten => 2,1,Playback(digits/2)
same => n,Goto(TestMenu,start,1)
Dial()
Dial(destination,timeout,option,uri)
Hodnoty lze vynechávat - např. Dial(destination,,option,uri) nebo Dial(destination)
Synatxe destination při volání extenze na vzdáleném systému: Dial(technology/user[:password]@remote_host[:port][/remote_extension])
Destination
;vyzvoneni jednoho kanalu
exten => 104,1,Dial(SIP/0004F2001122)
; vyzvoneni nekolika kanalu soucasne (spojka &)
exten => 105,1,Dial(DAHDI/1&SIP/0004F2001122&IAX2/Softphone)
; vyzvoneni extenze na vzdalenem systemu
exten => 500,1,Dial(IAX2/guest@misery.digium.com/s)
Timeout
exten => 201,1,Dial(DAHDI/1,10) ;zkousi zvonit 10s
same => n,Playback(vm-nobodyavail)
same => n,Hangup()
Option
exten => 201,1,Dial(DAHDI/1,10,m)
same => n,Playback(vm-nobodyavail)
same => n,Hangup()
URI
sloužík zaslání
URI pokud cílová stanice podporuje jeho zobrazení, příliš se nepoužívá.
Invalid Entries and Timeouts
Invalid extension i - extenze, která není platná v daném kontextu.
Timeout t - slouží pro definování akce po vypršení timeoutu, např. není li zadána volba během WaitExten()
[TestMenu]
exten => start,1,Answer()
same => n,Background(main-menu)
same => n,WaitExten(5)
exten => 1,1,Playback(digits/1)
same => n,Goto(TestMenu,start,1)
exten => 2,1,Playback(digits/2)
same => n,Goto(TestMenu,start,1)
exten => i,1,Playback(pbx-invalid)
same => n,Goto(TestMenu,start,1)
exten => t,1,Playback(vm-goodbye)
same => n,Hangup(
Proměnné
Global variables
[globals]
LEIF=SIP/0000FFFF0001
JIM=SIP/0000FFFF0002
RUSSELL=SIP/0000FFFF0003
[LocalSets]
exten => 100,1,Dial(${LEIF})
exten => leif,1,Dial(${LEIF})
exten => 101,1,Dial(${JIM})
exten => jim,1,Dial(${JIM})
exten => 102,1,Dial(${RUSSELL})
exten => russell,1,Dial(${RUSSELL
Channel variables
exten => 202,1,Set(MagicNumber=42)
same => n,SayNumber(${MagicNumber})
Environment variables
Pattern Matching
pattern/vzorec začíná vždy podtržítkem _
X - jedno číslo 0-9
Z - jedno číslo 1-9
N - jedno číslo 2-9
[125-7] - vyjmenovaná čísla a rozsahy, zde např čísla 1,2,5,6,7
. (tečka) - jedno a více čísel (znaků)
! (vykřičník) - žádné a více čísel či znaků
_X. - vhodný způsob pro použití pokud chci všechna čísla
Proměnná ${EXTEN}
exten => _XXX,1,Answer()
same => n,SayDigits(${EXTEN})
Úpravy proměnné:
${EXTEN:x:y} - kde x=startovací pozice, y=počet čísel která se mají vrátit
Příklady pro číslo 0326706166
${EXTEN:1:3} - vrátí 326
${EXTEN:1:9} - vrátí 326706166
${EXTEN:-9:9} - začne 9 čísel od konce a vrátí 9 čísel - tedy 326706166
${EXTEN:2:-4} - začne 2 č.od začátku, vrátí zbytek bez posledních 4č. - tedy 2670
${EXTEN:-6:-4} - začne 6č. od konce a vrátí zbytek bez 4 posledních čísel - tedy 70
${EXTEN:1} - začne od 1č. a vrátí zbytek bez ohledu na délku - tedy 326706166
Includes
[interni]
...
[externi]
...
[mezinarodni]
...
[tisnova_volani]
...
[zamestnanci]
include => interni
include => externi
include => tisnova_volani
[manageri]
include => interni
include => externi
include => mezinarodni
include => tisnova_volani
Aplikace změn
*CLI> dialplan reload
nebo:
$ sudo /usr/sbin/asterisk -rx “dialplan reload”