AgentCallBackLogin, queue_log y diferencias con AddQueueMember y los agentes dinamicos.

859 views
Skip to first unread message

SaDzas

unread,
Oct 18, 2012, 2:41:01 PM10/18/12
to aster...@googlegroups.com
Gente,

Estuve viendo las MUCHISIMAS consultas que se hizo al respecto en varios blogs, paginas, etc, etc acerca de este tema. El punto es el siguiente:

Se puede realizar algo parecido al AgentCallBackLogin con la funcion de AddQueueMember, aunque la diferencia es que con esto ultimo, lo que se estaria agregando a la cola es el numero de interno y NO el numero de agente. Que problema trae esto? El queue_log, ya que el log maneja las llamadas entrantes a la cola a traves del numero de interno, LOGICO, ya que es el que finalmente figura en la cola.

Con ejemplos como:

AddQueueMember(SUPPORT,local/${AUTH_MAILBOX}@agents/n)

Se logra lo cometido, pero volvemos al queue_log. Si yo quiero ver en el queue_log QUIEN recibio la llamada, o que agente se logueo o deslogueo, solo voy a ver el MAILBOX, que resulta ser: el interno. No me sirve para agentes dinamicos, quienes se sientan siempre en puestos diferentes.

Alguien sabe de que manera solucionar esto? Ya que al no tener el agente logueado (solo se tiene el interno en la cola).

Gracias mil!

Sir Brain Colward

unread,
Oct 19, 2012, 3:55:01 AM10/19/12
to aster...@googlegroups.com
La cosa va por ahí.
Nosotros lo hemos resuelto haciendo lo siguiente:
- cuando el agente se loga se le pide el número de agente
- llamamos a la función AddMember con AddQueueMember($COLA,local/$AGENTE@agents/n)
- grabamos en la BD la relación Agente<-> SIP
- en el contexto agents tenemos una única extensión _XXXX que lo que hace es mirar en la BD cuál es el teléfono SIP asociado al agente y hace un DIAL a ese teléfono

Y ya tienes solucionado el problema de la localización dinámica.

