AstDB. Buscar Clave dentro de una Familia según un Valor.

138 views
Skip to first unread message

Ramses II

unread,
Apr 15, 2009, 1:10:04 PM4/15/09
to aster...@googlegroups.com
Hola a todos,

Imaginemos que tengo en AstDB lo siguiente:

/Cola-1/5000: 6666
/Cola-1/5001: 7777
/Cola-1/5002: 8888
/Cola-2/5000: 6666
/Cola-2/5002: 8888

Si hago un "Set(foo=${DB(Cola-1/5001)})" me devolverá el Valor de esa Clave.
Pero, ¿hay alguna forma de decirle que busque el Valor "7777" en la Familia
"Cola-1" y me devuelva la Clave "5001".

Me refiero a algo similar a esto:

asterisk -rx "database show Cola-1" | grep "7777" | cut -c9-12

Que como resultado me daría "5001".

Pero en Asterisk...


Saludos y gracias,

Ramses

Elio Rojano

unread,
Apr 15, 2009, 1:14:24 PM4/15/09
to aster...@googlegroups.com
ummm tú no entendistes el tema de las tuplas clave -> valor ¿verdad? xD

No, ahora en serio... se puede hacer, aunque creo que es tan complicado que mejor haces un :

exten=>_XXXX,1,System(asterisk -rx "database show Cola-1" | grep "7777" | cut -c9-12 >/tmp/archivoRANDOM)
exten=>_XXXX,n,ReadFile(variable=/tmp/archivoRANDOM)

O:)
--
http://www.sinologic.net/

Saúl Ibarra

unread,
Apr 15, 2009, 1:16:59 PM4/15/09
to aster...@googlegroups.com
AFAIK eso no se puede...

El 15/04/09, Ramses II <ramses....@gmail.com> escribió:
--
Enviado desde mi dispositivo móvil

Saúl -- "Nunca subestimes el ancho de banda de un camión lleno de disketes."
----------------------------------------------------------------
http://www.saghul.net/

Ramses II

unread,
Apr 15, 2009, 2:00:35 PM4/15/09
to aster...@googlegroups.com

Elio, eres la ostia, a la primera ;-)

 

Dónde pones “archivoRANDOM” te refieres a que use un nombre aleatorio/cualquiera, ¿no?.

 

Creo que es difícil, ¿pero se podría dar el caso de que entraran 2 llamadas al Dialplan y se machacara el fichero con los datos de la segunda llamada antes de que sea leído?.

 

 

P.D.: Por Dios, tío, explícame lo de “el tema de las tuplas clave -> valor” que me acabas de dejar tostao, vamos, que me ha dado un “kernel panic” de esos… :-)

 

Saludos y gracias,

 

Ramses

 


José Ferney Franco

unread,
Apr 15, 2009, 8:11:46 PM4/15/09
to aster...@googlegroups.com
Dificil no, usa el UNIQUEID (Es unico :)). Pero la verdad la vuelta que tuvo que dar Elio fue muy grande. Es necesario que hagas eso?? Mira que lo que dice Elio del tema de las tuplas clave -> valor es en serio.

2009/4/15 Ramses II <ramses....@gmail.com>

Elio Rojano

unread,
Apr 16, 2009, 1:57:46 AM4/16/09
to aster...@googlegroups.com, aster...@googlegroups.com
Claro, tambien puedes utilizar el callerid del que llama, así te aseguras que solo hay 1 archivo unico por llamante.


Enviado desde mi móvil

Germán Aracil Boned

unread,
Apr 16, 2009, 2:20:02 AM4/16/09
to aster...@googlegroups.com
mejor el ${UNIQUEID} que será unico, y para eso existe :)

El uniqueid viene directo de la estructura ast_channel y también es el
valor que se guarda en el registro cdr.

Creo que es lo más apropiado. Lo demás.. creo que será ignorar esta que
es la solución si es que realmente debes pasar por un fichero.

Luego en la entrada del dlial plan "h", borras el fichero y listo.

Elio Rojano escribió:
> Claro, tambien puedes utilizar el callerid del que llama, así te
> aseguras que solo hay 1 archivo unico por llamante.
>
>
> Enviado desde mi móvil
>
> El 16/04/2009, a las 2:11, José Ferney Franco <fer...@gmail.com
> <mailto:fer...@gmail.com>> escribió:
>
>> Dificil no, usa el UNIQUEID (Es unico :)). Pero la verdad la vuelta
>> que tuvo que dar Elio fue muy grande. Es necesario que hagas eso??
>> Mira que lo que dice Elio del tema de las tuplas clave -> valor es en
>> serio.
>>
>> 2009/4/15 Ramses II <
>> <mailto:ramses....@gmail.com>ramses....@gmail.com
>> <mailto:ramses....@gmail.com>>
>>
>> Elio, eres la ostia, a la primera ;-)
>>
>>
>>
>> Dónde pones “archivoRANDOM” te refieres a que use un nombre
>> aleatorio/cualquiera, ¿no?.
>>
>>
>>
>> Creo que es difícil, ¿pero se podría dar el caso de que entraran 2
>> llamadas al Dialplan y se machacara el fichero con los datos de la
>> segunda llamada antes de que sea leído?.
>>
>>
>>
>>
>>
>> P.D.: Por Dios, tío, explícame lo de “el tema de las tuplas clave
>> -> valor” que me acabas de dejar tostao, vamos, que me ha dado un
>> “kernel panic” de esos… :-)
>>
>>
>>
>> Saludos y gracias,
>>
>>
>>
>> Ramses
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>> *De:*
>> <mailto:aster...@googlegroups.com>aster...@googlegroups.com
>> <mailto:aster...@googlegroups.com> [mailto:
>> <mailto:aster...@googlegroups.com>aster...@googlegroups.com
>> <mailto:aster...@googlegroups.com>] *En nombre de *Elio Rojano
>> *Enviado el:* miércoles, 15 de abril de 2009 19:14
>> *Para:*
>> <mailto:aster...@googlegroups.com>aster...@googlegroups.com
>> <mailto:aster...@googlegroups.com>
>> *Asunto:* [Asterisk-ES] Re: AstDB. Buscar Clave dentro de una
>> Familia según un Valor.
>>
>>
>>
>> ummm tú no entendistes el tema de las tuplas clave -> valor
>> ¿verdad? xD
>>
>> No, ahora en serio... se puede hacer, aunque creo que es tan
>> complicado que mejor haces un :
>>
>> exten=>_XXXX,1,System(asterisk -rx "database show Cola-1" | grep
>> "7777" | cut -c9-12 >/tmp/archivoRANDOM)
>> exten=>_XXXX,n,ReadFile(variable=/tmp/archivoRANDOM)
>>
>> O:)
>>
>>
>> El 15 de abril de 2009 19:10, Ramses II <
>> <mailto:ramses....@gmail.com>ramses....@gmail.com
>> <mailto:ramses....@gmail.com>> escribió:
>>
>>
>> Hola a todos,
>>
>> Imaginemos que tengo en AstDB lo siguiente:
>>
>> /Cola-1/5000: 6666
>> /Cola-1/5001: 7777
>> /Cola-1/5002: 8888
>> /Cola-2/5000: 6666
>> /Cola-2/5002: 8888
>>
>> Si hago un "Set(foo=${DB(Cola-1/5001)})" me devolverá el Valor de
>> esa Clave.
>> Pero, ¿hay alguna forma de decirle que busque el Valor "7777" en
>> la Familia
>> "Cola-1" y me devuelva la Clave "5001".
>>
>> Me refiero a algo similar a esto:
>>
>> asterisk -rx "database show Cola-1" | grep "7777" | cut -c9-12
>>
>> Que como resultado me daría "5001".
>>
>> Pero en Asterisk...
>>
>>
>> Saludos y gracias,
>>
>> Ramses
>>
>>
>>
>>
>>
>> --
>> <http://www.sinologic.net/>http://www.sinologic.net/
>>
>>
>>
>>
>>
>>
>
> >

--


-
-------------------------------------
Germán Aracil Boned
Director de Sistemas
Zoon Suite S.L.

www.zoonsuite.com
963146030 - General
963146031 - Asistencia de incidencias
963146032 - FAX
-------------------------------------
-

Saúl Ibarra

unread,
Apr 16, 2009, 2:23:09 AM4/16/09
to aster...@googlegroups.com
Aupa ramses,

por favor, no hagas eso, que es una guarrada! :) en su lugar usa una
macro pequeña para leer/escribir en la db y le llamas con
MacroExclusive, y asi te aseguras que solo 1 channel pasa por ese
punto cada vez, ya que la ejecucion se proteje con un lock.

