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
expr1si evalúa como no vacío/no cero ("true"). - De lo contrario, evalúa y devuelve
expr2.
- Devuelve
- expr1 & expr2 (AND lógico)
- Devuelve
expr1si 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 = expr2expr1 != expr2expr1 < expr2expr1 > expr2expr1 <= expr2expr1 >= 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. 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*ydonden = x/yredondeado al entero par más cercano.