(siento no ponerte el código entero, pero está en un servidor de cliente y actualmente no tengo acceso ni tiempo para buscar el acceso :( )

Saludos,
Sir Brain Colward

2012/10/18 SaDzas <sad...@gmail.com>

--
--
Este email pertenece a la lista de Asterisk-ES (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
 
 
 

angelmonzo

unread,
Oct 21, 2012, 3:48:04 PM10/21/12
to aster...@googlegroups.com
En mi caso estámos implementando una solución parecida y funciona de perlas:

- Los agentes se logan mediate addqueuemember
- Para llamar a un interno utilizamos una consulta sql para saber que agente se sienta en que sitio.
- Ejecutamos el dial al puesto en el que se sienta el agente.

Con ello el queue_log te marcará que agente a contestado la llamada independientemente de donde se haya sentado.

SaDzas

unread,
Oct 22, 2012, 7:49:07 AM10/22/12
to aster...@googlegroups.com
Gracias por las respuestas,

en ambas propuestas, dejo de manejar las colas, ya que la llamada al agente se realizaria mediante una extension directa:

_xxx,1,Dial....

Esto es asi? ya que la idea es que las llamadas sigan cayendo en las colas.

Jorge Ricardo Góngora

unread,
Oct 23, 2012, 5:47:14 PM10/23/12
to aster...@googlegroups.com
> De: "SaDzas" <sad...@gmail.com>
> Para: aster...@googlegroups.com
> Enviados: Lunes, 22 de Octubre 2012 7:49:07
> Asunto: [Asterisk-ES] Re: AgentCallBackLogin, queue_log y diferencias con AddQueueMember y los agentes dinamicos.
> --
> --
> Este email pertenece a la lista de Asterisk-ES (
> 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
Hola, sin ánimo de ofender al parecer aún no captas la idea completamente, si analizas con cuidado la explicación verás que la aplicación Queue sigue gestionando las llamadas sino no tiene sentido emplearla, al final Queue tiene que llamar a una extensión, apenas tenga un time te envío un fragmento de la programación que hice para el login y el logout de los agentes en el callcenter de mi empresa.


Saludos,

Jorge

FrankEinstain

unread,
Oct 26, 2012, 8:14:05 AM10/26/12
to aster...@googlegroups.com
Hola, una dudita

Porque el /n al final, para que sirve?

Muchas gracias.-

AddQueueMember($COLA,local/$AGENTE@agents/n)

Patricio

unread,
Jan 2, 2015, 5:27:47 PM1/2/15
to aster...@googlegroups.com
Buenas a todos.
Retomando este tema, me tope con 1.8 y este tema.
Ya lo tengo funcionando, usando los voicemail para loguear...y anda.
El tema es ... saben que va a suceder cuando quiera instalar un queue metrics, o asternic o callstats?? Ya que en si.. no son "agentes" lo que se usa aca a la practica.

Slds y gracias.


El jueves, 18 de octubre de 2012 15:41:01 UTC-3, SaDzas escribió:

Elio Rojano

unread,
Jan 19, 2015, 11:14:09 AM1/19/15
to aster...@googlegroups.com
Viendo que Patricio renueva este tema, he visto que Miguel de Diego (FrankEinstain) tenía una pregunta que hoy he visto..

AddQueueMember($COLA,local/$AGENTE@agents/n)

Porque el /n al final, para que sirve?


Patricio

unread,
Jan 21, 2015, 12:21:37 PM1/21/15
to aster...@googlegroups.com
Ojala que Cesar o angelmonzo puedan publicar mas sobre este tema, ya que ellos pudieron encontrar una solucion operativa.

Patricio Rodriguez

unread,
Jan 21, 2015, 4:38:50 PM1/21/15
to asterisk-es

Bueno. Creo que di con la tecla. Hice pruebas sobre una central y anda todo ok.

Mañana lo cargo sobre la central que necesita esto. Y si anda todo bien como en las pruebas, paso la configuracion al grupo.
Slds

Normas de la lista Asterisk-ES: http://comunidad.asterisk-es.org/index.php?title=Lista:normas-asterisk-es
---
Has recibido este mensaje porque estás suscrito al grupo "asterisk-es" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a asterisk-es...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a aster...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/asterisk-es.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Patricio Rodriguez

unread,
Jan 22, 2015, 7:39:19 AM1/22/15
to asterisk-es
Buenas.

Paso la solución para agentes dinamicos usando addqueuemember y buzones de voz, y que figure que agente atendió en el queue_log.

Queues.conf

[pedidos]
monitor-type = MixMonitor
monitor-format = wav
musicclass=default
strategy=random
timeout=25
retry=5
wrapuptime=15
maxlen=0
autopause=no
ringinuse=no
;periodic-annouce=agentes-ocupados.alaw,agentes-atenderan.alaw
;periodic-announce-frequence=15
announce-frequency = 30
announce-holdtime = no
eventwhencalled = vars
eventmemberstatus = yes
setinterfacevar=yes
setqueueentryvar=yes

Voicemail.conf

[agentes]
1001 => 1111,Agente 1001,root@localhost
1002 => 1111,Agente 1002,root@localhost

extensions.conf

; 44 desloguea, 45 loguea
[abm-agentes]
exten => 45,1,Read(AGENT_USERID,agent-user)
exten => 45,n,VMauthenticate(${AGENT_USERID}@agent)
exten => 45,n,GotoIf($[${CALLERID(num)}=201]?supervisor:agente)
exten => 45,n(agente),AddQueueMember(pedidos,Local/${AUTH_MAILBOX}@agents/n,1)
exten => 45,n(supervisor),AddQueueMember(pedidos,Local/${AUTH_MAILBOX}@agents/n,2)
exten => 45,n,Set(DB(agent_sip/${AUTH_MAILBOX})=${CALLERID(num)})
exten => 45,n,Playback(agent-loginok)
exten => 45,n,Playback(goodbye)
exten => 45,n,Hangup

;en abm-agentes hay un condicional, que si se registra desde el interno 201, es supervisor, por lo que le asigna prioridad 2, ya que va a recibir llamadas cuando esten todos los agentes ocupados.

exten => 44,1,Read(AGENT_USERID,agent-user)
exten => 44,n,VMauthenticate(${AGENT_USERID}@agent)
exten => 44,n,RemoveQueueMember(pedidos,Local/${AUTH_MAILBOX}@agents/n)
exten => 44,n,Set(oldvar=${DB_DELETE(agent_sip/${AUTH_MAILBOX})})
exten => 44,n,Playback(agent-loggedoff)
exten => 44,n,Playback(goodbye)
exten => 44,n,Hangup

[agents]
exten => 1001,1,Set(AGENT_SIP=${DB(agent_sip/1001)})
exten => 1001,n,Dial(SIP/${AGENT_SIP})
exten => 1002,1,Set(AGENT_SIP=${DB(agent_sip/1002)})
exten => 1002,n,Dial(SIP/${AGENT_SIP})

Vista desde el cli:

localhost*CLI> queue show

pedidos has 1 calls (max unlimited) in 'leastrecent' strategy (40s holdtime, 151s talktime), W:0, C:87, A:0, SL:0.0% within 0s
   Members:
      Local/1004@agents/n with penalty 1 (dynamic) (Not in use) has taken 15 calls (last was 240 secs ago)
      Local/1008@agents/n with penalty 2 (dynamic) (In use) has taken 6 calls (last was 357 secs ago)
      Local/1002@agents/n with penalty 1 (dynamic) (In use) has taken 17 calls (last was 274 secs ago)
      Local/1003@agents/n with penalty 1 (dynamic) (Not in use) has taken 13 calls (last was 17 secs ago)
   Callers:
      1. DAHDI/9-1 (wait: 0:09, prio: 0)


localhost*CLI> database show
.......
/agent_sip/1002                                   : 206
/agent_sip/1003                                   : 205
/agent_sip/1004                                   : 204
/agent_sip/1008                                   : 201


Instale el asternic callcenter stats, y muestra todo re coqueto.
Hay un tema ... Antes asterisk no tomaba el estado del agente, por lo quele mandaba llamadas estando ocupado, el ringinuse no funciona ya que es solo para agentes estaticos.
Pero con esta configuracion de la queue, y usando el call limit en los internos.. este problema bajo a MUY POCOS. antes eran TODOS.

Espero les sirva.. y si ven alguna mejora.. avisen!

Slds,


Gaston Draque

unread,
Jan 22, 2015, 8:07:57 AM1/22/15
to aster...@googlegroups.com
Gracias Patricio por el aporte.
Saludos,
Gaston//
Message has been deleted

angelmonzo

unread,
Jan 25, 2015, 6:40:51 PM1/25/15
to aster...@googlegroups.com
La solución parece buena pero creo que se puede simplificar mucho más utilizando:

- Miembros dinámicos usando un extensiones para logueo y deslogueo. Además los miembros serán local_chan no SIP/XXX
- Guardamos la relación agente - puesto SIP en base de datos
- res_odbc para consultar que agente se sienta en que puesto.
- Llamamos a los agentes a base de consultas sql

Dado que siempre llamamos a un agente independientemente de donde se siente (SIP/XXX). El queue_log va a salir limpio.

Patricio

unread,
May 5, 2015, 11:59:08 AM5/5/15
to aster...@googlegroups.com
Buenas nuevamente.
Retomado el tema, veo que asterisk pierde mucho tiempo mandando llamadas a agentes ocupados.
Hay alguna manera de decirle QUE NO LO LLAME que esta ocupado?

Patricio

unread,
Jul 3, 2015, 8:51:16 PM7/3/15
to aster...@googlegroups.com
Buenas nuevamente.
Voy a responder mi ultima pregunta, ya que la solucioné-

En el diaplan de agentes, se cambia un poco:

exten => 1020,1,Set(AGENT_SIP=${DB(agent_sip/1020)})
exten => 1020,n,Dial(SIP/${AGENT_SIP})
exten => 1020,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => 1020,n(busy),hangup
exten => 1020,n(unavail),hangup

Si esta ocupado o no disponible, mata el canal y sigue su curso.

Ahora me topé con otro problema,
Como es un agente dinamico, y en la queue, no figura el interno sip, sino el agente, pasa lo siguiente:

Si el agente esta realizando una lllamada saliente, en queue status figura el agente "not in use",
Cuando se le envia una llamada al agente y suena..., figura "in use", no en ringing.

Estos problemas no estarian si fueran estaticos, pero necesito mantener el agente, ya que van rotando de telefonos y no puedo perder el historial del agente.

Alguna sugerencia?

Gracias

Patricio Rodriguez

unread,
Jul 3, 2015, 9:21:35 PM7/3/15
to asterisk-es
BUENO, 10 minutos luego de publicar mi pregunta, VA LA SOLUCIÓN.!!! y es tan simple....

Antes agregaba asi:

exten => 45,n(agente),AddQueueMember(cola,Local/${AUTH_MAILBOX}@agents/n,1)

En la cola se ve:
Local/1001@agents/n with penalty 1 (dynamic) (In use) has taken no calls yet

Mantiene el historial del agente, sin importar donde se sienta, pero no funciona el ringinuse, si llamana al agente, ya marca como "inuse", si el agente hace una llamada, figura "not in use", cositas que son necesesarias para un monitoreo en tiempo real del agente.

Cambiando la ecuación a:

exten => 45,n(agente),AddQueueMember(cola,SIP/2101,1,,${AUTH_MAILBOX})

Se ve asi:

 1020 (SIP/2101) with penalty 1 (dynamic) (no in use) has taken no calls yet

Donde 1020 es el agente (en queue_log registra 1020), se mantiene el historial de agente sin importar en que interno se registre.
Si el agente llama, pasa a inuse, si entra una llamada al agente, pasa a ringung.

Creo que ahora un agente dinamico cuenta con todos los beneficios de un agente estatico.

Espero les sea de ayuda.

Slds,!







--
Reply all
Reply to author
Forward
0 new messages