define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MODS', true);{"id":151,"date":"2012-08-31T00:23:54","date_gmt":"2012-08-30T23:23:54","guid":{"rendered":"http:\/\/www.monovarlinux.org\/?p=151"},"modified":"2014-04-14T15:25:47","modified_gmt":"2014-04-14T14:25:47","slug":"mysql-dialplan-asterisk","status":"publish","type":"post","link":"http:\/\/www.monovarlinux.org\/?p=151","title":{"rendered":"Mysql dialplan Asterisk."},"content":{"rendered":"<p>En algunos escenarios, trabajando con Asterisk, tenemos la necesidad de consultar datos de una base de datos, para por ejemplo, dar la posibilidad a un usuario a traves de una p\u00e1gina din\u00e1mica en PHP activar o desactivar un buz\u00f3n de voz. Esto como he dicho, se puede conseguir realizando consultas a Mysql desde el mismo dialplan de asterisk.<\/p>\n<p><\/p>\n<p>Es bastante sencillo, con lo que pondr\u00e9 varias lineas a modo de ejemplo:<\/p>\n<p>Utilizaremos la funci\u00f3n Noop de asterisk para saber en todo momento como recorre asterisk nuestro peque\u00f1o plan de marcado.<\/p>\n<p>Para conseguir esto en asterisk se utiliza la funci\u00f3n Mysql.<\/p>\n<p><\/p>\n<p>Lo primero que se tiene que hacer es conectar con el servidor (Mysql) y la base de datos con la que queremos trabajar.<\/p>\n<p>Mysql(connect conex localhost usuario password base_de_datos)<\/p>\n<p>&#8211; conex: Esta variable almacenara la sesi\u00f3n de la conexi\u00f3n. (La tendremos que indicar a las futuras consultas de mysql)<br \/>\n&#8211; Localhost: Seria la IP o nombre del servidor donde se aloja la base de datos<br \/>\n&#8211; Usuario: Aqui se indicaria el usuario de la base de datos<br \/>\n&#8211; Password: Password de la base de datos<br \/>\n&#8211; base_de_datos: Aqui el nombre de la base de datos con la que vamos a trabajar.<\/p>\n<p>Ejemplo:<\/p>\n<p>Mysql(connect conex localhost myuser mypassword dbasterisk)<\/p>\n<p>Una vez explicado esto, se debe saber que este es el primer punto a realizar.<\/p>\n<p><\/p>\n<p>El segundo punto a realizar seria la consulta.<br \/>\nLo \u00fanico que cambia en este caso es la palabra connect por query. Indica a la funci\u00f3n mysql que vamos a realizar una consulta.<\/p>\n<p>Mysql(query consulta ${conex} ..CONSULTA MYSQL.. )<\/p>\n<p>&#8211; consulta: Variable que retornar\u00e1 el retorno de la consulta<br \/>\n&#8211; ${conex}: Variable que indicamos anteriormente para realizar la conexion. Pasandole esta variable hacemos referencia a la conexi\u00f3n establecida anteriormente.<br \/>\n&#8211; ..CONSULTA MYSQL.. : Aqui se indicar\u00e1 una consulta Mysql est\u00e1ndar.<\/p>\n<p>Ejemplo:<\/p>\n<p>Mysql(query consulta ${conexion} SELECT dst FROM tabla_1 WHERE id=1 )<\/p>\n<p>Recogeremos los valores del campo dst, cuya tabla es tabla_1 y el valor id sea 1.. <\/p>\n<p><\/p>\n<p>Hemos conectado con mysql en el punto 1, hemos realizado la consulta en el punto 2. Ahora nos falta poder \u00ableer\u00bb el contenido que nos a retornado dicha consulta. <\/p>\n<p>Para esto utilizamos la funci\u00f3n mysql seguida de fetch:<\/p>\n<p><\/p>\n<p>Mysql(fetch asignar ${consulta} var1)<\/p>\n<p>&#8211; asignar: Esta variable retornar\u00e1 si la operaci\u00f3n tub\u00f3 exito o no.<br \/>\n&#8211; ${consulta}: Es la variable que indicamos anteriormente en la consulta. Le estamos diciendo que nos \u00abextraiga\u00bb el resultado de dicha consulta que anteriormente ejecutamos con query.<\/p>\n<p>&#8211; var1: Seria la variable a la que se pasaria el valor ya legible. Ahora podriamos utilizar Noop para leer su resultado en la consola de asterisk o para tratarla a lo largo del dialplan. <\/p>\n<p><\/p>\n<p>En el caso de que query nos devuelva m\u00e1s de un registro y queramos acceder al siguiente, podemos utilizar la nueva funcionalidad que SOLAMENTE ESTA DISPONIBLE PARA ASTERISK 1.8. <\/p>\n<p>Mysql(Nextresult sigregistro ${connid}) <\/p>\n<p>-Nextresult: Se trata de la nueva funcionalidad agregada por asterisk en la versi\u00f3n 1.8. Permite ir avanzando entre todos los registros \u00absoltados\u00bb por mysql. Si la consulta devolvi\u00f3 4 registros diferentes, podremos acceder a esos 4 haciendo un Nextresult &#038; fetch para cada uno de ellos. Con Nextresult pasamos de registro y con fetch lo rescatamos a una variable.<\/p>\n<p>&#8211; sigregistro: Se trata de la variable donde se retornar\u00e1 el puntero al registro. Seria esta variable la que tendriamos que utilizar ahora en fetch. <\/p>\n<p>Ejemplo: <\/p>\n<p>Mysql(fetch asignar ${sigregistro} var1) <\/p>\n<p>Con la linea anterior, el registro pasar\u00e1 a estar disponible desde la variable ${var1} <\/p>\n<p><\/p>\n<p>Una vez hemos terminado con todo lo relaciono con mysql tenemos que \u00ablimpiar\u00bb todo lo relacionado con la consulta y desconectarnos del servidor mysql.<br \/>\nSe consigue con:<\/p>\n<p>Mysql(clear ${consulta})\u00a0\u00a0\u00a0 # Para limpiar<\/p>\n<p>&#8211; ${consulta}: Seria el puntero que indica la consulta anteriormente realizada.<\/p>\n<p>Mysql(disconnect ${conex}) # para desconectar<\/p>\n<p>&#8211; ${conex}: Seria el puntero que indica la conexi\u00f3n de la que queremos desconectarnos. (La anteriormente realizada)<\/p>\n<p>Despues de aprender todo lo comentado, dejo a modo de ayuda todo el dialplan referente a las pruebas realizadas.<\/p>\n<p><\/p>\n<p>exten =&gt; 111,n,Noop(Vamos a conectar con Mysql)<br \/>\nexten =&gt; 111,n,Mysql(connect conex localhost miusuarioasterisk password999 asterisk-tabla)<br \/>\nexten =&gt; 111,n,Noop(Resultado de conexion: = ${conex})<br \/>\nexten =&gt; 111,n,Noop(Consultamos datos de la DB)<br \/>\nexten =&gt; 111,n,Mysql(query consulta ${conex} SELECT dst FROM cdr WHERE dst=123456789)<br \/>\nexten =&gt; 111,n,Noop(Resultado de consulta: ${consulta})<br \/>\nexten =&gt; 111,n,Noop(Asignamos el resultado de la consulta a var1)<br \/>\nexten =&gt; 111,n,Mysql(fetch asignacion ${consulta} var1)<br \/>\nexten =&gt; 111,n,Noop(Valor de variable VAR1 es: ${var1})<br \/>\nexten =&gt; 111,n,Noop(Limpiamos con clear)<br \/>\nexten =&gt; 111,n,Mysql(clear ${consulta})<br \/>\nexten =&gt; 111,n,Mysql(Vamos a desconectarnos del servidor Mysql con disconnect)<br \/>\nexten =&gt; 111,n,Mysql(disconnect ${conex})<br \/>\nexten =&gt; 111,n,Noop(Terminado&#8230;monovarlinux.org \ud83d\ude00 :=). Conocimiento libre! . Gracias linux &amp; asterisk por existir)<br \/>\nexten =&gt; 111,n,Hangup <\/p>\n<p><\/p>\n<p>Como podeis ver, dicho dialplan se ejecutara al marcar 111. Podran ver todos los mensajes Noop, su salida, en la consola de asterisk, entrando a ella con asterisk -vvvvvvvvvr.<\/p>\n<p>&nbsp;<\/p>\n<p><\/p>\n<p>Espero que una vez m\u00e1s sirva de utilidad a alguien.<br \/>\nComo siempre, cada dia m\u00e1s y mejores. Conocimiento libre!<\/p>\n<p>Un saludo.<\/p>\n<div class=\"be-social\" data-url=\"http:\/\/www.monovarlinux.org\/?p=151\" data-base=\"\" data-title=\"Mysql dialplan Asterisk.\" data-track=\"true\" data-via=\"\" data-show=\"{&quot;facebook&quot;:true,&quot;twitter&quot;:true,&quot;google&quot;:true,&quot;reddit&quot;:true,&quot;linkedin&quot;:true,&quot;meneame&quot;:true}\" ><h2 class=\"be-social-title\">Share<\/h2><\/div>","protected":false},"excerpt":{"rendered":"<p>En algunos escenarios, trabajando con Asterisk, tenemos la necesidad de consultar datos de una base de datos, para por ejemplo, dar la posibilidad a un usuario a traves de una p\u00e1gina din\u00e1mica en PHP activar o desactivar un buz\u00f3n de &hellip; <a href=\"http:\/\/www.monovarlinux.org\/?p=151\">Sigue leyendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[9],"tags":[],"_links":{"self":[{"href":"http:\/\/www.monovarlinux.org\/index.php?rest_route=\/wp\/v2\/posts\/151"}],"collection":[{"href":"http:\/\/www.monovarlinux.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.monovarlinux.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.monovarlinux.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.monovarlinux.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=151"}],"version-history":[{"count":9,"href":"http:\/\/www.monovarlinux.org\/index.php?rest_route=\/wp\/v2\/posts\/151\/revisions"}],"predecessor-version":[{"id":172,"href":"http:\/\/www.monovarlinux.org\/index.php?rest_route=\/wp\/v2\/posts\/151\/revisions\/172"}],"wp:attachment":[{"href":"http:\/\/www.monovarlinux.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=151"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.monovarlinux.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=151"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.monovarlinux.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}