El 15/04/09, Ramses II <ramses....@gmail.com> escribió:
> Elio, eres la ostia, a la primera ;-)
>
>
>
> Dónde pones “archivoRANDOM” te refieres a que use un nombre
> aleatorio/cualquiera, ¿no?.
>
>
>
> Creo que es difícil, ¿pero se podría dar el caso de que entraran 2 llamadas
> al Dialplan y se machacara el fichero con los datos de la segunda llamada
> antes de que sea leído?.
>
>
>
>
>
> P.D.: Por Dios, tío, explícame lo de “el tema de las tuplas clave -> valor”
> que me acabas de dejar tostao, vamos, que me ha dado un “kernel panic” de
> esos… :-)
>
>
>
> Saludos y gracias,
>
>
>
> Ramses
>
>
>
> _____
>

Ramses II

unread,
Apr 16, 2009, 2:35:00 AM4/16/09
to aster...@googlegroups.com, ja...@multico.es
Buenos días a todos,

Hombre, yo no necesito el fichero para nada, si encontrase la forma de que
el resultado del "System(asterisk -rx "database show Cola-1" | grep "7777" |
cut -c9-12" me lo entregue en una variable, omitiría la creación del
fichero.

Tiene que haber forma, ¿no?

El fichero solo lo necesito para ese paso, no lo voy a usar más, por eso me
da igual que se machaque con otro valor a continuación, lo que me preocupa
es si se puede dar el caso de que se machaque antes de que lo haya leído en
la línea inmediatamente posterior a la creación del fichero, mucha
casualidad, que en la misma "nanonanésima" de segundo dos llamadas pasen por
esa misma línea del Dialplan, pero...


Saludos y gracias,

Ramses

-----Mensaje original-----
nombre de Saúl Ibarra
Enviado el: jueves, 16 de abril de 2009 8:23

Elio Rojano

unread,
Apr 16, 2009, 2:46:38 AM4/16/09
to aster...@googlegroups.com, <asterisk-es@googlegroups.com>, <jagm@multico.es>
Había un comando, creo que TryExec o algo así que devolvía la salida
de una llamada a una variable...

No recuerdo bien cual era, pero se qur yo lo he hecho,
Así que si no lo encuentras, lo busco cuando vuelva de viaje. :)

Enviado desde mi móvil

El 16/04/2009, a las 8:35, "Ramses II" <ramses....@gmail.com>
escribió:

>
> Buenos días a todos,
>
> Hombre, yo no necesito el fichero para nada, si encontrase la forma
> de que
> el resultado del "System(asterisk -rx "database show Cola-1" | grep
> "7777" |
> cut -c9-12" me lo entregue en una variable, omitiría la creación del
> fichero.
>
> Tiene que haber forma, ¿no?
>
> El fichero solo lo necesito para ese paso, no lo voy a usar más, por
> eso me
> da igual que se machaque con otro valor a continuación, lo que me pr
> eocupa
> es si se puede dar el caso de que se machaque antes de que lo haya l
> eído en
> la línea inmediatamente posterior a la creación del fichero, mucha
> casualidad, que en la misma "nanonanésima" de segundo dos llamadas p
> asen por
> esa misma línea del Dialplan, pero...
>
>
> Saludos y gracias,
>
> Ramses
>
> -----Mensaje original-----
> De: aster...@googlegroups.com [mailto:asterisk-
> e...@googlegroups.com] En

Germán Aracil Boned

unread,
Apr 16, 2009, 2:54:01 AM4/16/09
to aster...@googlegroups.com
Te paso un código que ejecuta un parámetro y te devuelve en una variable
el resultado:

puedes descargarlo desde:
http://www.zoonsuite.com/app_zscmd.c

Un ejemplo es:

exten => _X.,1,zscmd(ZSCMD|'/guion.sh parametro1 parametro2')
exten => 938023223,2,GotoIf($[${ZSCMD}=-1]?,6)

por supuesto, puedes pasarle parametros como ves..

espero que te sea de utilidad.

para añadirlo a tu asterisk, (va con la 1.4 y no sé si cambie para la
1.6 algo) metelo en apps/, luego haces un configure y un make
menuconfig, entonces te saldrá como opción y ya lo tienes. solo debes
cargar el módulo, si por casualidad en modules.conf tienes el auto=off

ya me cuentas !

Ramses II escribió:

--


Germán Aracil Boned

unread,
Apr 16, 2009, 3:02:55 AM4/16/09
to aster...@googlegroups.com
Perdona ejecuta un guión, script.. etc. no un parámetro jajajaja ;)

La variable que uses, puede ser del nombre que quieras, no tiene porque
ser ZSCMD
saludos !

Germán Aracil Boned escribió:

Roger Casaponsa

unread,
Apr 16, 2009, 3:42:17 AM4/16/09
to aster...@googlegroups.com
si, es una guarrada. El dia que tengas 10 colas con 10 usuarios en cada uno lo
vas a sufrir un poquito el dia que tengas 100 con 100 lo vas a sufrir mucho
mas... no puedes poner una entrada que te de el resultado al reves?? o sea
tener una db que sea:

/Cola-1/6666: 5000
/Cola-1/7777: 5001
/Cola-1/8888: 5002
/Cola-2/6666: 5000
/Cola-2/8888: 5002

en cuestión de tiempos y de procesador la diferéncia es bastante importante.

Roger
--
Roger Casaponsa - Adam Telefonía IP
email: roger.c...@adamvozip.es <mailto:roger.c...@adamvozip.es>
www: http://www.adamvozip.es <http://www.adamvozip.es/>
tlf: 902546800

Ramses II

unread,
Apr 16, 2009, 8:47:22 AM4/16/09
to aster...@googlegroups.com

Lo de difícil lo decía por que se diera la coincidencia de 2 llamadas en el mismísimo instante, no por poner un nombre único al fichero :-)

 

 

Saludos y gracias,

 

Ramses

 


Ramses II

unread,
Apr 16, 2009, 8:56:58 AM4/16/09
to aster...@googlegroups.com
Roger, es lo primero que se me pasó por la cabeza, el que se creara en ambos
sentidos, pero se me pasó a continuación la otra posibilidad, y mira la se
soluciones/alternativas que han salido...

Voy a probarlas todas y os cuento...


Saludos y gracias,

Ramses

-----Mensaje original-----
nombre de Roger Casaponsa
Enviado el: jueves, 16 de abril de 2009 9:42

José Ferney Franco

unread,
Apr 16, 2009, 9:30:57 AM4/16/09
to aster...@googlegroups.com
Ya te iba a decir yo que lo hicieras en dos sentidos. Creo que lo del system es matar una mosca con un cañón
Saludos

2009/4/16 Ramses II <ramses....@gmail.com>

Roger Casaponsa

unread,
Apr 16, 2009, 10:28:36 AM4/16/09
to aster...@googlegroups.com
en este caso yo valoraría lo que mas tienes, o mas te sobra o lo que es mas barato:

- cpu
- espacio en disco

creo que gana el espacio en disco.

Si decides hacerlo al reves tambien puedes buscar programas que accedan a la bd
que no sean el asterisk que seguro que hay y quizás te den un mejor rendimiento.

Roger

