Habilitacion de Servicio de Carrier

jun 05

Habilitacion de Servicio de Carrier

Habitualmente encontramos que necesitamos habilitar un servicio de carrier en nuestra central. Esto quiere decir que nosotros llamamos a un número y la central nos da tono para poder llamar. Esto es esencialmente útil en casos donde tenemos un muy buen plan de teléfono o las tarifas de nuestro proveedor IP son mucho mejores en algunos tramos (celular, internacional, etc).

La idea de este tutorial es habilitar nuestra central para recibir una llamada, validar el numero entrante contra una lista y dar tono de llamada de nuestra central, tal cual fuese un anexo interno.

Lo primero es generar el dialplan necesario

  1. [carrier]
  2. exten => 9000,1,NoOp(Entrando al Sistema Carrier)
  3. exten => 9000,n,AGI(carrier.php)
  4. exten => 1,1,Answer
  5. exten => 1,n,Set(TIMEOUT(digit)=5)
  6. exten => 1,n,Set(TIMEOUT(response)=15)
  7. exten => 1,n,DISA(no-password,contexto_salida)

la idea es que cada vez que llamemos al 9000 se ejecute un AGI, por preferencia personal voy a usar la implementacion de PHP para escribir los AGIs, pero pueden usar la que Uds. estimen conveniente

#!/usr/bin/php -q
  1.  
  2. include("phpagi.php");
  3. $agi = new AGI();
  4. $numero = $agi->parse_callerid();
  5. $numero = $numero['username'];
  6.  
  7. function numero_valido($numero) {
  8.     $numeros_permitidos = array(5623416289,56985351598,56983514203);
  9.     $valido = false;
  10.     if (in_array($numero,$numeros_permitidos)) {
  11.         $valido = true;
  12.     }
  13.     return $valido;
  14. }
  15.  
  16. if (!numero_valido($numero)) {
  17.     $agi->verbose("El numero $numero no esta permitido");
  18.     $agi->Hangup();
  19. } else {
  20.     $agi->verbose("Acceso permitido: $numero");
  21.     $agi->Goto("carrier","1","1");
  22. }
  23.  
  24. exit(0);

Cuando la llamada entra se ejecuta este script PHP el cual realiza una verificacion del numero que esta llamando, si este se encuentra dentro del arreglo de numeros permitidos, si no esta permitido simplemente corta la llamada y si esta permitido redirige la llamada al contexto carrier, prioridad 1 de la extension 1 y comienza su ejecución.

La aplicacion que hace la magia se llama DISA y es la que permite entregar tono de llamada a un número externo.

  1. exten => 1,n,DISA(no-password,contexto_salida)

ahi le estamos diciendo que nos de tono de llamada, sin pedir una contraseña en el contexto “contexto_salida”, si estas usando freePBX este debiese ser “from-internal”, de esa forma podrás llamar como si fueses un anexo de la central.

Quiza te preguntaras, y para que me sirve?, en Chile hay algunas compañias de celular que ofrecen llamadas gratuitas a un número de red fija, y en tu casa/oficina tienes un muy buen proveedor telefonico que te entrega muy buenos precios. Bueno, ahi tienes un uso.

Bueno, eso es lo basico que puedes realizar, desde aqui puedes generar un sin fin de usos y formas de implementación para distintos casos.

Consideraciones finales:
- Necesitas descargar e instalar phpagi
- El archivo tiene que tener permisos de ejecución.
- El archivo debe estar en el directorio /var/lib/asterisk/agi-bin/

Leave a Reply