Agentes y Colas en Asterisk, un sencillo ejemplo

Bueno después de la instalación vamos a probar un poquito la situación. Crearemos una cola, cuatro agentes, y unos diez usuarios con sus extensiones para experimentar.

Creamos una cola bastante sencilla con estrategia aleatoria (que mas justicia que la propia suerte), y a los agentes miembros de esta.

gabriel@trantor:~$ sudo vim /etc/asterisk/queues.conf

[Telecontacto]
musicclass = default
strategy = random
timeout = 15
retry = 5
wrapuptime = 0
maxlen = 0
announce-frequency = 0
announce-holdtime = no
member => Agent/1001
member => Agent/1002
member => Agent/1003
member => Agent/1004

Respectivamente ponemos a los agentes.

gabriel@trantor:~$ sudo vim /etc/asterisk/agents.conf

agent => 1001,4321,Telecontacto Uno
agent => 1002,4321,Telecontacto Dos
agent => 1003,4321,Telecontacto Tres
agent => 1004,4321,Telecontacto Cuatro

Creamos diez usuarios SIP, a partir de una sencilla plantilla.

gabriel@trantor:~$ sudo vim /etc/asterisk/sip.conf

[telecontacto](!)
type=friend
host=dynamic
disallow=all
allow=alaw
secret=tele00
qualify=yes
language=es
callgroup=1
pickupgroup=1

[8000](telecontacto)
[8011](telecontacto)
[8022](telecontacto)
[8033](telecontacto)
[8044](telecontacto)
[8055](telecontacto)
[8066](telecontacto)
[8077](telecontacto)
[8088](telecontacto)
[8099](telecontacto)

Bueno y ahora algo de dialplan, de manera sencilla tenemos una extensión que al marcarla entrara a la cola, simulando una serie de llamadas entrantes. Marcaremos desde nuestro teléfono o softphone #70 para llamar la aplicación AgentCallbackLogin, la cual nos pide el numero de agente, la contraseña y la extensión a la cual va a estar asociada el agente. Para “desloguear” al agente podemos volver a marcar #70 solo que omitimos poner la extensión. De igual manera un modo mas automático es marcar #71 seguido del numero del agente.

gabriel@trantor:~$ sudo vim /etc/asterisk/extensions.conf

exten => 7000,1,Goto(telecontacto,s,1)

;Agent Login
exten=> #70,1,AgentCallbackLogin()
exten=> #60,1,AgentLogin(|s)

;Agent Logout
exten => _#71XXXX,1,Answer()
exten => _#71XXXX,n,System(asterisk -rx "agent logoff Agent/${EXTEN:3}")

;Extensiones principales
exten => _80XX,1,Dial(SIP/${EXTEN})

[telecontacto]
exten => s,1,Answer
exten => s,n,Ringing
exten => s,n,SetMusicOnHold(default)
exten => s,n,Queue(Telecontacto)
exten => s,n,Hangup

Registramos a tres agentes, mas un cuarto usuario que llamara y entrara a la cola de llamadas. Vemos aquí la ejecución al registrar un usuario y “loguearse” con su agente.

*CLI>     -- Registered SIP '8011' at 192.9.200.161 port 5065
[Oct  9 22:37:56] NOTICE[22151]: chan_sip.c:13107 handle_response_peerpoke: Peer '8011' is now Reachable. (3ms / 2000ms)
    -- Executing [#70@default:1] AgentCallbackLogin("SIP/8011-b6701a90", "") in new stack
    --  Playing 'agent-user' (language 'es')
    --  Playing 'agent-pass' (language 'es')
    --  Playing 'agent-newlocation' (language 'es')
  == Setting global variable 'AGENTBYCALLERID_8011' to '1001'
    --  Playing 'agent-loginok' (language 'es')
  == Callback Agent '1001' logged in on 8011
    --  Playing 'vm-goodbye' (language 'es')
  == Spawn extension (default, #70, 1) exited non-zero on 'SIP/8011-b6701a90'

Después de registrar a los agentes, podemos observar ahora los agentes en linea asociados a su respectiva extensión.

*CLI> agent show online
1001         (Telecontacto Uno) available at '8011' (musiconhold is 'default')
1002         (Telecontacto Dos) available at '8022' (musiconhold is 'default')
1003         (Telecontacto Tres) available at '8033' (musiconhold is 'default')
3 agents online

El cuarto usuario marca para entrar a la cola y esta es la ejecución que sigue. La llamada es asignada al agente 1001, asignado en la extensión 8011.

*CLI>     -- Executing [7000@default:1] Goto("SIP/8000-b6706260", "telecontacto|s|1") in new stack
    -- Goto (telecontacto,s,1)
    -- Executing [s@telecontacto:1] Answer("SIP/8000-b6706260", "") in new stack
    -- Executing [s@telecontacto:2] Ringing("SIP/8000-b6706260", "") in new stack
    -- Executing [s@telecontacto:3] SetMusicOnHold("SIP/8000-b6706260", "default") in new stack
    -- Executing [s@telecontacto:4] Queue("SIP/8000-b6706260", "Telecontacto") in new stack
    -- Started music on hold, class 'default', on SIP/8000-b6706260
    -- outgoing agentcall, to agent '1001', on 'Local/8011@default-b805,1'
    -- Executing [8011@default:1] Dial("Local/8011@default-b805,2", "SIP/8011") in new stack
    -- Called 8011
    -- SIP/8011-09bc1e48 is ringing
    -- Agent/1001 is ringing
    -- SIP/8011-09bc1e48 answered Local/8011@default-b805,2
    -- Agent/1001 answered SIP/8000-b6706260
    -- Stopped music on hold on SIP/8000-b6706260
  == Spawn extension (default, 8011, 1) exited non-zero on 'Local/8011@default-b805,2'
  == Spawn extension (telecontacto, s, 4) exited non-zero on 'SIP/8000-b6706260'

Vemos a los agentes cuando uno de ellos esta trabajando.

*CLI> agent show online
1001         (Telecontacto Uno) available at '8011' (musiconhold is 'default')
1002         (Telecontacto Dos) logged in on SIP/8022-09bc1e48 talking to SIP/8000-b6706260 (musiconhold is 'default')
1003         (Telecontacto Tres) available at '8033' (musiconhold is 'default')
3 agents online

Ya que tenemos la base vamos a ver como nos va con las estadísticas en la aplicación Queuemetrics, por el momento es todo.

5 thoughts on “Agentes y Colas en Asterisk, un sencillo ejemplo

  1. Muy buen articulo, me sirvió de mucho, ahora tengo una duda, ¿es posible configurar asterisk para que no entren llamadas si no hay agentes disponibles ?

    Like

  2. hola buenas tarde , necesito ayuda tengo dos grupos a y b si en el grupo a no receppciona las llamada x motivo en un tiempo determinado quiero que esas yamada se direccionen al grupo B

    Like

  3. hola, una consulta agentcallbacklogin, se tiene que descargar porque, en mi trabajo no lo reconoce, agradeceria mucho su ayuda

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: