Se hemos seguido esta guía para la instalación del paquete adicional de Asterisk (asterisk-addons) seguramente tenemos el registro de las llamadas en una base de datos. Ahora que tenemos todas las llamadas registradas, a través de una aplicación de asterisk, podemos consultar la base de datos y extraer lo que necesitamos. En este articulo veremos como sacar de la base de datos el ultimo numero llamado y la ultima llamada recibida de la extensión que está haciendo la consulta. Una vez que tengamos estos datos podemos usarlos como queramos. Algunos ejemplos:
Vamos a empezar; abrimos el archivo extensions.conf y añadimos unas cuantas líneas:
nano /etc/asterisk/extensions.conf
En nuestro contesto local ponemos
;Ultima llamada hecha
exten => 75,1,MYSQL(Connect connid localhost usuario contraseña nombrebasededatos)
exten => 75,n,NoOp(connid = ${connid})
exten => 75,n,MYSQL(Query resultid ${connid} SELECT dst FROM cdr WHERE src="${CALLERID(num)}" ORDER BY calldate DESC LIMIT 1)
exten => 75,n,NoOp(resultid = ${resultid})
exten => 75,n,MYSQL(Fetch fetchid var1)
exten => 75,n,NoOp(Variabili = ${fetchid},${var1})
exten => 75,n,MYSQL(Clear ${resultid})
exten => 75,n,MYSQL(Disconnect ${connid})
exten => 75,n,Hangup
La aplicación MySQL es la que permite hacer consultas de cualquier base de datos en MySQL que hemos creado. En este caso la usaremos solamente para consultar el CDR.
Con la primera línea nos conectamos a la base de datos. Los datos que tenemos que indicar son:
Si la conexión tiene éxito a la variable connid será asociado el valor 1
Hacemos este tipo de control en la segunda línea. Si la conexión no funciona asterisk colgará la llamada
En la Tercera línea interrogamos la base de datos (Query) usando la conexión creada con la línea 1. Queremos seleccionar la columna dst (destinación) de la tabla cdr donde el llamante es la extensión que está haciendo la consulta y queremos el resultado ordenado por fecha en orden descendiente. Con LIMIT 1 indicamos que queremos solo el ultimo registro de esa columna). La variable resulid contendrá el numero de los resultados de la búsqueda.
Para asociar el resultado de la consulta a una variable usamos la quinta línea (Fetch) y asignamos el resultado de la consulta a la variable var1. La variable var1 contendrá el valor de la consulta (el ultimo numero llamado). Ahora borramos la variable resultid (línea 7) e nos desconectamos de la base de datos (línea 8).
Ahora que tenemos el resultado de la consulta lo podemos usar como queremos (llamarlo, anunciarlo, etc.)
;Ultima llamada recibida
exten => 76,1,MYSQL(Connect connid localhost usuario contraseña nombrebasededatos)
exten => 76,n,NoOp(connid = ${connid})
exten => 76,n,MYSQL(Query resultid ${connid} SELECT src FROM cdr WHERE dst="${CALLERID(num)}" ORDER BY calldate DESC LIMIT 1)
exten => 76,n,NoOp(resultid = ${resultid})
exten => 76,n,MYSQL(Fetch fetchid ${resultid} var1)
exten => 76,n,NoOp(Variabili = ${fetchid},${var1},)
exten => 76,n,MYSQL(Clear ${resultid})
exten => 76,n,MYSQL(Disconnect ${connid})
exten => 76,n,Playback(last-num-to-call)
exten => 76,n,Saydigits(${var1})
exten => 76,n,Hangup
Este bloque es casi igual al de arriba solo que en esta consulta pedimos el numero de la ultima llamada recibida.
Al final usamos un anuncio de la ultima llamada recibida e lo anunciamos con Saydigits.
Estos son solamente unos ejemplos de como consultar la base de datos con los registros de las llamadas.
Para mayor información sobre como hacer consultas a base de datos en MySQL pueden consultar esta muy buena guía en español
Comentarios recientes
hace 2 días 10 horas
hace 3 días 14 horas
hace 5 días 8 horas
hace 1 semana 3 días
hace 1 semana 3 días
hace 1 semana 5 días
hace 2 semanas 1 día
hace 2 semanas 5 días
hace 2 semanas 6 días
hace 2 semanas 6 días