On Thu, Apr 16, 2009 at 08:30:57AM -0500, José Ferney Franco wrote:
> Ya te iba a decir yo que lo hicieras en dos sentidos. Creo que lo del system es
> matar una mosca con un ca n
> Saludos
>
> 2009/4/16 Ramses II <ramses....@gmail.com>
>
>
> Roger, es lo primero que se me pas por la cabeza, el que se creara en
> ambos
> sentidos, pero se me pas a continuaci n la otra posibilidad, y mira la se
> soluciones/alternativas que han salido...
>
> Voy a probarlas todas y os cuento...
>
>
> Saludos y gracias,
>
> Ramses
>
> -----Mensaje original-----
> De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
> nombre de Roger Casaponsa
> Enviado el: jueves, 16 de abril de 2009 9:42
> Para: aster...@googlegroups.com
> Asunto: [Asterisk-ES] Re: AstDB. Buscar Clave dentro de una Familia seg n
> un
> Valor.
>
>
> si, es una guarrada. El dia que tengas 10 colas con 10 usuarios en cada uno
> lo
> vas a sufrir un poquito el dia que tengas 100 con 100 lo vas a sufrir mucho
> mas... no puedes poner una entrada que te de el resultado al reves?? o sea
> tener una db que sea:
>
> /Cola-1/6666: 5000
> /Cola-1/7777: 5001
> /Cola-1/8888: 5002
> /Cola-2/6666: 5000
> /Cola-2/8888: 5002
>
> en cuesti n de tiempos y de procesador la difer ncia es bastante
> importante.
>
> Roger
>
>
> On Thu, Apr 16, 2009 at 08:23:09AM +0200, Sa l Ibarra wrote:
> >
> > Aupa ramses,
> >
> > por favor, no hagas eso, que es una guarrada! :) en su lugar usa una
> > macro peque a para leer/escribir en la db y le llamas con
> > MacroExclusive, y asi te aseguras que solo 1 channel pasa por ese
> > punto cada vez, ya que la ejecucion se proteje con un lock.
> >
> > El 15/04/09, Ramses II <ramses....@gmail.com> escribi :
> > > Elio, eres la ostia, a la primera ;-)
> > >
> > >
> > >
> > > D nde pones archivoRANDOM te refieres a que use un nombre
> > > aleatorio/cualquiera, no?.
> > >
> > >
> > >
> > > Creo que es dif cil, pero se podr a dar el caso de que entraran 2
> llamadas
> > > al Dialplan y se machacara el fichero con los datos de la segunda
> llamada
> > > antes de que sea le do?.
> > >
> > >
> > >
> > >
> > >
> > > P.D.: Por Dios, t o, expl came lo de el tema de las tuplas clave ->
> valor
> > > que me acabas de dejar tostao, vamos, que me ha dado un kernel panic
> de
> > > esos :-)
> > >
> > >
> > >
> > > Saludos y gracias,
> > >
> > >
> > >
> > > Ramses
> > >
> > >
> > >
> > > _____
> > >
> > > De: aster...@googlegroups.com [mailto:aster...@googlegroups.com]
> En
> > > nombre de Elio Rojano
> > > Enviado el: mi rcoles, 15 de abril de 2009 19:14
> > > Para: aster...@googlegroups.com
> > > Asunto: [Asterisk-ES] Re: AstDB. Buscar Clave dentro de una Familia
> seg n un
> > > Valor.
> > >
> > >
> > >
> > > ummm t no entendistes el tema de las tuplas clave -> valor verdad? xD
> > >
> > > No, ahora en serio... se puede hacer, aunque creo que es tan complicado
> que
> > > mejor haces un :
> > >
> > > exten=>_XXXX,1,System(asterisk -rx "database show Cola-1" | grep "7777"
> |
> > > cut -c9-12 >/tmp/archivoRANDOM)
> > > exten=>_XXXX,n,ReadFile(variable=/tmp/archivoRANDOM)
> > >
> > > O:)
> > >
> > >
> > >
> > >
> > > El 15 de abril de 2009 19:10, Ramses II <ramses....@gmail.com>
> escribi :
> > >
> > >
> > > Hola a todos,
> > >
> > > Imaginemos que tengo en AstDB lo siguiente:
> > >
> > > /Cola-1/5000: 6666
> > > /Cola-1/5001: 7777
> > > /Cola-1/5002: 8888
> > > /Cola-2/5000: 6666
> > > /Cola-2/5002: 8888
> > >
> > > Si hago un "Set(foo=${DB(Cola-1/5001)})" me devolver el Valor de esa
> Clave.
> > > Pero, hay alguna forma de decirle que busque el Valor "7777" en la
> Familia
> > > "Cola-1" y me devuelva la Clave "5001".
> > >
> > > Me refiero a algo similar a esto:
> > >
> > > asterisk -rx "database show Cola-1" | grep "7777" | cut -c9-12
> > >
> > > Que como resultado me dar a "5001".
> > >
> > > Pero en Asterisk...
> > >
> > >
> > > Saludos y gracias,
> > >
> > > Ramses
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > --
> > > http://www.sinologic.net/
> > >
> > >
> > >
> > > >
> > >
> >
> > --
> > Enviado desde mi dispositivo m vil
> >
> > Sa l -- "Nunca subestimes el ancho de banda de un cami n lleno de
> disketes."
> > ----------------------------------------------------------------
> > http://www.saghul.net/
> >
> >
> --
> Roger Casaponsa - Adam Telefon a IP

Saúl Ibarra

unread,
Apr 16, 2009, 10:29:47 AM4/16/09
to aster...@googlegroups.com
Pero puedes hacer que no suceda, has leído mi mail de antes?

--
Saúl -- "Nunca subestimes el ancho de banda de un camión lleno de disketes."
----------------------------------------------------------------
http://www.saghul.net/

Ramses II

unread,
Apr 17, 2009, 2:50:23 PM4/17/09
to aster...@googlegroups.com
Germán, buenas tardes,

Creo que tengo algún problema con el módulo, no me lo carga.

He hecho lo siguiente:

- Me he copiado el texto de la página esa que me dabas (creo que es la
tuya).
- He creado en "usr/src/Asterix-1.4.21.1/apps" el fichero "app_zscmd.c".
- He hecho un ".configure".
- He hecho un "make menuselect".
- He hecho un "make".
- He copiado el "app_zscmd.so" en "usr/lib/Asterix/modules".
- Le he dado los mismos permisos que tienen los otros módulos (755).
- En el CLI le hago un "module load app_zscmd.so" y no me da ningún error,
pero no me carga, porque hago un "module show like z" y no me aparece como
cargado.
- También he hecho un "core show applications like zs" y nada.
- He revisado que la carga de módulos esté en auto, he reiniciado y nada, no
se carga.

¿Podría faltarme algo?


Saludos y gracias,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Germán Aracil Boned
Enviado el: jueves, 16 de abril de 2009 8:54

Ramses II

unread,
Apr 17, 2009, 2:54:22 PM4/17/09
to aster...@googlegroups.com
Germán, buenas de nuevo,

Se me ha pasado ponerte el "warning" que da en el "full" al intentar cargar
el módulo:

--------------------------------------------------------------------------
[Apr 17 20:35:00] WARNING[14531] loader.c: Module 'app_zscmd.so' did not
register itself during load
[Apr 17 20:35:00] WARNING[14531] loader.c: Module 'app_zscmd.so' could not
be loaded.
[Apr 17 20:35:02] WARNING[14531] loader.c: Module 'app_zscmd.so' did not
register itself during load
[Apr 17 20:35:02] WARNING[14531] loader.c: Module 'app_zscmd.so' could not
be loaded.
[Apr 17 20:37:50] WARNING[14531] loader.c: Module 'app_zscmd.so' did not
register itself during load
[Apr 17 20:37:50] WARNING[14531] loader.c: Module 'app_zscmd.so' could not
be loaded.
[Apr 17 20:38:47] WARNING[14531] loader.c: Module 'app_zscmd.so' did not
register itself during load
[Apr 17 20:38:47] WARNING[14531] loader.c: Module 'app_zscmd.so' could not
be loaded.
--------------------------------------------------------------------------

Saludos,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Germán Aracil Boned
Enviado el: jueves, 16 de abril de 2009 8:54

Germán Aracil Boned

unread,
Apr 17, 2009, 3:00:51 PM4/17/09
to aster...@googlegroups.com
Core show applications:

zscmd: Execute a shell command and save the result as a variable.

Mmmm... Te tengo que confesar, que cuando añado un módulo, siempre hago
un make install. Y nunca me ha dado ningún problema hacerlo. Es más, si
luego del install sale algún warning sobre algún módulo ya existente, lo
borro y repito el install. Así sé que todos los módulos incluido el
ejecutable asterisk, se corresponden con una misma compilación.

De todas formas, es muy raro que te lo cargue sin chillar y luego no
salga. Si haces un show modules, debería salirte app_zscmd.so te sale ?

Y si llamas a zscmd en el dialplan te da error ? O lo reconoce ?

Yo compilaría, e instalaria todo. Haz eso y dime que tal a ver así..


Ramses II escribió:

Germán Aracil Boned

unread,
Apr 17, 2009, 3:36:55 PM4/17/09
to aster...@googlegroups.com
No se hable más .. haz un make install, incluso make clean y make, make
install, asegurandote de que tras la instalación no te chilla ningún
modulo. si lo hace, lo borras en /usr/lib/asterisk/modules/modulo.so y
vuelves a make install.

Verás como así te funciona.

Ramses II escribió:

Ramses II

unread,
Apr 17, 2009, 3:44:43 PM4/17/09
to aster...@googlegroups.com
Negativo, como te comentaba, no me sale el módulo.

El "app_zscmd.so" que me genera es de 8.4K, ¿tienen lo mismo los tuyos?.

Por cierto, ¿me puedes mandar uno compilado para una 1.4 y pruebo a
cargarlo?. Y si de camino me puedes mandar el "app_zscmd.c" por si he tenido
algún error al copiarlo...


Saludos y gracias,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Germán Aracil Boned
Enviado el: viernes, 17 de abril de 2009 21:01

Germán Aracil Boned

unread,
Apr 17, 2009, 3:57:23 PM4/17/09
to aster...@googlegroups.com
hecho

Ramses II escribió:

Ramses II

unread,
Apr 18, 2009, 12:40:08 PM4/18/09
to aster...@googlegroups.com
Germán, muchas gracias,

Curioso, pero cierto.

He intentado cargar el "app_zscmd.so" a pelo y nada, lo mismo.

He compilado el "app_zscmd.c" y he llegado hasta el "make install", y me lo
ha cargado bien.

He cogido ese "app_zscmd.so" que he compilado y me lo he llevado a otro
Asterisk y, curiosamente, me ha cargado bien.

Ahora estoy liado a ver cómo cargo la variable con el resultado del comando.

En principio estoy haciendo lo siguiente, no sé si lo estaré haciendo mal
pero, a la primera, no ha funcionado:

