reconocer la compañia a la que pertenece un numero
ago 03
Buenas, hace un tiempo que no escribía algo por aquí, voy a tratar de escribir cosas un poco más seguido.
Ahora les traigo una mini-aplicacion que reconoce la compañia del numero a la que se esta llamando, por ahora sólo funciona con números de teléfonos móviles chilenos, más adelante agregaré los teléfonos fijos y quizá los de otros países. Lo primero que haremos es descargar una base de datos en SQLite3 hecha por mi en base a la numeración publica entregada por la Subtel
Tienes que descargar el archivo anterior en el directorio /var/lib/asterisk/agi-bin o bien donde tengas los archivos AGI (ver /etc/asterisk/asterisk.conf), ahora veremos el programa que se encarga de realizar las consultas y determina cual es la compañía.
-
#!/usr/bin/php -q
-
<?php
-
/**
-
* Determina la compania del celular ingresado
-
* Uso:
-
* ./cia.php digitos celular
-
* digitos: cantidad de digitos a ignorar en celular, desde la izquierda.
-
* celular: celular a chequear
-
*
-
* @author Mario Hernandez <mario@spooky.cl>
-
* @since 03/08/2009
-
* @copyright Creative Commons 2.0 Chile – Atribucion-Compartir Igual
-
*
-
*/
-
-
// true para guardar la compania en el campo userfield del cdr
-
$userfield = true;
-
-
// String donde se encuentra la base
-
$dbString = "sqlite:numeracion.db";
-
-
// ruta absoluta de la clase phpAGI
-
$phpAgi = "./phpagi.php";
-
-
if ($argc != 3 || in_array($argv[1],array("-h","–help"))) {
-
echo "Uso: ./cia.php digitos celular\n";
-
} else {
-
include_once($phpAgi);
-
-
//Creando objeto
-
$agi = new AGI();
-
$numero = substr($argv[2],$argv[1]);
-
$prefijo = substr($numero,0,4);
-
$prefijo2 = substr($numero,4,1);
-
//echo "El numero es: $argv[2]\n";
-
//echo "El prefijo es: $prefijo\n";
-
//echo "El prefijo2 es: $prefijo2\n";
-
$db = new PDO($dbString);
-
$query = "SELECT fkCompania,prefijo, prefijo2 FROM prefijos WHERE prefijo = '{$prefijo}'";
-
$resultado = $db->query($query,PDO::FETCH_ASSOC);
-
$filas = $resultado->fetchAll();
-
$totalRegistros = count($filas);
-
if ($totalRegistros <= 0) {
-
// Menor o igual a 0, no hay registros
-
//echo "Ese prefijo no esta en la base\n";
-
$agi->verbose("No se encontro el prefijo");
-
exit(1);
-
} else {
-
if ($totalRegistros > 1) {
-
// mayor que 1, hay mas de un resultado
-
foreach ($filas as $fila) {
-
if ($fila['prefijo2'] == $prefijo2) {
-
//echo "Mas de 1 Cia: {$fila['fkCompania']}\n";
-
$q = "SELECT nombreCompania, tipoCompania FROM companias WHERE idCompanias = '{$fila['fkCompania']}'";
-
}
-
}
-
} else {
-
//solo una coincidencia
-
//echo "Solo 1 Cia: {$filas[0]['fkCompania']}\n";
-
$q = "SELECT nombreCompania, tipoCompania FROM companias WHERE idCompanias = '{$filas[0]['fkCompania']}'";
-
}
-
if (!isset($q)) {
-
$agi->verbose("No se encontro el prefijo");
-
exit(1);
-
} else {
-
$res = $db->query($q,PDO::FETCH_ASSOC);
-
$info = $res->fetchAll();
-
//echo "Compania: {$info[0]['nombreCompania']}\n";
-
//echo "Tipo: {$info[0]['tipoCompania']}\n";
-
$agi->verbose("Tipo: {$info[0]['tipoCompania']} – Compania: {$info[0]['nombreCompania']}");
-
if ($userfield == true) {
-
$agi->set_variable("CDR(userfield)",$info[0]['nombreCompania']);
-
}
-
}
-
}
-
}
-
exit(1);
-
?>
o puedes descargarlo
recuerda dejarlo con permisos de ejecución (o asterisk no será capaz de ejecutarlo), puedes probarlo ejecutando ./cia.php 0 74567890
Ahora debemos integrarlo al dialplan de asterisk, esto se hace escribiendo algo como esto dentro del contexto de las llamadas (voy a poner el ejemplo de una llamada a celular)
-
exten => 09.,1,AGI(cia.php,2,${EXTEN})
dentro del contexto que tienes habilitado para llamar, dentro de la llamada AGI tenemos el primer parametro del AGI mismo, el segundo parametro es la cantidad de digitos a ignorar desde la izquierda, y el tercer parámetro es el numero de celular, en este caso con formato 09+Celular.
lo que hace el programa es toma el numero completo (0974567890) e ignora los 2 primeros digitos (09) y realiza las verificaciones con los restantes (74567890)
Requisitos:
- El programa usa PHP5 y phpagi, necesitas descargar e instalar la librería al directorio /var/lib/asterisk/agi-bin/
- Necesitas la extension PDO de PHP5. php5-pdo en Debian php-pdo en CentOS, si usas elastix u otra versión empaquetada es probable que ya la tengas instalada.


Alexandra, eso puedes hacerlo con otra aplicación, y esta muy bueno esto mario.
Saludos.
Saludos, Mario
Lei tu post que esta muy interesante, yo actualmente estoy trabajando con trixbox y quiero crear un archivo php que me permita reconocer quien esta llamando y luego almacenar este numero en una base de datos para que ejecute un ivr especifico para el usuario llamante, no se si podrias guiarme en esto ya que soy nueva en programacion en php para uso del Agi de asterisk.
Att:
Alexandra
kchorrita25@yahoo.es