====== 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"**