exten => _88.,n,zscmd(PRUEBAS|'asterisk -rx "database show QueueM" | grep
${CALLERID(NUM)} | cut -c9-11')

Lo que estoy intentando es pasar a la variable PRUEBAS lo que saldría al
ejecutar el comando:

asterisk -rx "database show QueueM" | grep ${CALLERID(NUM)} | cut -c9-11


Saludos y gracias,

Ramses


-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Germán Aracil Boned
Enviado el: viernes, 17 de abril de 2009 21:57

Germán Aracil Boned

unread,
Apr 18, 2009, 2:20:14 PM4/18/09
to aster...@googlegroups.com
Tal vez son las rutas ? .. no tengo claro así a priori. Pero pon la ruta
completa del ejecutable asterisk, a ver que pasa..

Luego pon un NoOP ${PRUEBAS} para ver en consola que pasa y lo pegas
vale ? Así será más facil poder tener opción a ver que ocurre..


Podrías

Ramses II escribió:

Germán Aracil Boned

unread,
Apr 18, 2009, 2:22:18 PM4/18/09
to aster...@googlegroups.com
> Ramses II escribió:
>> Germán, muchas gracias,
>>
>> Curioso, pero cierto.
>>
>> He intentado cargar el "app_zscmd.so" a pelo y nada, lo mismo.
>>
>> He compilado el "app_zscmd.c" y he llegado hasta el "make install", y me lo
>> ha cargado bien.
>>
>> He cogido ese "app_zscmd.so" que he compilado y me lo he llevado a otro
>> Asterisk y, curiosamente, me ha cargado bien.

Será por una disparidad entre versiones, del propio compilador o alguna
librería del sistema..

Ramses II

unread,
Apr 18, 2009, 2:46:24 PM4/18/09
to aster...@googlegroups.com
Sí, lo del NoOP lo tengo puesto y da la variable en blanco.

Voy a probar lo de la ruta con otros comanditos más cortitos y fáciles para
probar... Ya te cuento.


Saludos,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Germán Aracil Boned
Enviado el: sábado, 18 de abril de 2009 20:20
Para: aster...@googlegroups.com

Ramses II

unread,
Apr 20, 2009, 8:56:52 AM4/20/09
to aster...@googlegroups.com
Germán, buenas tardes,

Suponiendo que exista el fichero "pruebas.txt":

# ls /pruebas.txt
/pruebas.txt
#

Si ponemos un:

exten => _88.,n,zscmd(VARIABLE|'ls /pruebas.txt')
exten => _88.,n,NoOP(Variable: ${VARIABLE})

Entonces "VARIABLE" debería de valer "/pruebas.txt", ¿no?.

Pero lo que nos aparece es vacío:

-- Executing [88965@from-internal:3] zscmd("SIP/8001-0a0c42c0",
"VARIABLE|ls /pruebas.txt") in new stack
-- Executing [88965@from-internal:4] NoOp("SIP/8001-0a0c42c0",
"Variable: ") in new stack

Vamos, vacía...

¿Me estoy confundiendo con lo que debe o debería de hacer el "zscmd"?


Saludos y gracias,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Germán Aracil Boned
Enviado el: sábado, 18 de abril de 2009 20:20
Para: aster...@googlegroups.com

Germán Aracil Boned

unread,
Apr 20, 2009, 9:22:11 AM4/20/09
to aster...@googlegroups.com
Si que funciona:

-- Executing zscmd("SIP/5060-0831c080",
"ZSCMD|/var/lib/asterisk/agi-bin/chksiptrunk.sh 192.168.128.28")
[Apr 20 13:19:49] NOTICE[29360]: app_zscmd.c:112 zscmd_exec: result: 72

Prueba no ponerlo entre comillas. A y por cierto, pon en los dos sitios
Variable en mayúsculas.

Ramses II

unread,
Apr 20, 2009, 10:57:36 AM4/20/09
to aster...@googlegroups.com
Je, je, si yo no niego que a ti te funcione, al que no le funciona es a mi.

Si tú pones (sin las comillas como me comentabas):

exten => _88.,n,zscmd(VARIABLE|ls /pruebas.txt)
exten => _88.,n,NoOP(Variable: ${VARIABLE})

¿A ti te devuelve que "VARIABLE = /pruebas.txt"?. Claro, existiendo el
fichero... ;-)

A mi me sigue dando que VARIABLE es vacía...


Saludos,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Germán Aracil Boned
Enviado el: lunes, 20 de abril de 2009 15:22

Germán Aracil Boned

unread,
Apr 20, 2009, 11:04:54 AM4/20/09
to aster...@googlegroups.com
Voy a probar..

Si pongo:

-- Executing zscmd("SIP/192.168.128.1-08543218", "VARIABLE|ls
/tmp/pruebas.txt")
[Apr 20 17:02:39] ERROR[30933]: app_zscmd.c:78 do_zscmd: exec of ls failed
[Apr 20 17:02:39] NOTICE[30932]: app_zscmd.c:112 zscmd_exec: result:
[Apr 20 17:02:39] ERROR[30933]: app_zscmd.c:78 do_zscmd:

Me da error, porque no tiene el path cargado y no encuentra ls.
Pero si pongo

-- Executing zscmd("SIP/192.168.128.1-083d6900", "VARIABLE|/bin/ls
/tmp/pruebas.txt")
[Apr 20 17:02:59] NOTICE[30946]: app_zscmd.c:112 zscmd_exec: result:
/tmp/pruebas.txt

Si me funciona

Ramses II escribió:


> Je, je, si yo no niego que a ti te funcione, al que no le funciona es a mi.


Lo sé Ramses ;) No pensaba eso tampoco.

Saúl Ibarra

unread,
Apr 20, 2009, 11:07:31 AM4/20/09
to aster...@googlegroups.com
Estáis matando moscas a cañonazooos :)

2009/4/20 Germán Aracil Boned <ger...@tecnoxarxa.com>:

Germán Aracil Boned

unread,
Apr 20, 2009, 11:13:29 AM4/20/09
to aster...@googlegroups.com
La verdad es que no sé que está haciendo con el..

Me perdió !

Saúl Ibarra escribió:

Ramses II

unread,
Apr 20, 2009, 11:19:45 AM4/20/09
to aster...@googlegroups.com
Saúl, buenas tardes,

Cuenta tu solución con para matar la mosca con "escopetita chiquetita" y la
vemos como otra posible solución... ;-)


Saludos,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Saúl Ibarra
Enviado el: lunes, 20 de abril de 2009 17:08

Saúl Ibarra

unread,
Apr 20, 2009, 11:29:49 AM4/20/09
to aster...@googlegroups.com
2009/4/20 Ramses II <ramses....@gmail.com>:

>
> Saúl, buenas tardes,
>
> Cuenta tu solución con para matar la mosca con "escopetita chiquetita" y la
> vemos como otra posible solución... ;-)
>

Te la he comentado creo que 2 veces tuuuuuuuuuuuu! MacroExclusive FTW!! :)

Ramses II

unread,
Apr 20, 2009, 12:11:49 PM4/20/09
to aster...@googlegroups.com
"Joder", es que a mi no me aparecía el error:

[Apr 20 17:02:39] ERROR[30933]: app_zscmd.c:78 do_zscmd: exec of ls failed

No sé por qué no me aparecía..., ¿algún parámetro especial al arrancar
Asterisk para que aparezcan estos errores?

Ya está, listos, era lo del "path".

Ahora estoy en a ver como le paso el comando entero:

zscmd(VARIABLE|/usr/sbin/asterisk -rx "database show QueueM" | grep
${CALLERID(NUM)} | cut -c9-11)

Porque me da un error diciendo que "database" no es un comando o algo así.
Es como si estuviera troceando el comando en distintos parámetros...

Sin embargo, si creo un script conteniendo:

------------------------------------------------------------------------
#!/bin/bash

/usr/sbin/asterisk -rx "database show QueueM" | grep $1 | cut -c9-11
------------------------------------------------------------------------

Y ejecuto en el Dial:

exten => _88.,n,zscmd(VARIABLE|/etc/asterisk/scripts/pruebas.sh
${CALLERID(NUM)})

Todo va correcto.

Veo que tú siempre has usado scripts, pero ¿habría forma de meterlo en un
solo comando como he puesto arriba?


Saludos,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Germán Aracil Boned
Enviado el: lunes, 20 de abril de 2009 17:05

Ramses II

unread,
Apr 20, 2009, 12:22:15 PM4/20/09
to aster...@googlegroups.com
Je, je, fácil...

Lo que estoy haciendo es "Buscar Clave en AstDB dentro de una Familia según
un Valor".

Es decir, imaginemos que tenemos "/Familia/0001: 8888". Pues buscando 8888
que me devuelva "0001".

Entonces, si hago:

asterisk -rx "database show QueueM" | grep ${CALLERID(NUM)} | cut -c10-13

Me devuelve: 0001

Y lo que estábamos viendo son las distintas formas que habría de
conseguirlo.

