====== 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)