====== Soubory Asterisku ====== **/etc/asterisk/** - adresář s konfiguračními soubory * ; - středník,odkomentuje řádek * = a => - značí rovnost * mezery - jsou ignorovány ===== Druhy zápisu konfigurace ===== == Jednoduchý: == * extensions.conf, meetme.conf, voicemail.conf * každý objekt se svými parametry je deklarován na jednom řádku [Session] Object 1 => op1,op2,op3 Object 2=> op1b,op2b,op3b == Objektový s dědičností: == * chan_dahdi.conf, agents.conf * použití tam, kde je hodně parametrů stejných * parametry jsou deklarovány před objektem [Session] op1 = bas op2 = adv object=>1 //object1(op1=bas, op2=adv) op1 = int object => 2 //object2(op1=int, op2=adv) == Kontextový objektový: == * iax.conf, sip.conf * každá entita obsahuje kontext parametrů * občas se vyskytuje rezervovaný kontext parametrů společný pro všechny entity **[general]** [entity1] op1=value1 op2=value2 [entity2] op1=value3 op2=value4 ===== Soubory ===== **asterisk.conf** users.conf [general] port = 5060 context = lab disallow = all allow = alaw dtmfmode = auto [6000] type = friend username = 6000 userid = well host = dynamic [6001] type = friend username = 6001 userid = linksys host = dynamic [6002] type = friend username = 6002 userid = well2 host = dynamic [general] static = yes writeprotect = yes [globals] [lab] exten => 1000,1,Answer exten => 1000,n,Playback(demo-echotest) exten => 1000,n,Echo() exten => 1000,n,Hangup() exten => 6000,1,Dial(SIP/6000,5) exten => 6000,n,Goto(s-${DIALSTATUS},1) exten => 6001,1,Dial(SIP/6001,5) exten => 6001,n,Goto(s-${DIALSTATUS},1) exten => 6002,1,Dial(SIP/6002,5) exten => 6002,n,Goto(s-${DIALSTATUS},1) exten => s-NOANSWER,1,Playback(nbdy-avail-to-take-call) exten => s-NOANSWER,2,Playback(pls-try-call-later) exten => s-NOANSWER,3,Hangup() exten => s-BUSY,1,Playback(the-party-you-are-calling) exten => s-BUSY,2,Playback(is-curntly-busy) exten => s-BUSY,3,Hangup() exten => s-CHANUNAVAIL,1,Playback(pbx-invalid) exten => s-CHANUNAVAIL,2,Hangup() === Logování === * Asterisk loguje do adr. **/var/log/asterisk** * /etc/asterisk/logger.conf - nastavení logování * /etc/logrotate.d/asterisk - nastavení rotace logů CLI> logger show channels Channel Type Status Configuration ------- ---- ------ ------------- /var/log/asterisk/messages File Enabled - Warning Notice Error Console Enabled - Warning Notice Error CLI> logger rotate == Parsing '/etc/asterisk/logger.conf': Found Asterisk Event Logger restarted Asterisk Queue Logger restarted ====== /etc/asterisk/sip.conf ====== [general] * **allow/disallow** - Definice povolených a zakázaných kodeků (alaw,ulaw,ilbc,g729,all) * **bindaddr** - IP adresa na které SIP naslouchá. Je-li nastaveno 0.0.0.0 (default), poslouchá na všech interfejsech. * **context** - Nastavení def.kontextu klientům, kteří jej nemají spoecifikovaný. Z bezp.důvodů se doporučuje nastavit nějaký "falešný" dummy context. * **bindport** - SIP UDP port. * **maxexpirey** - Maximum time to register (seconds). * **defaultexpirey** - Default time to register (seconds). * **registe**r - Registers Asterisk to another host. * **allowguest** - Def. no, aby se zamezilo přístupu neautorizovaným uživatelům. * **alwaysauthreject** - Je-li přijato INVITE či REGISTER, vždy odpoví (valid username, invalid password), což má zamezit hádání už.jména. * **[name]** - Jakmile se SIP zařízení připojí k Asterisku, použije se username ze SIP URI k nalezení peera/usera. * **type** - Nastavení typu spojení. Možnosti jsou peer, user a friend. * //peer// - Používá se pro odchozí hovory asterisku. * //user// - Používá se pro příchozí hovory. * //friend// - Slouží pro oba směry. * **host** - IP adresa / hostname sip zařízení, může být i //dynami//c pro zař.,která se na asterisk registrují. * **defaultip** - Použije se v případě "host=dynamic". * **secret** - Heslo. * **context** - Nastavení kontextu. [general] bindport = 5060 bindaddr = 10.1.30.45 context = dummy disallow = all allow = ulaw maxexpirey = 120 defaultexpirey = 80 allowguest=no alwaysauthreject=yes srvlookup=yes register => login:secret@domain:port/9999 [6000] type=friend secret=#MySecret1#7 host=10.1.30.50 context=from-internal [6001] type=friend secret=Mys3cr3t# host=dynamic context=from-internal defaultip=10.1.30.17 [siptrunk] username=login type=peer secret=secret port=5060 insecure=invite host=dominio fromuser=login fromdomain=domain dtmfmode=rfc2833 context=from-sip disallow=all allow=ilbc allow=alaw allow=g729 ====== /etc/asterisk/extensions.conf ====== [general] * **static** - yes/no * **writeprotect** - yes/no (je-li static=yes a writeprotect=no, lze v konzoli použít příkaz "//save dialplan//", který kompletně přepíše extensions.conf a smaže v něm veškeré komentáře.) * **autofallthrough** - yes/no - Projde-li vytočené číslo celý dialplan a už s ním nejde nic dělat tak v případě **no** je hovor ukončen (BUSY,HANGUP apod.) v případě **yes** se čeká na další volbu. * **clearglobalvars** - yes/no - Po restartu znovunačtení hodnot globálních proměnných či ponechání původních. * **extenpatternmatchnew** - yes/no - Od ver. 1.6 umožňuje rychlejší vyhledávání volby v dialplánu (def.no). * **userscontex**t - Kontext, ve kterém budou záznamy ze souboru users.conf [globals] * Definují se zde inicializační hodnoty globálních proměnných. * K proměnným lze v dialplánu přistupovat použitím **${GLOBAL(variable)}** * Přistupovat lze i k linuxovým systémovým proměnným použitím **${ENV(variable)}** * Syntaxe: **RINGTIME=>3** exten=9000,1,set(GLOBAL(RINGTIME)=4) exten=9000,n,Noop(${GLOBAL(RINGTIME)}) exten=9000,n,hangup() ===== Extension patterns: ===== * **_** Start of a match * **X** matches any digit from 0-9 * **Z** matches any digit from 1-9 * **N** matches any digit from 2-9 * **[1237-9]** matches any digit or letter in the brackets (in this example, 1,2,3,7,8,9) * **[a-z]** matches any lower case letter * **[A-Z]** matches any UPPER case letter * **.** wildcard, matches one or more characters * **!** wildcard, matches zero or more characters immediately (only Asterisk 1.2 and later, see note) * **1111/2222** matches CallerID * **s** Standard * _. NEPOUZIVAT, zahrnuje i specialni funkce (l,t,h, apod.) * _X! matches any numeric pattern of one or more digits (but not * or #) * _[*#0-9]! same as previous entry but also includes * and # characters * _[*0-9]! same as the previous entry except excludes the # character s if there is no pattern at all, then using s will often match * extenze jsou case-sensitivní * nejde udělat dvě extenze se stejným názvem a jinou velikostí písmen! ===== Priority format: ===== * **1-9** Priority Number * **n** next * **s** same * **n+/-x** n+x, n-x * **s+/-x** s+x, s-x * **hint** Used with presence ===== Asterisk Special extensions: ===== * **i** Invalid. Je spuštěno při volbě neexistující extenze. Ovlivňuje obsah CDR - pole dst. * **s** Start. Používá se pro manipulaci hovorů bez vytočeného čísla (FXO trunky a různá menu) * **h** Hangup. Požívá se při zavěšení hovoru. * **t** Timeout. Používá se k zavěšení neaktivní linky. * **T** AbsoluteTimeout. Používá se k zavěšení hovoru, který přesáhne max.povolenou délku definovanou funkcí //absolutetimeout()//. * **o** Operator. Přepne na operátora, když uživatel ve voicemailu stiskne 0. * **a** * **fax** * **Talk** Použití těchto extenzí může změnit obsah CDR - v poli **dst** nemusí být volané číslo. Proto je dobré použít volbu **g** ve funkci **dial()** a zvážit použití funkcí **resetcdr(w)** či **nocdr()**. ===== Proměnné: ===== **Channel-specific:** * ${EXTEN} - dialed extension * ${CONTEXT} - current context * ${CALLERID(num)} * ${CALLERID(name)} * ${PRIORITY} exten=9001,1,dumnpchan() ;vypis dostupnych promennych **Environment-specific** * ${ENV(LANG)} * Set(ENV(LANG))=en_US **Application-specific** * ${DIALEDTIME} - This is the time from dialing a channel until it is disconnected. * ${ANSWEREDTIME} - This is the amount of time for the actual call. * ${DIALSTATUS} - This is the status of the call: * CHANUNAVAIL * CONGESTION * NOANSWER * BUSY * ANSWER * CANCEL * DONTCALL * TORTURE * ${CAUSECODE} -> Error message for the call. **Práce s proměnnými:** * ${EXTEN:7} - ořízne 7 číslic zleva * ${EXTEN:-3} - vrátí poslední 3 čísla * ${123456789:1} - vrací řetězec 23456789 * ${123456789:-4} - vrací řetězec 6789 * ${123456789:0:3} - vrací řetězec 123 * ${123456789:2:3} - vrací řetězec 345 * ${123456789:-4:3} - vrací řetězec 678 ===== Funkce: ===== * NoOp() * Set() - //set(Global(variable)=content)// * Dial() * GoTo() depreached * GoSub() * Hangup() * Answer * Playback() * Background() * Voicemail() * SetVar() * SetGlobalVar() ===== Výrazy: ===== $[expression1 operator expression2] $[${I}+100] **Matematické operátory** * **+** Sčítání * **-** Odčítání * ***** Násobení * **/** Dělení * **%** Modulo **Logické operátory** * **&** AND * **|** OR * **!** dvojkový doplněk **Regulární výrazy** * **:** Regular expression matching * **=~** Regular expression exact matching **Operátory rovnosti** * **=** * **!=** * **<** * **>** * **''<''=** * **>=** **Podmínka** * expression1 ? expression2 :: expression3 **Priorita operátorů** str.57 (75) ===== Další: ===== Huntgroup - vse najednou * exten => 326211790,1,Dial(SIP/70&SIP/71,60,t) Huntgroup - postupne po 15s * exten => 326211790,1,Dial(SIP/70,15,t) * exten => 326211790,n,Dial(SIP/71,15,t) * exten => 326211790,n,GoTo(326211670,1)