La más fácil estaba clara cual era, crear en AstDB parejas Clave1: Valor1 y
Valor1: Clave1.

La de Saúl, cuando consiga echar a andar correctamente tu "zscmd", también
la probaré.


Saludos y gracias,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Germán Aracil Boned
Enviado el: lunes, 20 de abril de 2009 17:13

Ramses II

unread,
Apr 20, 2009, 1:49:09 PM4/20/09
to aster...@googlegroups.com
Saúl, buenas tardes,

He estado viendo lo del MacroExclusive() que comentabas.

Parece que esa aplicación no es para buscar un Valor dentro de una Familia
en la AstDB y que te devuelva la Clave en cuestión, ¿no?.

Es más bien para crear una Clave asociada a un Canal y que 2 canales no
puedan leer una misma Clave a la vez por error, ¿no?.

Imaginemos que tengo una aplicación cualquiera que me genera una familia en
la AstDB llamada "/Pruebas" y dentro de esa Familia crea 20 Claves con unos
valores asociados.

¿Yo puedo con MacroExclusive() buscar el Valor 25 dentro de las Claves de
esa Familia y que me devuelva la Clave que lo contiene?


Saludos,

Ramses


-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Saúl Ibarra
Enviado el: lunes, 20 de abril de 2009 17:30
Para: aster...@googlegroups.com
Asunto: [Asterisk-ES] Re: AstDB. Buscar Clave dentro de una Familia según un
Valor.


Raúl Alexis Betancor Santana

unread,
Apr 20, 2009, 2:08:38 PM4/20/09
to aster...@googlegroups.com
On Monday 20 April 2009 18:49:09 Ramses II wrote:
> Saúl, buenas tardes,
>
> He estado viendo lo del MacroExclusive() que comentabas.
>
> Parece que esa aplicación no es para buscar un Valor dentro de una Familia
> en la AstDB y que te devuelva la Clave en cuestión, ¿no?.

Es que ya te hemos dicho que esa búsqueda no es posible.

> Es más bien para crear una Clave asociada a un Canal y que 2 canales no
> puedan leer una misma Clave a la vez por error, ¿no?.

No, es para evitar que dos canales puedan ejecutar la misma instrucción al
mismo tiempo.

> ¿Yo puedo con MacroExclusive() buscar el Valor 25 dentro de las Claves de
> esa Familia y que me devuelva la Clave que lo contiene?

Que no puedes, que te lo hemos dicho por activa y por pasiva.

En una base de datos que funciona por el sistema de pares de claves (como la
mierda de la ASTDB) no puedes hacer el típo de busqueda que tu quieres. No se
trata de una RDBMS

Para lo que tu quieres tendrás que tirar de MySQL o PostgreSQL

Saludos
--
Raúl Alexis Betancor Santana
Dimensión Virtual

Germán Aracil Boned

unread,
Apr 20, 2009, 2:45:43 PM4/20/09
to aster...@googlegroups.com
Ramses, hazte un guión.

lo empiezas poniendo un path y todo eso. Mira sería algo como esto:

#! /bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

result=`ping -c1 -W1 $1 | grep time= | awk -F'=' '{print $4;}' | awk -F'
' '{print $1;}' | awk -F'.' '{print $1;}'`

if [ "$result" = '' ] ; then
mail -s "Esto no funciona" -c ma...@mailenvio.com < /dev/null > /dev/null
echo -1
else
echo $result
fi

El caso es que tengas controlada la salida. Que devuelva -1 por ejemplo
en caso de error.

luego le das permisos de escritura y listo.

En logger.conf puedes hacer que salgan o no en consola:

console => notice,warning,error,debug

reload y listo.

Ramses II escribió:

Germán Aracil Boned

unread,
Apr 20, 2009, 2:46:56 PM4/20/09
to aster...@googlegroups.com

Germán Aracil Boned escribió:


> luego le das permisos de escritura y listo.


jajajajaja digo de ejecución !! no escritura. Se me va la pinza !!

Ramses II

unread,
Apr 20, 2009, 3:27:06 PM4/20/09
to aster...@googlegroups.com
Uuuuffff, Germán, que lío...

O yo no me he explicado o no entiendo lo que me quieres decir con lo del
script...

A ver, lo último que te contaba es que poniéndolo en un script y atacándolo
con el zscmd, funcionaba a la perfección.

Ahora, la duda estaba en que si pongo directamente en comando en el zscmd:

zscmd(VARIABLE|/usr/sbin/asterisk -rx "database show QueueM" | grep
${CALLERID(NUM)} | cut -c9-11)

Se ve que no lo ejecuta bien, creo que al haber espacios y cosas de esas, lo
interpreta como distintos parámetros y me dice que el comando "database" no
existe...

No sé si poniendo muchas comillas en algunos sitios, el zscmd lo podrá
interpretar todo como un comando... :-(

¡Joder!, creí que tenía activo lo del console en el logger.conf, pero está
claro de que no lo tenía, perdón...

Mira, esto me da:

-- Executing [88965@from-internal:3] zscmd("SIP/8001-096f5d88",
"VARIABLE|/usr/sbin/asterisk -rx "database show QueueM"") in new stack
[Apr 20 21:17:48] NOTICE[14823]: app_zscmd.c:112 zscmd_exec: result: No
such command '"database' (type 'help database' for other possible commands)

Je, je, y no me digas que le quite las comillas porque sin comillas me da
también el error:

-- Executing [88965@from-internal:3] zscmd("SIP/8001-09754b08",
"VARIABLE|/usr/sbin/asterisk -rx database show QueueM") in new stack
[Apr 20 21:21:11] NOTICE[14833]: app_zscmd.c:112 zscmd_exec: result: No
such command 'database' (type 'help database' for other possible commands)

Lo único que cambia es que en uno es "No such command 'database'" y en el
otro "No such command '"database'", es decir, que está interpretando por
separado el comando completo...


P.D.: Sorry, si te estoy haciendo perder el tiempo, pero lo mismo nos vale
para afinar el comandito...

Saludos,

Ramses


-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Germán Aracil Boned
Enviado el: lunes, 20 de abril de 2009 20:46

Ramses II

unread,
Apr 20, 2009, 3:28:24 PM4/20/09
to aster...@googlegroups.com
Tranquilo, te había entendido...


Saludos,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Germán Aracil Boned
Enviado el: lunes, 20 de abril de 2009 20:47
Para: aster...@googlegroups.com
Asunto: [Asterisk-ES] Re: AstDB. Buscar Clave dentro de una Familia según un
Valor.




Ramses II

unread,
Apr 20, 2009, 3:41:22 PM4/20/09
to aster...@googlegroups.com
Raúl, si ya lo sé, lo entendí a la primera, por eso lo estoy haciendo en la
forma:

asterisk -rx "database show QueueM" | grep ${CALLERID(NUM)} | cut -c9-11

Que sí lo he conseguido.

Ahora lo que estoy viendo con Germán es el comandito que me comentó para
obtener en una variable desde Asterisk el resultado de un comando como el
anterior. Que también funciona...

El tema es que Saúl ha dicho que use el MacroExclusive() y por eso he
comentado esto, lo de que creo que es para otra cosa, y tú lo acabas de
confirmar.

El MacroExclusive() entró en juego porque yo hacía lo siguiente:

exten => _88.,n,System(asterisk -rx "database show QueueM" | grep
${CALLERID(NUM)} | cut -c9-11 >/tmp/archivoRANDOM)
exten => _88.,n,ReadFile(VARIABLE=/tmp/archivoRANDOM)

Y se me pasó por la cabeza de que si se podría dar tanta casualidad de que 2
llamadas entrasen tan al mismo tiempo que cuando la primera fuese a ejecutar
el "ReadFile", ya hubiese cambiado el fichero la segunda llamada.

Por eso creo que Saúl dijo de usar el MacroExclusive()

Creo que para que metiera esas dos líneas en una Macro() y la llamara desde
MacroExclusive()...


Saludos,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Raúl Alexis Betancor Santana
Enviado el: lunes, 20 de abril de 2009 20:09
Para: aster...@googlegroups.com
Asunto: [Asterisk-ES] Re: AstDB. Buscar Clave dentro de una Familia según un
Valor.


Germán Aracil Boned

unread,
Apr 20, 2009, 5:32:54 PM4/20/09
to aster...@googlegroups.com
Síp eso es.

Amigo Ramses:

-- Executing [88@numberplan-custom-1:1] zscmd("SIP/201-082aaeb8",
"VARIABLE|/usr/sbin/asterisk -rx "database show QueueM" | grep 201 | cut
-c9-11") in new stack
[Apr 20 21:31:02] NOTICE[13593]: app_zscmd.c:112 zscmd_exec: result:

Así me ha funcionado:

exten = 88,1,zscmd(VARIABLE|'/usr/sbin/asterisk -rx "database show
QueueM" | grep ${CALLERID(NUM)} | cut -c9-11')
exten = 88,2,noOp(${VARIABLE})


Solo que devuelve ningún valor. Porque a mi eso no me puede devolver nada ;)

Pero error no me da..

Y si pones la ruta completa siempre en los comandos, tanto grep como cut ?


Ramses II escribió:

--


Saúl Ibarra

unread,
Apr 21, 2009, 1:39:50 AM4/21/09
to aster...@googlegroups.com
[snip]

> Por eso creo que Saúl dijo de usar el MacroExclusive()
>
> Creo que para que metiera esas dos líneas en una Macro() y la llamara desde
> MacroExclusive()...
>

Xastooooooooo :)

Ramses II

unread,
Apr 21, 2009, 3:25:46 AM4/21/09
to aster...@googlegroups.com, ja...@multico.es
Claaaarrrrooooo, si es que estamos mezclando 2 cosas.... :-)

