mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-14 00:24:05 +00:00
Fix escaping and some of the formattting (closes issue #10285)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@76874 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -584,7 +584,7 @@ name/number with a slash (/) and the number to match against the Caller ID:
|
||||
\begin{verbatim}
|
||||
context zoombo
|
||||
{
|
||||
819/7079953345 => { NoOp(hello, 3345); }
|
||||
819/7079953345 => { NoOp(hello, 3345); }
|
||||
}
|
||||
\end{verbatim}
|
||||
|
||||
@@ -727,8 +727,8 @@ You can declare variables in Macros, as so:
|
||||
\begin{verbatim}
|
||||
Macro myroutine(firstarg, secondarg)
|
||||
{
|
||||
Myvar=1;
|
||||
NoOp(Myvar is set to ${myvar});
|
||||
Myvar=1;
|
||||
NoOp(Myvar is set to ${myvar});
|
||||
}
|
||||
\end{verbatim}
|
||||
|
||||
@@ -747,8 +747,8 @@ before setting them to a value;
|
||||
\begin{verbatim}
|
||||
Macro myroutine(firstarg, secondarg)
|
||||
{
|
||||
local Myvar=1;
|
||||
NoOp(Myvar is set to ${Myvar}, and firstarg is ${firstarg}, and secondarg is ${secondarg});
|
||||
local Myvar=1;
|
||||
NoOp(Myvar is set to ${Myvar}, and firstarg is ${firstarg}, and secondarg is ${secondarg});
|
||||
}
|
||||
\end{verbatim}
|
||||
|
||||
@@ -760,8 +760,8 @@ If you need to make a local variable within the Set() application, you can do it
|
||||
\begin{verbatim}
|
||||
Macro myroutine(firstarg, secondarg)
|
||||
{
|
||||
Set(LOCAL(Myvar)=1);
|
||||
NoOp(Myvar is set to ${Myvar}, and firstarg is ${firstarg}, and secondarg is ${secondarg});
|
||||
Set(LOCAL(Myvar)=1);
|
||||
NoOp(Myvar is set to ${Myvar}, and firstarg is ${firstarg}, and secondarg is ${secondarg});
|
||||
}
|
||||
\end{verbatim}
|
||||
|
||||
@@ -787,9 +787,9 @@ context loops {
|
||||
}
|
||||
\end{verbatim}
|
||||
|
||||
NOTE: The conditional expression (the "\${y} >= 0" above) is wrapped in
|
||||
NOTE: The conditional expression (the "\${y} $>$= 0" above) is wrapped in
|
||||
\$[ ] so it can be evaluated. NOTE: The for loop test expression
|
||||
(the "\${x} < 3" above) is wrapped in \$[ ] so it can be evaluated.
|
||||
(the "\${x} $<$ 3" above) is wrapped in \$[ ] so it can be evaluated.
|
||||
|
||||
|
||||
|
||||
@@ -1134,9 +1134,7 @@ These checks will be:
|
||||
currently known functions. A warning is issued if it is not.
|
||||
\end{itemize}
|
||||
|
||||
|
||||
Differences with the original version of AEL
|
||||
============================================
|
||||
\section{Differences with the original version of AEL}
|
||||
|
||||
\begin{enumerate}
|
||||
\item The \$[...] expressions have been enhanced to include the ==, ||,
|
||||
@@ -1174,8 +1172,8 @@ Differences with the original version of AEL
|
||||
AEL README.
|
||||
\item Added the "return" keyword, which will jump to the end of an
|
||||
extension/Macro.
|
||||
\item Added the ifTime (<time range>|<days of week>|<days of
|
||||
month>|<months> ) {} [else {}] construct, which executes much
|
||||
\item Added the ifTime ($<$time range$>$|$<$days of week$>$|$<$days of
|
||||
month$>$|$<$months$>$ ) {} [else {}] construct, which executes much
|
||||
like an if () statement, but the decision is based on the
|
||||
current time, and the time spec provided in the ifTime. See the
|
||||
example above. (Note: all the other time-dependent Applications
|
||||
@@ -1200,7 +1198,7 @@ Differences with the original version of AEL
|
||||
NoOp() added, to make sure the label exists in the extension on
|
||||
Asterisk. (0.6)
|
||||
\item (0.9) the semicolon is no longer required after a closing brace!
|
||||
(i.e. "];" ===> "\}". You can have them there if you like, but
|
||||
(i.e. "];" ===$>$ "\}". You can have them there if you like, but
|
||||
they are not necessary. Someday they may be rejected as a syntax
|
||||
error, maybe.
|
||||
\item (0.9) the // comments are not recognized and removed in the
|
||||
@@ -1208,11 +1206,11 @@ Differences with the original version of AEL
|
||||
arguments. You may have to move a comment if you get errors in
|
||||
existing files.
|
||||
\item (0.10) the random statement has been added. Syntax: random (
|
||||
<expr> ) <lucky-statement> [ else <unlucky-statement> ]. The
|
||||
probability of the lucky-statement getting executed is <expr>,
|
||||
$<$expr$>$ ) $<$lucky-statement$>$ [ else $<$unlucky-statement$>$ ]. The
|
||||
probability of the lucky-statement getting executed is $<$expr$>$,
|
||||
which should evaluate to an integer between 0 and 100. If the
|
||||
<lucky-statement> isn't so lucky this time around, then the
|
||||
<unlucky-statement> gets executed, if it is present.
|
||||
$<$lucky-statement$>$ isn't so lucky this time around, then the
|
||||
$<$unlucky-statement$>$ gets executed, if it is present.
|
||||
\end{enumerate}
|
||||
|
||||
|
||||
|
@@ -61,10 +61,10 @@ reference purposes.
|
||||
\chapter{Channel Variables}
|
||||
\input{channelvariables.tex}
|
||||
|
||||
\chapter{AEL, Asterisk Extension Language}
|
||||
\chapter{AEL: Asterisk Extension Language}
|
||||
\input{ael.tex}
|
||||
|
||||
\chapter{SLA (Shared Line Appearances)}
|
||||
\chapter{SLA: Shared Line Appearances}
|
||||
\input{sla.tex}
|
||||
|
||||
\chapter{Channel Drivers}
|
||||
@@ -96,6 +96,7 @@ reference purposes.
|
||||
|
||||
\chapter{Voicemail}
|
||||
\section{ODBC Storage}
|
||||
\label{odbcstorage}
|
||||
\input{odbcstorage.tex}
|
||||
\section{IMAP Storage}
|
||||
\input{imapstorage.tex}
|
||||
@@ -112,18 +113,19 @@ reference purposes.
|
||||
%
|
||||
%Misc
|
||||
%----
|
||||
%asterisk-mib.txt SNMP mib for Asterisk (net-snmp)
|
||||
%digium-mib.txt SNMP mib for Asterisk (net-snmp)
|
||||
%asterisk-mib.txt SNMP mib for Asterisk (net-snmp)
|
||||
%digium-mib.txt SNMP mib for Asterisk (net-snmp)
|
||||
%
|
||||
%For developers
|
||||
%--------------
|
||||
%See http://www.asterisk.org/developers for more information
|
||||
%
|
||||
%backtrace.txt How to produce a backtrace when Asterisk crashes
|
||||
%CODING-GUIDELINES Guidelines for developers
|
||||
%externalivr.txt Documentation of the protocol used in externalivr()
|
||||
%modules.txt How Asterisk modules work
|
||||
%datastores.txt About channel data stores
|
||||
%speechrec.txt The Generic Speech Recognition API
|
||||
%backtrace.txt How to produce a backtrace when Asterisk crashes
|
||||
%callfiles.txt Asterisk callfiles using instruction
|
||||
%CODING-GUIDELINES Guidelines for developers
|
||||
%externalivr.txt Documentation of the protocol used in externalivr()
|
||||
%modules.txt How Asterisk modules work
|
||||
%datastores.txt About channel data stores
|
||||
%speechrec.txt The Generic Speech Recognition API
|
||||
|
||||
\enddocument
|
||||
\end{document}
|
||||
|
@@ -1,48 +1,47 @@
|
||||
\section{Applications}
|
||||
|
||||
\begin{itemize}
|
||||
\item SetAccount - Set account code for billing
|
||||
\item SetAMAFlags - Sets AMA flags
|
||||
\item NoCDR - Make sure no CDR is saved for a specific call
|
||||
\item ResetCDR - Reset CDR
|
||||
\item ForkCDR - Save current CDR and start a new CDR for this call
|
||||
\item Authenticate - Authenticates and sets the account code
|
||||
\item SetCDRUserField - Set CDR user field
|
||||
\item AppendCDRUserField - Append data to CDR User field
|
||||
\item SetAccount - Set account code for billing
|
||||
\item SetAMAFlags - Sets AMA flags
|
||||
\item NoCDR - Make sure no CDR is saved for a specific call
|
||||
\item ResetCDR - Reset CDR
|
||||
\item ForkCDR - Save current CDR and start a new CDR for this call
|
||||
\item Authenticate - Authenticates and sets the account code
|
||||
\item SetCDRUserField - Set CDR user field
|
||||
\item AppendCDRUserField - Append data to CDR User field
|
||||
\end{itemize}
|
||||
|
||||
For more information, use the "core show application <application>" command.
|
||||
You can set default account codes and AMA flags for devices in
|
||||
channel configuration files, like sip.conf, iax.conf etc.
|
||||
|
||||
|
||||
\section{Fields of the CDR in Asterisk}
|
||||
|
||||
\begin{itemize}
|
||||
\item accountcode: What account number to use, (string, 20 characters)
|
||||
\item src: Caller*ID number (string, 80 characters)
|
||||
\item dst: Destination extension (string, 80 characters)
|
||||
\item dcontext: Destination context (string, 80 characters)
|
||||
\item clid: Caller*ID with text (80 characters)
|
||||
\item channel: Channel used (80 characters)
|
||||
\item dstchannel: Destination channel if appropriate (80 characters)
|
||||
\item lastapp: Last application if appropriate (80 characters)
|
||||
\item lastdata: Last application data (arguments) (80 characters)
|
||||
\item start: Start of call (date/time)
|
||||
\item answer: Answer of call (date/time)
|
||||
\item end: End of call (date/time)
|
||||
\item duration: Total time in system, in seconds (integer), from dial to hangup
|
||||
\item billsec: Total time call is up, in seconds (integer), from answer to hangup
|
||||
\item disposition: What happened to the call: ANSWERED, NO ANSWER, BUSY
|
||||
\item amaflags: What flags to use: DOCUMENTATION, BILL, IGNORE etc,
|
||||
specified on a per channel basis like accountcode.
|
||||
\item user field: A user-defined field, maximum 255 characters
|
||||
\item accountcode: What account number to use, (string, 20 characters)
|
||||
\item src: Caller*ID number (string, 80 characters)
|
||||
\item dst: Destination extension (string, 80 characters)
|
||||
\item dcontext: Destination context (string, 80 characters)
|
||||
\item clid: Caller*ID with text (80 characters)
|
||||
\item channel: Channel used (80 characters)
|
||||
\item dstchannel: Destination channel if appropriate (80 characters)
|
||||
\item lastapp: Last application if appropriate (80 characters)
|
||||
\item lastdata: Last application data (arguments) (80 characters)
|
||||
\item start: Start of call (date/time)
|
||||
\item answer: Answer of call (date/time)
|
||||
\item end: End of call (date/time)
|
||||
\item duration: Total time in system, in seconds (integer), from dial to hangup
|
||||
\item billsec: Total time call is up, in seconds (integer), from answer to hangup
|
||||
\item disposition: What happened to the call: ANSWERED, NO ANSWER, BUSY
|
||||
\item amaflags: What flags to use: DOCUMENTATION, BILL, IGNORE etc,
|
||||
specified on a per channel basis like accountcode.
|
||||
\item user field: A user-defined field, maximum 255 characters
|
||||
\end{itemize}
|
||||
|
||||
In some cases, uniqueid is appended:
|
||||
|
||||
\begin{itemize}
|
||||
\item uniqueid: Unique Channel Identifier (32 characters)
|
||||
\item uniqueid: Unique Channel Identifier (32 characters)
|
||||
This needs to be enabled in the source code at compile time
|
||||
\end{itemize}
|
||||
|
||||
@@ -61,24 +60,24 @@ can be accessed just like channel variables. The following builtin variables
|
||||
are available.
|
||||
|
||||
\begin{verbatim}
|
||||
${CDR(clid)} Caller ID
|
||||
${CDR(src)} Source
|
||||
${CDR(dst)} Destination
|
||||
${CDR(dcontext)} Destination context
|
||||
${CDR(channel)} Channel name
|
||||
${CDR(dstchannel)} Destination channel
|
||||
${CDR(lastapp)} Last app executed
|
||||
${CDR(lastdata)} Last app's arguments
|
||||
${CDR(start)} Time the call started.
|
||||
${CDR(answer)} Time the call was answered.
|
||||
${CDR(end)} Time the call ended.
|
||||
${CDR(duration)} Duration of the call.
|
||||
${CDR(billsec)} Duration of the call once it was answered.
|
||||
${CDR(disposition)} ANSWERED, NO ANSWER, BUSY
|
||||
${CDR(amaflags)} DOCUMENTATION, BILL, IGNORE etc
|
||||
${CDR(accountcode)} The channel's account code.
|
||||
${CDR(uniqueid)} The channel's unique id.
|
||||
${CDR(userfield)} The channels uses specified field.
|
||||
${CDR(clid)} Caller ID
|
||||
${CDR(src)} Source
|
||||
${CDR(dst)} Destination
|
||||
${CDR(dcontext)} Destination context
|
||||
${CDR(channel)} Channel name
|
||||
${CDR(dstchannel)} Destination channel
|
||||
${CDR(lastapp)} Last app executed
|
||||
${CDR(lastdata)} Last app's arguments
|
||||
${CDR(start)} Time the call started.
|
||||
${CDR(answer)} Time the call was answered.
|
||||
${CDR(end)} Time the call ended.
|
||||
${CDR(duration)} Duration of the call.
|
||||
${CDR(billsec)} Duration of the call once it was answered.
|
||||
${CDR(disposition)} ANSWERED, NO ANSWER, BUSY
|
||||
${CDR(amaflags)} DOCUMENTATION, BILL, IGNORE etc
|
||||
${CDR(accountcode)} The channel's account code.
|
||||
${CDR(uniqueid)} The channel's unique id.
|
||||
${CDR(userfield)} The channels uses specified field.
|
||||
\end{verbatim}
|
||||
|
||||
In addition, you can set your own extra variables by using Set(CDR(name)=value).
|
||||
|
@@ -22,8 +22,8 @@ will be passed down to the Background command, in this example.
|
||||
|
||||
Also, characters special to variable substitution, expression evaluation, etc
|
||||
(see below), can be quoted. For example, to literally use a \$ on the
|
||||
string "\$1231", quote it with a preceding \\. Special characters that must
|
||||
be quoted to be used, are [ ] \$ " \\. (to write \\ itself, use \\).
|
||||
string "\$1231", quote it with a preceding \textbackslash. Special characters that must
|
||||
be quoted to be used, are [ ] \$ " \textbackslash. (to write \textbackslash itself, use \textbackslash).
|
||||
|
||||
These Double quotes and escapes are evaluated at the level of the
|
||||
asterisk config file parser.
|
||||
@@ -35,7 +35,7 @@ Double quotes can also be used inside expressions, as discussed below.
|
||||
Parameter strings can include variables. Variable names are arbitrary strings.
|
||||
They are stored in the respective channel structure.
|
||||
|
||||
To set a variable to a particular value, do :
|
||||
To set a variable to a particular value, do:
|
||||
\begin{verbatim}
|
||||
exten => 1,2,Set(varname=value)
|
||||
\end{verbatim}
|
||||
@@ -52,8 +52,8 @@ requires a variable), just write the name. To refer to the variable's value,
|
||||
enclose it inside \${}. For example, Set takes as the first argument
|
||||
(before the =) a variable name, so:
|
||||
\begin{verbatim}
|
||||
exten => 1,2,Set(koko=lala)
|
||||
exten => 1,3,Set(${koko}=blabla)
|
||||
exten => 1,2,Set(koko=lala)
|
||||
exten => 1,3,Set(${koko}=blabla)
|
||||
\end{verbatim}
|
||||
stores to the variable "koko" the value "lala" and to variable "lala" the
|
||||
value "blabla".
|
||||
@@ -91,14 +91,14 @@ NoOp(${__FOO}) is identical to NoOp(${FOO})
|
||||
|
||||
The format for selecting characters from a variable can be expressed as:
|
||||
\begin{verbatim}
|
||||
${variable_name[:offset[:length]]}
|
||||
${variable_name[:offset[:length]]}
|
||||
\end{verbatim}
|
||||
If you want to select the first N characters from the string assigned
|
||||
to a variable, simply append a colon and the number of characters to
|
||||
skip from the beginning of the string to the variable name.
|
||||
\begin{verbatim}
|
||||
;Remove the first character of extension, save in "number" variable
|
||||
exten => _9X.,1,Set(number=${EXTEN:1})
|
||||
; Remove the first character of extension, save in "number" variable
|
||||
exten => _9X.,1,Set(number=${EXTEN:1})
|
||||
\end{verbatim}
|
||||
Assuming we've dialed 918005551234, the value saved to the 'number' variable
|
||||
would be 18005551234. This is useful in situations when we require users to
|
||||
@@ -110,16 +110,16 @@ of the string and then selects everything after the new position. The following
|
||||
example will save the numbers 1234 to the 'number' variable, still assuming
|
||||
we've dialed 918005551234.
|
||||
\begin{verbatim}
|
||||
;Remove everything before the last four digits of the dialed string
|
||||
exten => _9X.,1,Set(number=${EXTEN:-4})
|
||||
; Remove everything before the last four digits of the dialed string
|
||||
exten => _9X.,1,Set(number=${EXTEN:-4})
|
||||
\end{verbatim}
|
||||
We can also limit the number of characters from our offset position that we
|
||||
wish to use. This is done by appending a second colon and length value to the
|
||||
variable name. The following example will save the numbers 555 to the 'number'
|
||||
variable.
|
||||
\begin{verbatim}
|
||||
;Only save the middle numbers 555 from the string 918005551234
|
||||
exten => _9X.,1,Set(number=${EXTEN:5:3})
|
||||
; Only save the middle numbers 555 from the string 918005551234
|
||||
exten => _9X.,1,Set(number=${EXTEN:5:3})
|
||||
\end{verbatim}
|
||||
The length value can also be used in conjunction with a negative offset. This
|
||||
may be useful if the length of the string is unknown, but the trailing digits
|
||||
@@ -127,14 +127,14 @@ are. The following example will save the numbers 555 to the 'number' variable,
|
||||
even if the string starts with more characters than expected (unlike the
|
||||
previous example).
|
||||
\begin{verbatim}
|
||||
;Save the numbers 555 to the 'number' variable
|
||||
exten => _9X.,1,Set(number=${EXTEN:-7:3})
|
||||
; Save the numbers 555 to the 'number' variable
|
||||
exten => _9X.,1,Set(number=${EXTEN:-7:3})
|
||||
\end{verbatim}
|
||||
If a negative length value is entered, Asterisk will remove that many characters
|
||||
from the end of the string.
|
||||
\begin{verbatim}
|
||||
;Set pin to everything but the trailing #.
|
||||
exten => _XXXX#,1,Set(pin=${EXTEN:0:-1})
|
||||
; Set pin to everything but the trailing #.
|
||||
exten => _XXXX#,1,Set(pin=${EXTEN:0:-1})
|
||||
\end{verbatim}
|
||||
|
||||
\section{Expressions}
|
||||
@@ -258,15 +258,15 @@ with equal precedence are grouped within { } symbols.
|
||||
|
||||
expr1 ? expr2 :: expr3
|
||||
Traditional Conditional operator. If expr1 is a number
|
||||
that evaluates to 0 (false), expr3 is result of the this
|
||||
expression evaluation. Otherwise, expr2 is the result.
|
||||
If expr1 is a string, and evaluates to an empty string,
|
||||
or the two characters (""), then expr3 is the
|
||||
result. Otherwise, expr2 is the result. In Asterisk, all
|
||||
3 exprs will be "evaluated"; if expr1 is "true", expr2
|
||||
will be the result of the "evaluation" of this
|
||||
expression. expr3 will be the result otherwise. This
|
||||
operator has the lowest precedence.
|
||||
that evaluates to 0 (false), expr3 is result of the this
|
||||
expression evaluation. Otherwise, expr2 is the result.
|
||||
If expr1 is a string, and evaluates to an empty string,
|
||||
or the two characters (""), then expr3 is the
|
||||
result. Otherwise, expr2 is the result. In Asterisk, all
|
||||
3 exprs will be "evaluated"; if expr1 is "true", expr2
|
||||
will be the result of the "evaluation" of this
|
||||
expression. expr3 will be the result otherwise. This
|
||||
operator has the lowest precedence.
|
||||
\end{verbatim}
|
||||
|
||||
Parentheses are used for grouping in the usual manner.
|
||||
@@ -274,7 +274,7 @@ Parentheses are used for grouping in the usual manner.
|
||||
Operator precedence is applied as one would expect in any of the C
|
||||
or C derived languages.
|
||||
|
||||
subsection{Floating Point Numbers}
|
||||
\subsection{Floating Point Numbers}
|
||||
|
||||
In 1.6 and above, we shifted the \$\[...\] expressions to be calculated
|
||||
via floating point numbers instead of integers. We use 'long double' numbers
|
||||
@@ -290,13 +290,13 @@ on integer behavior. If you were counting on 1/4 evaluating to 0, you need to no
|
||||
TRUNC(1/4). For a list of all the truncation/rounding capabilities, see the next section.
|
||||
|
||||
|
||||
subsection{Functions}
|
||||
\subsection{Functions}
|
||||
|
||||
In 1.6 and above, we upgraded the $[] expressions to handle floating point numbers.
|
||||
In 1.6 and above, we upgraded the \$[] expressions to handle floating point numbers.
|
||||
Because of this, folks counting on integer behavior would be disrupted. To make
|
||||
the same results possible, some rounding and integer truncation functions have been
|
||||
added to the core of the Expr2 parser. Indeed, dialplan functions can be called from
|
||||
$[..] expressions without the ${...} operators. The only trouble might be in the fact that
|
||||
\$[..] expressions without the \$\{...\} operators. The only trouble might be in the fact that
|
||||
the arguments to these functions must be specified with a comma. If you try to call
|
||||
the MATH function, for example, and try to say 3 + MATH(7*8), the expression parser will
|
||||
evaluate 7*8 for you into 56, and the MATH function will most likely complain that its
|
||||
@@ -312,7 +312,7 @@ are available by simply calling them (read-only). In other words, you don't need
|
||||
surround function calls in \$\[...\] expressions with \$\{...\}. Don't jump to conclusions,
|
||||
though! -- you still need to wrap variable names in curly braces!
|
||||
|
||||
\begin{Enumerate}
|
||||
\begin{enumerate}
|
||||
\item COS(x) x is in radians. Results vary from -1 to 1.
|
||||
\item SIN(x) x is in radians. Results vary from -1 to 1.
|
||||
\item TAN(x) x is in radians.
|
||||
@@ -334,94 +334,94 @@ If this quotient is 1/2, it is rounded to the nearest even number.
|
||||
\item LOG(x) returns the natural logarithm of x.
|
||||
\item LOG2(x) returns the base 2 log of x.
|
||||
\item LOG10(x) returns the base 10 log of x.
|
||||
\end{Enumerate}
|
||||
\end{enumerate}
|
||||
|
||||
subsection{Examples}
|
||||
\subsection{Examples}
|
||||
|
||||
\begin{verbatim}
|
||||
"One Thousand Five Hundred" =~ "(T[^ ]+)"
|
||||
returns: Thousand
|
||||
returns: Thousand
|
||||
|
||||
"One Thousand Five Hundred" =~ "T[^ ]+"
|
||||
returns: 8
|
||||
returns: 8
|
||||
|
||||
"One Thousand Five Hundred" : "T[^ ]+"
|
||||
returns: 0
|
||||
returns: 0
|
||||
|
||||
"8015551212" : "(...)"
|
||||
returns: 801
|
||||
returns: 801
|
||||
|
||||
"3075551212":"...(...)"
|
||||
returns: 555
|
||||
returns: 555
|
||||
|
||||
! "One Thousand Five Hundred" =~ "T[^ ]+"
|
||||
returns: 0 (because it applies to the string, which is non-null,
|
||||
returns: 0 (because it applies to the string, which is non-null,
|
||||
which it turns to "0", and then looks for the pattern
|
||||
in the "0", and doesn't find it)
|
||||
|
||||
!( "One Thousand Five Hundred" : "T[^ ]+" )
|
||||
returns: 1 (because the string doesn't start with a word starting
|
||||
returns: 1 (because the string doesn't start with a word starting
|
||||
with T, so the match evals to 0, and the ! operator
|
||||
inverts it to 1 ).
|
||||
|
||||
2 + 8 / 2
|
||||
returns 6. (because of operator precedence; the division is done first, then the addition).
|
||||
returns 6. (because of operator precedence; the division is done first, then the addition).
|
||||
|
||||
2+8/2
|
||||
returns 6. Spaces aren't necessary.
|
||||
returns 6. Spaces aren't necessary.
|
||||
|
||||
(2+8)/2
|
||||
returns 5, of course.
|
||||
returns 5, of course.
|
||||
|
||||
(3+8)/2
|
||||
returns 5.5 now.
|
||||
returns 5.5 now.
|
||||
|
||||
TRUNC((3+8)/2)
|
||||
returns 5.
|
||||
returns 5.
|
||||
|
||||
FLOOR(2.5)
|
||||
returns 2
|
||||
returns 2
|
||||
|
||||
FLOOR(-2.5)
|
||||
returns -3
|
||||
returns -3
|
||||
|
||||
CEIL(2.5)
|
||||
returns 3.
|
||||
returns 3.
|
||||
|
||||
CEIL(-2.5)
|
||||
returns -2.
|
||||
returns -2.
|
||||
|
||||
ROUND(2.5)
|
||||
returns 3.
|
||||
returns 3.
|
||||
|
||||
ROUND(3.5)
|
||||
returns 4.
|
||||
returns 4.
|
||||
|
||||
ROUND(-2.5)
|
||||
returns -3
|
||||
returns -3
|
||||
|
||||
RINT(2.5)
|
||||
returns 2.
|
||||
returns 2.
|
||||
|
||||
RINT(3.5)
|
||||
returns 4.
|
||||
returns 4.
|
||||
|
||||
RINT(-2.5)
|
||||
returns -2.
|
||||
returns -2.
|
||||
|
||||
RINT(-3.5)
|
||||
returns -4.
|
||||
returns -4.
|
||||
|
||||
TRUNC(2.5)
|
||||
returns 2.
|
||||
returns 2.
|
||||
|
||||
TRUNC(3.5)
|
||||
returns 3.
|
||||
returns 3.
|
||||
|
||||
TRUNC(-3.5)
|
||||
returns -3.
|
||||
returns -3.
|
||||
|
||||
\begin{verbatim}
|
||||
\end{verbatim}
|
||||
|
||||
Of course, all of the above examples use constants, but would work the
|
||||
same if any of the numeric or string constants were replaced with a
|
||||
@@ -441,7 +441,7 @@ case.
|
||||
There is one conditional application - the conditional goto :
|
||||
|
||||
\begin{verbatim}
|
||||
exten => 1,2,gotoif(condition?label1:label2)
|
||||
exten => 1,2,GotoIf(condition?label1:label2)
|
||||
\end{verbatim}
|
||||
|
||||
If condition is true go to label1, else go to label2. Labels are interpreted
|
||||
@@ -453,7 +453,7 @@ This is designed to be used together with the expression syntax described
|
||||
above, eg :
|
||||
|
||||
\begin{verbatim}
|
||||
exten => 1,2,gotoif($[${CALLERID} = 123456]?2|1:3|1)
|
||||
exten => 1,2,GotoIf($[${CALLERID} = 123456]?2|1:3|1)
|
||||
\end{verbatim}
|
||||
|
||||
Example of use :
|
||||
@@ -494,9 +494,9 @@ marked with the "\^" character.
|
||||
\subsection{NULL Strings}
|
||||
Testing to see if a string is null can be done in one of two different ways:
|
||||
\begin{verbatim}
|
||||
exten => _XX.,1,GotoIf($["${calledid}" != ""]?3)
|
||||
exten => _XX.,1,GotoIf($["${calledid}" != ""]?3)
|
||||
|
||||
exten => _XX.,1,GotoIf($[foo${calledid} != foo]?3)
|
||||
exten => _XX.,1,GotoIf($[foo${calledid} != foo]?3)
|
||||
\end{verbatim}
|
||||
|
||||
The second example above is the way suggested by the WIKI. It will
|
||||
@@ -574,7 +574,7 @@ of possible concern with "legacy" extension.conf files:
|
||||
quotes, it was no reason for concern. It is now!
|
||||
|
||||
\item LE, GE, NE operators removed. The code supported these operators,
|
||||
but they were not documented. The symbolic operators, <=, >=, and !=
|
||||
but they were not documented. The symbolic operators, $<$=, $>$=, and !=
|
||||
should be used instead.
|
||||
|
||||
\item Added the unary '-' operator. So you can 3+ -4 and get -1.
|
||||
@@ -670,43 +670,45 @@ only read in the dialplan. Writes to such variables are silently
|
||||
ignored.
|
||||
|
||||
\begin{verbatim}
|
||||
${ACCOUNTCODE} * Account code (if specified) (Deprecated; use ${CDR(accountcode)})
|
||||
${BLINDTRANSFER} The name of the channel on the other side of a blind transfer
|
||||
${BRIDGEPEER} Bridged peer
|
||||
${CALLERANI} * Caller ANI (PRI channels) (Deprecated; use ${CALLERID(ani)})
|
||||
${CALLERID} * Caller ID (Deprecated; use ${CALLERID(all)})
|
||||
${CALLERIDNAME} * Caller ID Name only (Deprecated; use ${CALLERID(name)})
|
||||
${CALLERIDNUM} * Caller ID Number only (Deprecated; use ${CALLERID(num)})
|
||||
${CALLINGANI2} * Caller ANI2 (PRI channels)
|
||||
${CALLINGPRES} * Caller ID presentation for incoming calls (PRI channels)
|
||||
${CALLINGTNS} * Transit Network Selector (PRI channels)
|
||||
${CALLINGTON} * Caller Type of Number (PRI channels)
|
||||
${CHANNEL} * Current channel name
|
||||
${CONTEXT} * Current context
|
||||
${DATETIME} * Current date time in the format: DDMMYYYY-HH:MM:SS (Deprecated; use ${STRFTIME(${EPOCH},,%d%m%Y-%H:%M:%S)})
|
||||
${DB_RESULT} Result value of DB_EXISTS() dial plan function
|
||||
${DNID} * Dialed Number Identifier (Deprecated; use ${CALLERID(dnid)})
|
||||
${EPOCH} * Current unix style epoch
|
||||
${EXTEN} * Current extension
|
||||
${ENV(VAR)} Environmental variable VAR
|
||||
${GOTO_ON_BLINDXFR} Transfer to the specified context/extension/priority
|
||||
after a blind transfer (use ^ characters in place of
|
||||
| to separate context/extension/priority when setting
|
||||
this variable from the dialplan)
|
||||
${HANGUPCAUSE} * Asterisk cause of hangup (inbound/outbound)
|
||||
${HINT} * Channel hints for this extension
|
||||
${HINTNAME} * Suggested Caller*ID name for this extension
|
||||
${INVALID_EXTEN} The invalid called extension (used in the "i" extension)
|
||||
${LANGUAGE} * Current language (Deprecated; use ${LANGUAGE()})
|
||||
${LEN(VAR)} * String length of VAR (integer)
|
||||
${PRIORITY} * Current priority in the dialplan
|
||||
${PRIREDIRECTREASON} Reason for redirect on PRI, if a call was directed
|
||||
${RDNIS} * Redirected Dial Number ID Service (Deprecated; use ${CALLERID(rdnis)})
|
||||
${TIMESTAMP} * Current date time in the format: YYYYMMDD-HHMMSS (Deprecated; use ${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)})
|
||||
${TRANSFER_CONTEXT} Context for transferred calls
|
||||
${FORWARD_CONTEXT} Context for forwarded calls
|
||||
${UNIQUEID} * Current call unique identifier
|
||||
${SYSTEMNAME} * value of the systemname option of asterisk.conf
|
||||
${CDR(accountcode)} * Account code (if specified)
|
||||
${BLINDTRANSFER} The name of the channel on the other side of a blind transfer
|
||||
${BRIDGEPEER} Bridged peer
|
||||
${CALLERID(ani)} * Caller ANI (PRI channels)
|
||||
${CALLERID(all)} * Caller ID
|
||||
${CALLERID(dnid)} * Dialed Number Identifier
|
||||
${CALLERID(name)} * Caller ID Name only
|
||||
${CALLERID(num)} * Caller ID Number only
|
||||
${CALLERID(rdnis)} * Redirected Dial Number ID Service
|
||||
${CALLINGANI2} * Caller ANI2 (PRI channels)
|
||||
${CALLINGPRES} * Caller ID presentation for incoming calls (PRI channels)
|
||||
${CALLINGTNS} * Transit Network Selector (PRI channels)
|
||||
${CALLINGTON} * Caller Type of Number (PRI channels)
|
||||
${CHANNEL} * Current channel name
|
||||
${CONTEXT} * Current context
|
||||
${DATETIME} * Current date time in the format: DDMMYYYY-HH:MM:SS
|
||||
(Deprecated; use ${STRFTIME(${EPOCH},,%d%m%Y-%H:%M:%S)})
|
||||
${DB_RESULT} Result value of DB_EXISTS() dial plan function
|
||||
${EPOCH} * Current unix style epoch
|
||||
${EXTEN} * Current extension
|
||||
${ENV(VAR)} Environmental variable VAR
|
||||
${GOTO_ON_BLINDXFR} Transfer to the specified context/extension/priority
|
||||
after a blind transfer (use ^ characters in place of
|
||||
| to separate context/extension/priority when setting
|
||||
this variable from the dialplan)
|
||||
${HANGUPCAUSE} * Asterisk cause of hangup (inbound/outbound)
|
||||
${HINT} * Channel hints for this extension
|
||||
${HINTNAME} * Suggested Caller*ID name for this extension
|
||||
${INVALID_EXTEN} The invalid called extension (used in the "i" extension)
|
||||
${LANGUAGE} * Current language (Deprecated; use ${LANGUAGE()})
|
||||
${LEN(VAR)} * String length of VAR (integer)
|
||||
${PRIORITY} * Current priority in the dialplan
|
||||
${PRIREDIRECTREASON} Reason for redirect on PRI, if a call was directed
|
||||
${TIMESTAMP} * Current date time in the format: YYYYMMDD-HHMMSS
|
||||
(Deprecated; use ${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)})
|
||||
${TRANSFER_CONTEXT} Context for transferred calls
|
||||
${FORWARD_CONTEXT} Context for forwarded calls
|
||||
${UNIQUEID} * Current call unique identifier
|
||||
${SYSTEMNAME} * value of the systemname option of asterisk.conf
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{Application return values}
|
||||
@@ -715,189 +717,189 @@ In Asterisk 1.2, many applications return the result in a variable
|
||||
instead of, as in Asterisk 1.0, changing the dial plan priority (+101).
|
||||
For the various status values, see each application's help text.
|
||||
\begin{verbatim}
|
||||
${AGISTATUS} * agi()
|
||||
${AQMSTATUS} * addqueuemember()
|
||||
${AVAILSTATUS} * chanisavail()
|
||||
${CHECKGROUPSTATUS} * checkgroup()
|
||||
${CHECKMD5STATUS} * checkmd5()
|
||||
${CPLAYBACKSTATUS} * controlplayback()
|
||||
${DIALSTATUS} * dial()
|
||||
${DBGETSTATUS} * dbget()
|
||||
${ENUMSTATUS} * enumlookup()
|
||||
${HASVMSTATUS} * hasnewvoicemail()
|
||||
${LOOKUPBLSTATUS} * lookupblacklist()
|
||||
${OSPAUTHSTATUS} * ospauth()
|
||||
${OSPLOOKUPSTATUS} * osplookup()
|
||||
${OSPNEXTSTATUS} * ospnext()
|
||||
${OSPFINISHSTATUS} * ospfinish()
|
||||
${PARKEDAT} * parkandannounce()
|
||||
${PLAYBACKSTATUS} * playback()
|
||||
${PQMSTATUS} * pausequeuemember()
|
||||
${PRIVACYMGRSTATUS} * privacymanager()
|
||||
${QUEUESTATUS} * queue()
|
||||
${RQMSTATUS} * removequeuemember()
|
||||
${SENDIMAGESTATUS} * sendimage()
|
||||
${SENDTEXTSTATUS} * sendtext()
|
||||
${SENDURLSTATUS} * sendurl()
|
||||
${SYSTEMSTATUS} * system()
|
||||
${TRANSFERSTATUS} * transfer()
|
||||
${TXTCIDNAMESTATUS} * txtcidname()
|
||||
${UPQMSTATUS} * unpausequeuemember()
|
||||
${VMSTATUS} * voicmail()
|
||||
${VMBOXEXISTSSTATUS} * vmboxexists()
|
||||
${WAITSTATUS} * waitforsilence()
|
||||
${AGISTATUS} * agi()
|
||||
${AQMSTATUS} * addqueuemember()
|
||||
${AVAILSTATUS} * chanisavail()
|
||||
${CHECKGROUPSTATUS} * checkgroup()
|
||||
${CHECKMD5STATUS} * checkmd5()
|
||||
${CPLAYBACKSTATUS} * controlplayback()
|
||||
${DIALSTATUS} * dial()
|
||||
${DBGETSTATUS} * dbget()
|
||||
${ENUMSTATUS} * enumlookup()
|
||||
${HASVMSTATUS} * hasnewvoicemail()
|
||||
${LOOKUPBLSTATUS} * lookupblacklist()
|
||||
${OSPAUTHSTATUS} * ospauth()
|
||||
${OSPLOOKUPSTATUS} * osplookup()
|
||||
${OSPNEXTSTATUS} * ospnext()
|
||||
${OSPFINISHSTATUS} * ospfinish()
|
||||
${PARKEDAT} * parkandannounce()
|
||||
${PLAYBACKSTATUS} * playback()
|
||||
${PQMSTATUS} * pausequeuemember()
|
||||
${PRIVACYMGRSTATUS} * privacymanager()
|
||||
${QUEUESTATUS} * queue()
|
||||
${RQMSTATUS} * removequeuemember()
|
||||
${SENDIMAGESTATUS} * sendimage()
|
||||
${SENDTEXTSTATUS} * sendtext()
|
||||
${SENDURLSTATUS} * sendurl()
|
||||
${SYSTEMSTATUS} * system()
|
||||
${TRANSFERSTATUS} * transfer()
|
||||
${TXTCIDNAMESTATUS} * txtcidname()
|
||||
${UPQMSTATUS} * unpausequeuemember()
|
||||
${VMSTATUS} * voicmail()
|
||||
${VMBOXEXISTSSTATUS} * vmboxexists()
|
||||
${WAITSTATUS} * waitforsilence()
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{Various application variables}
|
||||
\begin{verbatim}
|
||||
${CURL} * Resulting page content for curl()
|
||||
${ENUM} * Result of application EnumLookup
|
||||
${EXITCONTEXT} Context to exit to in IVR menu (app background())
|
||||
or in the RetryDial() application
|
||||
${MONITOR} * Set to "TRUE" if the channel is/has been monitored (app monitor())
|
||||
${MONITOR_EXEC} Application to execute after monitoring a call
|
||||
${MONITOR_EXEC_ARGS} Arguments to application
|
||||
${MONITOR_FILENAME} File for monitoring (recording) calls in queue
|
||||
${QUEUE_PRIO} Queue priority
|
||||
${QUEUE_MAX_PENALTY} Maximum member penalty allowed to answer caller
|
||||
${QUEUESTATUS} Status of the call, one of:
|
||||
(TIMEOUT | FULL | JOINEMPTY | LEAVEEMPTY | JOINUNAVAIL | LEAVEUNAVAIL)
|
||||
${RECORDED_FILE} * Recorded file in record()
|
||||
${TALK_DETECTED} * Result from talkdetect()
|
||||
${TOUCH_MONITOR} The filename base to use with Touch Monitor (auto record)
|
||||
${TOUCH_MONITOR_FORMAT} The audio format to use with Touch Monitor (auto record)
|
||||
${CURL} * Resulting page content for curl()
|
||||
${ENUM} * Result of application EnumLookup
|
||||
${EXITCONTEXT} Context to exit to in IVR menu (app background())
|
||||
or in the RetryDial() application
|
||||
${MONITOR} * Set to "TRUE" if the channel is/has been monitored (app monitor())
|
||||
${MONITOR_EXEC} Application to execute after monitoring a call
|
||||
${MONITOR_EXEC_ARGS} Arguments to application
|
||||
${MONITOR_FILENAME} File for monitoring (recording) calls in queue
|
||||
${QUEUE_PRIO} Queue priority
|
||||
${QUEUE_MAX_PENALTY} Maximum member penalty allowed to answer caller
|
||||
${QUEUESTATUS} Status of the call, one of:
|
||||
(TIMEOUT | FULL | JOINEMPTY | LEAVEEMPTY | JOINUNAVAIL | LEAVEUNAVAIL)
|
||||
${RECORDED_FILE} * Recorded file in record()
|
||||
${TALK_DETECTED} * Result from talkdetect()
|
||||
${TOUCH_MONITOR} The filename base to use with Touch Monitor (auto record)
|
||||
${TOUCH_MONITOR_FORMAT} The audio format to use with Touch Monitor (auto record)
|
||||
${TOUCH_MONITOR_OUTPUT} * Recorded file from Touch Monitor (auto record)
|
||||
${TXTCIDNAME} * Result of application TXTCIDName
|
||||
${VPB_GETDTMF} chan_vpb
|
||||
${TXTCIDNAME} * Result of application TXTCIDName
|
||||
${VPB_GETDTMF} chan_vpb
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{The MeetMe Conference Bridge}
|
||||
\begin{verbatim}
|
||||
${MEETME_RECORDINGFILE} Name of file for recording a conference with
|
||||
the "r" option
|
||||
${MEETME_RECORDINGFORMAT} Format of file to be recorded
|
||||
${MEETME_EXIT_CONTEXT} Context for exit out of meetme meeting
|
||||
${MEETME_AGI_BACKGROUND} AGI script for Meetme (zap only)
|
||||
${MEETMESECS} * Number of seconds a user participated in a MeetMe conference
|
||||
${MEETME_RECORDINGFILE} Name of file for recording a conference with
|
||||
the "r" option
|
||||
${MEETME_RECORDINGFORMAT} Format of file to be recorded
|
||||
${MEETME_EXIT_CONTEXT} Context for exit out of meetme meeting
|
||||
${MEETME_AGI_BACKGROUND} AGI script for Meetme (zap only)
|
||||
${MEETMESECS} * Number of seconds a user participated in a MeetMe conference
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{The VoiceMail() application}
|
||||
\begin{verbatim}
|
||||
${VM_CATEGORY} Sets voicemail category
|
||||
${VM_NAME} * Full name in voicemail
|
||||
${VM_DUR} * Voicemail duration
|
||||
${VM_MSGNUM} * Number of voicemail message in mailbox
|
||||
${VM_CALLERID} * Voicemail Caller ID (Person leaving vm)
|
||||
${VM_CIDNAME} * Voicemail Caller ID Name
|
||||
${VM_CIDNUM} * Voicemail Caller ID Number
|
||||
${VM_DATE} * Voicemail Date
|
||||
${VM_MESSAGEFILE} * Path to message left by caller
|
||||
${VM_CATEGORY} Sets voicemail category
|
||||
${VM_NAME} * Full name in voicemail
|
||||
${VM_DUR} * Voicemail duration
|
||||
${VM_MSGNUM} * Number of voicemail message in mailbox
|
||||
${VM_CALLERID} * Voicemail Caller ID (Person leaving vm)
|
||||
${VM_CIDNAME} * Voicemail Caller ID Name
|
||||
${VM_CIDNUM} * Voicemail Caller ID Number
|
||||
${VM_DATE} * Voicemail Date
|
||||
${VM_MESSAGEFILE} * Path to message left by caller
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{The VMAuthenticate() application}
|
||||
\begin{verbatim}
|
||||
${AUTH_MAILBOX} * Authenticated mailbox
|
||||
${AUTH_CONTEXT} * Authenticated mailbox context
|
||||
${AUTH_MAILBOX} * Authenticated mailbox
|
||||
${AUTH_CONTEXT} * Authenticated mailbox context
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{DUNDiLookup()}
|
||||
\begin{verbatim}
|
||||
${DUNDTECH} * The Technology of the result from a call to DUNDiLookup()
|
||||
${DUNDDEST} * The Destination of the result from a call to DUNDiLookup()
|
||||
${DUNDTECH} * The Technology of the result from a call to DUNDiLookup()
|
||||
${DUNDDEST} * The Destination of the result from a call to DUNDiLookup()
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{chan\_zap}
|
||||
\begin{verbatim}
|
||||
${ANI2} * The ANI2 Code provided by the network on the incoming call.
|
||||
(ie, Code 29 identifies call as a Prison/Inmate Call)
|
||||
${CALLTYPE} * Type of call (Speech, Digital, etc)
|
||||
${CALLEDTON} * Type of number for incoming PRI extension
|
||||
i.e. 0=unknown, 1=international, 2=domestic, 3=net_specific,
|
||||
4=subscriber, 6=abbreviated, 7=reserved
|
||||
${CALLINGSUBADDR} * Called PRI Subaddress
|
||||
${FAXEXTEN} * The extension called before being redirected to "fax"
|
||||
${PRIREDIRECTREASON} * Reason for redirect, if a call was directed
|
||||
${SMDI_VM_TYPE} * When an call is received with an SMDI message, the 'type'
|
||||
of message 'b' or 'u'
|
||||
${ANI2} * The ANI2 Code provided by the network on the incoming call.
|
||||
(ie, Code 29 identifies call as a Prison/Inmate Call)
|
||||
${CALLTYPE} * Type of call (Speech, Digital, etc)
|
||||
${CALLEDTON} * Type of number for incoming PRI extension
|
||||
i.e. 0=unknown, 1=international, 2=domestic, 3=net_specific,
|
||||
4=subscriber, 6=abbreviated, 7=reserved
|
||||
${CALLINGSUBADDR} * Called PRI Subaddress
|
||||
${FAXEXTEN} * The extension called before being redirected to "fax"
|
||||
${PRIREDIRECTREASON} * Reason for redirect, if a call was directed
|
||||
${SMDI_VM_TYPE} * When an call is received with an SMDI message, the 'type'
|
||||
of message 'b' or 'u'
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{chan\_sip}
|
||||
\begin{verbatim}
|
||||
${SIPCALLID} * SIP Call-ID: header verbatim (for logging or CDR matching)
|
||||
${SIPDOMAIN} * SIP destination domain of an inbound call (if appropriate)
|
||||
${SIPUSERAGENT} * SIP user agent (deprecated)
|
||||
${SIPURI} * SIP uri
|
||||
${SIP_CODEC} Set the SIP codec for a call
|
||||
${SIP_URI_OPTIONS} * additional options to add to the URI for an outgoing call
|
||||
${RTPAUDIOQOS} RTCP QoS report for the audio of this call
|
||||
${RTPVIDEOQOS} RTCP QoS report for the video of this call
|
||||
${SIPCALLID} * SIP Call-ID: header verbatim (for logging or CDR matching)
|
||||
${SIPDOMAIN} * SIP destination domain of an inbound call (if appropriate)
|
||||
${SIPUSERAGENT} * SIP user agent (deprecated)
|
||||
${SIPURI} * SIP uri
|
||||
${SIP_CODEC} Set the SIP codec for a call
|
||||
${SIP_URI_OPTIONS} * additional options to add to the URI for an outgoing call
|
||||
${RTPAUDIOQOS} RTCP QoS report for the audio of this call
|
||||
${RTPVIDEOQOS} RTCP QoS report for the video of this call
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{chan\_agent}
|
||||
\begin{verbatim}
|
||||
${AGENTMAXLOGINTRIES} Set the maximum number of failed logins
|
||||
${AGENTUPDATECDR} Whether to update the CDR record with Agent channel data
|
||||
${AGENTGOODBYE} Sound file to use for "Good Bye" when agent logs out
|
||||
${AGENTACKCALL} Whether the agent should acknowledge the incoming call
|
||||
${AGENTAUTOLOGOFF} Auto logging off for an agent
|
||||
${AGENTWRAPUPTIME} Setting the time for wrapup between incoming calls
|
||||
${AGENTNUMBER} * Agent number (username) set at login
|
||||
${AGENTSTATUS} * Status of login ( fail | on | off )
|
||||
${AGENTEXTEN} * Extension for logged in agent
|
||||
${AGENTMAXLOGINTRIES} Set the maximum number of failed logins
|
||||
${AGENTUPDATECDR} Whether to update the CDR record with Agent channel data
|
||||
${AGENTGOODBYE} Sound file to use for "Good Bye" when agent logs out
|
||||
${AGENTACKCALL} Whether the agent should acknowledge the incoming call
|
||||
${AGENTAUTOLOGOFF} Auto logging off for an agent
|
||||
${AGENTWRAPUPTIME} Setting the time for wrapup between incoming calls
|
||||
${AGENTNUMBER} * Agent number (username) set at login
|
||||
${AGENTSTATUS} * Status of login ( fail | on | off )
|
||||
${AGENTEXTEN} * Extension for logged in agent
|
||||
\end{verbatim}
|
||||
|
||||
|
||||
\subsection{The Dial() application}
|
||||
\begin{verbatim}
|
||||
${DIALEDPEERNAME} * Dialed peer name
|
||||
${DIALEDPEERNUMBER} * Dialed peer number
|
||||
${DIALEDTIME} * Time for the call (seconds)
|
||||
${ANSWEREDTIME} * Time from dial to answer (seconds)
|
||||
${DIALSTATUS} * Status of the call, one of:
|
||||
(CHANUNAVAIL | CONGESTION | BUSY | NOANSWER
|
||||
| ANSWER | CANCEL | DONTCALL | TORTURE)
|
||||
${DYNAMIC_FEATURES} * The list of features (from the [applicationmap] section of
|
||||
features.conf) to activate during the call, with feature
|
||||
names separated by '#' characters
|
||||
${LIMIT_PLAYAUDIO_CALLER} Soundfile for call limits
|
||||
${LIMIT_PLAYAUDIO_CALLEE} Soundfile for call limits
|
||||
${LIMIT_WARNING_FILE} Soundfile for call limits
|
||||
${LIMIT_TIMEOUT_FILE} Soundfile for call limits
|
||||
${LIMIT_CONNECT_FILE} Soundfile for call limits
|
||||
${OUTBOUND_GROUP} Default groups for peer channels (as in SetGroup)
|
||||
* See "show application dial" for more information
|
||||
${DIALEDPEERNAME} * Dialed peer name
|
||||
${DIALEDPEERNUMBER} * Dialed peer number
|
||||
${DIALEDTIME} * Time for the call (seconds)
|
||||
${ANSWEREDTIME} * Time from dial to answer (seconds)
|
||||
${DIALSTATUS} * Status of the call, one of:
|
||||
(CHANUNAVAIL | CONGESTION | BUSY | NOANSWER
|
||||
| ANSWER | CANCEL | DONTCALL | TORTURE)
|
||||
${DYNAMIC_FEATURES} * The list of features (from the [applicationmap] section of
|
||||
features.conf) to activate during the call, with feature
|
||||
names separated by '#' characters
|
||||
${LIMIT_PLAYAUDIO_CALLER} Soundfile for call limits
|
||||
${LIMIT_PLAYAUDIO_CALLEE} Soundfile for call limits
|
||||
${LIMIT_WARNING_FILE} Soundfile for call limits
|
||||
${LIMIT_TIMEOUT_FILE} Soundfile for call limits
|
||||
${LIMIT_CONNECT_FILE} Soundfile for call limits
|
||||
${OUTBOUND_GROUP} Default groups for peer channels (as in SetGroup)
|
||||
* See "show application dial" for more information
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{The chanisavail() application}
|
||||
\begin{verbatim}
|
||||
${AVAILCHAN} * the name of the available channel if one was found
|
||||
${AVAILORIGCHAN} * the canonical channel name that was used to create the channel
|
||||
${AVAILSTATUS} * Status of requested channel
|
||||
${AVAILCHAN} * the name of the available channel if one was found
|
||||
${AVAILORIGCHAN} * the canonical channel name that was used to create the channel
|
||||
${AVAILSTATUS} * Status of requested channel
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{Dialplan Macros}
|
||||
\begin{verbatim}
|
||||
${MACRO_EXTEN} * The calling extensions
|
||||
${MACRO_CONTEXT} * The calling context
|
||||
${MACRO_PRIORITY} * The calling priority
|
||||
${MACRO_OFFSET} Offset to add to priority at return from macro
|
||||
${MACRO_EXTEN} * The calling extensions
|
||||
${MACRO_CONTEXT} * The calling context
|
||||
${MACRO_PRIORITY} * The calling priority
|
||||
${MACRO_OFFSET} Offset to add to priority at return from macro
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{The ChanSpy() application}
|
||||
\begin{verbatim}
|
||||
${SPYGROUP} * A ':' (colon) separated list of group names.
|
||||
(To be set on spied on channel and matched against the g(grp) option)
|
||||
${SPYGROUP} * A ':' (colon) separated list of group names.
|
||||
(To be set on spied on channel and matched against the g(grp) option)
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{OSP}
|
||||
\begin{verbatim}
|
||||
${OSPINHANDLE} OSP handle of in_bound call
|
||||
${OSPINTIMELIMIT} Duration limit for in_bound call
|
||||
${OSPOUTHANDLE} OSP handle of out_bound call
|
||||
${OSPTECH} OSP technology
|
||||
${OSPDEST} OSP destination
|
||||
${OSPCALLING} OSP calling number
|
||||
${OSPOUTTOKEN} OSP token to use for out_bound call
|
||||
${OSPOUTTIMELIMIT} Duration limit for out_bound call
|
||||
${OSPRESULTS} Number of remained destinations
|
||||
${OSPINHANDLE} OSP handle of in_bound call
|
||||
${OSPINTIMELIMIT} Duration limit for in_bound call
|
||||
${OSPOUTHANDLE} OSP handle of out_bound call
|
||||
${OSPTECH} OSP technology
|
||||
${OSPDEST} OSP destination
|
||||
${OSPCALLING} OSP calling number
|
||||
${OSPOUTTOKEN} OSP token to use for out_bound call
|
||||
${OSPOUTTIMELIMIT} Duration limit for out_bound call
|
||||
${OSPRESULTS} Number of remained destinations
|
||||
\end{verbatim}
|
||||
|
@@ -1,8 +1,8 @@
|
||||
\subsection{Introduction}
|
||||
|
||||
A PBX is only really useful if you can get calls into it. Of course, you
|
||||
can use Asterisk with VoIP calls (SIP, H.323, IAX), but you can also talk
|
||||
to the real PSTN through various cards.
|
||||
can use Asterisk with VoIP calls (SIP, H.323, IAX, etc.), but you can also
|
||||
talk to the real PSTN through various cards.
|
||||
|
||||
Supported Hardware is divided into two general groups: Zaptel devices and
|
||||
non-zaptel devices. The Zaptel compatible hardware supports pseudo-TDM
|
||||
@@ -31,7 +31,7 @@ compatible hardware may have different features.
|
||||
\item TE210P - The TE210P improves performance and scalability through bus mastering architecture. It supports E1, T1, and J1 environments and is selectable on a per-card or per-port basis.
|
||||
\item TE207P - The TE207P offers an on-board DSP-based echo cancellation module. It supports E1, T1, and J1 environments and is selectable on a per-card or per-port basis.
|
||||
\item TE205P - The TE205P improves performance and scalability through bus mastering architecture. It supports both E1 and T1/J1 environments and is selectable on a per-card or per-port basis.
|
||||
\item TE120P - The TE120P is a single span, selectable T1, E1, or J1 card and utilizes Digium's VoiceBus™ technology. It supports both voice and data modes.
|
||||
\item TE120P - The TE120P is a single span, selectable T1, E1, or J1 card and utilizes Digium's VoiceBus\texttrademark technology. It supports both voice and data modes.
|
||||
\item TE110P - The TE110P brings a high-performance, cost-effective, and flexible single span togglable T1, E1, J1 interface to the Digium line-up of telephony interface devices.
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
@@ -60,7 +60,7 @@ chan\_misdn. See the mISDN section for more information.
|
||||
|
||||
\begin{itemize}
|
||||
\item Digium, Inc. (Primary Developer of Asterisk)
|
||||
http://www.digium.com
|
||||
http://www.digium.com
|
||||
\begin{itemize}
|
||||
\item B410P - 4 Port BRI card (TE/NT)
|
||||
\end{itemize}
|
||||
@@ -68,7 +68,7 @@ chan\_misdn. See the mISDN section for more information.
|
||||
|
||||
\begin{itemize}
|
||||
\item beroNet
|
||||
http://www.beronet.com
|
||||
http://www.beronet.com
|
||||
\begin{itemize}
|
||||
\item BN4S0 - 4 Port BRI card (TE/NT)
|
||||
|
||||
|
@@ -43,7 +43,7 @@ backwards compatible architecture. Look in the source code for instructions.
|
||||
\subsubsection{Testing and monitoring}
|
||||
|
||||
You can test the effectiveness of PLC and the new jitterbuffer's detection of loss by using
|
||||
the new CLI command "iax2 test losspct <n>". This will simulate n percent packet loss
|
||||
the new CLI command "iax2 test losspct $<$n$>$". This will simulate n percent packet loss
|
||||
coming \_in\_ to chan\_iax2. You should find that with PLC and the new JB, 10 percent packet
|
||||
loss should lead to just a tiny amount of distortion, while without PLC, it would lead to
|
||||
silent gaps in your audio.
|
||||
|
@@ -41,7 +41,7 @@ subscriptions and call limits)
|
||||
\section{Command Syntax}
|
||||
|
||||
Management communication consists of tags of the form "header: value",
|
||||
terminated with an empty newline (\\r\\n) in the style of SMTP, HTTP, and
|
||||
terminated with an empty newline (\textbackslash r\textbackslash n) in the style of SMTP, HTTP, and
|
||||
other headers.
|
||||
|
||||
The first tag MUST be one of the following:
|
||||
@@ -106,143 +106,143 @@ http://www.asterisk.org web site for more information.
|
||||
|
||||
\section{Some standard AMI headers}
|
||||
\begin{verbatim}
|
||||
Account: -- Account Code (Status)
|
||||
AccountCode: -- Account Code (cdr_manager)
|
||||
ACL: <Y | N> -- Does ACL exist for object ?
|
||||
Action: <action> -- request or notification of a particular action
|
||||
Address-IP: -- IPaddress
|
||||
Address-Port: -- IP port number
|
||||
Agent: <string> -- Agent name
|
||||
AMAflags: -- AMA flag (cdr_manager, sippeers)
|
||||
AnswerTime: -- Time of answer (cdr_manager)
|
||||
Append: <bool> -- CDR userfield Append flag
|
||||
Application: -- Application to use
|
||||
Async: -- Whether or not to use fast setup
|
||||
AuthType: -- Authentication type (for login or challenge)
|
||||
"md5"
|
||||
BillableSeconds: -- Billable seconds for call (cdr_manager)
|
||||
CallerID: -- Caller id (name and number in Originate & cdr_manager)
|
||||
CallerID: -- CallerID number
|
||||
Number or "<unknown>" or "unknown"
|
||||
(should change to "<unknown>" in app_queue)
|
||||
CallerID1: -- Channel 1 CallerID (Link event)
|
||||
CallerID2: -- Channel 2 CallerID (Link event)
|
||||
CallerIDName: -- CallerID name
|
||||
Name or "<unknown>" or "unknown"
|
||||
(should change to "<unknown>" in app_queue)
|
||||
Callgroup: -- Call group for peer/user
|
||||
CallsTaken: <num> -- Queue status variable
|
||||
Cause: <value> -- Event change cause - "Expired"
|
||||
Cause: <value> -- Hangupcause (channel.c)
|
||||
CID-CallingPres: -- Caller ID calling presentation
|
||||
Channel: <channel> -- Channel specifier
|
||||
Channel: <dialstring> -- Dialstring in Originate
|
||||
Account: -- Account Code (Status)
|
||||
AccountCode: -- Account Code (cdr_manager)
|
||||
ACL: <Y | N> -- Does ACL exist for object ?
|
||||
Action: <action> -- Request or notification of a particular action
|
||||
Address-IP: -- IPaddress
|
||||
Address-Port: -- IP port number
|
||||
Agent: <string> -- Agent name
|
||||
AMAflags: -- AMA flag (cdr_manager, sippeers)
|
||||
AnswerTime: -- Time of answer (cdr_manager)
|
||||
Append: <bool> -- CDR userfield Append flag
|
||||
Application: -- Application to use
|
||||
Async: -- Whether or not to use fast setup
|
||||
AuthType: -- Authentication type (for login or challenge)
|
||||
"md5"
|
||||
BillableSeconds: -- Billable seconds for call (cdr_manager)
|
||||
CallerID: -- Caller id (name and number in Originate & cdr_manager)
|
||||
CallerID: -- CallerID number
|
||||
Number or "<unknown>" or "unknown"
|
||||
(should change to "<unknown>" in app_queue)
|
||||
CallerID1: -- Channel 1 CallerID (Link event)
|
||||
CallerID2: -- Channel 2 CallerID (Link event)
|
||||
CallerIDName: -- CallerID name
|
||||
Name or "<unknown>" or "unknown"
|
||||
(should change to "<unknown>" in app_queue)
|
||||
Callgroup: -- Call group for peer/user
|
||||
CallsTaken: <num> -- Queue status variable
|
||||
Cause: <value> -- Event change cause - "Expired"
|
||||
Cause: <value> -- Hangupcause (channel.c)
|
||||
CID-CallingPres: -- Caller ID calling presentation
|
||||
Channel: <channel> -- Channel specifier
|
||||
Channel: <dialstring> -- Dialstring in Originate
|
||||
Channel: <tech/[peer/username]> -- Channel in Registry events (SIP, IAX2)
|
||||
Channel: <tech> -- Technology (SIP/IAX2 etc) in Registry events
|
||||
ChannelType: -- Tech: SIP, IAX2, ZAP, MGCP etc
|
||||
Channel1: -- Link channel 1
|
||||
Channel2: -- Link channel 2
|
||||
ChanObjectType: -- "peer", "user"
|
||||
Codecs: -- Codec list
|
||||
CodecOrder: -- Codec order, separated with comma ","
|
||||
Command: -- Cli command to run
|
||||
Context: -- Context
|
||||
Count: <num> -- Number of callers in queue
|
||||
Data: -- Application data
|
||||
Default-addr-IP: -- IP address to use before registration
|
||||
Default-Username: -- Username part of URI to use before registration
|
||||
Destination: -- Destination for call (Dialstring ) (dial, cdr_manager)
|
||||
DestinationContext: -- Destination context (cdr_manager)
|
||||
DestinationChannel: -- Destination channel (cdr_manager)
|
||||
DestUniqueID: -- UniqueID of destination (dial event)
|
||||
Disposition: -- Call disposition (CDR manager)
|
||||
Domain: <domain> -- DNS domain
|
||||
Duration: <secs> -- Duration of call (cdr_manager)
|
||||
Dynamic: <Y | N> -- Device registration supported?
|
||||
Endtime: -- End time stamp of call (cdr_manager)
|
||||
EventList: <flag> -- Flag being "Start", "End", "Cancelled" or "ListObject"
|
||||
Events: <eventmask> -- Eventmask filter ("on", "off", "system", "call", "log")
|
||||
Exten: -- Extension (Redirect command)
|
||||
Extension: -- Extension (Status)
|
||||
Family: <string> -- ASTdb key family
|
||||
File: <filename> -- Filename (monitor)
|
||||
Format: <format> -- Format of sound file (monitor)
|
||||
From: <time> -- Parking time (ParkedCall event)
|
||||
Hint: -- Extension hint
|
||||
Incominglimit: -- SIP Peer incoming limit
|
||||
Channel: <tech> -- Technology (SIP/IAX2 etc) in Registry events
|
||||
ChannelType: -- Tech: SIP, IAX2, ZAP, MGCP etc
|
||||
Channel1: -- Link channel 1
|
||||
Channel2: -- Link channel 2
|
||||
ChanObjectType: -- "peer", "user"
|
||||
Codecs: -- Codec list
|
||||
CodecOrder: -- Codec order, separated with comma ","
|
||||
Command: -- Cli command to run
|
||||
Context: -- Context
|
||||
Count: <num> -- Number of callers in queue
|
||||
Data: -- Application data
|
||||
Default-addr-IP: -- IP address to use before registration
|
||||
Default-Username: -- Username part of URI to use before registration
|
||||
Destination: -- Destination for call (Dialstring ) (dial, cdr_manager)
|
||||
DestinationContext: -- Destination context (cdr_manager)
|
||||
DestinationChannel: -- Destination channel (cdr_manager)
|
||||
DestUniqueID: -- UniqueID of destination (dial event)
|
||||
Disposition: -- Call disposition (CDR manager)
|
||||
Domain: <domain> -- DNS domain
|
||||
Duration: <secs> -- Duration of call (cdr_manager)
|
||||
Dynamic: <Y | N> -- Device registration supported?
|
||||
Endtime: -- End time stamp of call (cdr_manager)
|
||||
EventList: <flag> -- Flag being "Start", "End", "Cancelled" or "ListObject"
|
||||
Events: <eventmask> -- Eventmask filter ("on", "off", "system", "call", "log")
|
||||
Exten: -- Extension (Redirect command)
|
||||
Extension: -- Extension (Status)
|
||||
Family: <string> -- ASTdb key family
|
||||
File: <filename> -- Filename (monitor)
|
||||
Format: <format> -- Format of sound file (monitor)
|
||||
From: <time> -- Parking time (ParkedCall event)
|
||||
Hint: -- Extension hint
|
||||
Incominglimit: -- SIP Peer incoming limit
|
||||
Key:
|
||||
Key: -- ASTdb Database key
|
||||
LastApplication: -- Last application executed (cdr_manager)
|
||||
LastCall: <num> -- Last call in queue
|
||||
LastData: -- Data for last application (cdr_manager)
|
||||
Link: -- (Status)
|
||||
ListItems: <number> -- Number of items in Eventlist (Optionally sent in "end" packet)
|
||||
Location: -- Interface (whatever that is -maybe tech/name in app_queue )
|
||||
Loginchan: -- Login channel for agent
|
||||
Logintime: <number> -- Login time for agent
|
||||
Mailbox: -- VM Mailbox (id@vmcontext) (mailboxstatus, mailboxcount)
|
||||
MD5SecretExist: <Y | N> -- Whether secret exists in MD5 format
|
||||
Membership: <string> -- "Dynamic" or "static" member in queue
|
||||
Message: <text> -- Text message in ACKs, errors (explanation)
|
||||
Mix: <bool> -- Boolean parameter (monitor)
|
||||
NewMessages: <count> -- Count of new Mailbox messages (mailboxcount)
|
||||
Newname:
|
||||
ObjectName: -- Name of object in list
|
||||
OldName: -- Something in Rename (channel.c)
|
||||
OldMessages: <count> -- Count of old mailbox messages (mailboxcount)
|
||||
Outgoinglimit: -- SIP Peer outgoing limit
|
||||
Paused: <num> -- Queue member paused status
|
||||
Peer: <tech/name> -- "channel" specifier :-)
|
||||
PeerStatus: <tech/name> -- Peer status code
|
||||
"Unregistered", "Registered", "Lagged", "Reachable"
|
||||
Penalty: <num> -- Queue penalty
|
||||
Priority: -- Extension priority
|
||||
Privilege: <privilege> -- AMI authorization class (system, call, log, verbose, command, agent, user)
|
||||
Pickupgroup: -- Pickup group for peer
|
||||
Position: <num> -- Position in Queue
|
||||
Queue: -- Queue name
|
||||
Reason: -- "Autologoff"
|
||||
Reason: -- "Chanunavail"
|
||||
Response: <response> -- response code, like "200 OK"
|
||||
"Success", "Error", "Follows"
|
||||
Restart: -- "True", "False"
|
||||
RegExpire: -- SIP registry expire
|
||||
RegExpiry: -- SIP registry expiry
|
||||
Reason: -- Originate reason code
|
||||
Seconds: -- Seconds (Status)
|
||||
Secret: <password> -- Authentication secret (for login)
|
||||
SecretExist: <Y | N> -- Whether secret exists
|
||||
Shutdown: -- "Uncleanly", "Cleanly"
|
||||
Key: -- ASTdb Database key
|
||||
LastApplication: -- Last application executed (cdr_manager)
|
||||
LastCall: <num> -- Last call in queue
|
||||
LastData: -- Data for last application (cdr_manager)
|
||||
Link: -- (Status)
|
||||
ListItems: <number> -- Number of items in Eventlist (Optionally sent in "end" packet)
|
||||
Location: -- Interface (whatever that is -maybe tech/name in app_queue )
|
||||
Loginchan: -- Login channel for agent
|
||||
Logintime: <number> -- Login time for agent
|
||||
Mailbox: -- VM Mailbox (id@vmcontext) (mailboxstatus, mailboxcount)
|
||||
MD5SecretExist: <Y | N> -- Whether secret exists in MD5 format
|
||||
Membership: <string> -- "Dynamic" or "static" member in queue
|
||||
Message: <text> -- Text message in ACKs, errors (explanation)
|
||||
Mix: <bool> -- Boolean parameter (monitor)
|
||||
NewMessages: <count> -- Count of new Mailbox messages (mailboxcount)
|
||||
Newname:
|
||||
ObjectName: -- Name of object in list
|
||||
OldName: -- Something in Rename (channel.c)
|
||||
OldMessages: <count> -- Count of old mailbox messages (mailboxcount)
|
||||
Outgoinglimit: -- SIP Peer outgoing limit
|
||||
Paused: <num> -- Queue member paused status
|
||||
Peer: <tech/name> -- "channel" specifier :-)
|
||||
PeerStatus: <tech/name> -- Peer status code
|
||||
"Unregistered", "Registered", "Lagged", "Reachable"
|
||||
Penalty: <num> -- Queue penalty
|
||||
Priority: -- Extension priority
|
||||
Privilege: <privilege> -- AMI authorization class (system, call, log, verbose, command, agent, user)
|
||||
Pickupgroup: -- Pickup group for peer
|
||||
Position: <num> -- Position in Queue
|
||||
Queue: -- Queue name
|
||||
Reason: -- "Autologoff"
|
||||
Reason: -- "Chanunavail"
|
||||
Response: <response> -- response code, like "200 OK"
|
||||
"Success", "Error", "Follows"
|
||||
Restart: -- "True", "False"
|
||||
RegExpire: -- SIP registry expire
|
||||
RegExpiry: -- SIP registry expiry
|
||||
Reason: -- Originate reason code
|
||||
Seconds: -- Seconds (Status)
|
||||
Secret: <password> -- Authentication secret (for login)
|
||||
SecretExist: <Y | N> -- Whether secret exists
|
||||
Shutdown: -- "Uncleanly", "Cleanly"
|
||||
SIP-AuthInsecure:
|
||||
SIP-FromDomain: -- Peer FromDomain
|
||||
SIP-FromUser: -- Peer FromUser
|
||||
SIP-FromDomain: -- Peer FromDomain
|
||||
SIP-FromUser: -- Peer FromUser
|
||||
SIP-NatSupport:
|
||||
SIPLastMsg:
|
||||
Source: -- Source of call (dial event, cdr_manager)
|
||||
SrcUniqueID: -- UniqueID of source (dial event)
|
||||
StartTime: -- Start time of call (cdr_manager)
|
||||
State: -- Channel state
|
||||
Status: -- Registration status (Registry events SIP)
|
||||
Status: -- Extension status (Extensionstate)
|
||||
Status: -- Peer status (if monitored) ** Will change name **
|
||||
"unknown", "lagged", "ok"
|
||||
Status: <num> -- Queue Status
|
||||
Status: -- DND status (DNDState)
|
||||
Time: <sec> -- Roundtrip time (latency)
|
||||
Timeout: -- Parking timeout time
|
||||
Timeout: -- Timeout for call setup (Originate)
|
||||
Timeout: <seconds> -- Timeout for call
|
||||
Uniqueid: -- Channel Unique ID
|
||||
Uniqueid1: -- Channel 1 Unique ID (Link event)
|
||||
Uniqueid2: -- Channel 2 Unique ID (Link event)
|
||||
User: -- Username (SIP registry)
|
||||
UserField: -- CDR userfield (cdr_manager)
|
||||
Val: -- Value to set/read in ASTdb
|
||||
Variable: -- Variable AND value to set (multiple separated with | in Originate)
|
||||
Variable: <name> -- For channel variables
|
||||
Value: <value> -- Value to set
|
||||
VoiceMailbox: -- VM Mailbox in SIPpeers
|
||||
Waiting: -- Count of mailbox messages (mailboxstatus)
|
||||
Source: -- Source of call (dial event, cdr_manager)
|
||||
SrcUniqueID: -- UniqueID of source (dial event)
|
||||
StartTime: -- Start time of call (cdr_manager)
|
||||
State: -- Channel state
|
||||
Status: -- Registration status (Registry events SIP)
|
||||
Status: -- Extension status (Extensionstate)
|
||||
Status: -- Peer status (if monitored) ** Will change name **
|
||||
"unknown", "lagged", "ok"
|
||||
Status: <num> -- Queue Status
|
||||
Status: -- DND status (DNDState)
|
||||
Time: <sec> -- Roundtrip time (latency)
|
||||
Timeout: -- Parking timeout time
|
||||
Timeout: -- Timeout for call setup (Originate)
|
||||
Timeout: <seconds> -- Timeout for call
|
||||
Uniqueid: -- Channel Unique ID
|
||||
Uniqueid1: -- Channel 1 Unique ID (Link event)
|
||||
Uniqueid2: -- Channel 2 Unique ID (Link event)
|
||||
User: -- Username (SIP registry)
|
||||
UserField: -- CDR userfield (cdr_manager)
|
||||
Val: -- Value to set/read in ASTdb
|
||||
Variable: -- Variable AND value to set (multiple separated with | in Originate)
|
||||
Variable: <name> -- For channel variables
|
||||
Value: <value> -- Value to set
|
||||
VoiceMailbox: -- VM Mailbox in SIPpeers
|
||||
Waiting: -- Count of mailbox messages (mailboxstatus)
|
||||
\end{verbatim}
|
||||
|
||||
** Please try to re-use existing headers to simplify manager message parsing in clients.
|
||||
|
@@ -129,15 +129,15 @@ The Optionsstring looks Like:
|
||||
the ":" character is the delimiter.
|
||||
|
||||
The available Optchars are:
|
||||
d - Send display text on called phone, text is the optparam
|
||||
n - don't detect dtmf tones on called channel
|
||||
h - make digital outgoing call
|
||||
c - make crypted outgoing call, param is keyindex
|
||||
e - perform echo cancellation on this channel,
|
||||
takes taps as arguments (32,64,128,256)
|
||||
s - send Non Inband DTMF as inband
|
||||
vr - rxgain control
|
||||
vt - txgain control
|
||||
d - Send display text on called phone, text is the optparam
|
||||
n - don't detect dtmf tones on called channel
|
||||
h - make digital outgoing call
|
||||
c - make crypted outgoing call, param is keyindex
|
||||
e - perform echo cancellation on this channel,
|
||||
takes taps as arguments (32,64,128,256)
|
||||
s - send Non Inband DTMF as inband
|
||||
vr - rxgain control
|
||||
vt - txgain control
|
||||
\end{verbatim}
|
||||
|
||||
chan\_misdn registers a new dial plan application "misdn\_set\_opt" when
|
||||
@@ -182,24 +182,24 @@ Now you should see the misdn cli commands:
|
||||
|
||||
\begin{verbatim}
|
||||
- clean
|
||||
-> pid (cleans a broken call, use with care, leads often
|
||||
to a segmentation fault)
|
||||
-> pid (cleans a broken call, use with care, leads often
|
||||
to a segmentation fault)
|
||||
- send
|
||||
-> display (sends a Text Message to a Asterisk channel,
|
||||
this channel must be an misdn channel)
|
||||
-> display (sends a Text Message to a Asterisk channel,
|
||||
this channel must be an misdn channel)
|
||||
- set
|
||||
-> debug (sets debug level)
|
||||
-> debug (sets debug level)
|
||||
- show
|
||||
-> config (shows the configuration options)
|
||||
-> channels (shows the current active misdn channels)
|
||||
-> channel (shows details about the given misdn channels)
|
||||
-> stacks (shows the current ports, their protocols and states)
|
||||
-> fullstacks (shows the current active and inactive misdn channels)
|
||||
-> config (shows the configuration options)
|
||||
-> channels (shows the current active misdn channels)
|
||||
-> channel (shows details about the given misdn channels)
|
||||
-> stacks (shows the current ports, their protocols and states)
|
||||
-> fullstacks (shows the current active and inactive misdn channels)
|
||||
|
||||
- restart
|
||||
-> port (restarts given port (L2 Restart) )
|
||||
-> port (restarts given port (L2 Restart) )
|
||||
|
||||
- reload (reloads misdn.conf)
|
||||
- reload (reloads misdn.conf)
|
||||
\end{verbatim}
|
||||
|
||||
You can only use "misdn send display" when an Asterisk channel is created and
|
||||
@@ -218,8 +218,8 @@ msn (callerid) of the Phone to send the text to.
|
||||
mISDN Exports/Imports a few Variables:
|
||||
|
||||
\begin{verbatim}
|
||||
- MISDN_ADDRESS_COMPLETE : Is either set to 1 from the Provider, or you
|
||||
can set it to 1 to force a sending complete.
|
||||
- MISDN_ADDRESS_COMPLETE : Is either set to 1 from the Provider, or you
|
||||
can set it to 1 to force a sending complete.
|
||||
\end{verbatim}
|
||||
|
||||
|
||||
@@ -258,9 +258,7 @@ as Display Message to the Phone.
|
||||
|
||||
\subsection{Known Problems}
|
||||
|
||||
\begin{verbatim}
|
||||
* I cannot hear any tone after a successful CONNECT to the other end
|
||||
Q: I cannot hear any tone after a successful CONNECT to the other end
|
||||
|
||||
-> you forgot to load mISDNdsp, which is now needed by chan\_misdn for switching
|
||||
A: You forgot to load mISDNdsp, which is now needed by chan\_misdn for switching
|
||||
and dtmf tone detection
|
||||
\end{verbatim}
|
||||
|
@@ -1,3 +1,5 @@
|
||||
|
||||
|
||||
ODBC Storage allows you to store voicemail messages within a database
|
||||
instead of using a file. This is *not* a full realtime engine and
|
||||
*only* supports ODBC. The table description for the "voicemessages"
|
||||
|
@@ -268,25 +268,27 @@ option):
|
||||
|
||||
\begin{verbatim}
|
||||
[home-introduction]
|
||||
exten => s,1,Background,intro-options ;; Script: To hear your Introduction, dial 1.
|
||||
;; to record a new introduction, dial 2.
|
||||
;; to return to the main menu, dial 3.
|
||||
;; to hear what this is all about, dial 4.
|
||||
exten => s,1,Background,intro-options ;; Script:
|
||||
;; To hear your Introduction, dial 1.
|
||||
;; to record a new introduction, dial 2.
|
||||
;; to return to the main menu, dial 3.
|
||||
;; to hear what this is all about, dial 4.
|
||||
exten => 1,1,Playback,priv-callerintros/${CALLERIDNUM}
|
||||
exten => 1,2,Goto(s,1)
|
||||
exten => 2,1,Goto(home-introduction-record,s,1)
|
||||
exten => 3,1,Goto(homeline,s,7)
|
||||
exten => 4,1,Playback,intro-intro ;; Script:
|
||||
;; This may seem a little strange, but it really is a neat
|
||||
;; thing, both for you and for us. I've taped a short introduction
|
||||
;; for many of the folks who normally call us. Using the Caller ID
|
||||
;; from each incoming call, the system plays the introduction
|
||||
;; for that phone number over a speaker, just as the call comes in.
|
||||
;; This helps the folks
|
||||
;; here in the house more quickly determine who is calling.
|
||||
;; and gets the right ones to gravitate to the phone.
|
||||
;; You can listen to, and record a new intro for your phone number
|
||||
;; using this menu.
|
||||
exten => 4,1,Playback,intro-intro
|
||||
;; Script:
|
||||
;; This may seem a little strange, but it really is a neat
|
||||
;; thing, both for you and for us. I've taped a short introduction
|
||||
;; for many of the folks who normally call us. Using the Caller ID
|
||||
;; from each incoming call, the system plays the introduction
|
||||
;; for that phone number over a speaker, just as the call comes in.
|
||||
;; This helps the folks
|
||||
;; here in the house more quickly determine who is calling.
|
||||
;; and gets the right ones to gravitate to the phone.
|
||||
;; You can listen to, and record a new intro for your phone number
|
||||
;; using this menu.
|
||||
exten => 4,2,Goto(s,1)
|
||||
exten => t,1,Goto(s,1)
|
||||
exten => i,1,Background,invalid
|
||||
@@ -295,37 +297,37 @@ exten => o,1,Goto(s,1)
|
||||
|
||||
[home-introduction-record]
|
||||
exten => s,1,Background,intro-record-choices ;; Script:
|
||||
;; If you want some advice about recording your
|
||||
;; introduction, dial 1.
|
||||
;; otherwise, dial 2, and introduce yourself after
|
||||
;; the beep.
|
||||
;; If you want some advice about recording your
|
||||
;; introduction, dial 1.
|
||||
;; otherwise, dial 2, and introduce yourself after
|
||||
;; the beep.
|
||||
exten => 1,1,Playback,intro-record
|
||||
;; Your introduction should be short and sweet and crisp.
|
||||
;; Your introduction will be limited to 4 seconds.
|
||||
;; This is NOT meant to be a voice mail message, so
|
||||
;; please, don't say anything about why you are calling.
|
||||
;; After we are done making the recording, your introduction
|
||||
;; will be saved for playback.
|
||||
;; If you are the only person that would call from this number,
|
||||
;; please state your name. Otherwise, state your business
|
||||
;; or residence name instead. For instance, if you are
|
||||
;; friend of the family, say, Olie McPherson, and both
|
||||
;; you and your kids might call here a lot, you might
|
||||
;; say: "This is the distinguished Olie McPherson Residence!"
|
||||
;; If you are the only person calling, you might say this:
|
||||
;; "This is the illustrious Kermit McFrog! Pick up the Phone, someone!!"
|
||||
;; If you are calling from a business, you might pronounce a more sedate introduction,like,
|
||||
;; "Fritz from McDonalds calling.", or perhaps the more original introduction:
|
||||
;; "John, from the Park County Morgue. You stab 'em, we slab 'em!".
|
||||
;; Just one caution: the kids will hear what you record every time
|
||||
;; you call. So watch your language!
|
||||
;; I will begin recording after the tone.
|
||||
;; When you are done, hit the # key. Gather your thoughts and get
|
||||
;; ready. Remember, the # key will end the recording, and play back
|
||||
;; your intro. Good Luck, and Thank you!"
|
||||
;; Your introduction should be short and sweet and crisp.
|
||||
;; Your introduction will be limited to 4 seconds.
|
||||
;; This is NOT meant to be a voice mail message, so
|
||||
;; please, don't say anything about why you are calling.
|
||||
;; After we are done making the recording, your introduction
|
||||
;; will be saved for playback.
|
||||
;; If you are the only person that would call from this number,
|
||||
;; please state your name. Otherwise, state your business
|
||||
;; or residence name instead. For instance, if you are
|
||||
;; friend of the family, say, Olie McPherson, and both
|
||||
;; you and your kids might call here a lot, you might
|
||||
;; say: "This is the distinguished Olie McPherson Residence!"
|
||||
;; If you are the only person calling, you might say this:
|
||||
;; "This is the illustrious Kermit McFrog! Pick up the Phone, someone!!"
|
||||
;; If you are calling from a business, you might pronounce a more sedate introduction,like,
|
||||
;; "Fritz from McDonalds calling.", or perhaps the more original introduction:
|
||||
;; "John, from the Park County Morgue. You stab 'em, we slab 'em!".
|
||||
;; Just one caution: the kids will hear what you record every time
|
||||
;; you call. So watch your language!
|
||||
;; I will begin recording after the tone.
|
||||
;; When you are done, hit the # key. Gather your thoughts and get
|
||||
;; ready. Remember, the # key will end the recording, and play back
|
||||
;; your intro. Good Luck, and Thank you!"
|
||||
exten => 1,2,Goto(2,1)
|
||||
exten => 2,1,Background,intro-start
|
||||
;; OK, here we go! After the beep, please give your introduction.
|
||||
;; OK, here we go! After the beep, please give your introduction.
|
||||
exten => 2,2,Background,beep
|
||||
exten => 2,3,Record,priv-callerintros/${CALLERIDNUM}:gsm|4
|
||||
exten => 2,4,Background,priv-callerintros/${CALLERIDNUM}
|
||||
|
@@ -7,7 +7,7 @@ congested with other traffic.
|
||||
|
||||
Also asterisk running on Linux can set 802.1p CoS marks in VLAN packets
|
||||
for all used VoIP protocols. It is useful when you are working in switched
|
||||
enviropment. For maping skb->priority and VLAN CoS mark you need to use
|
||||
enviropment. For maping skb-$>$priority and VLAN CoS mark you need to use
|
||||
command "vconfig set\_egress\_map [vlan-device] [skb-priority] [vlan-qos]".
|
||||
|
||||
\subsubsection{SIP}
|
||||
@@ -64,30 +64,30 @@ integer values from 0 to 7.
|
||||
|
||||
|
||||
\begin{verbatim}
|
||||
===========================================
|
||||
Configuration Parameter Recommended
|
||||
File Setting
|
||||
-------------------------------------------
|
||||
sip.conf tos\_sip cs3
|
||||
sip.conf tos\_audio ef
|
||||
sip.conf tos\_video af41
|
||||
sip.conf tos\_text af41
|
||||
sip.conf cos\_sip 4
|
||||
sip.conf cos\_audio 6
|
||||
sip.conf cos\_video 5
|
||||
sip.conf cos\_text 0
|
||||
-------------------------------------------
|
||||
iax.conf tos ef
|
||||
iax.conf cos 6
|
||||
-------------------------------------------
|
||||
iaxprov.conf tos ef
|
||||
-------------------------------------------
|
||||
mgcp.conf tos ef
|
||||
mgcp.conf cos 6
|
||||
-------------------------------------------
|
||||
h323.conf tos ef
|
||||
h323.conf cos 6
|
||||
===========================================
|
||||
+==============+============+==============+
|
||||
|Configuration | Parameter | Recommended |
|
||||
|File | Setting | |
|
||||
+--------------+------------+--------------+
|
||||
| | tos_sip | cs3 |
|
||||
| | tos_audio | ef |
|
||||
| | tos_video | af41 |
|
||||
| sip.conf | tos_text | af41 |
|
||||
| | cos_sip | 4 |
|
||||
| | cos_audio | 6 |
|
||||
| | cos_video | 5 |
|
||||
| | cos_text | 0 |
|
||||
+--------------+------------+--------------+
|
||||
| iax.conf | tos | ef |
|
||||
| | cos | 6 |
|
||||
+--------------+------------+--------------+
|
||||
| iaxprov.conf | tos | ef |
|
||||
+--------------+------------+--------------+
|
||||
| mgcp.conf | tos | ef |
|
||||
| | cos | 6 |
|
||||
+--------------+------------+--------------+
|
||||
| h323.conf | tos | ef |
|
||||
| | cos | 6 |
|
||||
+==============+============+==============+
|
||||
\end{verbatim}
|
||||
|
||||
\subsubsection{Reference}
|
||||
@@ -108,12 +108,11 @@ To get the most out of setting the TOS on packets generated by
|
||||
Asterisk, you will need to ensure that your network handles packets
|
||||
with a TOS properly. For Cisco devices, see the previously mentioned
|
||||
"Enterprise QoS Solution Reference Network Design Guide". For Linux
|
||||
systems see the "Linux Advanced Routing \& Traffic Control HOWTO" at
|
||||
<http://www.lartc.org/>.
|
||||
systems see the "Linux Advanced Routing \& Traffic Control HOWTO" at
|
||||
http://www.lartc.org/.
|
||||
|
||||
For more information on Quality of
|
||||
Service for VoIP networks see the "Enterprise QoS Solution Reference
|
||||
Network Design Guide" version 3.3 from Cisco at:
|
||||
|
||||
<http://www.cisco.com/application/pdf/en/us/guest/netsol/ns432/c649/ccmigration\_09186a008049b062.pdf>
|
||||
http://www.cisco.com/application/pdf/en/us/guest/netsol/ns432/c649/ccmigration\_09186a008049b062.pdf
|
||||
|
||||
|
@@ -6,59 +6,71 @@ queue log, located (by default) in /var/log/asterisk/queue\_log.
|
||||
|
||||
These are the events (and associated information) in the queue log:
|
||||
|
||||
ABANDON(position|origposition|waittime)
|
||||
\textbf{ABANDON(position|origposition|waittime)}
|
||||
|
||||
The caller abandoned their position in the queue. The position is the
|
||||
caller's position in the queue when they hungup, the origposition is
|
||||
the original position the caller was when they first entered the
|
||||
queue, and the waittime is how long the call had been waiting in the
|
||||
queue at the time of disconnect.
|
||||
|
||||
AGENTDUMP
|
||||
\textbf{AGENTDUMP}
|
||||
|
||||
The agent dumped the caller while listening to the queue announcement.
|
||||
|
||||
AGENTLOGIN(channel)
|
||||
\textbf{AGENTLOGIN(channel)}
|
||||
|
||||
The agent logged in. The channel is recorded.
|
||||
|
||||
AGENTCALLBACKLOGIN(exten@context)
|
||||
\textbf{AGENTCALLBACKLOGIN(exten@context)}
|
||||
|
||||
The callback agent logged in. The login extension and context is recorded.
|
||||
|
||||
AGENTLOGOFF(channel|logintime)
|
||||
\textbf{AGENTLOGOFF(channel|logintime)}
|
||||
|
||||
The agent logged off. The channel is recorded, along with the total time
|
||||
the agent was logged in.
|
||||
|
||||
AGENTCALLBACKLOGOFF(exten@context|logintime|reason)
|
||||
\textbf{AGENTCALLBACKLOGOFF(exten@context|logintime|reason)}
|
||||
|
||||
The callback agent logged off. The last login extension and context is
|
||||
recorded, along with the total time the agent was logged in, and the
|
||||
reason for the logoff if it was not a normal logoff
|
||||
(e.g., Autologoff, Chanunavail)
|
||||
|
||||
COMPLETEAGENT(holdtime|calltime|origposition)
|
||||
\textbf{COMPLETEAGENT(holdtime|calltime|origposition)}
|
||||
|
||||
The caller was connected to an agent, and the call was terminated normally
|
||||
by the *agent*. The caller's hold time and the length of the call are both
|
||||
recorded. The caller's original position in the queue is recorded in
|
||||
origposition.
|
||||
|
||||
COMPLETECALLER(holdtime|calltime|origposition)
|
||||
\textbf{COMPLETECALLER(holdtime|calltime|origposition)}
|
||||
|
||||
The caller was connected to an agent, and the call was terminated normally
|
||||
by the *caller*. The caller's hold time and the length of the call are both
|
||||
recorded. The caller's original position in the queue is recorded in
|
||||
origposition.
|
||||
|
||||
CONFIGRELOAD
|
||||
\textbf{CONFIGRELOAD}
|
||||
|
||||
The configuration has been reloaded (e.g. with asterisk -rx reload)
|
||||
|
||||
CONNECT(holdtime|bridgedchanneluniqueid)
|
||||
\textbf{CONNECT(holdtime|bridgedchanneluniqueid)}
|
||||
|
||||
The caller was connected to an agent. Hold time represents the amount
|
||||
of time the caller was on hold. The bridged channel unique ID contains
|
||||
the unique ID of the queue member channel that is taking the call. This
|
||||
is useful when trying to link recording filenames to a particular
|
||||
call in the queue.
|
||||
|
||||
ENTERQUEUE(url|callerid)
|
||||
\textbf{ENTERQUEUE(url|callerid)}
|
||||
|
||||
A call has entered the queue. URL (if specified) and Caller*ID are placed
|
||||
in the log.
|
||||
|
||||
EXITEMPTY(position|origposition|waittime)
|
||||
\textbf{EXITEMPTY(position|origposition|waittime)}
|
||||
|
||||
The caller was exited from the queue forcefully because the queue had no
|
||||
reachable members and it's configured to do that to callers when there
|
||||
are no reachable members. The position is the caller's position in the
|
||||
@@ -66,29 +78,35 @@ queue when they hungup, the origposition is the original position the
|
||||
caller was when they first entered the queue, and the waittime is how
|
||||
long the call had been waiting in the queue at the time of disconnect.
|
||||
|
||||
EXITWITHKEY(key|position|origposition|waittime)
|
||||
\textbf{EXITWITHKEY(key|position|origposition|waittime)}
|
||||
|
||||
The caller elected to use a menu key to exit the queue. The key and
|
||||
the caller's position in the queue are recorded. The caller's entry
|
||||
position and amoutn of time waited is also recorded.
|
||||
|
||||
EXITWITHTIMEOUT(position|origposition|waittime)
|
||||
\textbf{EXITWITHTIMEOUT(position|origposition|waittime)}
|
||||
|
||||
The caller was on hold too long and the timeout expired. The position in the
|
||||
queue when the timeout occurred, the entry position, and the amount of time
|
||||
waited are logged.
|
||||
|
||||
QUEUESTART
|
||||
\textbf{QUEUESTART}
|
||||
|
||||
The queueing system has been started for the first time this session.
|
||||
|
||||
RINGNOANSWER(ringtime)
|
||||
\textbf{RINGNOANSWER(ringtime)}
|
||||
|
||||
After trying for ringtime ms to connect to the available queue member,
|
||||
the attempt ended without the member picking up the call. Bad queue
|
||||
member!
|
||||
|
||||
SYSCOMPAT
|
||||
\textbf{SYSCOMPAT}
|
||||
|
||||
A call was answered by an agent, but the call was dropped because the
|
||||
channels were not compatible.
|
||||
|
||||
TRANSFER(extension|context|holdtime|calltime)
|
||||
\textbf{TRANSFER(extension|context|holdtime|calltime)}
|
||||
|
||||
Caller was transferred to a different extension. Context and extension
|
||||
are recorded. The caller's hold time and the length of the call are both
|
||||
recorded. PLEASE remember that transfers performed by SIP UA's by way
|
||||
|
@@ -6,9 +6,6 @@ functions implemented in Asterisk.
|
||||
The benefits of this architecture are many, both from a code management
|
||||
standpoint and from an installation perspective.
|
||||
|
||||
Additional information on the configuration of Realtime with Asterisk
|
||||
can be found in doc/extconfig.txt
|
||||
|
||||
The ARA is designed to be independent of storage. Currently, most
|
||||
drivers are based on SQL, but the architecture should be able to handle
|
||||
other storage methods in the future, like LDAP.
|
||||
@@ -77,7 +74,7 @@ databases and reload it whenever you want. You can force a reload over
|
||||
the AMI, Asterisk Manager Interface or by calling Asterisk from a
|
||||
shell script with
|
||||
|
||||
asterisk -rx "reload"
|
||||
asterisk -rx "reload"
|
||||
|
||||
You may also dynamically add SIP and IAX devices and extensions
|
||||
and making them available without a reload, by using the realtime
|
||||
@@ -87,7 +84,7 @@ objects and the realtime switch.
|
||||
|
||||
You configure the ARA in extconfig.conf (yes, it's a strange name, but
|
||||
is was defined in the early days of the realtime architecture and kind
|
||||
of stuck). Please see doc/extconfig.txt for database schemas.
|
||||
of stuck).
|
||||
|
||||
The part of Asterisk that connects to the ARA use a well defined family
|
||||
name to find the proper database driver. The syntax is easy:
|
||||
@@ -110,11 +107,8 @@ Defined well-known family names are:
|
||||
\item extensions - Realtime extensions (switch)
|
||||
\end{itemize}
|
||||
|
||||
There is documentation of the SQL database in the file
|
||||
doc/extconfig.txt in your Asterisk source code tree.
|
||||
|
||||
For voicemail storage with the support of ODBC, there is a
|
||||
doc/odbcstorage.txt documentation file.
|
||||
Voicemail storage with the support of ODBC described in file
|
||||
docs/odbcstorage.tex (\ref{odbcstorage}).
|
||||
|
||||
\subsubsection{Limitations}
|
||||
|
||||
|
Reference in New Issue
Block a user