Funcionamiento de Asterisk
Esta guía te enseña cómo utilizar la evaluación de expresiones en Asterisk, una herramienta clave para evaluar expresiones aritméticas y lógicas. Incluye sintaxis, ejemplos prácticos, consideraciones importantes y usos combinados con variables.
Sintaxis básica
$[expr1 operator expr2]
Operadores lógicos
Estos operadores permiten combinar condiciones booleanas.
- expr1 | expr2 (OR lógico)
- Devuelve
expr1
si evalúa como no vacío/no cero ("true"). - De lo contrario, evalúa y devuelve
expr2
.
- Devuelve
- expr1 & expr2 (AND lógico)
- Devuelve
expr1
si ambas expresiones evalúan como no vacías/no cero ("true"). - De lo contrario, devuelve cero ("false").
- Devuelve
- !expr (Complemento lógico unario)
- Nota: No debe haber espacio entre
!
yexpr
. - No disponible en versiones de Asterisk anteriores a la 1.1.
- Nota: No debe haber espacio entre
Uso de operadores lógicos
Podés combinar condiciones dentro de GotoIf
u otros comandos similares:
$[ $[ "${FOO}" = "1" ] & $[ "${BAR}" = "2" ] ]
En este ejemplo, se evalúa si ambas variables (FOO y BAR) cumplen con sus respectivos valores. Si es así, la expresión completa devuelve 1.
Operadores de comparación
Estos permiten comparar valores y decidir el flujo en base a condiciones.
expr1 = expr2
expr1 != expr2
expr1 < expr2
expr1 > expr2
expr1 <= expr2
expr1 >= expr2
Notas importantes
- Si ambos argumentos son enteros, se realiza una comparación entera.
- De lo contrario, se realiza una comparación de cadenas utilizando la secuencia de ordenación del sistema local.
- Devuelve 1 si es verdadero, 0 si es falso.
Operadores aritméticos
Asterisk también permite hacer cálculos básicos con enteros:
expr1 + expr2
: Sumaexpr1 - expr2
: Resta-expr
: Negación unaria No disponible en Asterisk < 1.1expr1 * expr2
: Multiplicaciónexpr1 / expr2
: División enteraexpr1 % expr2
: Resto (módulo)
Estos operadores trabajan con argumentos de tipo entero.
Funciones aritméticas de Asterisk
Se agregaron funciones para redondeo y truncamiento compatibles con enteros:
FLOOR(x)
: Redondea hacia abajo al entero más próximo.CEIL(x)
: Redondea hacia arriba al entero más próximo.ROUND(x)
: Redondea al entero más cercano. Si está justo en el medio, redondea alejándose del cero.RINT(x)
: Redondea al entero más cercano, pero en caso de empate, elige el par más cercano.TRUNC(x)
: Elimina la parte decimal, redondeando hacia cero.
Aclaraciones
- Las funciones del dialplan pueden llamarse directamente dentro de
$[...]
sin necesidad de${...}
- Ejemplo:
$[3 + FLOOR(2.9)]
.
- Ejemplo:
- Las variables, en cambio, sí requieren el uso de
${...}
. Ejemplo:$[${a} + 2]
. - Los argumentos dentro de funciones deben estar separados por comas
(,)
cuando se utiliza$[...]
.
Funciones matemáticas disponibles
Se puede acceder a la mayoría de las funciones matemáticas de la biblioteca C
que permiten relizar cálculos más avanzados.
Trigonométricas (argumento en radianes):
COS(x)
SIN(x)
TAN(x)
Trigonometría inversa (argumento entre -1 y 1):
ACOS(x)
ASIN(x)
ATAN(x)
(result radians -π/2 y π/2)ATAN2(x,y)
(resultado entre -π y π)Exponentes y logaritmos:
POW(x,y)
: x elevado a la potencia y (x^y)EXP(x)
: e elevado a xEXP2(x)
: 2 elevado a xLOG(x)
: Logaritmo natural (base e)LOG2(x)
: Logaritmo base 2LOG10(x)
: Logaritmo base 10
Otros:
SQRT(x)
: Raíz cuadradaREMAINDER(x,y)
: Devuelve el residuo matemático (a diferencia del operador%
). Calculado comox - n*y
donden = x/y
redondeado al entero par más cercano.