Cuando se aclare la forma de hacerlo es cuando se podrá meter en una Macro()
y por ende en una MacroExclusive().


Saludos y gracias,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Saúl Ibarra
Enviado el: martes, 21 de abril de 2009 7:40
Para: aster...@googlegroups.com
Asunto: [Asterisk-ES] Re: AstDB. Buscar Clave dentro de una Familia según un
Valor.


Germán Aracil Boned

unread,
Apr 22, 2009, 12:54:56 PM4/22/09
to aster...@googlegroups.com
Cómo has terminado con esto ?

Ramses II escribió:


> Claaaarrrrooooo, si es que estamos mezclando 2 cosas.... :-)
>
> Cuando se aclare la forma de hacerlo es cuando se podrá meter en una Macro()
> y por ende en una MacroExclusive().
>
>
> Saludos y gracias,
>
> Ramses
>
> -----Mensaje original-----
> De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
> nombre de Saúl Ibarra
> Enviado el: martes, 21 de abril de 2009 7:40
> Para: aster...@googlegroups.com
> Asunto: [Asterisk-ES] Re: AstDB. Buscar Clave dentro de una Familia según un
> Valor.
>
>
> [snip]
>> Por eso creo que Saúl dijo de usar el MacroExclusive()
>>
>> Creo que para que metiera esas dos líneas en una Macro() y la llamara
> desde
>> MacroExclusive()...
>>
>
> Xastooooooooo :)
>
>
>

--


Ramses II

unread,
Apr 22, 2009, 2:19:10 PM4/22/09
to aster...@googlegroups.com
Germán, estoy en ello,

Ahora ando buscando lo de "donde encontrar el Canal SIP que originó una
llamada con un Canal Local" para jugar con él en el zscmd().

No sé si habrás visto el hilo y me podrás dar alguna idea de donde podrá
estar escondido el "maldito".


Saludos,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Germán Aracil Boned
Enviado el: miércoles, 22 de abril de 2009 18:55

José Ferney Franco

unread,
Apr 22, 2009, 5:24:36 PM4/22/09
to aster...@googlegroups.com
La verdad no entiendo porque se necesita la compilación de una aplicación para algo tan sencillo. Este problema usando AGI's se resuelve con un script de no más de 10 líneas. Por otro lado desde un principio la opción más rápida sería tener un llaves:valores bidireccionales. Y como ya dijeron si se necesita acceso exlusivo se usa MacroExclusive.

La verdad creo que como dice Saúl están matando moscas a cañonazos.

2009/4/22 Ramses II <ramses....@gmail.com>

Germán Aracil Boned

unread,
Apr 23, 2009, 2:52:33 AM4/23/09
to aster...@googlegroups.com
Un agi, creo que consume más recursos. Y se hace un fork de asterisk
antes de ejecutarse.. es cierto ?¿

No he mirado el código para ver si es así..

José Ferney Franco escribió:
> La verdad no entiendo porque se necesita la compilación de una
> aplicación para algo tan sencillo. Este problema usando AGI's se
> resuelve con un script de no más de 10 líneas. Por otro lado desde un
> principio la opción más rápida sería tener un llaves:valores
> bidireccionales. Y como ya dijeron si se necesita acceso exlusivo se usa
> MacroExclusive.
>
> La verdad creo que como dice Saúl están matando moscas a cañonazos.
>
> 2009/4/22 Ramses II <ramses....@gmail.com
> <mailto:ramses....@gmail.com>>
>
>
> Germán, estoy en ello,
>
> Ahora ando buscando lo de "donde encontrar el Canal SIP que originó una
> llamada con un Canal Local" para jugar con él en el zscmd().
>
> No sé si habrás visto el hilo y me podrás dar alguna idea de donde podrá
> estar escondido el "maldito".
>
>
> Saludos,
>
> Ramses
>
> -----Mensaje original-----
> De: aster...@googlegroups.com
> <mailto:aster...@googlegroups.com>
> [mailto:aster...@googlegroups.com
> <mailto:aster...@googlegroups.com>] En
> nombre de Germán Aracil Boned
> Enviado el: miércoles, 22 de abril de 2009 18:55
> Para: aster...@googlegroups.com <mailto:aster...@googlegroups.com>
> Asunto: [Asterisk-ES] Re: AstDB. Buscar Clave dentro de una Familia
> según un
> Valor.
>
>
> Cómo has terminado con esto ?
>
>
>
> Ramses II escribió:
> > Claaaarrrrooooo, si es que estamos mezclando 2 cosas.... :-)
> >
> > Cuando se aclare la forma de hacerlo es cuando se podrá meter en una
> Macro()
> > y por ende en una MacroExclusive().
> >
> >
> > Saludos y gracias,
> >
> > Ramses
> >
> > -----Mensaje original-----
> > De: aster...@googlegroups.com
> <mailto:aster...@googlegroups.com>
> [mailto:aster...@googlegroups.com
> <mailto:aster...@googlegroups.com>] En
> > nombre de Saúl Ibarra
> > Enviado el: martes, 21 de abril de 2009 7:40
> > Para: aster...@googlegroups.com
> <mailto:aster...@googlegroups.com>
> > Asunto: [Asterisk-ES] Re: AstDB. Buscar Clave dentro de una
> Familia según
> un
> > Valor.
> >
> >
> > [snip]
> >> Por eso creo que Saúl dijo de usar el MacroExclusive()
> >>
> >> Creo que para que metiera esas dos líneas en una Macro() y la
> llamara
> > desde
> >> MacroExclusive()...
> >>
> >
> > Xastooooooooo :)
> >
> >
> >
>
> --
>
>
> -
> -------------------------------------
> Germán Aracil Boned
> Director de Sistemas
> Zoon Suite S.L.
>
> www.zoonsuite.com <http://www.zoonsuite.com>

Ramses II

unread,
Apr 23, 2009, 4:10:19 AM4/23/09
to aster...@googlegroups.com, ja...@multico.es

Jose, buenos días,

 

Creo que lo que comentaba Saúl de “matar moscas a cañonazos” se refería a que no estaba usando el MacroExclusive(), pero eso ya quedó claro que se usaría después de elegir la solución para “Buscar Clave dentro de una Familia según un Valor”.

 

Lo que estoy es probando todas las soluciones que se han propuesto, a lo mejor para esta ocasión alguna no sea la mejor, pero siempre es bueno tenerlas en la mochila porque te pueden cuadrar para otras soluciones.

 

 

Saludos y gracias,

 

Ramses

 


Germán Aracil Boned

unread,
Apr 23, 2009, 4:22:53 AM4/23/09
to aster...@googlegroups.com
Ramses, una idea práctica interesante para el zscmd es la conversión de
formatos.

En "h" del dial plan, puedes poner la conversión de una posible llamada
grabada a mp3, lanzando un proceso con la prioridad mínima "nice -n 19"
para hacer la conversión de tipos de audio sin que suponga una carga con
igual prioridad que la de asterisk. El cual yo siempre lo ejecuto con
prioridad pseudo tiempo real.

