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
-------------------------------------------------------------------------
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..."....
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
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
> Echa un ojo a esto:
> https://www.asterisk.org/docs/asterisk/trunk/functions/shared
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...
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
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.
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
>
--
¿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
; 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>
Ya ha explicado que no.
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.
Si es que tiene narices la cosa...
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
================================================================================
"comercial-es" -> eso si lo tienes:
> QUEUENAME=comercial-es
Saludos,
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...
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.
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 !
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....
Tratándose de las interioridades de Asterisk el símil sería "a veces
se mira el estercolero sin ver las boñigas".
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 ?
No, el UNIQUEID es distinto. Si miras en el thread de mensajes hicimos
un dumpchan y crea un nuevo canal.
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.
--