Alternativa al AgentCallBackLogin en Asterisk 1.6
Uno de los cambios más dramáticos de Asterisk 1.6 es sin duda la desaparición del comando AgentCallBackLogin, este comando sirve para loguear y desloguear agentes en una cola permitiendo al agente colgar el teléfono sin que este se desloguee (como ocurre con el AgentLogin) y así los usuarios pueden recibir llamadas enviadas a una cola y utilizar el terminal como si fueran usuarios normales y no exclusivamente agentes de recepción de llamadas.
En Asterisk 1.6 este comando desapareció como por arte de magia (sin llegar al punto ‘deprecated’) y era debido a que «supuestamente» la misma lógica que se conseguía hacer mediante esta aplicación de Asterisk, se podía hacer con un poco de programación de dialplan.
Kevin P. Flemming comentaba esto en la lista:
«We have already been discussing the idea of just turning chan_agent into only ‘always connected’ mode, and removing all support for callback mode. It seems on the surface that everything that chan_agent does in ‘callback’ mode can be accomplished using dialplan logic and dynamic queue members (which did not exist when chan_agent was created).»
Esto no gustó a muchos ya que este comando es básico y fundamental cuando alguien configura un «callcenter» con Asterisk y mucho menos cuando decide leer la «alternativa» que proponen los desarrolladores a esa «lógica de dialplan».
Para aquellos que utilicen el AgentCallBackLogin en 1.4, al pasar a 1.6 deben leer este documento que explica qué hay que hacer:
http://svn.digium.com/svn/asterisk/branches/1.4/doc/queues-with-callback-members.txt
Si después de leer este documento os habeis quedado igual que yo, intentaré explicar cómo se puede hacer para que sea menos traumático el cambio a continuación:
Definiendo el tipo de CallCenter que queremos:
Como sabeis, en Asterisk un agente puede trabajar de dos formas:
– Modo permanente: El agente se loguea y escucha música mientras espera a que entren las llamadas. Cuando el agente cuelga el teléfono se desloguea automáticamente.
Esto es beneficioso cuando tenemos un callcenter dedicado, es decir, personas dedicadas exclusivamente a contestar llamadas y cuando tenemos pensado que vamos a tener muchas llamadas. (Para este modo se utiliza AgentLogin)
– Modo ocasional: El agente se loguea y cuelga el teléfono. Cuando una llamada entra en la cola, y esta llama a un agente, el teléfono del agente se pone a sonar como una extensión más y cuando termina la llamada, el agente cuelga para poder seguir haciendo lo que estaba haciendo. (Para este modo se utilizaba AgentCallBackLogin)
Creando nuestros agentes
Si hemos dedidido utilizar agentes «ocasionales», entonces como ya no disponemos del AgentCallBackLogin necesitamos crear un sistema que nos permita definir un «usuario» y una «contraseña» independiente del sistema: vamos a utilizar las cuentas de los buzones de voz (voicemail).
Para esto, creamos un contexto [agentes] en el archivo ‘voicemail.conf’:
[agentes] ; login => contraseña , Nombre completo, direccion@email 1000=>1357924680,Nombre Agente 1000, agente1000@dominio.com 1001=>0099884455,Nombre Agente 1001, agente1001@dominio.com ...
Con esto ya tendríamos creados dos agentes (1000 y 1001 con sus respectivas contraseñas de 10 dígitos -las contraseñas siempre numéricas para que puedan escribirse mediante el terminal-).
Creando nuestras colas
Las colas debemos hacerlas como siempre, en el archivo ‘queues.conf’. Vamos a crear una cola simple:
[soporte] musicclass=default announce=cola_soporte strategy=linear timeout=15 retry=5 wrapuptime=10 maxlen=0 ; Aquí definimos los agentes que estan en esta cola member=>Local/1000@agentes member=>Local/1001@agentes
Ya tenemos la cola creada, sonará durante 15 segundos en cada agente hasta 5 veces.
Escribiendo el dialplan
Ahora que tenemos los agentes y la cola, necesitamos un sistema para que estos agentes se puedan «loguear» y «desloguear» en esta cola. Cuando se logueen, empezarán a recibir las llamadas que entren en esta cola.
Para que un agente se loguee en la cola de soporte, el usuario debe marcar un código (por ejemplo el 11, y para desloguearse el 00, ok?)
En el ‘extensions.conf’ escribimos:
[salientes] ...
; Aquí iría el resto del dialplan que pueden marcar las extensiones como números nacionales, móviles, etc…
...
exten => 11,1,NoOp(** Peticion de login de agentes **) exten => 11,n,VMAuthenticate(@agentes|) exten => 11,n,AddQueueMember(soporte|Local/${AUTH_MAILBOX}@agentes/n) exten => 11,n,Read(AGENTE|agent-newlocation) exten => 11,n,Set(DB(agentes/${AUTH_MAILBOX})=${AGENTE}) exten => 11,n,Playback(agent-loginok) exten => 11,n,Playback(goodbye) exten => 11,n,Hangup() exten => 00,1,NoOp(** Peticion de deslogueo de agentes **) exten => 00,n,VMAuthenticate(@agentes|) exten => 00,n,RemoveQueueMember(soporte|Local/${AUTH_MAILBOX}@agentes/n) exten => 00,n,Set(oldvar=${DB_DELETE(agentes/${AUTH_MAILBOX})}) exten => 00,n,Playback(agent-loggedoff) exten => 00,n,Playback(goodbye) exten => 00,n,Hangup()
Y ahora creamos un contexto donde la cola enviará a los llamantes para que hablen con los agentes…
[agentes] exten => 1000,1,Set(AGENTE=${DB(agentes/${EXTEN})}) exten => 1000,n,Dial(SIP/${AGENTE}) exten => 1001,1,Set(AGENTE=${DB(agentes/${EXTEN})}) exten => 1001,n,Dial(SIP/${AGENTE})
(sí, ya sé que podíamos utilizar una máscara, pero me ha parecido más pedagógico ponerlo así 😀)
Con esto, ya tenemos todo el sistema creado para que los agentes puedan loguearse y recibir llamadas que entren a la cola (véase la aplicación Queue).
No ha sido tan complicado ¿verdad? 😛
Las ventajas de este sistema es que podemos personalizar a nuestro gusto el login y el logout de los agentes, así como el comportamiento cuando se acceda a un agente.