Ramses II escribió:
> Jose, buenos días,
>
>
>
> Creo que lo que comentaba Saúl de “matar moscas a cañonazos” se refería
> a que no estaba usando el MacroExclusive(), pero eso ya quedó claro que
> se usaría después de elegir la solución para “Buscar Clave dentro de una
> Familia según un Valor”.
>
>
>
> Lo que estoy es probando todas las soluciones que se han propuesto, a lo
> mejor para esta ocasión alguna no sea la mejor, pero siempre es bueno
> tenerlas en la mochila porque te pueden cuadrar para otras soluciones.
>
>
>
>
>
> Saludos y gracias,
>
>
>
> Ramses
>
>
>
> ------------------------------------------------------------------------
>
> *De:* aster...@googlegroups.com [mailto:aster...@googlegroups.com]
> *En nombre de *José Ferney Franco
> *Enviado el:* miércoles, 22 de abril de 2009 23:25
> *Para:* aster...@googlegroups.com
> *Asunto:* [Asterisk-ES] Re: AstDB. Buscar Clave dentro de una Familia
> según un Valor.
>
>
>
> La verdad no entiendo porque se necesita la compilación de una
> aplicación para algo tan sencillo. Este problema usando AGI's se
> resuelve con un script de no más de 10 líneas. Por otro lado desde un
> principio la opción más rápida sería tener un llaves:valores
> bidireccionales. Y como ya dijeron si se necesita acceso exlusivo se usa
> MacroExclusive.
>
> La verdad creo que como dice Saúl están matando moscas a cañonazos.
>
> 2009/4/22 Ramses II <ramses....@gmail.com
> <mailto:ramses....@gmail.com>>
>
>
> Germán, estoy en ello,
>
> Ahora ando buscando lo de "donde encontrar el Canal SIP que originó una
> llamada con un Canal Local" para jugar con él en el zscmd().
>
> No sé si habrás visto el hilo y me podrás dar alguna idea de donde podrá
> estar escondido el "maldito".
>
>
> Saludos,
>
>
> Ramses
>
> -----Mensaje original-----
> De: aster...@googlegroups.com <mailto:aster...@googlegroups.com>
> [mailto:aster...@googlegroups.com
> <mailto:aster...@googlegroups.com>] En
>
> nombre de Germán Aracil Boned
>
> Enviado el: miércoles, 22 de abril de 2009 18:55
>
> Para: aster...@googlegroups.com <mailto:aster...@googlegroups.com>
> Asunto: [Asterisk-ES] Re: AstDB. Buscar Clave dentro de una Familia según un
> Valor.
>
>
> Cómo has terminado con esto ?
>
>
>
> Ramses II escribió:
>> Claaaarrrrooooo, si es que estamos mezclando 2 cosas.... :-)
>>
>> Cuando se aclare la forma de hacerlo es cuando se podrá meter en una
> Macro()
>> y por ende en una MacroExclusive().
>>
>>
>> Saludos y gracias,
>>
>> Ramses
>>
>> -----Mensaje original-----
>> De: aster...@googlegroups.com <mailto:aster...@googlegroups.com>
> [mailto:aster...@googlegroups.com
> <mailto:aster...@googlegroups.com>] En
>> nombre de Saúl Ibarra
>> Enviado el: martes, 21 de abril de 2009 7:40
>> Para: aster...@googlegroups.com <mailto:aster...@googlegroups.com>
>> Asunto: [Asterisk-ES] Re: AstDB. Buscar Clave dentro de una Familia según
> un
>> Valor.
>>
>>
>> [snip]
>> > Por eso creo que Saúl dijo de usar el MacroExclusive()
>> >
>> > Creo que para que metiera esas dos líneas en una Macro() y la llamara
>> desde
>> > MacroExclusive()...
>> >
>>
>> Xastooooooooo :)
>>
>>
>>
>
> --
>
>
> -
> -------------------------------------
> Germán Aracil Boned
> Director de Sistemas
> Zoon Suite S.L.
>
> www.zoonsuite.com <http://www.zoonsuite.com>

Ramses II

unread,
Apr 24, 2009, 11:31:38 AM4/24/09
to aster...@googlegroups.com
Amigo Germán,

Como te dije, retomaría el tema...

Creo que a ti tampoco te está funcionando, que te está engañando el
resultado. Verás, te cuento:

- He puesto lo mismo que tú en el Dialplan:

