====== extensions.conf ======
* Tvoří dialplán Asterisku
===== 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] -
{{:wiki:voip:asterisk:adg3_0601.png?direct&600 |}}
===== 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 =====
* pomocí labels je řádek v dialplánu adresovatelný, tzn. odjinud z dialplánu mohu přeskočit **GoSub()** na konkrétní řádek buď na základě č.priority (kterou v případě použití nečíslovaných priorit neznám) nebo na základě 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() ===
* Zasílá protistraně progress informace ještě před vyzvednutím hovoru, může vyřešit sig.problémy s některými operátory
=== 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()===
* přeříká zadané číslo
=== 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 ==
* písmený symbol něajké spec.akce
* např. **m** = musiconhold místo ringback tónu volajícímu do sluchátka
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 ====
* Platí v celém dialplánu
[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 ====
* platí vždy jen pro jeden konkrétní hovor
exten => 202,1,Set(MagicNumber=42)
same => n,SayNumber(${MagicNumber})
==== Environment variables ====
* Umožňují přístup k proměnným operačního systému
* ${ENV(var)} - kde //var// je název UNIXové proměnné
===== 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} =====
* obsahuje právě vytočené číslo
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 =====
* umožňuje includovat kontexty do sebe
* **include => context**
[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"**