How Asterisk Works
This guide teaches you how to use expression evaluation in Asterisk, a key tool for evaluating arithmetic and logical expressions. It includes syntax, practical examples, important notes, and combined usage with variables.
Basic Syntax
$[expr1 operator expr2]
Logical Operators
These operators allow you to combine boolean conditions:
expr1 | expr2 (Logical OR)
- Returns
expr1
if it evaluates as non-empty/non-zero ("true"). - Otherwise, evaluates and returns
expr2
.
- Returns
expr1 & expr2 (Logical AND)
- Returns
expr1
if both expressions evaluate as non-empty/non-zero ("true"). - Otherwise, returns zero ("false").
- Returns
!expr (Unary Logical NOT)
- Note: There must be no space between
!
andexpr
. - Not available in Asterisk versions earlier than 1.1.
- Note: There must be no space between
Using Logical Operators
You can combine conditions within GotoIf
or similar commands:
$[ $[ "${FOO}" = "1" ] & $[ "${BAR}" = "2" ] ]
In this example, the expression evaluates whether both variables (FOO
and BAR
) meet their respective values. If they do, the full expression returns 1.
Comparison Operators
These allow value comparisons to control the call flow based on conditions:
expr1 = expr2
expr1 != expr2
expr1 < expr2
expr1 > expr2
expr1 <= expr2
expr1 >= expr2
Important Notes
- If both arguments are integers, an integer comparison is performed.
- Otherwise, a string comparison is performed using the system’s local sort order.
- Returns 1 if true, 0 if false.
Arithmetic Operators
Asterisk also supports basic arithmetic with integers:
expr1 + expr2
: Additionexpr1 - expr2
: Subtraction-expr
: Negation (Not available in Asterisk < 1.1)expr1 * expr2
: Multiplicationexpr1 / expr2
: Integer divisionexpr1 % expr2
: Modulo (remainder)
These operators only work with integer values.
Asterisk Arithmetic Functions
Functions for rounding and truncation are available and work with integers:
FLOOR(x)
: Rounds down to the nearest integer.CEIL(x)
: Rounds up to the nearest integer.ROUND(x)
: Rounds to the nearest integer. If exactly halfway, it rounds away from zero.RINT(x)
: Rounds to the nearest integer, preferring the even number in case of a tie.TRUNC(x)
: Removes the decimal part, rounding toward zero.
Clarifications
Dialplan functions can be called directly within
$[...]
without${...}
.- Example:
$[3 + FLOOR(2.9)]
- Example:
Variables, however, must use
${...}
.- Example:
$[${a} + 2]
- Example:
Arguments in functions must be separated by commas
,
when using$[...]
.
Available Math Functions
Most functions from the C math library are available for more advanced calculations:
Trigonometric (input in radians):
COS(x)
SIN(x)
TAN(x)
Inverse Trigonometric (input between -1 and 1):
ACOS(x)
ASIN(x)
ATAN(x)
(returns radians between -π/2 and π/2)ATAN2(x, y)
(returns between -π and π)Exponents and Logarithms:
POW(x, y)
: x to the power of y (x^y)EXP(x)
: e to the power of xEXP2(x)
: 2 to the power of xLOG(x)
: Natural logarithm (base e)LOG2(x)
: Base 2 logarithmLOG10(x)
: Base 10 logarithm
Others:
SQRT(x)
: Square rootREMAINDER(x, y)
: Returns the mathematical remainder (unlike%
). Calculated asx - n*y
wheren = x/y
rounded to the nearest even integer.