exten => _88.,n,zscmd(VARIABLE|'/usr/sbin/asterisk -rx "database show
QueueM" | grep ${CALLERID(NUM)} | cut -c9-11')
exten => _88.,n,noOp(${VARIABLE})

Y el resultado es el mismo que te da a ti, que lo ejecuta, pero devuelve
VARIABLE en blanco:

-- Executing [88965@from-internal:3] zscmd("SIP/8001-08998a58",
"VARIABLE|/usr/sbin/asterisk -rx "database show QueueM" | grep 8001 | cut
-c9-11") in new stack
[Apr 24 17:31:06] NOTICE[14157]: app_zscmd.c:112 zscmd_exec: result:
-- Executing [88965@from-internal:4] NoOp("SIP/8001-08998a58", "") in
new stack

Con una salvedad, que tú crees que te lo da blanco porque no tienes en la
base de datos nada como "/QueueM/300: 201", pero yo sí tengo puesto
"/QueueM/300: 8001", por lo que me debería de devolver VARIABLE=300.

- He cogido la línea anterior y la he metido en un script:

--- pruebas.sh ---------------------------------------------------------
#!/bin/bash

/usr/sbin/asterisk -rx "database show QueueM" | grep $1 | cut -c9-11
------------------------------------------------------------------------

Y he puesto el siguiente Dialplan:

exten => _88.,n,zscmd(VARIABLE|/etc/asterisk/scripts/pruebas.sh
${CALLERID(NUM)})
exten => _88.,n,noOp(${VARIABLE})

Dándome el siguiente resultado:

-- Executing [88965@from-internal:3] zscmd("SIP/8001-0899a700",
"VARIABLE|/etc/asterisk/scripts/pruebas.sh 8001") in new stack
-- Remote UNIX connection
-- Remote UNIX connection disconnected
[Apr 24 17:40:29] NOTICE[14180]: app_zscmd.c:112 zscmd_exec: result: 300

-- Executing [88965@from-internal:4] NoOp("SIP/8001-0899a700", "300
") in new stack

Me ha devuelto el valor 300 que era el esperado.

No sé por qué metiéndolo directamente en el Dialplan, sin pasar por el
script, no chuta. También he probado a ponerle el /bin a grep y cut.

Ya es por curiosidad, ¿podrías tú poner en la base de datos algún valor como
"/QueueM/300: 201", llamar desde la 201 a ver si te devuelve el 300?.


Saludos y gracias,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Germán Aracil Boned
Enviado el: lunes, 20 de abril de 2009 23:33

Elio Rojano

unread,
Apr 24, 2009, 12:32:44 PM4/24/09
to aster...@googlegroups.com, <asterisk-es@googlegroups.com>
Y si pruebas con otro comando? Show version por ejemplo?

Elio Rojano
http://www.sinologic.net


El 24/04/2009, a las 17:31, "Ramses II" <ramses....@gmail.com>
escribió:
> De: aster...@googlegroups.com [mailto:asterisk-
> e...@googlegroups.com] En
>> De: aster...@googlegroups.com [mailto:asterisk-
>> e...@googlegroups.com] En

Ramses II

unread,
Apr 24, 2009, 1:46:14 PM4/24/09
to aster...@googlegroups.com
Elio, buenas tardes,

Ocurre idem de lo mismo.

Si pongo esto en el Dialplan:

exten => _88.,n,zscmd(VARIABLE|'/usr/sbin/asterisk -rx "core show version" |
/bin/grep 1.4 | /bin/cut -c0-15')
exten => _88.,n,noOp(${VARIABLE})

Me devuelve la variable en blanco.

Si lo pongo en un script:

exten => _88.,n,zscmd(VARIABLE|/etc/asterisk/scripts/pruebas.sh 1.4)
exten => _88.,n,noOp(${VARIABLE})

------------------------------------------
#!/bin/bash

/usr/sbin/asterisk -rx "core show version" | /bin/grep 1.4 | /bin/cut -c0-15
------------------------------------------

Me devuelve el resultado correcto:

[Apr 24 19:47:30] NOTICE[15142]: app_zscmd.c:112 zscmd_exec: result:
Asterisk 1.4.24

-- Executing [88965@from-internal:4] NoOp("SIP/8001-090a3228", "Asterisk
1.4.24
") in new stack

Me imagino que tendrá que ser algo de la forma en que se le pasan los
parámetro, pero no lo veo...


Saludos y gracias,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Elio Rojano
Enviado el: viernes, 24 de abril de 2009 18:33
Para: aster...@googlegroups.com
CC: <aster...@googlegroups.com>

Raúl Alexis Betancor Santana

unread,
Apr 24, 2009, 4:53:18 PM4/24/09
to aster...@googlegroups.com

A ver ... que llevais 2 semanas con este tema ... ¿en serio no sabéis porqué
no devuelve nada? ...

Pista:

¿ que hacen las | en el dialplan de Asterisk ?
¿ se os ha ocurrido meter una llamada de log en zscmd para comprobar que
comando está ejecutando ?
¿ que tipo de llamada execc ejecuta zscmd ?

Germán Aracil Boned

unread,
Apr 25, 2009, 6:32:48 AM4/25/09
to aster...@googlegroups.com

Raúl Alexis Betancor Santana escribió:


> A ver ... que llevais 2 semanas con este tema ... ¿en serio no sabéis porqué
> no devuelve nada? ...
>
> Pista:
>
> ¿ que hacen las | en el dialplan de Asterisk ?

Pues va a ser eso. Yo lo haría con un guión, como le comenté. Lo mete en
/var/lib/agi-bin y listo, o /var/lib/bash/ o donde quiera..

> ¿ se os ha ocurrido meter una llamada de log en zscmd para comprobar que
> comando está ejecutando ?
> ¿ que tipo de llamada execc ejecuta zscmd ?

execv

Ramses II

unread,
Apr 25, 2009, 6:36:22 AM4/25/09
to aster...@googlegroups.com
Raúl, buenos días,

Pues más que una pista, me despista...

Porque, si hay que quitar las "|", ¿por qué sí funciona esto si también
tiene "|"?

exten => _88.,n,zscmd(VARIABLE|/etc/asterisk/scripts/pruebas.sh
${CALLERID(NUM)})


Saludos y gracias,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Raúl Alexis Betancor Santana
Enviado el: viernes, 24 de abril de 2009 22:53

Germán Aracil Boned

unread,
Apr 25, 2009, 6:39:14 AM4/25/09
to aster...@googlegroups.com
Porque VARIABLE|/etc/ .. son los parámetros que debe interpretar
asterisk que le estás dando al comando. Pero el "|" aparecido en el
segundo parámetro igual confunde a *, y hace un split de comandos
contemplandolo. Como resultado, no funciona.

Pero esto es teórico mio.. no lo he comprobado.

Ramses II escribió:

--


Ramses II

unread,
Apr 25, 2009, 7:05:52 AM4/25/09
to aster...@googlegroups.com
No has probado a poner la clave en AstDB como te comenté en el otro correito
a ver si te chutaba, ¿no?

Creo que no debe de ser eso.

Mira, sin cosas raras de esas como "|":

exten => _88.,n,zscmd(VARIABLE|'/usr/sbin/asterisk -rx "core show uptime"')

Resultado:

-- Executing [88965@from-internal:3] zscmd("SIP/8001-09d65178",
"VARIABLE|/usr/sbin/asterisk -rx "core show uptime"") in new stack

[Apr 25 11:01:15] NOTICE[21420]: app_zscmd.c:112 zscmd_exec: result: No such
command '"core' (type 'help core' for other possible commands)

-- Executing [88965@from-internal:4] NoOp("SIP/8001-09d65178", "No such
command '"core' (type 'help core' for other possible commands)
") in new stack

¡Ea!, para que nos jod... todos.

Si lo metes en un script, va del tirón...

(Comentarios de la gente): "¡Jod...!, pues mételo en un script y deja de
dar...." ;-)

Pero es que siento curiosidad de el por qué no funciona, qué estoy haciendo
mal, lo mismo me ayuda en otras ocasiones...

Germán, si te das cuenta, está cogiendo "core. Creo que lo que no le está
gustando son las comillas, que las interpreta como parte del comando, ¿no?


Saludos y gracias,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Germán Aracil Boned
Enviado el: sábado, 25 de abril de 2009 12:39

Germán Aracil Boned

unread,
Apr 25, 2009, 7:35:47 AM4/25/09
to aster...@googlegroups.com
Haz un guion y no te compliques la vida. no ?

Ramses II escribió:

Ramses II

unread,
Apr 25, 2009, 8:09:40 AM4/25/09
to aster...@googlegroups.com
Germán, buenas tardes,

Lo que tú llamas, o llamáis, guión:

--------------------------------------------------------------------------
#! /bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

result=`ping -c1 -W1 $1 | grep time= | awk -F'=' '{print $4;}' | awk -F'
' '{print $1;}' | awk -F'.' '{print $1;}'`

if [ "$result" = '' ] ; then
mail -s "Esto no funciona" -c ma...@mailenvio.com < /dev/null > /dev/null
echo -1
else
echo $result
fi
--------------------------------------------------------------------------

En mi corta andadura por los senderos del Linux, es lo que yo vengo llamando
"script", no sé si bien o mal llamado, o si un "guión" tendrá una función
especial de un script que haga algo en concreto... :-(


Saludos y gracias,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Germán Aracil Boned
Enviado el: sábado, 25 de abril de 2009 13:36

José Ferney Franco

unread,
Apr 25, 2009, 12:08:11 PM4/25/09
to aster...@googlegroups.com
Germán tiene razón. Si quieres usar un '|' como parte de un parámetro deben enviarlo usando el caracter de escape '\'

2009/4/25 Germán Aracil Boned <ger...@tecnoxarxa.com>

Germán Aracil Boned

unread,
Apr 25, 2009, 12:52:02 PM4/25/09
to aster...@googlegroups.com
Es lo mismo, no está mal llamarlo script.

Ramses II escribió:

Germán Aracil Boned

unread,
Apr 25, 2009, 12:53:21 PM4/25/09
to aster...@googlegroups.com
Todo viene de esto: http://www.etxea.net/docu/taller_bash/bash.html

Ramses II escribió:

Raúl Alexis Betancor Santana

unread,
Apr 25, 2009, 6:37:30 PM4/25/09
to aster...@googlegroups.com
On Saturday 25 April 2009 12:05:52 Ramses II wrote:
> Pero es que siento curiosidad de el por qué no funciona, qué estoy haciendo
> mal, lo mismo me ayuda en otras ocasiones...

Te lo resumo en una frase ... "el parser de dialplan de Asterisk es imbécil",
tienes que escapar las ", las |, las ' y cualquier otro caracter que tengas
que mandar al "shell" y que sea suceptible de que el imbecil del parser de
Asterisk interprete como "propio"

Saludos

Germán Aracil Boned

unread,
Apr 25, 2009, 7:22:47 PM4/25/09
to aster...@googlegroups.com
jajajaja ahí te has descargado con el parser de asterisk !! XDDDDD

Raúl Alexis Betancor Santana escribió:

--


Ramses II

unread,
Apr 27, 2009, 2:54:01 PM4/27/09
to aster...@googlegroups.com
Germán, buenas tardes,

Pues creo que se va a quedar así, creo que es el "zscmd" el que no
interpreta bien el comando directo y que por pelotas hay que pasárselo en un
script... :-(

Mira, esto funciona bien:

----------------------------------------------------------------------------
exten => _88.,n,system(/usr/sbin/asterisk -rx "core show uptime" >
/tmp/variable.txt)
exten => _88.,n,ReadFile(VARIABLE=/tmp/variable.txt)
exten => _88.,n,NoOP(VARIABLE: ${VARIABLE})
**********************
-- Executing [88965@from-internal:5] System("SIP/8001-088608c0",
"/usr/sbin/asterisk -rx "core show uptime" > /tmp/variable.txt") in new
stack
-- Executing [88965@from-internal:6] ReadFile("SIP/8001-088608c0",
"VARIABLE=/tmp/variable.txt") in new stack
-- Executing [88965@from-internal:7] NoOp("SIP/8001-088608c0",
"VARIABLE: System uptime: 2 days, 7 hours, 24 minutes, 25 seconds
Last reload: 13 seconds") in new stack
----------------------------------------------------------------------------

Pero si lo mismo lo intentamos hacer con el "zscmd":

----------------------------------------------------------------------------
exten => _88.,n,zscmd(VARIABLE|'/usr/sbin/asterisk -rx "core show uptime"')
exten => _88.,n,NoOP(VARIABLE: ${VARIABLE})
**********************
-- Executing [88965@from-internal:3] zscmd("SIP/8001-088608c0",
"VARIABLE|/usr/sbin/asterisk -rx "core show uptime"") in new stack

[Apr 27 20:37:42] NOTICE[27119]: app_zscmd.c:112 zscmd_exec: result: No
such command '"core' (type 'help core' for other possible commands)

-- Executing [88965@from-internal:4] NoOp("SIP/8001-088608c0",
"VARIABLE: No such command '"core' (type 'help core' for other possible
commands)
") in new stack
----------------------------------------------------------------------------

Como veis, no creo que sea problema de "el imbécil del parser de dialplan de
Asterisk", ya que en ambas situaciones hay los mismos caracteres a
interpretar, sin embargo el "zscmd" interpreta '"core' en vez de '"core show
uptime"'.

Si el comando (/usr/sbin/asterisk -rx "core show uptime") lo metemos dentro
de un script, el "zscmd" lo interpreta a la primera.


Saludos, gracias y perdón por ser tan "pesáo",

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Germán Aracil Boned
Enviado el: domingo, 26 de abril de 2009 1:23
Para: aster...@googlegroups.com
Asunto: [Asterisk-ES] Re: AstDB. Buscar Clave dentro de una Familia según un
Valor.


Germán Aracil Boned

unread,
Apr 27, 2009, 5:27:57 PM4/27/09
to aster...@googlegroups.com
Muy bien !

Lo importante, es que tengas una solución.

Ramses II escribió:

Ramses II

unread,
Apr 28, 2009, 9:10:25 AM4/28/09
to aster...@googlegroups.com
Germán, buenos días,

Te lo comentaba porque como eres el padre de la criatura, lo mismo te
interesaba por afinar el código.

Bueno, pues muchas gracias por la ayuda y haber aguantado la cabezonería.


Saludos,

Ramses

-----Mensaje original-----
De: aster...@googlegroups.com [mailto:aster...@googlegroups.com] En
nombre de Germán Aracil Boned
Enviado el: lunes, 27 de abril de 2009 23:28
Reply all
Reply to author
Forward
0 new messages