VARIABLES y MACROS dentro de QUEUE

768 views
Skip to first unread message

Juan Carlos Valero

unread,
Dec 30, 2010, 4:58:35 AM12/30/10
to aster...@googlegroups.com
Pregunta de trivial...

Necesito cargar una variable, no global, con un valor, y recuperar ese
valor desde dentro de una macro que se invoca desde dentro de una cola.
Claro, no veo como pasar parametros a esa macro, ya que la invoco con
membermacro=nombredelamacro desde dentro del queues.conf.

Os habeis encontrado con esto alguna vez? No puedo usar variables
globales, que si que funcionan, por la concurrencia de valores al tener
multiples llamadas simultaneas, y necesito que sea una variable por canal.

Acepto ideas... porque llevo un rato peleandome y no veo la luz...

--
Un saludo,

Juan Carlos Valero
Capa Tres Soluciones Tecnol�gicas S.L.
Datos de contacto en http://capatres.tel
-------------------------------------------------------------------------

juanmol

unread,
Dec 30, 2010, 6:20:01 AM12/30/10
to asterisk-es
no puedes hacer un set antes de llamar a la macro y ponerle al nombre
de la variable __ (dos guiones bajos) ??
la verdad es que me cuesta ver lo que preguntas ¿puedes pegar el
trocito de codigo correspondiente?

Saludos.

Juan Carlos Valero

unread,
Dec 30, 2010, 6:45:05 AM12/30/10
to aster...@googlegroups.com
El 30/12/10 12:20, juanmol escribi�:

> no puedes hacer un set antes de llamar a la macro y ponerle al nombre
> de la variable __ (dos guiones bajos) ??
> la verdad es que me cuesta ver lo que preguntas �puedes pegar el
> trocito de codigo correspondiente?

Eso es lo mismo que ponerla global, la concurrencia de llamadas me
machacaria el valor, cuando lo preciso unico para toda la llamada.

No tiene solucion, o no soy capaz de encontrarla...

escenario:

Cola de agentes que reciben llamadas de dos paises distintos. Por
requisito del cliente se ha de mostrar una locucion al agente ANTES de
atender la llamada. La locucion es distinta segun el pais de donde
provenga la llamada. Para ello se usa el parametro membermacro del
fichero queues.conf a fin de asignar una macro a la llamada al agente.
Cuando el agente descuelga, la macro se ejecuta.

El problema viene en que, por dise�o, esa macro NO se ejecuta en el
canal de la llamada entrantes, si no en el canal del agente. Por ese
motivo, no tiene acceso a ninguna variable que no sea global. Es decir,
desde dentro de la macro ni tan siquiera puedo recoger el idioma del
canal ya que se establece al definido en el fichero sip.conf para el
agente asignado. No puedo recoger ni tan siquiera el Callerid de quien
llama, ni el lang, solo las variables que queue pasa internamente, y
ninguna de ellas me sirve.

No me vale usar variables globales, ya que la concurrencia de trafico me
provocaria errores al sobreescribirse una llamada con el valor de otra.
Al no tener un dato unico (UNIQUEID cambia, tambien lo he probado) para
poder usar otros sistemas como la base de datos interna, he terminado en
un callejon sin salida. Tras tres horas de pruebas voy a tirar la toalla
porque no tiene solucion...

Preguntaba como ultima esperanza, para que alguien me restregara la
solucion por la cara y me dijera "mira tontorron, es asi..."....

Saúl Ibarra Corretgé

unread,
Dec 30, 2010, 7:35:06 AM12/30/10
to aster...@googlegroups.com
Aupa Juan Carlos!

2010/12/30 Juan Carlos Valero <jcva...@capatres.com>:
> El 30/12/10 12:20, juanmol escribió:


>> no puedes hacer un set antes de llamar a la macro y ponerle al nombre
>> de la variable __ (dos guiones bajos) ??
>> la verdad es que me cuesta ver lo que preguntas ¿puedes pegar el
>> trocito de codigo correspondiente?
>
> Eso es lo mismo que ponerla global, la concurrencia de llamadas me
> machacaria el valor, cuando lo preciso unico para toda la llamada.
>
> No tiene solucion, o no soy capaz de encontrarla...
>
> escenario:
>
> Cola de agentes que reciben llamadas de dos paises distintos. Por
> requisito del cliente se ha de mostrar una locucion al agente ANTES de
> atender la llamada. La locucion es distinta segun el pais de donde
> provenga la llamada. Para ello se usa el parametro membermacro del
> fichero queues.conf a fin de asignar una macro a la llamada al agente.
> Cuando el agente descuelga, la macro se ejecuta.
>

