MySQL y Asterisk - Ultimo numero llamado y ultima llamada recibida

user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN node_access na ON na.nid = node.nid WHERE (na.grant_view >= 1 AND ((n' at line 8 query: SELECT DISTINCT (((1 * (MATCH(node_revisions.title) AGAINST('MySQL y Asterisk - Ultimo numero llamado y ultima llamada recibida Se hemos seguido esta gu&iacute;a para la instalaci&oacute;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&eacute;s de una aplicaci&oacute;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&oacute;n que est&aacute; haciendo la consulta. Una vez que tengamos estos datos podemos usarlos como queramos. Algunos ejemplos: rellamada del ultimo numero marcado rellamada del ultimo numero llamante anuncio del ultimo numero llamado anuncio de la ultima llamada recibida Vamos a empezar; abrimos el archivo extensions.conf y a&ntilde;adimos unas cuantas l&iacute;neas: nano /etc/asterisk/extensions.conf En nuestro contesto local ponemos ;Ultima llamada hecha exten => 75,1,MYSQL(Connect connid localhost usuario contrase&ntilde;a nombrebasededatos) exten => 75,n,NoOp(connid = $connid) exten => 75,n,MYSQL(Query resultid $connid SELECT dst FROM cdr WHERE src=&quot;$CALLERID(num)&quot; 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&oacute;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&iacute;nea nos conectamos a la base de datos. Los datos que tenemos que indicar son: el host donde se encuentra el servidor MySQL (en mi caso localhost) nombre de usuario que tiene acceso a la base de datos la contrase&ntilde;a del usuario el nombre de la base de datos donde tenemos los registros de las llamadas Si la conexi&oacute;n tiene &eacute;xito a la variable connid ser&aacute; asociado el valor 1 Hacemos este tipo de control en la segunda l&iacute;nea. Si la conexi&oacute;n no funciona asterisk colgar&aacute; la llamada En la Tercera l&iacute;nea interrogamos la base de datos (Query) usando la conexi&oacute;n creada con la l&iacute;nea 1. Queremos seleccionar la columna dst (destinaci&oacute;n) de la tabla cdr donde el llamante es la extensi&oacute;n que est&aacute; 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&aacute; el numero de los resultados de la b&uacute;squeda. Para asociar el resultado de la consulta a una variable usamos la quinta l&iacute;nea (Fetch) y asignamos el resultado de la consulta a la variable var1. La variable var1 contendr&aacute; el valor de la consulta (el ultimo numero llamado). Ahora borramos la variable resultid (l&iacute;nea 7) e nos desconectamos de la base de datos (l&iacute;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&ntilde;a nombrebasededatos) exten => 76,n,NoOp(connid = $connid) exten => 76,n,MYSQL(Query resultid $connid SELECT src FROM cdr WHERE dst=&quot;$CALLERID(num)&quot; 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&oacute;n sobre como hacer consultas a base de datos en MySQL pueden consultar esta muy buena gu&iacute;a en espa&ntilde;ol &nbsp; Etiquetas de Technorati: Asterisk,MySQL,Query'))) + (1 * (MATCH(node_revisions.body) AGAINST('MySQL y Asterisk - Ultimo numero llamado y ultima llamada recibida Se hemos seguido esta gu&iacute;a para la instalaci&oacute;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&eacute;s de una aplicaci&oacute;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&oacute;n que est&aacute; haciendo la consulta. Una vez que tengamos estos datos podemos usarlos como queramos. Algunos ejemplos: rellamada del ultimo numero marcado rellamada del ultimo numero llamante anuncio del ultimo numero llamado anuncio de la ultima llamada recibida Vamos a empezar; abrimos el archivo extensions.conf y a&ntilde;adimos unas cuantas l&iacute;neas: nano /etc/asterisk/extensions.conf En nuestro contesto local ponemos ;Ultima llamada hecha exten => 75,1,MYSQL(Connect connid localhost usuario contrase&ntilde;a nombrebasededatos) exten => 75,n,NoOp(connid = $connid) exten => 75,n,MYSQL(Query resultid $connid SELECT dst FROM cdr WHERE src=&quot;$CALLERID(num)&quot; 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&oacute;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&iacute;nea nos conectamos a la base de datos. Los datos que tenemos que indicar son: el host donde se encuentra el servidor MySQL (en mi caso localhost) nombre de usuario que tiene acceso a la base de datos la contrase&ntilde;a del usuario el nombre de la base de datos donde tenemos los registros de las llamadas Si la conexi&oacute;n tiene &eacute;xito a la variable connid ser&aacute; asociado el valor 1 Hacemos este tipo de control en la segunda l&iacute;nea. Si la conexi&oacute;n no funciona asterisk colgar&aacute; la llamada En la Tercera l&iacute;nea interrogamos la base de datos (Query) usando la conexi&oacute;n creada con la l&iacute;nea 1. Queremos seleccionar la columna dst (destinaci&oacute;n) de la tabla cdr donde el llamante es la extensi&oacute;n que est&aacute; 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&aacute; el numero de los resultados de la b&uacute;squeda. Para asociar el resultado de la consulta a una variable usamos la quinta l&iacute;nea (Fetch) y asignamos el resultado de la consulta a la variable var1. La variable var1 contendr&aacute; el valor de la consulta (el ultimo numero llamado). Ahora borramos la variable resultid (l&iacute;nea 7) e nos desconectamos de la base de datos (l&iacute;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&ntilde;a nombrebasededatos) exten => 76,n,NoOp(connid = $connid) exten => 76,n,MYSQL(Query resultid $connid SELECT src FROM cdr WHERE dst=&quot;$CALLERID(num)&quot; 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&oacute;n sobre como hacer consultas a base de datos en MySQL pueden consultar esta muy buena gu&iacute;a en espa&ntilde;ol &nbsp; Etiquetas de Technorati: Asterisk,MySQL,Query')))) / 2) AS score, node.title AS node_title, node.nid AS nid, node.language AS node_language FROM node node LEFT JOIN node_revisions node_revisions ON node.vid = node_revisions.vid WHERE (node.status = 1) AND (node_revisions.nid <> 144) INNER JOIN node_access na ON na.nid = node.nid WHERE (na.grant_view >= 1 AND ((na.gid = 0 AND na.realm = 'all') OR (na.gid = 0 AND na.realm = 'content_access_author') OR (na.gid = 1 AND na.realm = 'content_access_rid'))) GROUP BY score, node_title, nid, node_language HAVING score > (1) ORDER BY score DESC LIMIT 0, 8 in /home/voztovoice/public_html/modules/views/plugins/views_plugin_query_default.inc on line 1150.
Versión para impresiónSend by email

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:

  • rellamada del ultimo numero marcado
  • rellamada del ultimo numero llamante
  • anuncio del ultimo numero llamado
  • anuncio de la ultima llamada recibida

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:

  • el host donde se encuentra el servidor MySQL (en mi caso localhost)
  • nombre de usuario que tiene acceso a la base de datos
  • la contraseña del usuario
  • el nombre de la base de datos donde tenemos los registros de las llamadas

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

 

Etiquetas de Technorati: ,,

Comentarios

Aporte

Gracias Andrea por publicar códigos de tan gran valor.

Pero siempre es necesario aportar nuestro granito de arena.

Con este contexto se puede calcular el total de minutos consumidos en el mes de Junio que comiencen por 09, en Colombia son llamadas nacionales por Telecom.

Al realizar la consulta sum(round(duration/60)), primero convertimos cada campo en minutos dividiéndolo en 60, luego lo redondeamos para hacer la aproximación y por último sumamos todos lo campos. 

De esta forma al marcar 987 sabemos cuanto se ha hablado en el mes de Junio.

exten => 987,1,MYSQL(Connect connid localhost root contrasena asteriskcdrdb)

exten => 987,n,NoOp(connid = ${connid})

exten => 987,n,MYSQL(Query resultid ${connid} select sum(round(duration/60)) from cdr where dst like '09%' and calldate like '2012-06%')

exten => 987,n,NoOp(resultid = ${resultid})

exten => 987,n,MYSQL(Fetch fetchid ${resultid} var1)

exten => 987,n,NoOp(Variabili = ${fetchid},${var1},)

exten => 987,n,MYSQL(Clear ${resultid})

exten => 987,n,MYSQL(Disconnect ${connid})

exten => 987,n,Playback(custom/total_Junio)

exten => 987,n,Saydigits(${var1})

exten => 987,n,Hangup

Agradezco cualquier corrección y/o comentario...

Andres Ramirez
Administrador VoIP
Bogotá - Colombia

Re: aporte

Estimado Andres,

muchas gracias por tu aporte.

Creo que a muchos le va a ser util.

Hasta pronto.

Distribuir contenido Distribuir contenido