Skip to content

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.
  • 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").
  • !expr (Complemento lógico unario)
    • Nota: No debe haber espacio entre ! y expr.
    • No disponible en versiones de Asterisk anteriores a la 1.1.

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: Suma
  • expr1 - expr2: Resta
  • -expr: Negación unaria No disponible en Asterisk < 1.1
  • expr1 * expr2: Multiplicación
  • expr1 / expr2: División entera
  • expr1 % 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)].
  • 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 x
    • EXP2(x): 2 elevado a x
    • LOG(x): Logaritmo natural (base e)
    • LOG2(x): Logaritmo base 2
    • LOG10(x): Logaritmo base 10
  • Otros:

    • SQRT(x): Raíz cuadrada
    • REMAINDER(x,y): Devuelve el residuo matemático (a diferencia del operador %). Calculado como x - n*y donde n = x/y redondeado al entero par más cercano.

uContact by net2phone