> El problema viene en que, por diseño, esa macro NO se ejecuta en el


> canal de la llamada entrantes, si no en el canal del agente. Por ese
> motivo, no tiene acceso a ninguna variable que no sea global. Es decir,
> desde dentro de la macro ni tan siquiera puedo recoger el idioma del
> canal ya que se establece al definido en el fichero sip.conf para el
> agente asignado. No puedo recoger ni tan siquiera el Callerid de quien
> llama, ni el lang, solo las variables que queue pasa internamente, y
> ninguna de ellas me sirve.
>
> No me vale usar variables globales, ya que la concurrencia de trafico me
> provocaria errores al sobreescribirse una llamada con el valor de otra.
> Al no tener un dato unico (UNIQUEID cambia, tambien lo he probado) para
> poder usar otros sistemas como la base de datos interna, he terminado en
> un callejon sin salida. Tras tres horas de pruebas voy a tirar la toalla
> porque no tiene solucion...
>
> Preguntaba como ultima esperanza, para que alguien me restregara la
> solucion por la cara y me dijera "mira tontorron, es asi..."....
>

Hace tiempo que no juego a las colas, pero prueba lo siguiente: si los
agentes en realidad son unos chan_local que luego hacen un
Dial(SIP/...) tienes la información disponible ahí? En tal caso podría
usar la opción A del Dial en lugar del membermacro para reproducir la
locución al agente...


Saludos,

--
/Saúl
http://saghul.net | http://sipdoc.net

Juan Carlos Valero

unread,
Dec 30, 2010, 8:10:22 AM12/30/10
to aster...@googlegroups.com
El 30/12/10 13:35, Sa�l Ibarra Corretg� escribi�:

>
> Hace tiempo que no juego a las colas, pero prueba lo siguiente: si los
> agentes en realidad son unos chan_local que luego hacen un
> Dial(SIP/...) tienes la informaci�n disponible ah�? En tal caso podr�a
> usar la opci�n A del Dial en lugar del membermacro para reproducir la
> locuci�n al agente...

No me vale... ya lo habia pensado, pero los agentes son dinamicos... 8-((((

Saúl Ibarra Corretgé

unread,
Dec 30, 2010, 8:23:23 AM12/30/10
to aster...@googlegroups.com
2010/12/30 Juan Carlos Valero <jcva...@capatres.com>:
> El 30/12/10 13:35, Saúl Ibarra Corretgé escribió:

>>
>> Hace tiempo que no juego a las colas, pero prueba lo siguiente: si los
>> agentes en realidad son unos chan_local que luego hacen un
>> Dial(SIP/...) tienes la información disponible ahí? En tal caso podría
>> usar la opción A del Dial en lugar del membermacro para reproducir la
>> locución al agente...

>
> No me vale... ya lo habia pensado, pero los agentes son dinamicos... 8-((((
>

Version de Asterisk?

Echa un ojo a esto:
https://www.asterisk.org/docs/asterisk/trunk/functions/shared

Juan Carlos Valero

unread,
Dec 30, 2010, 8:46:35 AM12/30/10
to aster...@googlegroups.com
El 30/12/10 14:23, Sa�l Ibarra Corretg� escribi�:
>
> Version de Asterisk?
>
1.8

Ya, pero puede ser sobreescrita por otra invocacion. Ya lo he mirado, y
usar ImportVar tambien, pero tampoco sirve. Solo con que pudiera pasarle
un parametro a la macro ya lo tendria arreglado, pero al invocarla desde
dentro de la cola no me deja pasarle variables como parametros. Un rollo
vamos...

Fernando Villares

unread,
Dec 30, 2010, 9:33:40 AM12/30/10
to aster...@googlegroups.com
Juan y consulta boluda....variables de unix en vez de asterisk o sea las de environment? seria un chiquero pero quizas sirve

El 30 de diciembre de 2010 10:46, Juan Carlos Valero <jcva...@capatres.com> escribió:
El 30/12/10 14:23, Saúl Ibarra Corretgé escribió:

>
> Version de Asterisk?
>
1.8
Ya, pero puede ser sobreescrita por otra invocacion. Ya lo he mirado, y
usar ImportVar tambien, pero tampoco sirve. Solo con que pudiera pasarle
un parametro a la macro ya lo tendria arreglado, pero al invocarla desde
dentro de la cola no me deja pasarle variables como parametros. Un rollo
vamos...

--
Un saludo,

Juan Carlos Valero
Capa Tres Soluciones Tecnológicas S.L.

Datos de contacto en http://capatres.tel
-------------------------------------------------------------------------

--
Este email pertenece a la lista de Asterisk-ES (http://www.asterisk-es.org)

Entra ahora en el canal de irc de Asterisk-ES para charlar en directo sobre VoIP y
Asterisk: http://www.asterisk-es.org/

~~~~~ Normas de la lista Asterisk-ES: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
http://comunidad.asterisk-es.org/index.php?title=Lista:normas-asterisk-es
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Para anular la suscripción: asterisk-es...@googlegroups.com

Juan Carlos Valero

unread,
Dec 30, 2010, 9:43:28 AM12/30/10
to aster...@googlegroups.com
El 30/12/10 15:33, Fernando Villares escribi�:

> Juan y consulta boluda....variables de unix en vez de asterisk o sea
> las de environment? seria un chiquero pero quizas sirve

Sigo teniendo el mismo problema, como las asocio dentro de la macro ?
Porque como no se de donde viene, cual variable tengo que recoger? La
verdad es que no le veo solucion... tal y como han parido las macros
invocadas desde queue no puedo recuperar info del resto del canal.

--
Un saludo,

Juan Carlos Valero
Capa Tres Soluciones Tecnol�gicas S.L.

Saúl Ibarra Corretgé

unread,
Dec 30, 2010, 9:59:03 AM12/30/10
to aster...@googlegroups.com
Puedes poner un DumpChan dentro de esa macro y pegar el resultado?

2010/12/30 Juan Carlos Valero <jcva...@capatres.com>:

> El 30/12/10 15:33, Fernando Villares escribió:


>> Juan y consulta boluda....variables de unix en vez de asterisk o sea
>> las de environment? seria un chiquero pero quizas sirve
>
> Sigo teniendo el mismo problema, como las asocio dentro de la macro ?
> Porque como no se de donde viene, cual variable tengo que recoger? La
> verdad es que no le veo solucion... tal y como han parido las macros
> invocadas desde queue no puedo recuperar info del resto del canal.
>
> --
> Un saludo,
>
> Juan Carlos Valero

> Capa Tres Soluciones Tecnológicas S.L.


> Datos de contacto en http://capatres.tel
> -------------------------------------------------------------------------
>

> --
> Este email pertenece a la lista de Asterisk-ES (http://www.asterisk-es.org)
>
> Entra ahora en el canal de irc de Asterisk-ES para charlar en directo sobre VoIP y
> Asterisk: http://www.asterisk-es.org/
>
> ~~~~~ Normas de la lista Asterisk-ES: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> http://comunidad.asterisk-es.org/index.php?title=Lista:normas-asterisk-es
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> - Para anular la suscripción: asterisk-es...@googlegroups.com
>

--

Miguel Castiella

unread,
Dec 30, 2010, 10:00:12 AM12/30/10
to aster...@googlegroups.com
Hola:

¿Podrías usar BD? quizás con los campos que puedes leer en la macro
puedes construir un campo antes.

El día 30 de diciembre de 2010 15:43, Juan Carlos Valero
<jcva...@capatres.com> escribió:
> El 30/12/10 15:33, Fernando Villares escribió:


>> Juan y consulta boluda....variables de unix en vez de asterisk o sea
>> las de environment? seria un chiquero pero quizas sirve
>
> Sigo teniendo el mismo problema, como las asocio dentro de la macro ?
> Porque como no se de donde viene, cual variable tengo que recoger? La
> verdad es que no le veo solucion... tal y como han parido las macros
> invocadas desde queue no puedo recuperar info del resto del canal.
>
> --
> Un saludo,
>
> Juan Carlos Valero

> Capa Tres Soluciones Tecnológicas S.L.


> Datos de contacto en http://capatres.tel
> -------------------------------------------------------------------------
>

> --
> Este email pertenece a la lista de Asterisk-ES (http://www.asterisk-es.org)
>
> Entra ahora en el canal de irc de Asterisk-ES para charlar en directo sobre VoIP y
> Asterisk: http://www.asterisk-es.org/
>
> ~~~~~ Normas de la lista Asterisk-ES: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> http://comunidad.asterisk-es.org/index.php?title=Lista:normas-asterisk-es
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> - Para anular la suscripción: asterisk-es...@googlegroups.com
>

--
Un mundo mejor es posible, utiliza Software Libre

Iñaki Baz Castillo

unread,
Dec 30, 2010, 10:00:50 AM12/30/10
to aster...@googlegroups.com
El día 30 de diciembre de 2010 12:45, Juan Carlos Valero
<jcva...@capatres.com> escribió:

> Preguntaba como ultima esperanza, para que alguien me restregara la
> solucion por la cara y me dijera "mira tontorron, es asi..."....

; if set, run this macro when connected to the queue member
; you can override this macro by setting the macro option on
; the queue application
;
; membermacro=somemacro


Supongo que si seteas la macro en la llamada a Queue tampoco se pueden
añadir argumentos:

Queue(queuename[,options[,URL[,announceoverride[,timeout[,AGI[,macro[,gosub[,rule]]]]]]]])

Lo que sí podrías hacer es determinar el lenguaje antes de invocar la
cola, y pasar una macro distinta (triste sí) dependiendo del lenguaje
en el parámetro "macro" de la aplicación Queue.

--
Iñaki Baz Castillo
<i...@aliax.net>

Iñaki Baz Castillo

unread,
Dec 30, 2010, 10:01:16 AM12/30/10
to aster...@googlegroups.com
El día 30 de diciembre de 2010 16:00, Miguel Castiella
<mcast...@gmail.com> escribió:

> Hola:
>
> ¿Podrías usar BD? quizás con los campos que puedes leer en la macro
> puedes construir un campo antes.

Ya ha explicado que no.

Juan Carlos Valero

unread,
Dec 30, 2010, 10:12:46 AM12/30/10
to aster...@googlegroups.com
El 30/12/10 15:59, Sa�l Ibarra Corretg� escribi�:

> Puedes poner un DumpChan dentro de esa macro y pegar el resultado?
>

Lo dicho, independiente...

Dumping Info For Channel: SIP/104-0000002e:
================================================================================
Info:
Name= SIP/104-0000002e
Type= SIP
UniqueID= 1293721693.46
CallerIDNum= (N/A)
CallerIDName= (N/A)
DNIDDigits= (N/A)
RDNIS= (N/A)
Parkinglot= default
Language= es
State= Up (6)
Rings= 0
NativeFormat= 0x8 (alaw)
WriteFormat= 0x8 (alaw)
ReadFormat= 0x8 (alaw)
RawWriteFormat= 0x8 (alaw)
RawReadFormat= 0x8 (alaw)
1stFileDescriptor= 59
Framesin= 3
Framesout= 0
TimetoHangup= 0
ElapsedTime= 0h0m3s
Context= macro-agente
Extension= s
Priority= 3
CallGroup= 1
PickupGroup= 1
Application= DumpChan
Data= (Empty)
Blocking_in= (Not Blocking)

Variables:
MACRO_DEPTH=1
MACRO_PRIORITY=1
MACRO_CONTEXT=entrantes
MACRO_EXTEN=9999999999
QUEUESRVLEVELPERF=0.0
QUEUESRVLEVEL=0
QUEUEABANDONED=1
QUEUECOMPLETED=8
QUEUETALKTIME=1
QUEUEHOLDTIME=2
QUEUECALLS=1
QUEUESTRATEGY=rrmemory
QUEUEMAX=0
QUEUENAME=comercial-es
QEORIGINALPOS=1
QEHOLDTIME=3
MEMBERREALTIME=0
MEMBERDYNAMIC=0
MEMBERPENALTY=0
MEMBERLASTCALL=1293709918
MEMBERCALLS=2
MEMBERNAME=SIP/104
MEMBERINTERFACE=SIP/104
SIPCALLID=6ad1e01b0f360d69...@10.13.13.106:5060
================================================================================

--
Un saludo,

Juan Carlos Valero
Capa Tres Soluciones Tecnol�gicas S.L.

Juan Carlos Valero

unread,
Dec 30, 2010, 10:14:15 AM12/30/10
to aster...@googlegroups.com
El 30/12/10 16:00, I�aki Baz Castillo escribi�:

>
> Supongo que si seteas la macro en la llamada a Queue tampoco se pueden
> a�adir argumentos:

>
> Queue(queuename[,options[,URL[,announceoverride[,timeout[,AGI[,macro[,gosub[,rule]]]]]]]])
>
No, ya lo he intentado. No admite pasar ni macro() ni por supuesto macro,.
> Lo que s� podr�as hacer es determinar el lenguaje antes de invocar la
> cola, y pasar una macro distinta (triste s�) dependiendo del lenguaje
> en el par�metro "macro" de la aplicaci�n Queue.
Ya... pero tampoco. Establece el CHANNEL(language) con respecto al
idioma del sip.conf al llamar al agente, no respeta el valor establecido
de idioma en la llamada entrante.

Si es que tiene narices la cosa...

Iñaki Baz Castillo

unread,
Dec 30, 2010, 10:20:02 AM12/30/10
to aster...@googlegroups.com
El día 30 de diciembre de 2010 16:14, Juan Carlos Valero
<jcva...@capatres.com> escribió:

>> Lo que sí podrías hacer es determinar el lenguaje antes de invocar la
>> cola, y pasar una macro distinta (triste sí) dependiendo del lenguaje
>> en el parámetro "macro" de la aplicación Queue.

> Ya... pero tampoco. Establece el CHANNEL(language) con respecto al
> idioma del sip.conf al llamar al agente, no respeta el valor establecido
> de idioma en la llamada entrante.

Pero en la macro "macro_anuncio_en" podrías setear (ya en el channel
del agente) el idioma a "en", en "macro_anuncio_fr" a "fr", etc, ¿no?

Juan Carlos Valero

unread,
Dec 30, 2010, 10:30:55 AM12/30/10
to aster...@googlegroups.com
El 30/12/10 16:20, I�aki Baz Castillo escribi�:

>> Ya... pero tampoco. Establece el CHANNEL(language) con respecto al
>> idioma del sip.conf al llamar al agente, no respeta el valor establecido
>> de idioma en la llamada entrante.
> Pero en la macro "macro_anuncio_en" podr�as setear (ya en el channel

> del agente) el idioma a "en", en "macro_anuncio_fr" a "fr", etc, �no?
>

El problema es que es una cola bilingue... 8-) o sea a la misma cola
llegan dos idiomas distintos y tengo que indicarselos al agente antes de
pasar la llamada. Pero ni tengo el language, ni el callerid... joer, es
que lo han hecho con el culo !!!! Mira...

Un dumpchan ANTES de la macro:
Dumping Info For Channel: SIP/102-00000030:
================================================================================
Info:
Name= SIP/102-00000030
Type= SIP
UniqueID= 1293722673.48
CallerIDNum= 102
CallerIDName= 102
DNIDDigits= 77


RDNIS= (N/A)
Parkinglot= default
Language= es
State= Up (6)
Rings= 0
NativeFormat= 0x8 (alaw)
WriteFormat= 0x8 (alaw)
ReadFormat= 0x8 (alaw)
RawWriteFormat= 0x8 (alaw)
RawReadFormat= 0x8 (alaw)

1stFileDescriptor= 62
Framesin= 474
Framesout= 366
TimetoHangup= 0
ElapsedTime= 0h0m9s
Context= macro-cola-disponible
Extension= s
Priority= 19


CallGroup= 1
PickupGroup= 1
Application= DumpChan
Data= (Empty)
Blocking_in= (Not Blocking)

Variables:
MACRO_DEPTH=1
ARG2=es
ARG1=comercial-es
MACRO_PRIORITY=22
MACRO_CONTEXT=entrantes
MACRO_EXTEN=9999999999
READSTATUS=TIMEOUT
menu=1
ARG4=capatres
SIPCALLID=46e03ee3d1a2706a
SIPDOMAIN=10.13.13.106:5060
SIPURI=sip:1...@10.13.13.169:5060
================================================================================

Un dumpchan dentro de la macro:


Dumping Info For Channel: SIP/104-00000031:
================================================================================
Info:
Name= SIP/104-00000031
Type= SIP
UniqueID= 1293722682.49


CallerIDNum= (N/A)
CallerIDName= (N/A)
DNIDDigits= (N/A)
RDNIS= (N/A)
Parkinglot= default
Language= es
State= Up (6)
Rings= 0
NativeFormat= 0x8 (alaw)
WriteFormat= 0x8 (alaw)
ReadFormat= 0x8 (alaw)
RawWriteFormat= 0x8 (alaw)
RawReadFormat= 0x8 (alaw)
1stFileDescriptor= 59
Framesin= 3
Framesout= 0
TimetoHangup= 0

ElapsedTime= 0h0m4s


Context= macro-agente
Extension= s
Priority= 3
CallGroup= 1
PickupGroup= 1
Application= DumpChan
Data= (Empty)
Blocking_in= (Not Blocking)

Variables:
MACRO_DEPTH=1
MACRO_PRIORITY=1
MACRO_CONTEXT=entrantes
MACRO_EXTEN=9999999999
QUEUESRVLEVELPERF=0.0
QUEUESRVLEVEL=0
QUEUEABANDONED=1

QUEUECOMPLETED=9


QUEUETALKTIME=1
QUEUEHOLDTIME=2
QUEUECALLS=1
QUEUESTRATEGY=rrmemory
QUEUEMAX=0
QUEUENAME=comercial-es
QEORIGINALPOS=1

QEHOLDTIME=4
MEMBERREALTIME=0
MEMBERDYNAMIC=0
MEMBERPENALTY=0
MEMBERLASTCALL=1293721697
MEMBERCALLS=3
MEMBERNAME=SIP/104
MEMBERINTERFACE=SIP/104
SIPCALLID=4ce10ffb013bc72f...@10.13.13.106:5060
================================================================================

Saúl Ibarra Corretgé

unread,
Dec 30, 2010, 10:45:50 AM12/30/10
to aster...@googlegroups.com
El nombre de la cola representa el idioma?

"comercial-es" -> eso si lo tienes:

> QUEUENAME=comercial-es

Saludos,

Juan Carlos Valero

unread,
Dec 30, 2010, 10:57:13 AM12/30/10
to aster...@googlegroups.com
El 30/12/10 16:45, Sa�l Ibarra Corretg� escribi�:

> El nombre de la cola representa el idioma?
>
> "comercial-es" -> eso si lo tienes:
>
>> QUEUENAME=comercial-es
>

En realidad no, porque la otra cola (que es la que me da el problema) es
comercial-bilingue... y claro, pierdo el unico parametro. Ya veo que la
unica chapuza que me queda es tener una cola por idioma y agentes
duplicados, pero eso me tira las estadisticas de colas a la mierda... no
es lo que necesito.

No entiendo en que momento pensaron que era buena idea esto... ademas,
no soy el unico buscando esto...

http://lists.digium.com/pipermail/asterisk-users/2009-May/231524.html

>>> Since revision 181846 all variables are not accessible in membermacro,
>>> because of the following changes.
>>>
>>> r181846 | mmichelson | 2009-03-12 16:43:51 -0500 (Thu, 12 Mar 2009) |
>>> 3 lines
>>>
>>> Run the macro on the queue member's channel when he answers, not the
>>> caller's channel.


Fantabuloso...

Iñaki Baz Castillo

unread,
Dec 30, 2010, 11:07:45 AM12/30/10
to aster...@googlegroups.com
El día 30 de diciembre de 2010 16:30, Juan Carlos Valero
<jcva...@capatres.com> escribió:

>>> Ya... pero tampoco. Establece el CHANNEL(language) con respecto al
>>> idioma del sip.conf al llamar al agente, no respeta el valor establecido
>>> de idioma en la llamada entrante.
>> Pero en la macro "macro_anuncio_en" podrías setear (ya en el channel

>> del agente) el idioma a "en", en "macro_anuncio_fr" a "fr", etc, ¿no?
>>
>
> El problema es que es una cola bilingue... 8-) o sea a la misma cola
> llegan dos idiomas distintos y tengo que indicarselos al agente antes de
> pasar la llamada.

Igual no me he explicado bien. Lo que sugiero es:

- Sólo tienes UNA cola. Y no configuras "membermacro" para esa cola.

- Cuando llega una llamada determinas el idioma antes de llamar a
Queue. Y con dicho idioma sabes qué macro tienes que usar
(macor_lang_es, macro_lang_en, etc).

- Una vez determinada la macro, llamas a Queue con el parámetro
"membermacro" con valor la macro a usar. Es decir, si has determinado
que el idioma es inglés entonces llamas a Queue así:

Set(macro_name=macro_lang_en)
Queue(queuename[,options[,URL[,announceoverride[,timeout[,AGI[,${macro_name}[,gosub[,rule]]]]]]]])

Es decir, llamas a tu única cola pero le pasas por parámetros una
macro distinta dependiendo del lenguaje que quieres que se use. Dicha
macro se ejecuta en el channel del agente, por lo que el cometido de
dicha macro "macro_lang_en" podría ser setear el lang del channel a
EN.

Juan Carlos Valero

unread,
Dec 30, 2010, 11:14:48 AM12/30/10
to aster...@googlegroups.com
El 30/12/10 16:57, Juan Carlos Valero escribi�:

>
> En realidad no, porque la otra cola (que es la que me da el problema) es
> comercial-bilingue... y claro, pierdo el unico parametro. Ya veo que la
> unica chapuza que me queda es tener una cola por idioma y agentes
> duplicados, pero eso me tira las estadisticas de colas a la mierda... no
> es lo que necesito.
>
> No entiendo en que momento pensaron que era buena idea esto... ademas,
> no soy el unico buscando esto...

Solucion cutre-salchichera....

Dentro de la macro lanzada desde Queue existe MACRO_EXTEN que contiene
la extension que invoc� la orden. De pura chiripa contiene el DDI
entrante. Se puede montar una cutre-logica que permita asociar el DDI al
idioma, a fin de fijarlo dentro de la macro y reproducir la locucion que
toca.

No me gusta nada, pero es la unica manera que he encontrado que funcione
esto... asi que lo ponemos aqui por si a alguien le sirve en el futuro.

Gracias a todos por las ideas !

Juan Carlos Valero

unread,
Dec 30, 2010, 11:16:46 AM12/30/10
to aster...@googlegroups.com
El 30/12/10 17:07, I�aki Baz Castillo escribi�:

>
> Igual no me he explicado bien. Lo que sugiero es:
>
> - S�lo tienes UNA cola. Y no configuras "membermacro" para esa cola.

>
> - Cuando llega una llamada determinas el idioma antes de llamar a
> Queue. Y con dicho idioma sabes qu� macro tienes que usar
> (macor_lang_es, macro_lang_en, etc).
>
> - Una vez determinada la macro, llamas a Queue con el par�metro

> "membermacro" con valor la macro a usar. Es decir, si has determinado
> que el idioma es ingl�s entonces llamas a Queue as�:

>
> Set(macro_name=macro_lang_en)
> Queue(queuename[,options[,URL[,announceoverride[,timeout[,AGI[,${macro_name}[,gosub[,rule]]]]]]]])
>
> Es decir, llamas a tu �nica cola pero le pasas por par�metros una

> macro distinta dependiendo del lenguaje que quieres que se use. Dicha
> macro se ejecuta en el channel del agente, por lo que el cometido de
> dicha macro "macro_lang_en" podr�a ser setear el lang del channel a
> EN.
>

Muy buena Inaki !! Si se�or. Habia encontrado otro modo, pero
efectivamente me has dado una solucion mas elegante. Si se�or !!
Gracias mil ! Si a veces se mira el bosque sin ver los �rboles....

Iñaki Baz Castillo

unread,
Dec 30, 2010, 11:15:52 AM12/30/10
to aster...@googlegroups.com
El día 30 de diciembre de 2010 17:16, Juan Carlos Valero
<jcva...@capatres.com> escribió:
> Si a veces se mira el bosque sin ver los árboles....

Tratándose de las interioridades de Asterisk el símil sería "a veces
se mira el estercolero sin ver las boñigas".

german aracil boned

unread,
Dec 31, 2010, 6:41:21 AM12/31/10
to aster...@googlegroups.com, Juan Carlos Valero

Juan Carlos, no sé si será posible, pero .. Has probado nombrar esa variable,
con el uniqueid del cdr o similar ?. De ésta forma, Solo el hilo de la llamada
en curso, concocerá el nombre correcto de la variable a consultar.. No sé si
el motor de asterisk permitiría tal cosa. Lo mejor sería probar a ver que
pasa.

Es lo primero que se me ha ocurrido al leerte .. Qué opinas ?

On Jueves 30 Diciembre 2010 12:45:05 Juan Carlos Valero escribió:
> El 30/12/10 12:20, juanmol escribió:


> > no puedes hacer un set antes de llamar a la macro y ponerle al nombre
> > de la variable __ (dos guiones bajos) ??
> > la verdad es que me cuesta ver lo que preguntas ¿puedes pegar el
> > trocito de codigo correspondiente?
>
> Eso es lo mismo que ponerla global, la concurrencia de llamadas me
> machacaria el valor, cuando lo preciso unico para toda la llamada.
>
> No tiene solucion, o no soy capaz de encontrarla...
>
> escenario:
>
> Cola de agentes que reciben llamadas de dos paises distintos. Por
> requisito del cliente se ha de mostrar una locucion al agente ANTES de
> atender la llamada. La locucion es distinta segun el pais de donde
> provenga la llamada. Para ello se usa el parametro membermacro del
> fichero queues.conf a fin de asignar una macro a la llamada al agente.
> Cuando el agente descuelga, la macro se ejecuta.
>

> El problema viene en que, por diseño, esa macro NO se ejecuta en el


> canal de la llamada entrantes, si no en el canal del agente. Por ese
> motivo, no tiene acceso a ninguna variable que no sea global. Es decir,
> desde dentro de la macro ni tan siquiera puedo recoger el idioma del
> canal ya que se establece al definido en el fichero sip.conf para el
> agente asignado. No puedo recoger ni tan siquiera el Callerid de quien
> llama, ni el lang, solo las variables que queue pasa internamente, y
> ninguna de ellas me sirve.
>
> No me vale usar variables globales, ya que la concurrencia de trafico me
> provocaria errores al sobreescribirse una llamada con el valor de otra.
> Al no tener un dato unico (UNIQUEID cambia, tambien lo he probado) para
> poder usar otros sistemas como la base de datos interna, he terminado en
> un callejon sin salida. Tras tres horas de pruebas voy a tirar la toalla
> porque no tiene solucion...
>
> Preguntaba como ultima esperanza, para que alguien me restregara la
> solucion por la cara y me dijera "mira tontorron, es asi..."....
--


--------------------------
Donde hay que firmar ?

Juan Carlos Valero

unread,
Dec 31, 2010, 7:36:00 AM12/31/10
to aster...@googlegroups.com
El 31/12/10 12:41, german aracil boned escribi�:
> Juan Carlos, no s� si ser� posible, pero .. Has probado nombrar esa variable,
> con el uniqueid del cdr o similar ?. De �sta forma, Solo el hilo de la llamada
> en curso, concocer� el nombre correcto de la variable a consultar.. No s� si
> el motor de asterisk permitir�a tal cosa. Lo mejor ser�a probar a ver que
> pasa.
>
> Es lo primero que se me ha ocurrido al leerte .. Qu� opinas ?

No, el UNIQUEID es distinto. Si miras en el thread de mensajes hicimos
un dumpchan y crea un nuevo canal.

german aracil boned

unread,
Dec 31, 2010, 9:21:45 AM12/31/10
to aster...@googlegroups.com

Sí, si hubiera terminado de leer tu primer email. Por lo que he leido lo que
dice iñaki, de ser eso lo que quieres hacer, es lo correcto.

uno que esta noche estará en Sol ! ;)

On Viernes 31 Diciembre 2010 13:36:00 Juan Carlos Valero escribió:
> El 31/12/10 12:41, german aracil boned escribió:
> > Juan Carlos, no sé si será posible, pero .. Has probado nombrar esa
> > variable, con el uniqueid del cdr o similar ?. De ésta forma, Solo el
> > hilo de la llamada en curso, concocerá el nombre correcto de la variable


> > a consultar.. No sé si el motor de asterisk permitiría tal cosa. Lo

> > mejor sería probar a ver que pasa.
> >
> > Es lo primero que se me ha ocurrido al leerte .. Qué opinas ?


>
> No, el UNIQUEID es distinto. Si miras en el thread de mensajes hicimos
> un dumpchan y crea un nuevo canal.
--

Reply all
Reply to author
Forward
0 new messages